Пример #1
0
 /**
  * loads and prepares all extra fields to be put in the
  * object via the setExtra method called in the multiport
  * 
  * NOTE: this MUST be implemented if user class hasExtra is true.
  * can be empty or removed (no, it won't be called) if hasExtra is false.
  *
  * @param int $userId
  * @return array extra user data stored in the object
  * 
  * @access public
  */
 public function getExtraData(ADAUser $userObj)
 {
     $db =& $this->getConnection();
     if (AMA_DB::isError($db)) {
         return $db;
     }
     /**
      * get extras from table ADAUser::getExtraTableKeyProperty()
      */
     $selQry = "SELECT " . implode(", ", $userObj->getExtraFields()) . " FROM " . ADAUser::getExtraTableName() . " WHERE " . ADAUser::getExtraTableKeyProperty() . "=?";
     $returnArr = $this->getRowPrepared($selQry, array($userObj->getId()), AMA_FETCH_ASSOC);
     /**
      * load data form tables that have a 1:n relationship with studente table.
      *
      *  $tablseToLoad is the array of tables to be loaded. WITHOUT PREFIX.
      *  $tablesPrefix is the prefix of the table in the DB.
      *
      *  the foreach loop does the magic
      */
     $tablesToLoad = ADAUser::getLinkedTables();
     $tablesPrefix = ADAUser::getTablesPrefix();
     if (!is_null($tablesToLoad)) {
         foreach ($tablesToLoad as $table) {
             if (!empty($table) && class_exists($table)) {
                 $selQry = "SELECT " . implode(", ", $table::getFields()) . " FROM " . $tablesPrefix . $table . " WHERE " . $table::getForeignKeyProperty() . "=?" . " ORDER BY " . $table::getKeyProperty() . " ASC";
                 $extraArr = $this->getAllPrepared($selQry, array($userObj->getId()), AMA_FETCH_ASSOC);
                 foreach ($extraArr as $extraKey => $extraElement) {
                     foreach ($extraElement as $key => $val) {
                         if (stripos($key, "date") !== false) {
                             $extraArr[$extraKey][$key] = ts2dFN($val);
                         }
                     }
                 }
                 if (!empty($extraArr)) {
                     $returnArr[$table] = $extraArr;
                 }
             }
         }
     }
     return $returnArr;
 }
