ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.shibUser.php
Go to the documentation of this file.
1<?php
2require_once('./Services/AuthShibboleth/classes/Config/class.shibConfig.php');
3require_once('./Services/User/classes/class.ilObjUser.php');
4
10class shibUser extends ilObjUser {
11
15 protected $shibServerData;
16
17
24 $shibUser = new self();
25 $shibUser->shibServerData = $shibServerData;
26 $ext_id = $shibUser->shibServerData->getLogin();
27 $shibUser->setExternalAccount($ext_id);
28 $existing_usr_id = self::getUsrIdByExtId($ext_id);
29 if ($existing_usr_id) {
30 $shibUser->setId($existing_usr_id);
31 $shibUser->read();
32 }
33 $shibUser->setAuthMode('shibboleth');
34
35 return $shibUser;
36 }
37
38
39 public function updateFields() {
40 $shibConfig = shibConfig::getInstance();
41 if ($shibConfig->getUpdateFirstname()) {
43 }
44 if ($shibConfig->getUpdateLastname()) {
45 $this->setLastname($this->shibServerData->getLastname());
46 }
47 if ($shibConfig->getUpdateGender()) {
48 $this->setGender($this->shibServerData->getGender());
49 }
50 if ($shibConfig->getUpdateTitle()) {
51 $this->setTitle($this->shibServerData->getTitle());
52 }
53 if ($shibConfig->getUpdateInstitution()) {
55 }
56 if ($shibConfig->getUpdateDepartment()) {
58 }
59 if ($shibConfig->getUpdateStreet()) {
60 $this->setStreet($this->shibServerData->getStreet());
61 }
62 if ($shibConfig->getUpdateZipcode()) {
63 $this->setZipcode($this->shibServerData->getZipcode());
64 }
65 if ($shibConfig->getUpdateCountry()) {
66 $this->setCountry($this->shibServerData->getCountry());
67 }
68 if ($shibConfig->getUpdatePhoneOffice()) {
70 }
71 if ($shibConfig->getUpdatePhoneHome()) {
73 }
74 if ($shibConfig->getUpdatePhoneMobile()) {
76 }
77 if ($shibConfig->getUpdateFax()) {
78 $this->setFax($this->shibServerData->getFax());
79 }
80 if ($shibConfig->getUpdateMatriculation()) {
82 }
83 if ($shibConfig->getUpdateEmail()) {
84 $this->setEmail($this->shibServerData->getEmail());
85 }
86 if ($shibConfig->getUpdateHobby()) {
87 $this->setHobby($this->shibServerData->getHobby());
88 }
89 if ($shibConfig->getUpdateLanguage()) {
90 $this->setLanguage($this->shibServerData->getLanguage());
91 }
92 $this->setDescription($this->getEmail());
93 }
94
95
96 public function createFields() {
98 $this->setLastname($this->shibServerData->getLastname());
99 $this->setLogin($this->returnNewLoginName());
101 $this->setGender($this->shibServerData->getGender());
103 $this->setTitle($this->shibServerData->getTitle());
106 $this->setStreet($this->shibServerData->getStreet());
107 $this->setZipcode($this->shibServerData->getZipcode());
108 $this->setCountry($this->shibServerData->getCountry());
110 $this->setPhoneHome($this->shibServerData->getPhoneHome());
112 $this->setFax($this->shibServerData->getFax());
114 $this->setEmail($this->shibServerData->getEmail());
115 $this->setHobby($this->shibServerData->getHobby());
116 $this->setTitle($this->getFullname());
117 $this->setDescription($this->getEmail());
118 $this->setLanguage($this->shibServerData->getLanguage());
119 $this->setTimeLimitOwner(7);
120 $this->setTimeLimitUnlimited(1);
121 $this->setTimeLimitFrom(time());
122 $this->setTimeLimitUntil(time());
123 $this->setActive(true);
124 }
125
126
127 public function create() {
128 if ($this->getLogin() != '' AND $this->getLogin() != '.') {
129 parent::create();
130 } else {
131 throw new ilUserException('No Login-name created');
132 }
133 }
134
135
139 protected function returnNewLoginName() {
140 $login = substr(self::cleanName($this->getFirstname()), 0, 1) . '.' . self::cleanName($this->getLastname());
141 //remove whitespaces see mantis 0023123: https://www.ilias.de/mantis/view.php?id=23123
142 $login = preg_replace('/\s+/', '', $login);
143 $appendix = null;
144 $login_tmp = $login;
145 while (self::loginExists($login, $this->getId())) {
146 $login = $login_tmp . $appendix;
147 $appendix ++;
148 }
149
150 return $login;
151 }
152
153
157 public function isNew() {
158 return (bool)($this->getId() == 0);
159 }
160
161
167 protected static function cleanName($name) {
168 $name = strtolower(strtr(utf8_decode($name), utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'), 'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'));
169
170 return $name;
171 }
172
173
180 private static function loginExists($login, $usr_id) {
181 global $DIC;
182 $ilDB = $DIC['ilDB'];
186 $query = 'SELECT usr_id FROM usr_data WHERE login = ' . $ilDB->quote($login, 'text');
187 $query .= ' AND usr_id != ' . $ilDB->quote($usr_id, 'integer');
188
189 return (bool)($ilDB->numRows($ilDB->query($query)) > 0);
190 }
191
192
198 protected static function getUsrIdByExtId($ext_id) {
199 global $DIC;
200 $ilDB = $DIC['ilDB'];
204 $query = 'SELECT usr_id FROM usr_data WHERE ext_account = ' . $ilDB->quote($ext_id, 'text');
205 $a_set = $ilDB->query($query);
206 if ($ilDB->numRows($a_set) == 0) {
207 return false;
208 } else {
209 $usr = $ilDB->fetchObject($a_set);
210
211 return $usr->usr_id;
212 }
213 }
214}
An exception for terminatinating execution or to throw for unit testing.
const IL_PASSWD_CRYPTED
setLanguage($a_str)
set user language @access public
setInstitution($a_str)
set institution @access public
setFirstname($a_str)
set firstname @access public
$login
all user related data in single vars @access public
setDepartment($a_str)
set department @access public
getLastname()
get lastname @access public
setExternalAccount($a_str)
set external account
setLogin($a_str)
set login / username @access public
setTimeLimitFrom($a_from)
getEmail()
get email address @access public
setCountry($a_str)
Set country (free text)
setPasswd($a_str, $a_type=IL_PASSWD_PLAIN)
set password @access public
setPhoneHome($a_str)
set home phone @access public
setFax($a_str)
set fax @access public
setTimeLimitUntil($a_until)
setTimeLimitOwner($a_owner)
getFirstname()
get firstname @access public
setZipcode($a_str)
set zipcode @access public
getLogin()
get login / username @access public
setLastname($a_str)
set lastame @access public
setStreet($a_str)
set street @access public
setActive($a_active, $a_owner=0)
set user active state and updates system fields appropriately @access public
setGender($a_str)
set gender @access public
setTimeLimitUnlimited($a_unlimited)
setEmail($a_str)
set email @access public
getFullname($a_max_strlen=0)
get fullname @access public
setMatriculation($a_str)
set matriculation number @access public
setHobby($a_str)
setPhoneOffice($a_str)
set office phone @access public
setPhoneMobile($a_str)
set mobile phone @access public
setTitle($a_title)
set object title
setDescription($a_desc)
set object description
getId()
get object id @access public
Class for user related exception handling in ILIAS.
static generatePasswords($a_number)
Generate a number of passwords.
static getInstance()
Class shibServerData.
Class shibUser.
static buildInstance(shibServerData $shibServerData)
static cleanName($name)
create()
create
global $ilDB
global $DIC