* @access public
* @modulegroup elearning_interface_modules
* @module Ilias3ConnectedUser
* @package ELearning-Interface
*/
class Ilias3ConnectedUser extends ConnectedUser
{
var $roles;
var $user_sid;
/**
* constructor
*
* init class.
* @access
* @param string $cms system-type
*/
function __construct($cms, $user_id = false)
{
global $connected_cms, $perm;
parent::__construct($cms, $user_id);
// create account automatically if it doesn't exist
if (! $this->isConnected() AND ($connected_cms[$this->cms_type]->USER_AUTO_CREATE == true))
{
$this->setPassword(md5(uniqid("4dfmjsnll")));
$this->newUser(true);
$this->readData();
}
$this->roles = [$connected_cms[$cms]->roles[$perm->get_perm($this->studip_id)]];
}
function readData()
{
global $connected_cms;
parent::readData();
if($this->is_connected){
$user_id = $connected_cms[$this->cms_type]->soap_client->lookupUser($this->login);
if (!$user_id) {
//do not delete in case of error
if($user_id !== false) {
$query = "DELETE FROM auth_extern WHERE studip_user_id = ? LIMIT 1";
$statement = DBManager::get()->prepare($query);
$statement->execute([$this->studip_id]);
}
$this->id = '';
$this->login = '';
$this->external_password = '';
$this->category = '';
$this->type = '';
$this->is_connected = false;
} elseif($this->category != ''){
$cat = $connected_cms[$this->cms_type]->soap_client->checkReferenceById($this->category);
if(!$cat){
$query = "UPDATE auth_extern SET external_user_category = '' WHERE studip_user_id = ? LIMIT 1";
$statement = DBManager::get()->prepare($query);
$statement->execute([$this->studip_id]);
$this->category = '';
}
}
}
return $this->is_connected;
}
/**
* get login-data
*
* gets login-data from database
* @access public
* @param string $username username
* @return boolean returns false, if no data was found
*/
function getLoginData($username)
{
global $connected_cms;
if (!$username) {
return false;
}
$user_id = $connected_cms[$this->cms_type]->soap_client->lookupUser($username);
if ($user_id == false)
return false;
$user_data = $connected_cms[$this->cms_type]->soap_client->getUser($user_id);
if ($user_data == false)
return false;
$this->id = $user_data["usr_id"];
$this->login = $user_data["login"];
$this->external_password = $user_data["passwd"];
return true;
}
/**
* get crypted password
*
* returns ILIAS 3 password
* @access public
* @param string $password password
* @return string password
*/
function getCryptedPassword($password)
{
return md5($password);
}
/**
* set roles
*
* sets roles
* @access public
* @param array $role_array role-array
*/
function setRoles($role_array)
{
$this->roles = $role_array;
}
/**
* get roles
*
* returns roles
* @access public
* @return array roles
*/
function getRoles()
{
return $this->roles;
}
/**
* create new user category
*
* create new user category
* @access public
* @return boolean returns false on error
*/
function newUserCategory()
{
global $connected_cms, $messages;
$connected_cms[$this->cms_type]->soap_client->setCachingStatus(false);
// data for user-category in ILIAS 3
$object_data["title"] = sprintf(_("Eigene Daten von %s (%s)."), $this->getName(), $this->getId());
$object_data["description"] = sprintf(_("Hier befinden sich die persönlichen Lernmodule des Benutzers %s."), $this->getName());
$object_data["type"] = "cat";
$object_data["owner"] = $this->getId();
$cat = $connected_cms[$this->cms_type]->soap_client->getReferenceByTitle($object_data["title"]);
if ($cat != false && $connected_cms[$this->cms_type]->soap_client->checkReferenceById($cat) )
{
$messages["info"] .= sprintf(_("Ihre persönliche Kategorie wurde bereits angelegt."), $this->login) . "
\n";
$this->category = $cat;
}
else
{
$this->category = $connected_cms[$this->cms_type]->soap_client->addObject($object_data, $connected_cms[$this->cms_type]->main_category_node_id);
}
if ($this->category != false)
parent::setConnection( $this->getUserType() );
else
{
echo "CATEGORY_ERROR".$connected_cms[$this->cms_type]->main_category_node_id ."-";
return false;
}
// data for personal user-role in ILIAS 3
$role_data["title"] = "studip_usr" . $this->getId() . "_cat" . $this->category;
$role_data["description"] = sprintf(_("User-Rolle von %s. Diese Rolle wurde von Stud.IP generiert."), $this->getName());
$role_id = $connected_cms[$this->cms_type]->soap_client->getObjectByTitle($role_data["title"], "role");
if ($role_id != false)
$messages["info"] .= sprintf(_("Ihre persönliche Userrolle wurde bereits angelegt."), $this->login) . "
\n";
else
$role_id = $connected_cms[$this->cms_type]->soap_client->addRoleFromTemplate($role_data, $this->category, $connected_cms[$this->cms_type]->user_role_template_id);
$connected_cms[$this->cms_type]->soap_client->addUserRoleEntry($this->getId(), $role_id);
// delete permissions for all global roles for this category
foreach ($connected_cms[$this->cms_type]->global_roles as $key => $role)
$connected_cms[$this->cms_type]->soap_client->revokePermissions($role, $this->category);
return true;
}
/**
* new user
*
* save new user
* @access public
* @return boolean returns false on error
*/
function newUser($ignore_encrypt_passwords = false)
{
global $connected_cms, $auth, $messages;
if ($this->getLoginData($this->login))
{
$messages["error"] .= sprintf(_("Es existiert bereits ein Account mit dem Benutzernamen \"%s\"."), $this->login) . "
\n";
return false;
}
// data for user-account in ILIAS 3
$user_data["login"] = $this->login;
$user_data["passwd"] = $this->external_password;
$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["time_limit_unlimited"] = 1;
$user_data["active"] = 1;
$user_data["approve_date"] = date('Y-m-d H:i:s');
$user_data["accepted_agreement"] = true;
if ($connected_cms[$this->cms_type]->user_style != "")
$user_data["user_style"] = $connected_cms[$this->cms_type]->user_style;
if ($connected_cms[$this->cms_type]->user_skin != "")
$user_data["user_skin"] = $connected_cms[$this->cms_type]->user_skin;
$role_id = $connected_cms[$this->cms_type]->roles[$auth->auth["perm"]];
$user_id = $connected_cms[$this->cms_type]->soap_client->addUser($user_data, $role_id);
if ($user_id != false)
{
$this->id = $user_id;
// $connected_cms[$this->cms_type]->soap_client->updatePassword($user_id, $user_data["passwd"]);
// $this->newUserCategory();
$this->setConnection(USER_TYPE_CREATED, $ignore_encrypt_passwords);
return true;
}
echo $connected_cms[$this->cms_type]->soap_client->getError();
return false;
}
/**
* update user-account
*/
public function updateUser()
{
}
/**
* delete user
*
* delete user-account
* @access public
* @return boolean returns false on error
*/
function deleteUser()
{
global $connected_cms;
$ret = null;
$connected_cms[$this->cms_type]->soap_client->user_type == "admin";
$connected_cms[$this->cms_type]->soap_client->caching_active = false;
if($this->category){
$ret['cat_deleted'] = $connected_cms[$this->cms_type]->soap_client->deleteObject($this->category);
}
if($this->type == 0 && $this->id){
$ret['iliasuser_deleted'] = $connected_cms[$this->cms_type]->soap_client->deleteUser($this->id);
}
$query = "DELETE FROM auth_extern WHERE studip_user_id = ? LIMIT 1";
$statement = DBManager::get()->prepare($query);
$statement->execute([$this->studip_id]);
$ret['auth_extern_deleted'] = $statement->rowCount();
return $ret;
}
/**
* set connection
*
* set user connection
* @access public
* @param string user_type user-type
*/
public function setConnection($user_type, $ignore_encrypt_passwords = false)
{
global $connected_cms;
if (!$ignore_encrypt_passwords && $connected_cms[$this->cms_type]->encrypt_passwords === "md5")
{
// echo "PASSWORD-ENCRYPTION";
$this->external_password = $this->getCryptedPassword( $this->external_password );
}
$connected_cms[$this->cms_type]->soap_client->setCachingStatus(false);
parent::setConnection($user_type);
}
/**
* get sid
*
* returns soap-sid
* @access public
* @return string soap-sid
*/
function getSID()
{
global $connected_cms;
$caching_status = $connected_cms[$this->cms_type]->soap_client->getCachingStatus();
$connected_cms[$this->cms_type]->soap_client->setCachingStatus(false);
$connected_cms[$this->cms_type]->soap_client->setUserType("user");
$this->user_sid = $connected_cms[$this->cms_type]->soap_client->login();
$connected_cms[$this->cms_type]->soap_client->setCachingStatus($caching_status);
$connected_cms[$this->cms_type]->soap_client->setUserType("admin");
return $this->user_sid;
}
/**
* get session-id
*
* returns soap-session-id
* @access public
* @return string soap-session-id
*/
function getSessionId()
{
$sid = $this->getSID();
if ($sid == false)
return false;
$arr = explode("::", $sid);
return $arr[0];
}
}
?>