Edgewall Software

Ticket #1347: WebAdminSessions.patch

File WebAdminSessions.patch, 2.8 KB (added by markus, 3 years ago)
  • webadmin/__init__.py

     
    44from webadmin.logging import * 
    55from webadmin.perm import * 
    66from webadmin.plugin import * 
     7from webadmin.sessions import * 
    78from webadmin.ticket import * 
  • webadmin/sessions.py

     
     1from trac.core import * 
     2from webadmin.web_ui import IAdminPageProvider 
     3 
     4__all__ = [] 
     5 
     6 
     7class ProjectAdminPage(Component): 
     8 
     9    implements(IAdminPageProvider) 
     10 
     11    # IAdminPageProvider methods 
     12 
     13    def get_admin_pages(self, req): 
     14        if req.perm.has_permission('TRAC_ADMIN'): 
     15            yield ('general', 'General', 'sessions', 'User Sessions') 
     16 
     17    def process_admin_request(self, req, cat, page, path_info): 
     18        req.perm.assert_permission('TRAC_ADMIN') 
     19 
     20        if req.method == "POST": 
     21            sel = req.args.get('sel') 
     22            sel = isinstance(sel, list) and sel or [sel] 
     23            if not sel: 
     24                raise TracError, 'No session selected' 
     25            db = self.env.get_db_cnx() 
     26            cursor = db.cursor() 
     27            for subject in sel: 
     28                cursor.execute("DELETE FROM session WHERE sid=%s", (subject,)) 
     29            db.commit() 
     30            req.redirect(self.env.href.admin(cat, page)) 
     31 
     32        sessions = list(self.env.get_known_users()) 
     33        sessions.sort(lambda a, b: cmp(a[0], b[0])) 
     34        req.hdf['admin.sessions'] = [{'subject': s[0], 
     35                                      'name': s[1], 
     36                                      'email': s[2] 
     37                                     } for s in sessions] 
     38        return 'admin_sessions.cs', None 
     39 No newline at end of file 
  • webadmin/templates/admin_sessions.cs

     
     1<h2>User Sessions</h2> 
     2 
     3<form method="post"> 
     4 <table class="listing" id="sessionlist"> 
     5  <thead> 
     6   <tr><th class="sel">&nbsp;</th><th>Subject</th><th>Name</th><th>Email</th></tr> 
     7  </thead><tbody><?cs 
     8  each:session = admin.sessions ?> 
     9   <tr> 
     10    <td><input type="checkbox" name="sel" value="<?cs var:session.subject ?>" /></td> 
     11    <td><?cs var:session.subject ?></td> 
     12    <td><?cs var:session.name ?></td> 
     13    <td><?cs var:session.email ?></td> 
     14   </tr><?cs 
     15  /each ?></tbody> 
     16 </table> 
     17 <div class="buttons"> 
     18  <input type="submit" name="remove" value="Remove selected items" /> 
     19 </div> 
     20</form>