Edgewall Software

Ticket #2456: userdir-for-r4673-0.10-stable.diff

File userdir-for-r4673-0.10-stable.diff, 5.4 kB (added by Brad Anderson <brad@…>, 18 months ago)

updated patch for 0.10 branch, untested

  • trac/env.py

     
    2121from trac.core import Component, ComponentManager, implements, Interface, \ 
    2222                      ExtensionPoint, TracError 
    2323from trac.db import DatabaseManager 
     24from trac.userdir import * 
    2425from trac.versioncontrol import RepositoryManager 
    2526 
    2627__all__ = ['Environment', 'IEnvironmentSetupParticipant', 'open_environment'] 
     
    6162     * wiki and ticket attachments. 
    6263    """    
    6364    setup_participants = ExtensionPoint(IEnvironmentSetupParticipant) 
     65    userdirs = ExtensionPoint(IUserDirectory) 
    6466 
    6567    base_url = Option('trac', 'base_url', '', 
    6668        """Base URL of the Trac deployment. 
     
    296298        self.log = logger_factory(logtype, logfile, self.log_level, self.path, 
    297299                                  format=format) 
    298300 
    299     def get_known_users(self, cnx=None): 
    300         """Generator that yields information about all known users, i.e. users 
    301         that have logged in to this Trac environment and possibly set their name 
    302         and email. 
     301    def get_known_user_info(self, limit=None): 
     302        cnx = self.get_db_cnx() 
     303         
     304        # should accumulate user_info from all IUserDirectory providers - desirable? 
     305        for userdir in self.userdirs: 
     306            for username, name, email in userdir.get_known_user_info(limit): 
     307                yield username, name, email 
    303308 
    304         This function generates one tuple for every user, of the form 
    305         (username, name, email) ordered alpha-numerically by username. 
     309    def get_known_users(self, limit=None): 
     310        cnx = self.get_db_cnx() 
     311         
     312        # should accumulate users from all IUserDirectory providers - desirable? 
     313        for userdir in self.userdirs: 
     314            for username in userdir.get_known_users(limit): 
     315                yield username 
    306316 
    307         @param cnx: the database connection; if ommitted, a new connection is 
    308                     retrieved 
    309         """ 
    310         if not cnx: 
    311             cnx = self.get_db_cnx() 
    312         cursor = cnx.cursor() 
    313         cursor.execute("SELECT DISTINCT s.sid, n.value, e.value " 
    314                        "FROM session AS s " 
    315                        " LEFT JOIN session_attribute AS n ON (n.sid=s.sid " 
    316                        "  and n.authenticated=1 AND n.name = 'name') " 
    317                        " LEFT JOIN session_attribute AS e ON (e.sid=s.sid " 
    318                        "  AND e.authenticated=1 AND e.name = 'email') " 
    319                        "WHERE s.authenticated=1 ORDER BY s.sid") 
    320         for username,name,email in cursor: 
    321             yield username, name, email 
    322  
    323317    def backup(self, dest=None): 
    324318        """Simple SQLite-specific backup of the database. 
    325319 
  • trac/ticket/api.py

     
    100100        if self.restrict_owner: 
    101101            field['type'] = 'select' 
    102102            users = [] 
     103 
    103104            perm = PermissionSystem(self.env) 
    104             for username, name, email in self.env.get_known_users(db): 
     105            for username in self.env.get_known_users(): 
    105106                if perm.get_user_permissions(username).get('TICKET_MODIFY'): 
    106107                    users.append(username) 
    107108            field['options'] = users 
  • trac/versioncontrol/web_ui/log.py

     
    164164        if format == 'rss': 
    165165            # Get the email addresses of all known users 
    166166            email_map = {} 
    167             for username,name,email in self.env.get_known_users(): 
     167            for username,name,email in self.env.get_known_user_info(): 
    168168                if email: 
    169169                    email_map[username] = email 
    170170            for cs in changes.values(): 
  • trac/Timeline.py

     
    155155 
    156156        # Get the email addresses of all known users 
    157157        email_map = {} 
    158         for username, name, email in self.env.get_known_users(): 
     158        for username, name, email in self.env.get_known_user_info(): 
    159159            if email: 
    160160                email_map[username] = email 
    161161 
  • trac/tests/env.py

     
    2323        """Testing env.get_version""" 
    2424        assert self.env.get_version() == db_default.db_version 
    2525 
    26     def test_get_known_users(self): 
    27         """Testing env.get_known_users""" 
     26    def test_get_known_user_info(self): 
     27        """Testing env.get_known_user_info""" 
    2828        cursor = self.db.cursor() 
    2929        cursor.executemany("INSERT INTO session VALUES (%s,%s,0)", 
    3030                           [('123', 0),('tom', 1), ('joe', 1), ('jane', 1)]) 
     
    3535                            ('joe', 1, 'email', 'joe@example.com'), 
    3636                            ('jane', 1, 'name', 'Jane')]) 
    3737        users = {} 
    38         for username,name,email in self.env.get_known_users(self.db): 
     38        for username,name,email in self.env.get_known_user_info(): 
    3939            users[username] = (name, email) 
    4040 
    4141        assert not users.has_key('anonymous')