working on wiki_tags
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-07-15 18:11:44) dev
|
Version 2.00.0 (2012-07-15 21:41:39) dev
|
||||||
|
|||||||
+34
-16
@@ -4352,28 +4352,44 @@ class Expose(object):
|
|||||||
|
|
||||||
class Wiki(object):
|
class Wiki(object):
|
||||||
regex_redirect = re.compile('redirect\s+(\w+\://\S+)\s*')
|
regex_redirect = re.compile('redirect\s+(\w+\://\S+)\s*')
|
||||||
def __init__(self,auth,env=None,automenu=True):
|
def __init__(self,auth,env=None,automenu=True,render='markmin'):
|
||||||
self.auth = auth
|
|
||||||
self.env = env or {}
|
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
|
self.automenu = automenu
|
||||||
db = auth.db
|
db = auth.db
|
||||||
db.define_table(
|
db.define_table(
|
||||||
'wiki_page',
|
'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),
|
readable=False,writable=False),
|
||||||
db.Field('title',unique=True),
|
Field('title',unique=True),
|
||||||
db.Field('body','text',notnull=True),
|
Field('body','text',notnull=True),
|
||||||
db.Field('menu'),
|
Field('menu'),
|
||||||
db.Field('html','text',readable=False,writable=False,
|
Field('tags'),
|
||||||
compute=lambda t,env=self.env: \
|
Field('html','text',readable=False,writable=False,compute=render),
|
||||||
MARKMIN(t.body,url=True,environment=env).xml()),
|
|
||||||
auth.signature,format='%(title)s')
|
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(
|
db.define_table(
|
||||||
'wiki_media',
|
'wiki_media',
|
||||||
db.Field('wiki_page',db.wiki_page),
|
Field('wiki_page',db.wiki_page),
|
||||||
db.Field('title',required=True),
|
Field('title',required=True),
|
||||||
db.Field('file','upload',required=True),
|
Field('file','upload',required=True),
|
||||||
auth.signature,format='%(title)s')
|
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):
|
def __call__(self):
|
||||||
if self.automenu:
|
if self.automenu:
|
||||||
current.response.menu = self.menu(current.request.controller,
|
current.response.menu = self.menu(current.request.controller,
|
||||||
@@ -4395,11 +4411,11 @@ class Wiki(object):
|
|||||||
match = self.regex_redirect.match(page.body)
|
match = self.regex_redirect.match(page.body)
|
||||||
if match: redirect(match.group(1))
|
if match: redirect(match.group(1))
|
||||||
return dict(content=XML(page.html))
|
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 self.auth.user:
|
||||||
if not act: return False
|
if not act: return False
|
||||||
redirect(self.auth.settings.login_url)
|
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
|
if not act: return False
|
||||||
raise HTTP(401, "Not Authorized")
|
raise HTTP(401, "Not Authorized")
|
||||||
return True
|
return True
|
||||||
@@ -4423,9 +4439,11 @@ class Wiki(object):
|
|||||||
self.auth.db.wiki_page.slug.writable = True
|
self.auth.db.wiki_page.slug.writable = True
|
||||||
content=SQLFORM.smartgrid(
|
content=SQLFORM.smartgrid(
|
||||||
self.auth.db.wiki_page,
|
self.auth.db.wiki_page,
|
||||||
args=['_pages'],
|
linked_tables = 'wiki_media',
|
||||||
orderby = {'wiki_page':self.auth.db.wiki_page.title,
|
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)
|
return dict(content=content)
|
||||||
def media(self, id):
|
def media(self, id):
|
||||||
request, db = current.request, self.auth.db
|
request, db = current.request, self.auth.db
|
||||||
|
|||||||
Reference in New Issue
Block a user