*/ // $tabsArray = array ( // array (translateFN ("Anagrafica"), $form), // array (translateFN ("Sample Extra 1:1"), $extraForm), // array (translateFN ("Sample Extra 1:n"), 'oneToManyDataSample'), // ); /** * If you want the $extraForm fields embedded in the $form tab instead * of being on its own tab, use the following: */ // $tabsArray = array ( // array (translateFN ("Anagrafica"), $form, 'withExtra'=>true), // array (translateFN ("Sample Extra 1:n"), 'oneToManyDataSample'), // ); $data = ""; $linkedTablesInADAUser = !is_null(ADAUser::getLinkedTables()) ? ADAUser::getLinkedTables() : array(); for ($currTab = 0; $currTab < count($tabsArray); $currTab++) { // if is a subclass of FForm the it's a multirow element $doMultiRowTab = !is_subclass_of($tabsArray[$currTab][1], 'FForm'); if ($doMultiRowTab === true) { $extraTableName = $tabsArray[$currTab][1]; $extraTableFormClass = "User" . ucfirst($extraTableName) . "Form"; /* * if extraTableName is not in the linked tables array or there's * no form classes for the extraTableName skip to the next iteration * * NOTE: there's no need to check for classes (data classes, not for ones) * existance here because if they did not existed you'd get an error while loggin in. */ if (!in_array($extraTableName, $linkedTablesInADAUser) || !@(include_once ROOT_DIR . '/include/Forms/' . $extraTableFormClass . '.inc.php')) { continue;
/** * 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; } }
/** * 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; }
public static function buildArrayFromPOST($className, $postData) { $retArray = array(); $refclass = new ReflectionClass($className); foreach ($refclass->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { $retArray[$property->name] = $postData[$property->name]; } // force procteded property _isSaved if (isset($postData['_isSaved']) && $postData['_isSaved'] == 0) { $retArray['_isSaved'] = 0; } return empty($retArray) ? null : $retArray; } protected static function getFields($className) { $retArray = array(); $refclass = new ReflectionClass($className); foreach ($refclass->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { $retArray[] = $property->name; } return empty($retArray) ? null : $retArray; } } // include all tables as defined in ADAUser $_linkedTables array if (is_array(ADAUser::getLinkedTables())) { foreach (ADAUser::getLinkedTables() as $linkedTable) { if (!empty($linkedTable)) { @(include_once ROOT_DIR . '/include/' . ucfirst($linkedTable) . '.class.inc.php'); } } }