* @access public * @modulegroup elearning_interface_modules * @module ConnectedUser * @package ELearning-Interface */ class IliasUser { const USER_TYPE_ORIGINAL= 1; const USER_TYPE_CREATED= 0; public $index; private $ilias_config; public $version; public $id; public $studip_id; public $studip_login; public $studip_password; public $login; public $external_password; public $category; public $gender; public $title_front; public $title_rear; public $title; public $firstname; public $lastname; public $institution; public $street; public $country; public $phone_home; public $fax; public $matriculation; public $disciplines; public $email; public $type; public $is_connected; public $auth_plugin; /** * constructor * * init class. don't call directly, class is loaded by ConnectedIlias. * @access public * @param string $index ILIAS installation index */ function __construct($index, $version, $user_id = false) { global $auth; $this->studip_id = $user_id ? $user_id : $GLOBALS['user']->id; $this->auth_plugin = DBManager::get()->query("SELECT IFNULL(auth_plugin, 'standard') FROM auth_user_md5 WHERE user_id = '" . $this->studip_id. "'")->fetchColumn(); $this->index = $index; $this->version = $version; $ilias_configs = Config::get()->ILIAS_INTERFACE_SETTINGS; $this->ilias_config = $ilias_configs[$this->index]; $this->readData(); $this->getStudipUserData(); } /** * get data * * gets data from database * @access public * @return boolean returns false, if no data was found */ function readData() { $query = "SELECT external_user_id, external_user_name, external_user_password, external_user_category, external_user_type FROM auth_extern WHERE studip_user_id = ? AND external_user_system_type = ? ORDER BY external_user_type DESC"; $statement = DBManager::get()->prepare($query); $statement->execute([$this->studip_id, $this->index]); $data = $statement->fetch(PDO::FETCH_ASSOC); if (!$data) { $this->id = ''; $this->is_connected = false; return false; } $this->id = $data['external_user_id']; $this->login = $data['external_user_name']; $this->external_password = $data['external_user_password']; $this->category = $data['external_user_category']; $this->type = $data['external_user_type']; $this->is_connected = true; return true; } /** * get stud.ip-user-data * * gets stud.ip-user-data from database * @access public * @return boolean returns false, if no data was found */ function getStudipUserData() { $query = "SELECT username, password, title_front, title_rear, Vorname, Nachname, Email, privatnr, privadr, geschlecht, matriculation_number FROM auth_user_md5 LEFT JOIN user_info USING (user_id) WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute([$this->studip_id]); $data = $statement->fetch(PDO::FETCH_ASSOC); if (!$data) { return false; } $this->studip_login = $data['username']; $this->studip_password = $data['password']; $this->title_front = $data['title_front']; $this->title_rear = $data['title_rear']; $this->firstname = $data['Vorname']; $this->lastname = $data['Nachname']; $this->email = $data['Email']; $this->phone_home = $data['privatnr']; $this->street = $data['privadr']; switch($data['geschlecht']) { case 1: $this->gender = 'm'; break; case 2: $this->gender = 'f'; break; default: $this->gender = 'f'; } $this->matriculation = ''; if (array_key_exists('matriculation', $this->ilias_config) && $this->ilias_config['matriculation']) { $this->matriculation = 0; foreach (DataFieldEntry::getDataFieldEntries($this->studip_id, 'user') as $entry) { if ($entry->getName() == $this->ilias_config['matriculation']) { $this->matriculation = $entry->getDisplayValue(); } } } else { $this->matriculation = $data['matriculation_number']; } if ($this->title_front != '') { $this->title = $this->title_front; } if ($this->title_front != '' && $this->title_rear != '') { $this->title .= ' '; } if ($this->title_rear != '') { $this->title .= $this->title_rear; } $disciplines = UserStudyCourse::findByUser($this->studip_id); if (is_array($disciplines) && count($disciplines)) { if ((array_key_exists('discipline_1', $this->ilias_config) && $this->ilias_config['discipline_1']) || (array_key_exists('discipline_2', $this->ilias_config) && $this->ilias_config['discipline_2'])) { $discipline = reset($disciplines); if ($discipline) { $this->disciplines[] = $discipline->studycourse_name . ' ' . $discipline->degree_name; } $discipline = next($disciplines); if ($discipline) { $this->disciplines[] = $discipline->studycourse_name . ' ' . $discipline->degree_name; } } } return true; } /** * get array of user account data * * returns array of user account data * @access public * @return array user account data */ function getUserArray() { // data for user-account in ILIAS $user_data['id'] = $this->id; $user_data['login'] = $this->studip_login; $user_data['passwd'] = md5(uniqid()); //never gets used, only to ensure correct entry in ilias db $user_data['firstname'] = $this->firstname; $user_data['lastname'] = $this->lastname; $user_data['title'] = $this->title; $user_data['gender'] = $this->gender; $user_data['email'] = $this->email; $user_data['street'] = $this->street; $user_data['phone_home'] = $this->phone_home; $user_data['matriculation'] = $this->matriculation; $user_data['time_limit_unlimited'] = 1; $user_data['active'] = 1; $user_data['approve_date'] = date('Y-m-d H:i:s'); $user_data['accepted_agreement'] = true; $user_data['agree_date'] = date('Y-m-d H:i:s'); $user_data['auth_mode'] = 'default'; $user_data['external_account'] = ''; $user_data['UDF'] = []; if (is_array($this->disciplines)) { if (is_array($this->ilias_config) && array_key_exists('discipline_1', $this->ilias_config) && array_key_exists(0, $this->disciplines)) { $user_data['UDF'][$this->ilias_config['discipline_1']['id']] = ['name' => $this->ilias_config['discipline_1']['name'], 'value' => $this->disciplines[0]]; } if (is_array($this->ilias_config) && array_key_exists('discipline_2', $this->ilias_config) && array_key_exists(1, $this->disciplines)) { $user_data['UDF'][$this->ilias_config['discipline_2']['id']] = ['name' => $this->ilias_config['discipline_2']['name'], 'value' => $this->disciplines[1]]; } } return $user_data; } /** * get id * * returns id * @access public * @return string id */ function getId() { return $this->id; } /** * set id * * returns id * @return string id */ public function setId($ilias_user_id) { return $this->id = $ilias_user_id; } /** * get stud.ip user-id * * returns id * @access public * @return string stud.ip user-id */ function getStudipId() { return $this->studip_id; } /** * get username * * returns username * @access public * @return string username */ function getUsername() { return $this->login; } /** * set username * * sets username * @access public * @param string $user_login username */ function setUsername($user_login) { $this->login = $user_login; } /** * get password * * returns password * @access public * @return string password */ function getPassword() { return $this->external_password; } /** * set password * * sets password * @access public * @param string $user_password password */ function setPassword($user_password) { $this->external_password = $user_password; } /** * get user category * * returns id * @access public * @return string id */ function getCategory() { return $this->category; } /** * set user category * * sets user category * @access public * @param string $user_category category */ function setCategory($user_category) { $this->category = $user_category; } /** * get gender * * returns gender-setting * @access public * @return string gender-setting */ function getGender() { return $this->gender; } /** * set gender * * sets gender * @access public * @param string $user_gender gender-setting */ function setGender($user_gender) { $this->gender = $user_gender; } /** * get full name * * returns full name * @access public * @return string name */ function getName() { if ($this->title != "") return $this->title . ' ' . $this->firstname . ' ' . $this->lastname; else return $this->firstname . ' ' . $this->lastname; } /** * get firstname * * returns firstname * @access public * @return string firstname */ function getFirstname() { return $this->firstname; } /** * set firstname * * sets firstname * @access public * @param string $user_firstname firstname */ function setFirstname($user_firstname) { $this->firstname = $user_firstname; } /** * get lastname * * returns lastname * @access public * @return string lastname */ function getLastname() { return $this->lastname; } /** * set lastname * * sets lastname * @access public * @param string $user_lastname lastname */ function setLastname($user_lastname) { $this->lastname = $user_lastname; } /** * get email-adress * * returns email-adress * @access public * @return string email-adress */ function getEmail() { return $this->email; } /** * set email-adress * * sets email-adress * @access public * @param string $user_email email-adress */ function setEmail($user_email) { $this->email = $user_email; } /** * get user-type * * returns user-type * @access public * @return string user-type */ function getUserType() { return $this->type; } /** * set user-type * * sets user-type * @access public * @param string $user_type user-type */ function setUserType($user_type) { $this->type = $user_type; } /** * save connection for user-account * * saves user-connection to database and sets type for actual user * @access public * @param string $user_type user-type */ function setConnection($user_type) { $this->setUserType($user_type); $query = "INSERT INTO auth_extern (studip_user_id, external_user_id, external_user_name, external_user_password, external_user_category, external_user_system_type, external_user_type) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE external_user_name = VALUES(external_user_name), external_user_password = VALUES(external_user_password), external_user_category = VALUES(external_user_category), external_user_id = VALUES(external_user_id)"; $statement = DBManager::get()->prepare($query); $statement->execute([ (string)$this->studip_id, (string)$this->id, (string)$this->login, (string)$this->external_password, (string)$this->category, (string)$this->index, (int)$this->type, ]); $this->is_connected = true; $this->readData(); } /** * remove connection for user-account * * deletes user-connection from database (only for manually connected user) * @access public */ function unsetConnection($ignore_usertype = false) { if (!$ignore_usertype && ($this->getUserType() != self::USER_TYPE_ORIGINAL)) { return; } $query = "DELETE FROM auth_extern WHERE studip_user_id = ? AND external_user_system_type = ? AND external_user_type = ?"; $statement = DBManager::get()->prepare($query); $statement->execute([ (string)$this->studip_id, (string)$this->index, (int)$this->type ]); $this->is_connected = false; $this->readData(); } /** * get connection-status * * returns true, if there is a connected user * @access public * @return boolean connection-status */ function isConnected() { return $this->is_connected; } /** * get authentication token * * generates authentication token and updates auth_extern * @access public */ function getToken() { $token = md5(uniqid("iliastoken538")); $query = "UPDATE `auth_extern` SET `external_user_token` = ?, `external_user_token_valid_until` = ? WHERE `auth_extern`.`studip_user_id` = ? AND `auth_extern`.`external_user_system_type` = ? AND `auth_extern`.`external_user_type` = ?"; $statement = DBManager::get()->prepare($query); $statement->execute([ $token, time() + 600, (string)$this->studip_id, (string)$this->index, (int)$this->type ]); return $token; } } ?>