Ejemplo n.º 1
0
 /**
  * Adds a new user to the ADA main database.
  * Fails (returning false) if user is already in Common DB
  * @param  ADAGenericUser $userObj
  * @param  $testers array
  * @return boolean
  */
 public static function addUser(ADALoggableUser $userObj, $testers = array())
 {
     /**
      * true if must check user existance in
      * the common provider utente DB table
      */
     $checkUserExistsInCommonDB = true;
     /**
      * @author giorgio 05/mag/2014 12:45:30
      *
      * if not in a multiprovider environment,
      * check if the user to add exists in the selected provider
      *
      */
     if (!MULTIPROVIDER && isset($GLOBALS['user_provider']) && strlen($GLOBALS['user_provider']) > 0) {
         $tester_dh = AMA_DataHandler::instance(self::getDSN($GLOBALS['user_provider']));
         if (!is_null($tester_dh)) {
             /**
              * check if a user with the passed username
              * already exists in the selected provider
              */
             $user_id = $tester_dh->find_students_list(null, 'username =\'' . $userObj->getUserName() . '\'');
             //   			var_dump($user_id);
             //   			var_dump(count($user_id)); die();
             if (AMA_DB::isError($user_id)) {
                 return ADA_ADD_USER_ERROR;
             } else {
                 if (count($user_id) > 0) {
                     return ADA_ADD_USER_ERROR_USER_EXISTS_TESTER;
                 } else {
                     /**
                      * set $user_id=0 to resume normal operation 
                      */
                     $user_id = 0;
                     /**
                      * don't check if user exists in common DB
                      */
                     $checkUserExistsInCommonDB = false;
                     /**
                      * $tester_dh is needed when actually
                      * adding the user to tester, let's unset it
                      */
                     unset($tester_dh);
                 }
                 // if (count($user_id)>0)
             }
             // if (AMA_DB::isError($user_id))
         } else {
             return ADA_ADD_USER_ERROR_TESTER;
         }
         // if (!is_null($tester_dh))
     } else {
         $user_id = $userObj->getId();
         /**
          * set $tester_dh to null for future check
          */
         $tester_dh = null;
     }
     // if (!MULTIPROVIDER &&.....)
     $common_dh = AMA_Common_DataHandler::instance();
     if ($user_id == 0) {
         /* If the user isn't in common DB yet
          * add this user to ADA main database
          */
         $user_dataAr = $userObj->toArray();
         unset($user_dataAr['id_utente']);
         $user_id = $common_dh->add_user($user_dataAr, $checkUserExistsInCommonDB);
         /*
          * add_user restituisce o AMA_ERR_UNIQUE_KEY nel caso
          * sia già presente un utente con lo stesso username (email)
          * o restituisce un errore AMA_ERR_ADD o AMA_ERR_GET
          */
         if (AMA_DataHandler::isError($user_id)) {
             if ($user_id->code == AMA_ERR_UNIQUE_KEY) {
                 /*
                  * Esiste gia' un utente con questa mail.
                  */
                 //$errorType = "a1";
                 return ADA_ADD_USER_ERROR_USER_EXISTS;
             } else {
                 //$user_id->code == AMA_ERR_ADD
                 //$user_id->code == AMA_ERR_GET
                 return ADA_ADD_USER_ERROR;
                 //$errorType = "a2";
             }
             //return $errorType;
         }
         /*
          * Se siamo qui l'utente e' stato inserito correttamente
          * e $User_id e' l'id che gli e' stato assegnato.
          */
         $userObj->setUserId($user_id);
     }
     /*
      * If the user has subscribed to at least one tester, add the user
      * to the utente_tester table in common database.
      */
     foreach ($testers as $tester) {
         if ($tester != NULL) {
             ADALogger::log("MultiPort::add:user_to_tester on tester: {$tester}");
             $testerHa = $common_dh->get_tester_info_from_pointer($tester);
             //var_dump($testerHa);
             $tester_id = $testerHa[0];
             $res = $common_dh->add_user_to_tester($user_id, $tester_id);
             if (AMA_DataHandler::isError($res)) {
                 /*
                  * add_user_to_tester raises AMA_ERR_ADD
                  */
                 //        // gestione errore
                 //        if (($res->code != AMA_ERR_ADD) AND ($res->code!= AMA_ERR_UNIQUE_KEY)) {
                 //          // ?? the user can be already there because of another service.
                 //          // return false;
                 $errorType = "b1";
                 //        }
                 //        else {
                 //          $errorType = "b2";
                 //        }
                 //        return $errorType;
                 // we don't want to exit here!!!
                 // return ADA_ADD_USER_ERROR_TESTER_ASSOCIATION;
             }
         }
     }
     /*
      * If the user has subscribed to at least one tester, add the user
      * to the tester database.
      */
     $user_dataAr = $userObj->toArray();
     foreach ($testers as $tester) {
         if ($tester != NULL) {
             ADALogger::log("MultiPort::addUser on tester: {$tester}");
             $tester_dsn = self::getDSN($tester);
             if ($tester_dsn == null) {
                 //$errorType = "c";
                 //return $errorType;
                 return ADA_ADD_USER_ERROR_TESTER;
             }
             $tester_dh = AMA_DataHandler::instance($tester_dsn);
             switch ($userObj->getType()) {
                 case AMA_TYPE_STUDENT:
                     $result = $tester_dh->add_student($user_dataAr);
                     break;
                 case AMA_TYPE_AUTHOR:
                     $result = $tester_dh->add_author($user_dataAr);
                     break;
                 case AMA_TYPE_SUPERTUTOR:
                 case AMA_TYPE_TUTOR:
                     $result = $tester_dh->add_tutor($user_dataAr);
                     break;
                 case AMA_TYPE_SWITCHER:
                     $result = $tester_dh->add_user($user_dataAr);
                     break;
                 case AMA_TYPE_ADMIN:
                     $result = $tester_dh->add_user($user_dataAr);
                     break;
             }
             if (AMA_DataHandler::isError($result)) {
                 if ($result->code == AMA_ERR_UNIQUE_KEY) {
                     /*
                      * Esiste gia' un utente con questa mail.
                      */
                     return ADA_ADD_USER_ERROR_USER_EXISTS_TESTER;
                 } else {
                     return ADA_ADD_USER_ERROR_TESTER;
                 }
             }
         }
         /*
               if(AMA_DataHandler::isError($result)) {
                 if (($result->code != AMA_ERR_ADD) AND ($result->code!= AMA_ERR_UNIQUE_KEY)) {
                   $errorType = "d1";
                   return $errorType;
         
                 } else {
                   $errorType = "d2";
                   return $errorType;
                 }
               }
         */
     }
     // mod steve 5/10/09
     //return true; ???????????
     return $user_id;
     // end mod
 }