コード例 #1
0
 /**
  * Find a user based on its login and its type of authentication
  * @param string $sLogin Login/identifier of the user
  * @param string $sAuthentication Type of authentication used: internal|external|any
  * @return User The found user or null
  */
 protected static function FindUser($sLogin, $sAuthentication = 'any')
 {
     if ($sAuthentication == 'any') {
         $oUser = self::FindUser($sLogin, 'internal');
         if ($oUser == null) {
             $oUser = self::FindUser($sLogin, 'external');
         }
     } else {
         if (!isset(self::$m_aCacheUsers)) {
             self::$m_aCacheUsers = array('internal' => array(), 'external' => array());
         }
         if (!isset(self::$m_aCacheUsers[$sAuthentication][$sLogin])) {
             switch ($sAuthentication) {
                 case 'external':
                     $sBaseClass = 'UserExternal';
                     break;
                 case 'internal':
                     $sBaseClass = 'UserInternal';
                     break;
                 default:
                     echo "<p>sAuthentication = {$sAuthentication}</p>\n";
                     assert(false);
                     // should never happen
             }
             $oSearch = DBObjectSearch::FromOQL("SELECT {$sBaseClass} WHERE login = :login");
             $oSet = new DBObjectSet($oSearch, array(), array('login' => $sLogin));
             $oUser = $oSet->fetch();
             self::$m_aCacheUsers[$sAuthentication][$sLogin] = $oUser;
         }
         $oUser = self::$m_aCacheUsers[$sAuthentication][$sLogin];
     }
     return $oUser;
 }