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