/** * 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; }