wiki.settings, thanks Alan
This commit is contained in:
2
VERSION
2
VERSION
@@ -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
|
||||
|
||||
@@ -4899,7 +4899,7 @@ class Wiki(object):
|
||||
everybody = 'everybody'
|
||||
rows_page = 25
|
||||
def markmin_base(self,body):
|
||||
return MARKMIN(body, extra=self.extra,
|
||||
return MARKMIN(body, extra=self.settings.extra,
|
||||
url=True, environment=self.env,
|
||||
autolinks=lambda link: expand_one(link, {})).xml()
|
||||
|
||||
@@ -4933,29 +4933,43 @@ class Wiki(object):
|
||||
controller, function, args = items[0], items[1], items[2:]
|
||||
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',
|
||||
manage_permissions=False, force_prefix='',
|
||||
restrict_search=False, extra=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
|
||||
self.env = env or {}
|
||||
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.menu_groups = menu_groups
|
||||
|
||||
if self.auth.user:
|
||||
self.force_prefix = force_prefix % self.auth.user
|
||||
self.settings.force_prefix = force_prefix % self.auth.user
|
||||
else:
|
||||
self.force_prefix = force_prefix
|
||||
self.settings.force_prefix = force_prefix
|
||||
|
||||
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 = [
|
||||
('wiki_page', {
|
||||
@@ -4975,7 +4989,8 @@ class Wiki(object):
|
||||
writable=perms, readable=perms,
|
||||
default=[Wiki.everybody]),
|
||||
Field('changelog'),
|
||||
Field('html', 'text', compute=render,
|
||||
Field('html', 'text',
|
||||
compute=self.get_render(),
|
||||
readable=False, writable=False),
|
||||
auth.signature],
|
||||
'vars':{'format':'%(title)s'}}),
|
||||
@@ -5008,8 +5023,9 @@ class Wiki(object):
|
||||
args += value['args']
|
||||
db.define_table(key, *args, **value['vars'])
|
||||
|
||||
if self.templates is None and not self.manage_permissions:
|
||||
self.templates = db.wiki_page.tags.contains('template')&\
|
||||
if self.settings.templates is None and not \
|
||||
self.settings.manage_permissions:
|
||||
self.settings.templates = db.wiki_page.tags.contains('template')&\
|
||||
db.wiki_page.can_read.contains('everybody')
|
||||
|
||||
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(
|
||||
role='wiki_editor')
|
||||
auth.add_membership(gid)
|
||||
|
||||
settings.lock_keys = True
|
||||
|
||||
# WIKI ACCESS POLICY
|
||||
|
||||
def not_authorized(self, page=None):
|
||||
raise HTTP(401)
|
||||
|
||||
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
|
||||
elif self.auth.user:
|
||||
groups = self.auth.user_groups.values()
|
||||
@@ -5069,11 +5089,11 @@ class Wiki(object):
|
||||
return True
|
||||
|
||||
def can_see_menu(self):
|
||||
if self.menu_groups is None:
|
||||
if self.settings.menu_groups is None:
|
||||
return True
|
||||
if self.auth.user:
|
||||
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 False
|
||||
|
||||
@@ -5110,7 +5130,7 @@ class Wiki(object):
|
||||
elif zero == '_cloud':
|
||||
return self.cloud()
|
||||
elif zero == '_preview':
|
||||
return self.preview(self.render)
|
||||
return self.preview(self.get_render())
|
||||
|
||||
def first_paragraph(self, page):
|
||||
if not self.can_read(page):
|
||||
@@ -5178,9 +5198,9 @@ class Wiki(object):
|
||||
title_guess = ' '.join(c.capitalize() for c in slug.split('-'))
|
||||
if not page:
|
||||
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' \
|
||||
% self.force_prefix
|
||||
% self.settings.force_prefix
|
||||
redirect(URL(args=('_create')))
|
||||
db.wiki_page.can_read.default = [Wiki.everybody]
|
||||
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.insert(0, OPTION('',_value=''))
|
||||
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))),]
|
||||
if self.templates:
|
||||
if self.settings.templates:
|
||||
fields.append(
|
||||
Field("from_template", "reference wiki_page",
|
||||
requires=IS_EMPTY_OR(IS_IN_DB(db(self.templates),
|
||||
db.wiki_page._id,
|
||||
'%(slug)s')),
|
||||
requires=IS_EMPTY_OR(
|
||||
IS_IN_DB(db(self.settings.templates),
|
||||
db.wiki_page._id,
|
||||
'%(slug)s')),
|
||||
comment=current.T(
|
||||
"Choose Template or empty for new Page")))
|
||||
form = SQLFORM.factory(*fields, **dict(_class="well span6"))
|
||||
@@ -5331,7 +5352,7 @@ class Wiki(object):
|
||||
request, db = current.request, self.auth.db
|
||||
media = db.wiki_media(id)
|
||||
if media:
|
||||
if self.manage_permissions:
|
||||
if self.settings.manage_permissions:
|
||||
page = db.wiki_page(media.wiki_page)
|
||||
if not self.can_read(page):
|
||||
return self.not_authorized(page)
|
||||
@@ -5430,7 +5451,7 @@ class Wiki(object):
|
||||
query = (db.wiki_page.id == db.wiki_tag.wiki_page) &\
|
||||
(db.wiki_tag.name.belongs(tags))
|
||||
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)
|
||||
pages = db(query).select(count,
|
||||
*fields, **dict(orderby=orderby or ~count,
|
||||
@@ -5491,6 +5512,7 @@ class Wiki(object):
|
||||
request = current.request
|
||||
return render(request.post_vars)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
||||
Reference in New Issue
Block a user