def process_request(self, req): data = {} req.perm.require('PROJECT_LIST') projects = [] for project_name in Project.select(self.env): project = Project(self.env, project_name) # Don't list this environment if project.env_path == self.env.path: continue if project.valid: env = project.env try: self.log.debug('TracForge: %s', env.path) env_perm = PermissionCache(env, req.authname) #self.log.debug(env_perm.perms) if 'PROJECT_VIEW' in env_perm: projects.append({ 'name': env.project_name, 'description': env.project_description, 'href': req.href.projects(project.name), }) elif req.perm('tracforge_project', project.name): projects.append({ 'name': env.project_name, 'description': 'PROJECT_VIEW permission not granted.', }) except Exception, e: # Only show errors to admins to prevent excessive disclosure if 'TRACFORGE_ADMIN' in req.perm('tracforge_project', project.name): projects.append({ 'name': env.project_name, 'description': e }) self.log.debug( 'tracforge.dispatch: Unable to load project %s:\n%s', project.name, e) else: if 'TRACFORGE_ADMIN' in req.perm('tracforge_project', project.name): projects.append({ 'name': project.env_path, 'description': project.env.exc, }) self.log.debug( 'tracforge.dispatch: Unable to load project %s:\n%s', project.name, project.env.exc)
def render_admin_panel(self, req, cat, page, path_info): data = {} projects = sorted([(n, Project(self.env, n)) for n in Project.select(self.env)]) projects.insert(0, ('*', Project(self.env, '*'))) if req.method == 'POST': if 'add' in req.args: proj = req.args.get('project') user = req.args.get('user') role = req.args.get('role') if proj not in [n for n, p in projects]: raise TracError(_('Invalid project %s'), proj) if role not in ('member', 'admin'): raise TracError(_('Invalid role %s'), role) Members(self.env, proj)[user] = role req.redirect(req.href.admin(cat, page)) elif 'remove' in req.args: db = self.env.get_db_cnx() for name, proj in projects: users = req.args.getlist('sel'+name) members = Members(self.env, name, db=db) for user in users: del members[user] db.commit() req.redirect(req.href.admin(cat, page)) # projects_data = {} # for proj in projects: # projects_data[proj.name] = { # 'members': dict(proj.members.iteritems()), # 'env_path': proj.env_path, # Need some dummy value to ensure that the headings show up # } # data['projects'] = projects # req.hdf['tracforge.projects.*'] = { # 'dummy': 1, # 'members': dict(Members(self.env, '*').iteritems()), # } #req.hdf['tracforge.projects'] = projects_data add_stylesheet(req, 'tracforge/css/admin.css') return 'admin_tracforge_membership.html', data
def render_admin_panel(self, req, cat, page, path_info): data = {} projects = sorted([(n, Project(self.env, n)) for n in Project.select(self.env)]) projects.insert(0, ('*', Project(self.env, '*'))) if req.method == 'POST': if 'add' in req.args: proj = req.args.get('project') user = req.args.get('user') role = req.args.get('role') if proj not in [n for n, p in projects]: raise TracError(_('Invalid project %s'), proj) if role not in ('member', 'admin'): raise TracError(_('Invalid role %s'), role) Members(self.env, proj)[user] = role req.redirect(req.href.admin(cat, page)) elif 'remove' in req.args: db = self.env.get_db_cnx() for name, proj in projects: users = req.args.getlist('sel' + name) members = Members(self.env, name, db=db) for user in users: del members[user] db.commit() req.redirect(req.href.admin(cat, page)) # projects_data = {} # for proj in projects: # projects_data[proj.name] = { # 'members': dict(proj.members.iteritems()), # 'env_path': proj.env_path, # Need some dummy value to ensure that the headings show up # } # data['projects'] = projects # req.hdf['tracforge.projects.*'] = { # 'dummy': 1, # 'members': dict(Members(self.env, '*').iteritems()), # } #req.hdf['tracforge.projects'] = projects_data add_stylesheet(req, 'tracforge/css/admin.css') return 'admin_tracforge_membership.html', data
def render_admin_panel(self, req, cat, page, path_info): if path_info: return self._render_project_view(req, cat, page, path_info) data = {} if req.method == 'POST': if 'create' in req.args.keys(): # Project creation name = req.args.get('shortname', '').strip() full_name = req.args.get('fullname', '').strip() proto_name = req.args.get('prototype', '').strip() if not (name and full_name and proto_name): raise TracError('All arguments are required') # Make the models proto = Prototype(self.env, proto_name) if not proto.exists: raise TracError('Penguins on fire') # Use $PATH on non-Win32 if os.name == 'nt': spawn = os.spawnv else: spawn = os.spawnvp # Spawn the helper script helper = self.helper_script.split() helper += [self.env.path, proto_name, name, full_name] helper.insert(1, os.path.basename(helper[0])) spawn(os.P_NOWAIT, helper.pop(0), helper) # Redirect to the watcher page req.redirect(req.href.admin(cat, page, name)) elif 'delete' in req.args.keys(): # Project deleteion raise TracError, 'Not implemented yet. Sorry.' data['projects'] = sorted([Project(self.env, n) for n in Project.select(self.env)], key=lambda p: p.name) data['prototypes'] = Prototype.select(self.env) data['env_base_path'] = os.path.join(os.path.dirname(self.env.path), '') add_script(req, 'tracforge/js/typewatch1.1.js') return 'admin_tracforge_projects.html', data
def process_request(self, req): data = {} req.perm.require("PROJECT_LIST") projects = [] for project_name in Project.select(self.env): project = Project(self.env, project_name) # Don't list this environment if project.env_path == self.env.path: continue if project.valid: env = project.env try: self.log.debug("TracForge: %s", env.path) env_perm = PermissionCache(env, req.authname) # self.log.debug(env_perm.perms) if "PROJECT_VIEW" in env_perm: projects.append( { "name": env.project_name, "description": env.project_description, "href": req.href.projects(project.name), } ) elif req.perm("tracforge_project", project.name): projects.append( {"name": env.project_name, "description": "PROJECT_VIEW permission not granted."} ) except Exception, e: # Only show errors to admins to prevent excessive disclosure if "TRACFORGE_ADMIN" in req.perm("tracforge_project", project.name): projects.append({"name": env.project_name, "description": e}) self.log.debug("tracforge.dispatch: Unable to load project %s:\n%s", project.name, e) else: if "TRACFORGE_ADMIN" in req.perm("tracforge_project", project.name): projects.append({"name": project.env_path, "description": project.env.exc}) self.log.debug("tracforge.dispatch: Unable to load project %s:\n%s", project.name, project.env.exc)