aboutsummaryrefslogtreecommitdiff
path: root/lib/ilias_interface/IliasUser.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ilias_interface/IliasUser.php')
-rw-r--r--lib/ilias_interface/IliasUser.php528
1 files changed, 528 insertions, 0 deletions
diff --git a/lib/ilias_interface/IliasUser.php b/lib/ilias_interface/IliasUser.php
new file mode 100644
index 0000000..426de80
--- /dev/null
+++ b/lib/ilias_interface/IliasUser.php
@@ -0,0 +1,528 @@
+<?php
+# Lifter007: TODO
+# Lifter003: TODO
+# Lifter010: TODO
+
+/**
+* class to handle user-accounts
+*
+* This class contains methods to handle connected user-accounts.
+*
+* @author Arne Schröder <schroeder@data-quest.de>
+* @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 $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
+ 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();
+ }
+ }
+ }
+
+ 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;
+ }
+ 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'] = '';
+ 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;
+ }
+}
+?>