Changeset 3649
- Timestamp:
- 05/10/08 03:56:36 (4 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
tracforgeplugin/0.11/tracforge/admin/dispatch.py
r3408 r3649 18 18 from trac.web.href import Href 19 19 from trac.mimeview.api import Mimeview 20 from genshi.builder import tag 20 21 21 from genshi.builder import tag22 from tracforge.admin.model import Project 22 23 23 24 class TracForgeIndexModule(Component): … … 32 33 data = {} 33 34 req.perm.require('PROJECT_LIST') 34 35 parent_dir = os.path.dirname(self.env.path) 36 #env_paths = dict([(filename, os.path.join(parent_dir, filename)) 37 # for filename in os.listdir(parent_dir)]) 35 38 36 projects = [] 39 37 40 for env_name in os.listdir(parent_dir):41 env_path = os.path.join(parent_dir, env_name)38 for project_name in Project.select(self.env): 39 project = Project(self.env, project_name) 42 40 43 41 # Don't list this environment 44 if env_path == self.env.path:42 if project.env_path == self.env.path: 45 43 continue 46 44 47 # Only bother looking at folders 48 if not os.path.isdir(env_path): 49 continue 50 51 try: 52 env = open_environment(env_path, use_cache=True) 45 if project.valid: 46 env = project.env 53 47 54 48 try: … … 60 54 'name': env.project_name, 61 55 'description': env.project_description, 62 'href': req.href.projects( env_name),56 'href': req.href.projects(project.name), 63 57 }) 64 58 except Exception, e: 65 59 # Only show errors to admins to prevent excessive disclosure 66 if 'TRACFOR FGE_ADMIN' in req.perm:60 if 'TRACFORGE_ADMIN' in req.perm('tracforge_project', project.name): 67 61 projects.append({ 68 62 'name': env.project_name, 69 63 'description': e 70 64 }) 71 except Exception, e: 72 if 'TRACFORGE_ADMIN' in req.perm: 65 self.log.debug('tracforge.dispatch: Unable to load project %s:\n%s', project.name, e) 66 else: 67 if 'TRACFORGE_ADMIN' in req.perm('tracforge_project', project.name): 73 68 projects.append({ 74 'name': env_path,75 'description': e,69 'name': project.env_path, 70 'description': project.env.exc, 76 71 }) 72 self.log.debug('tracforge.dispatch: Unable to load project %s:\n%s', project.name, project.env.exc) 77 73 78 74 data['projects'] = projects … … 95 91 # IRequestHandler methods 96 92 def match_request(self, req): 97 if req.path_info.startswith('/projects '):98 path_info = req.path_info[10:] 93 if req.path_info.startswith('/projects/'): 94 path_info = req.path_info[10:].lstrip('/') 99 95 if path_info: 100 96 self.log.debug('TracForgeDispatch: Starting WSGI relaunch for %s (%s)', path_info, req.method) 101 project = path_info.split('/', 1)[0] 97 self.log.debug('SN = %s PI = %s', req.environ['SCRIPT_NAME'], req.environ['PATH_INFO']) 98 project_name = path_info.split('/', 1)[0] 102 99 # Check that we aren't trying to recurse (possible link loop) 103 if project == os.path.basename(self.env.path):100 if project_name == os.path.basename(self.env.path): 104 101 req.redirect(req.href()) 102 project = Project(self.env, project_name) 105 103 106 104 # Assert permissions on the desination environment 107 try:108 project_env = open_environment(os.path.join(os.path.dirname(self.env.path), project), use_cache=True)109 except IOError:110 raise TracError(' No such project "%s"'%project)105 if not project.exists: 106 raise TracError('No such project "%s"', project.name) 107 if not project.valid: 108 raise TracError('Project %s is invalid:\n%s', project.name, project.env.exc) 111 109 112 110 # Check that we have permissions in the desired project 113 111 authname = RequestDispatcher(self.env).authenticate(req) 114 project_perm = PermissionCache(project _env, authname)112 project_perm = PermissionCache(project.env, authname) 115 113 project_perm.require('PROJECT_LIST') 116 114 … … 119 117 120 118 # Setup the environment variables 121 environ['SCRIPT_NAME'] = req.href.projects( '/')122 environ['PATH_INFO'] = path_info 123 environ['trac.env_pa rent_dir'] = os.path.dirname(self.env.path)119 environ['SCRIPT_NAME'] = req.href.projects(project.name) 120 environ['PATH_INFO'] = path_info[len(project.name):] 121 environ['trac.env_path'] = project.env_path 124 122 if 'TRAC_ENV' in environ: 125 123 del environ['TRAC_ENV'] 126 if 'trac.env_path' in environ: 127 del environ['trac.env_path'] 124 if 'TRAC_ENV_PARENT_DIR' in environ: 125 del environ['TRAC_ENV_PARENT_DIR'] 126 if 'trac.env_parent' in environ: 127 del environ['trac.env_parent_dir'] 128 128 environ['tracforge_master_link'] = req.href.projects() 129 129 tracforgeplugin/0.11/tracforge/admin/perm.py
r3639 r3649 50 50 The permissions are returned as a list of (subject, action) 51 51 formatted tuples.""" 52 perms = [] 52 53 req = self._extract_req() 53 54 if req is None or not req.path_info == '/admin/tracforge/perm': … … 55 56 cursor = db.cursor() 56 57 cursor.execute("SELECT username,action FROM permission") 57 for username, action in cursor: 58 yield username, action 58 perms.extend(cursor) 59 59 60 60 if req is None or not req.path_info == '/admin/general/perm': … … 62 62 cursor = master_db.cursor() 63 63 cursor.execute("SELECT username,action FROM tracforge_permission") 64 for username, action in cursor:65 yield username, action64 perms.extend(cursor) 65 return perms 66 66 67 67 def _extract_req(self): tracforgeplugin/0.11/tracforge/templates/admin_tracforge_projects.html
r3401 r3649 44 44 <table class="listing" id="projectlist"> 45 45 <thead> 46 <tr><th class="sel"> </th><th>Short Name</th><th>Full Name</th>< th>Env Path</th></tr>46 <tr><th class="sel"> </th><th>Short Name</th><th>Full Name</th></tr> 47 47 </thead> 48 48 <tbody> 49 <tr py:for="proj in projects">49 <tr py:for="proj in sorted(projects, key=lambda p: p.name)"> 50 50 <td> </td> 51 51 <td>$proj.name</td>