Пример #2
0
        if ($userId !== false) {
            $editUserObj = MultiPort::findUser($userId);
        }
        break;
}
if (!is_null($editUserObj) && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
    $form = new UserProfileForm($languages);
    $form->fillWithPostData();
    if ($form->isValid()) {
        $user_layout = $_POST['layout'];
        $editUserObj->fillWithArrayData($_POST);
        // save extra datas if it has been forced
        if (isset($_POST['forceSaveExtra']) && $editUserObj->hasExtra()) {
            $editUserObj->setExtras($_POST);
        }
        MultiPort::setUser($editUserObj, array(), true, ADAUser::getExtraTableName());
        /**
         * Set the session user to the saved one if it's not
         * a switcher, that is not saving its own profile
         */
        if ($userObj->getType() != AMA_TYPE_SWITCHER) {
            $_SESSION['sess_userObj'] = $editUserObj;
        }
        // if registration form is saved ok and userObj is not a switcher,
        //  force a page reload to reflect the changes immediately
        $retArray = array("status" => "OK", "title" => $title, "msg" => translateFN('Scheda Anagrafica Salvata'), "reload" => true);
    } else {
        $retArray = array("status" => "ERROR", "title" => $title, "msg" => translateFN("I dati non sono validi"));
    }
} else {
    if (is_null($editUserObj)) {
Пример #3
0
 /**
  * Updates an existing user
  *
  * @param  ADAGenericUser $userObj
  * @param  $testers array
  * @return boolean
  */
 public static function setUser(ADALoggableUser $userObj, $new_testers = array(), $update_user_data = FALSE, $extraTableName = false)
 {
     $user_id = $userObj->getId();
     $testers = $userObj->getTesters();
     $testers_to_add = array();
     if (!is_array($testers)) {
         $testers = array();
     }
     if ($user_id == 0) {
         return FALSE;
     }
     $common_dh = AMA_Common_DataHandler::instance();
     $user_dataAr = $userObj->toArray();
     if ($update_user_data) {
         $result = $common_dh->set_user($user_id, $user_dataAr);
         if (AMA_Common_DataHandler::isError($result)) {
             //return ADA_SET_USER_ERROR;
         }
     }
     if ($update_user_data) {
         $idFromPublicTester = 0;
         foreach ($testers as $tester) {
             $tester_dh = AMA_DataHandler::instance(MultiPort::getDSN($tester));
             //
             switch ($userObj->getType()) {
                 case AMA_TYPE_STUDENT:
                     /**
                      * @author giorgio
                      * if it's an extraTable I need set_student to return me the id of the inserted
                      * record in the table on DEFAULT that will be used as an id for all other providers
                      */
                     $result = $tester_dh->set_student($user_id, $user_dataAr, $extraTableName, $userObj, $idFromPublicTester);
                     break;
                 case AMA_TYPE_AUTHOR:
                     $result = $tester_dh->set_author($user_id, $user_dataAr);
                     break;
                 case AMA_TYPE_SUPERTUTOR:
                 case AMA_TYPE_TUTOR:
                     $result = $tester_dh->set_tutor($user_id, $user_dataAr);
                     break;
                 case AMA_TYPE_SWITCHER:
                     $result = $tester_dh->set_user($user_id, $user_dataAr);
                     break;
                 case AMA_TYPE_ADMIN:
                     $result = $tester_dh->set_user($user_id, $user_dataAr);
                     break;
             }
             if (AMA_DataHandler::isError($result)) {
                 if ($result->code == AMA_ERR_NOT_FOUND) {
                     $testers_to_add[] = $tester;
                 }
                 //return ADA_SET_USER_ERROR_TESTER;
             }
         }
     }
     // se sono qui, verifico se in new_testers ci sono dei tester nuovi e li associo all'utente
     $testers_to_add = array_merge($testers_to_add, array_diff($new_testers, $testers));
     $pwd = $common_dh->_get_user_pwd($user_id);
     if (AMA_DataHandler::isError($pwd)) {
         // if there is an error, we MUST insert a fake password in provider DB
         $pwd = sha1($user_id);
     }
     $user_dataAr['password'] = $pwd;
     foreach ($testers_to_add as $tester_to_add) {
         // aggiungi utente nella tabella utente del tester
         $tester_dh = AMA_DataHandler::instance(MultiPort::getDSN($tester_to_add));
         // we have to use different functions for different user types
         switch ($userObj->getType()) {
             case AMA_TYPE_STUDENT:
                 $result = $tester_dh->add_student($user_dataAr);
                 $result = $tester_dh->set_student($user_id, $user_dataAr, $extraTableName, $userObj);
                 if ($userObj->hasExtra()) {
                     if (method_exists('ADAUser', 'getExtraTableName')) {
                         $tableName = ADAUser::getExtraTableName();
                         if (strlen($tableName) > 0) {
                             $tester_dh->set_student($user_id, $user_dataAr, $tableName, $userObj);
                         }
                     }
                     if (method_exists('ADAUser', 'getLinkedTables')) {
                         $linkedTables = ADAUser::getLinkedTables();
                         if (is_array($linkedTables) && count($linkedTables) > 0) {
                             foreach ($linkedTables as $tableName) {
                                 // force the record to be saved in the provider we're adding the user
                                 if (isset($user_dataAr[$tableName]) && is_array($user_dataAr[$tableName])) {
                                     foreach ($user_dataAr[$tableName] as $i => $notused) {
                                         $storedID = $user_dataAr[$tableName][$i][$tableName::getKeyProperty()];
                                         $user_dataAr[$tableName][$i][$tableName::getKeyProperty()] = 0;
                                         $user_dataAr[$tableName][$i]['_isSaved'] = 0;
                                         $result = $tester_dh->set_student($user_id, $user_dataAr, $tableName, $userObj, $storedID);
                                         if (!AMA_DB::isError($result)) {
                                             $user_dataAr[$tableName][$i]['_isSaved'] = 1;
                                         }
                                     }
                                     //$result = $tester_dh->set_student($user_id,$user_dataAr, $tableName, $userObj, $storedID);
                                 }
                             }
                         }
                     }
                 }
                 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)) {
             //return ADA_SET_USER_ERROR_TESTER_ASSOCIATION;
         }
     }
     /*
      * If the user has subscribed to at least one tester, add the user
      * to the utente_tester table in common database.
      */
     foreach ($testers_to_add as $tester_to_add) {
         $testerHa = $common_dh->get_tester_info_from_pointer($tester_to_add);
         $tester_id = $testerHa[0];
         $res = $common_dh->add_user_to_tester($user_id, $tester_id);
         if (AMA_DataHandler::isError($res)) {
             if ($res->code != AMA_ERR_ADD and $res->code != AMA_ERR_UNIQUE_KEY) {
                 //return ADA_SET_USER_ERROR_TESTER;
                 return false;
             }
         } else {
             $userObj->addTester($tester_to_add);
         }
     }
     if (isset($result)) {
         return $result;
     }
 }