# coding: utf8
db.define_table('page',
Field('title', requires=IS_NOT_IN_DB(db, 'page.title')),
Field('body', 'text', requires=IS_NOT_EMPTY()),
Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
Field('created_by', db.auth_user, default=auth.user_id, readable=False, writable=False),
format='%(title)s')
db.define_table('comment',
Field('page_id',
db.page, readable=False, writable=False),
Field('body', 'text', requires=IS_NOT_EMPTY()),
Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
Field('created_by', db.auth_user, default=auth.user_id,readable=False, writable=False))
db.define_table('document',
Field('page_id',
db.page, readable=False, writable=False),
Field('file', 'upload'),
Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
Field('created_by', db.auth_user, default=auth.user_id, readable=False, writable=False),
format='%(name)s')
Here is the controller:
def index():
pages = db().select(
db.page.id, db.page.title, orderby=db.page.title)
return dict(pages=pages)
@auth.requires_login()
def create():
form=crud.create(
db.page, next=URL('index'))
return dict(form=form)
def show():
this_page =
db.page(request.args(0)) or redirect(URL('index'))
form = crud.create(db.comment) if auth.user else None
pagecomments = db(db.comment.page_id==
this_page.id).select()
return dict(page=this_page, comments=pagecomments, form=form)
@auth.requires_login()
def edit():
this_page =
db.page(request.args(0)) or redirect(URL('index'))
form = crud.update(
db.page, this_page, next=URL('show', args=request.args))
return dict(form=form)
@auth.requires_login()
def documents():
page =
db.page(request.args(0)) or redirect(URL('index'))
db.document.page_id.default =
page.id db.document.page_id.writable = False
return dict(page=page, grid=grid)
@auth.requires_login()
def user():
"""
exposes:
http://..../[app]/default/user/login
http://..../[app]/default/user/logout
http://..../[app]/default/user/register
http://..../[app]/default/user/profile
http://..../[app]/default/user/retrieve_password
http://..../[app]/default/user/change_password
use @auth.requires_login()
@auth.requires_membership('group name')
@auth.requires_permission('read','table name',record_id)
to decorate functions that need access control
"""
return dict(form=auth())
Here are the views:
Index:
{{left_sidebar_enabled,right_sidebar_enabled=False,True}}
{{extend 'layout.html'}}
<h1>Available Wiki Pages</h1>
[ {{=A('search', _href=URL('search'))}} ]<br />
<ul>{{for page in pages:}}
{{=LI(A(page.title, _href=URL('show', args=
page.id)))}}
{{pass}}</ul>
[ {{=A('create page', _href=URL('create'))}}]
Create:
{{extend 'layout.html'}}
<h1>Create new wiki page</h1>
{{=form}}
Show:
{{extend 'layout.html'}}
<h1>{{=page.title}}</h1>
[ {{=A('edit', _href=URL('edit', args=request.args))}} ]
[ {{=A('documents', _href=URL('documents', args=request.args))}} ]<br />
{{=MARKMIN(page.body)}}
<h2>Comments</h2>
{{for comment in comments:}}
<p>{{=db.auth_user[comment.created_by].first_name}} on {{=comment.created_on}} says <i>{{=comment.body}}</i></p>
{{pass}}
<h2>Post a comment</h2>
{{=form}}
Edit:
{{extend 'layout.html'}}
<h1>Edit wiki page</h1>
[ {{=A('show', _href=URL('show', args=request.args))}} ] <br />
{{=form}}
documents:
{{extend 'layout.html'}}
<h1>Documents for page: {{=page.title}}</h1>
[ {{=A('show', _href=URL('show', args=request.args))}} ]<br />
<h2>Doucments</h2>
{{=grid}}
Thanks