Пример #1
0
 public static function findUserByUsername($username)
 {
     $common_dh = $GLOBALS['common_dh'];
     $id_user = $common_dh->find_user_from_username($username);
     if (AMA_Common_DataHandler::isError($id_user)) {
         if ($id_user->code == AMA_ERR_GET) {
             return NULL;
         }
         $errObj = new ADA_Error($user_type, 'An error occurred while retrieving user id in MultiPort::findUser');
         return NULL;
     }
     $user_type = $common_dh->get_user_type($id_user);
     if (AMA_Common_DataHandler::isError($user_type)) {
         $errObj = new ADA_Error($user_type, 'An error occurred while retrieving user type in MultiPort::findUser');
         return NULL;
     }
     /*
      * Tipi di utenti e cosa fare:
      *
      * utente di tipo autore:
      * ottieni i dati dalla tabella COMUNE.utente richiamando get_user_info()
      *
      */
     switch ($user_type) {
         case AMA_TYPE_AUTHOR:
             $user_dataAr = $common_dh->get_author($id_user);
             if (AMA_Common_DataHandler::isError($user_dataAr)) {
                 $errObj = new ADA_Error($user_dataAr, 'An error occurred while retrieving author data in MultiPort::finduser');
                 return NULL;
             }
             $userObj = new ADAAuthor($user_dataAr);
             $userObj->setUserId($id_user);
             $user_testersAr = $common_dh->get_testers_for_user($userObj->getId());
             if (AMA_Common_DataHandler::isError($user_testersAr)) {
                 $errObj = new ADA_Error($user_testersAr, 'An error occurred while retrieving user testers in MultiPort::finduser');
             }
             $userObj->setTesters($user_testersAr);
             return $userObj;
             break;
         case AMA_TYPE_ADMIN:
             $user_dataAr = $common_dh->get_user_info($id_user);
             if (AMA_Common_DataHandler::isError($user_dataAr)) {
                 $errObj = new ADA_Error($user_dataAr, 'An error occurred while retrieving admin data in MultiPort::finduser');
                 return NULL;
             }
             $userObj = new ADAAdmin($user_dataAr);
             $userObj->setUserId($id_user);
             return $userObj;
             break;
         case AMA_TYPE_STUDENT:
             $user_dataAr = $common_dh->get_student($id_user);
             if (AMA_Common_DataHandler::isError($user_dataAr)) {
                 $errObj = new ADA_Error($user_dataAr, 'An error occurred while retrieving user data in MultiPort::finduser');
                 return NULL;
             }
             $userObj = new ADAUser($user_dataAr);
             $userObj->setUserId($id_user);
             if (isset($id_course_instance) && DataValidator::is_uinteger($id_course_instance) !== FALSE) {
                 $userObj->set_course_instance_for_history($id_course_instance);
             } elseif (isset($_SESSION['sess_id_course_instance']) && DataValidator::is_uinteger($_SESSION['sess_id_course_instance']) !== FALSE) {
                 $userObj->set_course_instance_for_history($_SESSION['sess_id_course_instance']);
             }
             //return $userObj;
             // QUI DEVO VEDERE QUALI SONO I TESTER ASSOCIATI A QUESTO UTENTE.
             $user_testersAr = $common_dh->get_testers_for_user($userObj->getId());
             if (AMA_Common_DataHandler::isError($user_testersAr)) {
                 $errObj = new ADA_Error($user_testersAr, 'An error occurred while retrieving user testers in MultiPort::finduser');
             }
             $userObj->setTesters($user_testersAr);
             /**
              * get student extra data
              */
             if (!is_null($userObj) && $userObj instanceof ADAUser) {
                 /**
                  * @author giorgio 06/giu/2013
                  *
                  * load extra fields from DB, if we have some in this customization (i.e. User->hasExtra is true)
                  * Note that this MUST be done after user testers have been set.
                  *
                  */
                 if ($userObj->hasExtra()) {
                     $tester_dh = AMA_DataHandler::instance(MultiPort::getDSN($user_testersAr[0]));
                     $extraAr = $tester_dh->getExtraData($userObj);
                     if (!AMA_DB::isError($extraAr)) {
                         $userObj->setExtras($extraAr);
                     }
                     $tester_dh->disconnect();
                 }
             }
             return $userObj;
             break;
         case AMA_TYPE_SUPERTUTOR:
         case AMA_TYPE_TUTOR:
             $user_dataAr = $common_dh->get_tutor($id_user);
             if (AMA_Common_DataHandler::isError($user_dataAr)) {
                 $errObj = new ADA_Error($user_dataAr, 'An error occurred while retrieving practitioner data in MultiPort::finduser');
                 return NULL;
             }
             $userObj = new ADAPractitioner($user_dataAr);
             $userObj->setUserId($id_user);
             $user_testersAr = $common_dh->get_testers_for_user($userObj->getId());
             // TODO: here we have to read user's profile from the tester database
             if (AMA_Common_DataHandler::isError($user_testersAr)) {
                 $errObj = new ADA_Error($user_testersAr, 'An error occurred while retrieving user testers in MultiPort::finduser');
             }
             $userObj->setTesters($user_testersAr);
             //Load user profile info from default tester
             $tester = $userObj->getDefaultTester();
             $tester_dsn = self::getDSN($tester);
             if ($tester_dsn != NULL) {
                 $tester_dh = AMA_DataHandler::instance($tester_dsn);
                 $user_info = $tester_dh->get_tutor($id_user);
                 if (!AMA_DataHandler::isError($user_info)) {
                     $userObj->setProfile($user_info['profilo']);
                     $userObj->setFee($user_info['tariffa']);
                 }
                 $tester_dh->disconnect();
             }
             return $userObj;
             break;
         case AMA_TYPE_SWITCHER:
             $user_dataAr = $common_dh->get_user_info($id_user);
             if (AMA_Common_DataHandler::isError($user_dataAr)) {
                 $errObj = new ADA_Error($user_dataAr, 'An error occurred while retrieving author data in MultiPort::finduser');
                 return NULL;
             }
             $userObj = new ADASwitcher($user_dataAr);
             $userObj->setUserId($id_user);
             $user_testersAr = $common_dh->get_testers_for_user($userObj->getId());
             if (AMA_Common_DataHandler::isError($user_testersAr)) {
                 $errObj = new ADA_Error($user_testersAr, 'An error occurred while retrieving user testers in MultiPort::finduser');
             }
             $userObj->setTesters($user_testersAr);
             return $userObj;
             break;
         case AMA_TYPE_VISITOR:
         default:
             // FIXME: restituisco questo oggetto oppure alzo un errore?
             return NULL;
             break;
     }
 }