예제 #1
0
    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)
예제 #2
0
 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
예제 #3
0
    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
예제 #4
0
파일: admin.py 프로젝트: nyuhuhuu/trachacks
 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
예제 #5
0
    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)