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 = """

trac-admin

trac-admin
Output:
""" # 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