working on wiki_tags

This commit is contained in:
mdipierro
2012-07-15 21:41:43 -05:00
parent f308343fb0
commit 2ae0ee0804
2 changed files with 36 additions and 18 deletions

View File

@@ -1 +1 @@
Version 2.00.0 (2012-07-15 18:11:44) dev
Version 2.00.0 (2012-07-15 21:41:39) dev

View File

@@ -4352,28 +4352,44 @@ class Expose(object):
class Wiki(object):
regex_redirect = re.compile('redirect\s+(\w+\://\S+)\s*')
def __init__(self,auth,env=None,automenu=True):
self.auth = auth
def __init__(self,auth,env=None,automenu=True,render='markmin'):
self.env = env or {}
if render == 'markmin':
render = lambda t,env=self.env: \
MARKMIN(t.body,url=True,environment=env).xml()
self.auth = auth
self.automenu = automenu
db = auth.db
db.define_table(
'wiki_page',
db.Field('slug',requires=[IS_SLUG(),IS_NOT_IN_DB(db,'wiki_page.slug')],
Field('slug',requires=[IS_SLUG(),IS_NOT_IN_DB(db,'wiki_page.slug')],
readable=False,writable=False),
db.Field('title',unique=True),
db.Field('body','text',notnull=True),
db.Field('menu'),
db.Field('html','text',readable=False,writable=False,
compute=lambda t,env=self.env: \
MARKMIN(t.body,url=True,environment=env).xml()),
Field('title',unique=True),
Field('body','text',notnull=True),
Field('menu'),
Field('tags'),
Field('html','text',readable=False,writable=False,compute=render),
auth.signature,format='%(title)s')
db.define_table(
'wiki_tag',
Field('name'),
Field('wiki_page',db.wiki_page),
auth.signature,format='%(name)s')
db.define_table(
'wiki_media',
db.Field('wiki_page',db.wiki_page),
db.Field('title',required=True),
db.Field('file','upload',required=True),
Field('wiki_page',db.wiki_page),
Field('title',required=True),
Field('file','upload',required=True),
auth.signature,format='%(title)s')
"""
def update_tags(page,db=db):
db(db.wiki_tag.wiki_page==page.id).delete()
for tags in page.tags.split(','):
tag = tag.strip().lower()
if tag: db.wiki_tag.insert(tag=tag,wiki_page=page.id)
db.wiki_page._after_insert.append(update_tags)
db.wiki_page._after_update.append(update_tags)
"""
def __call__(self):
if self.automenu:
current.response.menu = self.menu(current.request.controller,
@@ -4395,11 +4411,11 @@ class Wiki(object):
match = self.regex_redirect.match(page.body)
if match: redirect(match.group(1))
return dict(content=XML(page.html))
def check_authorization(self,act=False):
def check_authorization(self,role='wiki_editor',act=False):
if not self.auth.user:
if not act: return False
redirect(self.auth.settings.login_url)
elif not self.auth.has_membership('wiki_editor'):
elif not self.auth.has_membership(role):
if not act: return False
raise HTTP(401, "Not Authorized")
return True
@@ -4422,10 +4438,12 @@ class Wiki(object):
self.check_authorization()
self.auth.db.wiki_page.slug.writable = True
content=SQLFORM.smartgrid(
self.auth.db.wiki_page,
args=['_pages'],
self.auth.db.wiki_page,
linked_tables = 'wiki_media',
orderby = {'wiki_page':self.auth.db.wiki_page.title,
'wiki_media':self.auth.db.wiki_media.title})
'wiki_media':self.auth.db.wiki_media.title},
args=['_pages'],
user_signature=False)
return dict(content=content)
def media(self, id):
request, db = current.request, self.auth.db