Changeset 3636

Show
Ignore:
Timestamp:
05/08/08 06:14:09 (7 months ago)
Author:
coderanger
Message:

Port the membership admin panel.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracforgeplugin/0.11/tracforge/admin/__init__.py

    r3477 r3636  
    11import api 
    22import admin 
    3 #import membership 
     3import membership 
    44#import perm 
    55#import perm_admin 
  • tracforgeplugin/0.11/tracforge/admin/membership.py

    r1208 r3636  
     1# Created by Noah Kantrowitz 
     2# Copyright (c) 2008 Noah Kantrowitz. All rights reserved. 
    13from trac.core import * 
    24from trac.web.chrome import add_stylesheet 
     5from trac.admin.web_ui import IAdminPanelProvider 
     6from trac.util.compat import sorted 
     7from trac.util.translation import _ 
    38 
    4 from webadmin.web_ui import IAdminPageProvider 
    5  
    6 from model import Project, Members 
     9from tracforge.admin.model import Project, Members 
    710 
    811class TracForgeMembershipModule(Component): 
    912    """A module to manage project memberships.""" 
    10  
    11     implements(IAdminPageProvider)     
    1213     
    13     # IAdminPageProvider methods 
    14     def get_admin_pages(self, req): 
    15         if req.perm.has_permission('TRACFORGE_ADMIN'): 
    16             yield ('tracforge', 'TracForge', 'membership', 'Membership') 
    17              
    18     def process_admin_request(self, req, cat, page, path_info): 
    19         projects = [Project(self.env, n) for n in Project.select(self.env)] 
     14    implements(IAdminPanelProvider)     
     15     
     16    # IAdminPanelProvider methods 
     17    def get_admin_panels(self, req): 
     18        if 'TRACFORGE_ADMIN' in req.perm: 
     19            yield 'tracforge', _('TracForge'), 'membership', _('Membership') 
     20     
     21    def render_admin_panel(self, req, cat, page, path_info): 
     22        data = {} 
     23        projects = sorted([(n, Project(self.env, n))  
     24                           for n in Project.select(self.env)]) 
     25        projects.insert(0, ('*', Project(self.env, '*'))) 
     26         
    2027         
    2128        if req.method == 'POST': 
    22             if 'add' in req.args.keys()
     29            if 'add' in req.args
    2330                proj = req.args.get('project') 
    2431                user = req.args.get('user') 
    2532                role = req.args.get('role') 
    26                 if proj not in [p.name for p in projects] and proj != '*'
    27                     raise TracError, 'Invalid project %s'%proj 
     33                if proj not in [n for n, p in projects]
     34                    raise TracError(_('Invalid project %s'), proj) 
    2835                if role not in ('member', 'admin'): 
    29                     raise TracError, 'Invalid role %s'%role 
     36                    raise TracError(_('Invalid role %s'), role) 
    3037                Members(self.env, proj)[user] = role 
    31                 req.redirect(req.href.admin(cat, page))        
     38                req.redirect(req.href.admin(cat, page)) 
     39            elif 'remove' in req.args: 
     40                db = self.env.get_db_cnx() 
     41                for name, proj in projects: 
     42                    users = req.args.getlist('sel'+name) 
     43                    members = Members(self.env, name, db=db) 
     44                    for user in users: 
     45                        del members[user] 
     46                db.commit() 
     47                req.redirect(req.href.admin(cat, page)) 
     48                     
    3249         
    33         projects_data = {} 
    34         for proj in projects: 
    35             projects_data[proj.name] = { 
    36                 'members': dict(proj.members.iteritems()), 
    37                 'env_path': proj.env_path, # Need some dummy value to ensure that the headings show up 
    38             } 
     50        # projects_data = {} 
     51        # for proj in projects: 
     52        #     projects_data[proj.name] = { 
     53        #         'members': dict(proj.members.iteritems()), 
     54        #         'env_path': proj.env_path, # Need some dummy value to ensure that the headings show up 
     55        #     } 
     56        #  
     57        data['projects'] = projects 
    3958             
    40         req.hdf['tracforge.projects.*'] = { 
    41             'dummy': 1, 
    42             'members': dict(Members(self.env, '*').iteritems()), 
    43        
    44         req.hdf['tracforge.projects'] = projects_data 
     59        # req.hdf['tracforge.projects.*'] = { 
     60        #     'dummy': 1, 
     61        #     'members': dict(Members(self.env, '*').iteritems()), 
     62        #
     63        #req.hdf['tracforge.projects'] = projects_data 
    4564         
    4665        add_stylesheet(req, 'tracforge/css/admin.css') 
    47         return 'admin_tracforge_memebership.cs', None 
     66        return 'admin_tracforge_membership.html', data 
    4867              
  • tracforgeplugin/0.11/tracforge/admin/model.py

    r3549 r3636  
    6060        cursor = self.db.cursor() 
    6161         
    62         cursor.execute('DELETE FROM tracforge_members WHERE project=%s AND user=%s',(self.name, key)) 
     62        cursor.execute('DELETE FROM tracforge_members WHERE project=%s AND username=%s',(self.name, key)) 
    6363         
    6464        if self.handle_commit: