from trac.core import *
from trac.perm import IPermissionRequestor
from trac.web.chrome import INavigationContributor
from trac.web import IRequestHandler
from trac.util import escape
import os
class TracAdminModule(Component):
implements(INavigationContributor, IRequestHandler, IPermissionRequestor)
tracadmin_cs = """
"""
# INavigationContributor methods
def get_active_navigation_item(self, req):
return 'tracadmin'
def get_navigation_items(self, req):
if not req.perm.has_permission('TRAC_ADMIN_PLUGIN'):
return
yield 'mainnav', 'tracadmin', "trac-admin" \
% escape(self.env.href.tracadmin())
# IPermissionRequestor methods
def get_permission_actions(self):
return ['TRAC_ADMIN_PLUGIN']
# IRequestHandler methods
def match_request(self, req):
return req.path_info == '/tracadmin'
def process_request(self, req):
req.perm.assert_permission('TRAC_ADMIN_PLUGIN')
req.hdf['trac_path'] = self.env.path
if req.method == 'POST':
command = req.args.get('command')
(stdin, stdout_stderr) = os.popen4('trac-admin %s %s' % (self.env.path, command))
req.hdf['command_output'] = escape(stdout_stderr.read()).replace('\n', '
')
template = req.hdf.parse(self.tracadmin_cs)
return template, None