/usr/lib/python2.7/dist-packages/wikiprint/web_ui.py is in trac-wikiprint 2.0.0+r16816-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | """
Copyright (C) 2008 Prognus Software Livre - www.prognus.com.br
Author: Diorgenes Felipe Grzesiuk <diorgenes@prognus.com.br>
Modified by: Alvaro Iradier <alvaro.iradier@polartech.es>
"""
from trac.admin.web_ui import IAdminPanelProvider
from trac.core import Component, ExtensionPoint, TracError, implements
from trac.perm import IPermissionRequestor
from trac.wiki.api import WikiSystem
from trac.web.api import RequestDone
from trac.web.chrome import ITemplateProvider, add_notice, add_script
import defaults
import wikiprint
from api import IWikiPrintFormat
class WikiPrintAdmin(Component):
"""A plugin allowing the export of multiple wiki pages in a single file."""
formats = ExtensionPoint(IWikiPrintFormat)
implements(IPermissionRequestor, IAdminPanelProvider, ITemplateProvider)
### IPermissionRequestor methods
def get_permission_actions(self):
return ['WIKIPRINT_ADMIN', 'WIKIPRINT_FILESYSTEM', 'WIKIPRINT_BOOK']
### ITemplateProvider methods
def get_templates_dirs(self):
from pkg_resources import resource_filename
return [resource_filename(__name__, 'templates')]
def get_htdocs_dirs(self):
from pkg_resources import resource_filename
return [('wikiprint', resource_filename(__name__, 'htdocs'))]
### IAdminPanelProvider methods
def get_admin_panels(self, req):
if req.perm.has_permission('WIKIPRINT_ADMIN'):
yield ('wikiprint', 'WikiPrint', 'options', 'Options')
if req.perm.has_permission('WIKIPRINT_BOOK'):
yield ('wikiprint', 'WikiPrint', 'makebook', 'Make Book')
def render_admin_panel(self, req, cat, page, component):
if page == 'makebook':
return self._render_book(req, cat, page, component)
if page == 'options':
return self._render_options(req, cat, page, component)
def _render_book(self, req, cat, page, component):
req.perm.assert_permission('WIKIPRINT_BOOK')
data = {}
allpages = list(WikiSystem(self.env).get_pages())
rightpages = [x for x in
req.session.get('wikiprint_rightpages', '').split(',')
if x]
formats = {}
for provider in self.formats:
for format, name in provider.wikiprint_formats(req):
formats[format] = {
'name': name,
'provider': provider,
}
if req.method == 'POST' and req.args.get('create'):
rightpages = req.args.get('rightpages_all')
title = req.args.get('title') or self.env.project_name
subject = req.args.get('subject')
date = req.args.get('date')
version = req.args.get('version')
format = req.args.get('format')
req.session['wikiprint_rightpages'] = rightpages
rightpages = rightpages.split(',')
if not format or format not in formats:
raise TracError('Bad format given for WikiPrint output.')
pdfbookname = title.replace(' ', '_') \
.replace(':', '_') \
.replace(',', '_')
return formats[format]['provider'] \
.process_wikiprint(req, format, title, subject, rightpages,
version, date, pdfbookname)
data['allpages'] = allpages
leftpages = [x for x in allpages if x not in rightpages]
leftpages.sort()
data['leftpages'] = leftpages
data['rightpages'] = rightpages
data['formats'] = formats
data['default_format'] = formats.iterkeys().next()
add_script(req, 'wikiprint/js/admin_wikiprint.js')
return 'admin_wikibook.html', data
def _render_options(self, req, cat, page, component):
req.perm.assert_permission('WIKIPRINT_ADMIN')
data = {}
if req.method == 'POST' and req.args.get('saveurls'):
self.env.config.set('wikiprint', 'css_url', req.args.get('css_url'))
self.env.config.set('wikiprint', 'article_css_url',
req.args.get('article_css_url'))
self.env.config.set('wikiprint', 'book_css_url',
req.args.get('book_css_url'))
self.env.config.set('wikiprint', 'frontpage_url',
req.args.get('frontpage_url'))
self.env.config.set('wikiprint', 'extracontent_url',
req.args.get('extracontent_url'))
add_notice(req, "URLs saved")
self.env.config.save()
elif req.method == 'POST' and req.args.get('savehttpauth'):
self.env.config.set('wikiprint', 'httpauth_user',
req.args.get('httpauth_user'))
self.env.config.set('wikiprint', 'httpauth_password',
req.args.get('httpauth_password'))
add_notice(req, "User and password saved")
self.env.config.save()
elif req.method == 'POST' and req.args.get('viewcss'):
self.env.log.debug("Wikiprint, Viewing CSS")
return self._send_resource_file(req, 'text/css',
req.args.get('css_url'),
defaults.CSS)
elif req.method == 'POST' and req.args.get('viewbookcss'):
self.env.log.debug("Wikiprint, Viewing Book CSS")
return self._send_resource_file(req, 'text/css',
req.args.get('book_css_url'),
defaults.BOOK_EXTRA_CSS)
elif req.method == 'POST' and req.args.get('viewarticlecss'):
self.env.log.debug("Wikiprint, Viewing Article CSS")
return self._send_resource_file(req, 'text/css',
req.args.get('article_css_url'),
defaults.ARTICLE_EXTRA_CSS)
elif req.method == 'POST' and req.args.get('viewfrontpage'):
self.env.log.debug("Wikiprint, Viewing Front page")
return self._send_resource_file(req, 'text/html',
req.args.get('frontpage_url'),
defaults.FRONTPAGE)
elif req.method == 'POST' and req.args.get('viewextracontent'):
self.env.log.debug("Wikiprint, Viewing Extra Contents")
return self._send_resource_file(req, 'text/html',
req.args.get('extracontent_url'),
defaults.EXTRA_CONTENT)
data['css_url'] = self.env.config.get('wikiprint', 'css_url')
data['article_css_url'] = \
self.env.config.get('wikiprint', 'article_css_url')
data['book_css_url'] = \
self.env.config.get('wikiprint', 'book_css_url')
data['frontpage_url'] = \
self.env.config.get('wikiprint', 'frontpage_url')
data['extracontent_url'] = \
self.env.config.get('wikiprint', 'extracontent_url')
data['httpauth_user'] = \
self.env.config.get('wikiprint', 'httpauth_user')
data['httpauth_password'] = \
self.env.config.get('wikiprint', 'httpauth_password')
return 'admin_wikiprint.html', data
def _send_resource_file(self, req, content_type, file, default_value):
# Send the output
req.send_response(200)
req.send_header('Content-Type', 'text/plain')
if not file:
out = default_value
else:
linkloader = wikiprint.linkLoader(self.env, req, allow_local=True)
resolved_file = linkloader.getFileName(file)
if not resolved_file:
raise Exception("File or URL load problem: %s (need " +
"WIKIPRINT_FILESYSTEM permissions?)" % file)
try:
f = open(resolved_file)
out = f.read()
f.close()
except IOError:
raise Exception("File or URL load problem: %s (IO Error)"
% file)
del linkloader
req.send_header('Content-Length', len(out))
req.end_headers()
req.write(out)
raise RequestDone
|