wiki.settings, thanks Alan
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.4.4-stable+timestamp.2013.03.15.10.05.12
|
Version 2.4.4-stable+timestamp.2013.03.15.10.13.48
|
||||||
|
|||||||
+51
-29
@@ -4899,7 +4899,7 @@ class Wiki(object):
|
|||||||
everybody = 'everybody'
|
everybody = 'everybody'
|
||||||
rows_page = 25
|
rows_page = 25
|
||||||
def markmin_base(self,body):
|
def markmin_base(self,body):
|
||||||
return MARKMIN(body, extra=self.extra,
|
return MARKMIN(body, extra=self.settings.extra,
|
||||||
url=True, environment=self.env,
|
url=True, environment=self.env,
|
||||||
autolinks=lambda link: expand_one(link, {})).xml()
|
autolinks=lambda link: expand_one(link, {})).xml()
|
||||||
|
|
||||||
@@ -4933,29 +4933,43 @@ class Wiki(object):
|
|||||||
controller, function, args = items[0], items[1], items[2:]
|
controller, function, args = items[0], items[1], items[2:]
|
||||||
return LOAD(controller, function, args=args, ajax=True).xml()
|
return LOAD(controller, function, args=args, ajax=True).xml()
|
||||||
|
|
||||||
|
def get_render(self):
|
||||||
|
if isinstance(self.settings.render, basestring):
|
||||||
|
r = getattr(self, "%s_render" % self.settings.render)
|
||||||
|
elif callable(self.settings.render):
|
||||||
|
r = self.settings.render
|
||||||
|
else:
|
||||||
|
raise ValueError("Invalid render type %s" % type(render))
|
||||||
|
return r
|
||||||
|
|
||||||
def __init__(self, auth, env=None, render='markmin',
|
def __init__(self, auth, env=None, render='markmin',
|
||||||
manage_permissions=False, force_prefix='',
|
manage_permissions=False, force_prefix='',
|
||||||
restrict_search=False, extra=None,
|
restrict_search=False, extra=None,
|
||||||
menu_groups=None, templates=None):
|
menu_groups=None, templates=None):
|
||||||
|
|
||||||
|
settings = self.settings = Settings()
|
||||||
|
|
||||||
|
# render: "markmin", "html", ..., <function>
|
||||||
|
settings.render = render
|
||||||
|
perms = settings.manage_permissions = manage_permissions
|
||||||
|
|
||||||
|
settings.force_prefix = force_prefix
|
||||||
|
settings.restrict_search = restrict_search
|
||||||
|
settings.extra = extra or {}
|
||||||
|
settings.menu_groups = menu_groups
|
||||||
|
settings.templates = templates
|
||||||
|
|
||||||
db = auth.db
|
db = auth.db
|
||||||
self.env = env or {}
|
self.env = env or {}
|
||||||
self.env['component'] = Wiki.component
|
self.env['component'] = Wiki.component
|
||||||
if render == 'markmin':
|
|
||||||
render = self.markmin_render
|
|
||||||
elif render == 'html':
|
|
||||||
render = self.html_render
|
|
||||||
self.render = render
|
|
||||||
self.auth = auth
|
self.auth = auth
|
||||||
self.menu_groups = menu_groups
|
|
||||||
if self.auth.user:
|
if self.auth.user:
|
||||||
self.force_prefix = force_prefix % self.auth.user
|
self.settings.force_prefix = force_prefix % self.auth.user
|
||||||
else:
|
else:
|
||||||
self.force_prefix = force_prefix
|
self.settings.force_prefix = force_prefix
|
||||||
|
|
||||||
self.host = current.request.env.http_host
|
self.host = current.request.env.http_host
|
||||||
perms = self.manage_permissions = manage_permissions
|
|
||||||
self.restrict_search = restrict_search
|
|
||||||
self.extra = extra or {}
|
|
||||||
self.templates = templates
|
|
||||||
|
|
||||||
table_definitions = [
|
table_definitions = [
|
||||||
('wiki_page', {
|
('wiki_page', {
|
||||||
@@ -4975,7 +4989,8 @@ class Wiki(object):
|
|||||||
writable=perms, readable=perms,
|
writable=perms, readable=perms,
|
||||||
default=[Wiki.everybody]),
|
default=[Wiki.everybody]),
|
||||||
Field('changelog'),
|
Field('changelog'),
|
||||||
Field('html', 'text', compute=render,
|
Field('html', 'text',
|
||||||
|
compute=self.get_render(),
|
||||||
readable=False, writable=False),
|
readable=False, writable=False),
|
||||||
auth.signature],
|
auth.signature],
|
||||||
'vars':{'format':'%(title)s'}}),
|
'vars':{'format':'%(title)s'}}),
|
||||||
@@ -5008,8 +5023,9 @@ class Wiki(object):
|
|||||||
args += value['args']
|
args += value['args']
|
||||||
db.define_table(key, *args, **value['vars'])
|
db.define_table(key, *args, **value['vars'])
|
||||||
|
|
||||||
if self.templates is None and not self.manage_permissions:
|
if self.settings.templates is None and not \
|
||||||
self.templates = db.wiki_page.tags.contains('template')&\
|
self.settings.manage_permissions:
|
||||||
|
self.settings.templates = db.wiki_page.tags.contains('template')&\
|
||||||
db.wiki_page.can_read.contains('everybody')
|
db.wiki_page.can_read.contains('everybody')
|
||||||
|
|
||||||
def update_tags_insert(page, id, db=db):
|
def update_tags_insert(page, id, db=db):
|
||||||
@@ -5033,13 +5049,17 @@ class Wiki(object):
|
|||||||
gid = group.id if group else db.auth_group.insert(
|
gid = group.id if group else db.auth_group.insert(
|
||||||
role='wiki_editor')
|
role='wiki_editor')
|
||||||
auth.add_membership(gid)
|
auth.add_membership(gid)
|
||||||
|
|
||||||
|
settings.lock_keys = True
|
||||||
|
|
||||||
# WIKI ACCESS POLICY
|
# WIKI ACCESS POLICY
|
||||||
|
|
||||||
def not_authorized(self, page=None):
|
def not_authorized(self, page=None):
|
||||||
raise HTTP(401)
|
raise HTTP(401)
|
||||||
|
|
||||||
def can_read(self, page):
|
def can_read(self, page):
|
||||||
if 'everybody' in page.can_read or not self.manage_permissions:
|
if 'everybody' in page.can_read or not \
|
||||||
|
self.settings.manage_permissions:
|
||||||
return True
|
return True
|
||||||
elif self.auth.user:
|
elif self.auth.user:
|
||||||
groups = self.auth.user_groups.values()
|
groups = self.auth.user_groups.values()
|
||||||
@@ -5069,11 +5089,11 @@ class Wiki(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def can_see_menu(self):
|
def can_see_menu(self):
|
||||||
if self.menu_groups is None:
|
if self.settings.menu_groups is None:
|
||||||
return True
|
return True
|
||||||
if self.auth.user:
|
if self.auth.user:
|
||||||
groups = self.auth.user_groups.values()
|
groups = self.auth.user_groups.values()
|
||||||
if any(t in self.menu_groups for t in groups):
|
if any(t in self.settings.menu_groups for t in groups):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -5110,7 +5130,7 @@ class Wiki(object):
|
|||||||
elif zero == '_cloud':
|
elif zero == '_cloud':
|
||||||
return self.cloud()
|
return self.cloud()
|
||||||
elif zero == '_preview':
|
elif zero == '_preview':
|
||||||
return self.preview(self.render)
|
return self.preview(self.get_render())
|
||||||
|
|
||||||
def first_paragraph(self, page):
|
def first_paragraph(self, page):
|
||||||
if not self.can_read(page):
|
if not self.can_read(page):
|
||||||
@@ -5178,9 +5198,9 @@ class Wiki(object):
|
|||||||
title_guess = ' '.join(c.capitalize() for c in slug.split('-'))
|
title_guess = ' '.join(c.capitalize() for c in slug.split('-'))
|
||||||
if not page:
|
if not page:
|
||||||
if not (self.can_manage() or
|
if not (self.can_manage() or
|
||||||
slug.startswith(self.force_prefix)):
|
slug.startswith(self.settings.force_prefix)):
|
||||||
current.session.flash = 'slug must have "%s" prefix' \
|
current.session.flash = 'slug must have "%s" prefix' \
|
||||||
% self.force_prefix
|
% self.settings.force_prefix
|
||||||
redirect(URL(args=('_create')))
|
redirect(URL(args=('_create')))
|
||||||
db.wiki_page.can_read.default = [Wiki.everybody]
|
db.wiki_page.can_read.default = [Wiki.everybody]
|
||||||
db.wiki_page.can_edit.default = [auth.user_group_role()]
|
db.wiki_page.can_edit.default = [auth.user_group_role()]
|
||||||
@@ -5282,14 +5302,15 @@ class Wiki(object):
|
|||||||
options=[OPTION(row.slug,_value=row.id) for row in slugs]
|
options=[OPTION(row.slug,_value=row.id) for row in slugs]
|
||||||
options.insert(0, OPTION('',_value=''))
|
options.insert(0, OPTION('',_value=''))
|
||||||
fields = [Field("slug", default=current.request.args(1) or
|
fields = [Field("slug", default=current.request.args(1) or
|
||||||
self.force_prefix,
|
self.settings.force_prefix,
|
||||||
requires=(IS_SLUG(), IS_NOT_IN_DB(db,db.wiki_page.slug))),]
|
requires=(IS_SLUG(), IS_NOT_IN_DB(db,db.wiki_page.slug))),]
|
||||||
if self.templates:
|
if self.settings.templates:
|
||||||
fields.append(
|
fields.append(
|
||||||
Field("from_template", "reference wiki_page",
|
Field("from_template", "reference wiki_page",
|
||||||
requires=IS_EMPTY_OR(IS_IN_DB(db(self.templates),
|
requires=IS_EMPTY_OR(
|
||||||
db.wiki_page._id,
|
IS_IN_DB(db(self.settings.templates),
|
||||||
'%(slug)s')),
|
db.wiki_page._id,
|
||||||
|
'%(slug)s')),
|
||||||
comment=current.T(
|
comment=current.T(
|
||||||
"Choose Template or empty for new Page")))
|
"Choose Template or empty for new Page")))
|
||||||
form = SQLFORM.factory(*fields, **dict(_class="well span6"))
|
form = SQLFORM.factory(*fields, **dict(_class="well span6"))
|
||||||
@@ -5331,7 +5352,7 @@ class Wiki(object):
|
|||||||
request, db = current.request, self.auth.db
|
request, db = current.request, self.auth.db
|
||||||
media = db.wiki_media(id)
|
media = db.wiki_media(id)
|
||||||
if media:
|
if media:
|
||||||
if self.manage_permissions:
|
if self.settings.manage_permissions:
|
||||||
page = db.wiki_page(media.wiki_page)
|
page = db.wiki_page(media.wiki_page)
|
||||||
if not self.can_read(page):
|
if not self.can_read(page):
|
||||||
return self.not_authorized(page)
|
return self.not_authorized(page)
|
||||||
@@ -5430,7 +5451,7 @@ class Wiki(object):
|
|||||||
query = (db.wiki_page.id == db.wiki_tag.wiki_page) &\
|
query = (db.wiki_page.id == db.wiki_tag.wiki_page) &\
|
||||||
(db.wiki_tag.name.belongs(tags))
|
(db.wiki_tag.name.belongs(tags))
|
||||||
query = query | db.wiki_page.title.contains(request.vars.q)
|
query = query | db.wiki_page.title.contains(request.vars.q)
|
||||||
if self.restrict_search and not self.manage():
|
if self.settings.restrict_search and not self.manage():
|
||||||
query = query & (db.wiki_page.created_by == self.auth.user_id)
|
query = query & (db.wiki_page.created_by == self.auth.user_id)
|
||||||
pages = db(query).select(count,
|
pages = db(query).select(count,
|
||||||
*fields, **dict(orderby=orderby or ~count,
|
*fields, **dict(orderby=orderby or ~count,
|
||||||
@@ -5491,6 +5512,7 @@ class Wiki(object):
|
|||||||
request = current.request
|
request = current.request
|
||||||
return render(request.post_vars)
|
return render(request.post_vars)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import doctest
|
import doctest
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
|||||||
Reference in New Issue
Block a user