From 5f9094e7d15fb8970c83d7b67d613f1b380e5d73 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Wed, 16 Jan 2013 11:23:29 -0600 Subject: [PATCH] wiki(templates=None), thanks Alan --- VERSION | 2 +- gluon/tools.py | 46 ++++++++++++++++++++++++++++++---------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/VERSION b/VERSION index 4ed77fd9..3062913c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.4.1-alpha.2+timestamp.2013.01.16.09.40.52 +Version 2.4.1-alpha.2+timestamp.2013.01.16.11.22.49 diff --git a/gluon/tools.py b/gluon/tools.py index be485211..fec9b7cd 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -3317,14 +3317,17 @@ class Auth(object): restrict_search=False, resolve=True, extra=None, - menu_groups=None): + menu_groups=None, + templates=None): + if not hasattr(self, '_wiki'): self._wiki = Wiki(self, render=render, manage_permissions=manage_permissions, force_prefix=force_prefix, restrict_search=restrict_search, env=env, extra=extra or {}, - menu_groups=menu_groups) + menu_groups=menu_groups, + templates=templates) else: self._wiki.env.update(env or {}) # if resolve is set to True, process request as wiki call @@ -4739,7 +4742,9 @@ class Wiki(object): def __init__(self, auth, env=None, render='markmin', manage_permissions=False, force_prefix='', - restrict_search=False, extra=None, menu_groups=None): + restrict_search=False, extra=None, + menu_groups=None, templates=None): + db = auth.db self.env = env or {} self.env['component'] = Wiki.component if render == 'markmin': @@ -4757,7 +4762,10 @@ class Wiki(object): perms = self.manage_permissions = manage_permissions self.restrict_search = restrict_search self.extra = extra or {} - db = auth.db + if templates is None and not manage_permissions: + templates = db.auth_wiki.tags.contains('template')&\ + db.auth_wiki.can_read.contains('everybody') + self.templates = templates table_definitions = [ ('wiki_page', { 'args':[ @@ -4981,8 +4989,8 @@ class Wiki(object): if slug == 'wiki-menu': db.wiki_page.body.default = \ '- Menu Item > @////index\n- - Submenu > http://web2py.com' - #else: - # db.wiki_page.body.default = db(db.wiki_page.id==from_template).select(db.wiki_page.body)[0].body if int(from_template) > 0 else '## %s\n\npage content' % title_guess + else: + db.wiki_page.body.default = db(db.wiki_page.id==from_template).select(db.wiki_page.body)[0].body if int(from_template) > 0 else '## %s\n\npage content' % title_guess vars = current.request.post_vars if vars.body: vars.body = vars.body.replace('://%s' % self.host, '://HOSTNAME') @@ -5073,18 +5081,24 @@ class Wiki(object): slugs=db(db.wiki_page.id>0).select(db.wiki_page.id,db.wiki_page.slug) options=[OPTION(row.slug,_value=row.id) for row in slugs] options.insert(0, OPTION('',_value='')) - form = SQLFORM.factory(Field("slug", default=current.request.args(1) or self.force_prefix, - requires=(IS_SLUG(), - IS_NOT_IN_DB(db,db.wiki_page.slug))), - #Field("from_template", "reference wiki_page", - # requires=IS_EMPTY_OR(IS_IN_DB(db, db.wiki_page, '%(slug)s')), - # comment=current.T("Choose Template or empty for new Page")), - _class="well span6") - form.element("[type=submit]").attributes["_value"] = current.T("Create Page from Slug") + fields = [Field("slug", default=current.request.args(1) or + self.force_prefix, + requires=(IS_SLUG(), IS_NOT_IN_DB(db,db.wiki_page.slug))),] + if self.templates: + fields.append( + Field("from_template", "reference wiki_page", + requires=IS_EMPTY_OR(IS_IN_DB(db(self.templates), + '%(slug)s')), + comment=current.T( + "Choose Template or empty for new Page"))) + form = SQLFORM.factory(*fields, _class="well span6") + form.element("[type=submit]").attributes["_value"] = \ + current.T("Create Page from Slug") if form.process().accepted: - # form.vars.from_template = 0 if not form.vars.from_template else form.vars.from_template - redirect(URL(args=('_edit',form.vars.slug,form.vars.from_template or 0))) # added param + form.vars.from_template = 0 if not form.vars.from_template \ + else form.vars.from_template + redirect(URL(args=('_edit', form.vars.slug,form.vars.from_template or 0))) # added param return dict(content=form) def pages(self):