wiki.settings, thanks Alan

This commit is contained in:
mdipierro
2013-03-15 10:14:33 -05:00
parent e4a96125a6
commit f613a4cc99
2 changed files with 52 additions and 30 deletions

View File

@@ -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

View File

@@ -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()