# vim: expandtab from trac.Wiki import WikiPage import trac.perm import time from StringIO import StringIO from trac.WikiFormatter import wiki_to_html from trac.util import TracError import re def execute(hdf, args, env): authname = hdf.getValue("trac.authname", "anonymous") db = env.get_db_cnx() perm = trac.perm.PermissionCache(db, authname) pagename = hdf.getValue("args.page", "WikiStart") page = WikiPage(pagename, None, perm, db) wikipreview = hdf.getValue("args.preview", "") appendonly = (args == 'appendonly') readonlypage = int(hdf.getValue("wiki.readonly", "0")) # Can this user add a comment to this page? cancomment = not readonlypage # Is this an "append-only" comment or are we an administrator? if perm.has_permission(trac.perm.WIKI_ADMIN) or appendonly: cancomment = True if not cancomment: raise TracError('Error: Insufficient privileges to AddComment') disabled = '' comment = hdf.getValue("args.addcomment", "") preview = hdf.getValue("args.previewaddcomment", "") cancel = hdf.getValue("args.canceladdcomment", "") submit = hdf.getValue("args.submitaddcomment", "") if not cancel: authname = hdf.getValue("args.authoraddcomment", authname) # Ensure [[AddComment]] is not present in comment, so that infinite # recursion does not occur. comment = re.sub('(^|[^!])(\[\[AddComment)', '\\1!\\2', comment) out = StringIO() if wikipreview or not (perm.has_permission(trac.perm.WIKI_MODIFY) or appendonly): disabled = ' disabled="disabled"' # If we are submitting or previewing, inject comment as it should look if cancomment and comment and (preview or submit): if preview: out.write("
\n%s\n
\n" % (authname, time.strftime('%c', time.localtime()), wiki_to_html(comment, hdf, env, db))) if preview: out.write("" + hdf.dump() + ""