• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

webservice/soap/classes/class.ilSoapUserAdministration.php

Go to the documentation of this file.
00001 <?php
00002   /*
00003    +-----------------------------------------------------------------------------+
00004    | ILIAS open source                                                           |
00005    +-----------------------------------------------------------------------------+
00006    | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007    |                                                                             |
00008    | This program is free software; you can redistribute it and/or               |
00009    | modify it under the terms of the GNU General Public License                 |
00010    | as published by the Free Software Foundation; either version 2              |
00011    | of the License, or (at your option) any later version.                      |
00012    |                                                                             |
00013    | This program is distributed in the hope that it will be useful,             |
00014    | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015    | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016    | GNU General Public License for more details.                                |
00017    |                                                                             |
00018    | You should have received a copy of the GNU General Public License           |
00019    | along with this program; if not, write to the Free Software                 |
00020    | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021    +-----------------------------------------------------------------------------+
00022   */
00023 
00024 
00033 include_once './webservice/soap/lib/nusoap.php';
00034 
00035 // These functions are wrappers for nusoap, since it cannot register methods inside classes
00036 function login($client,$username,$password)
00037 {
00038         $sua =& new ilSoapUserAdministration();
00039         
00040         return $sua->login($client,$username,$password);
00041 }
00042 
00043 function logout($sid)
00044 {
00045         $sua =& new ilSoapUserAdministration();
00046 
00047         return $sua->logout($sid);
00048 }
00049 function lookupUser($sid,$user_name)
00050 {
00051         $sua =& new ilSoapUserAdministration();
00052 
00053         return $sua->lookupUser($sid,$user_name);
00054 }
00055 
00056 function getUser($sid,$user_id)
00057 {
00058         $sua =& new ilSoapUserAdministration();
00059 
00060         return $sua->getUser($sid,$user_id);
00061 }
00062 
00063 function updateUser($sid,$user_data)
00064 {
00065         $sua =& new ilSoapUserAdministration();
00066 
00067         return $sua->updateUser($sid,$user_data);
00068 }
00069 function addUser($sid,$user_data,$global_role_id)
00070 {
00071         $sua =& new ilSoapUserAdministration();
00072 
00073         return $sua->addUser($sid,$user_data,$global_role_id);
00074 }
00075 function deleteUser($sid,$user_id)
00076 {
00077         $sua =& new ilSoapUserAdministration();
00078 
00079         return $sua->deleteUser($sid,$user_id);
00080 }
00081 
00082 class ilSoapUserAdministration
00083 {
00084         /*
00085          * object which handles php's authentication
00086          * @var object
00087          */
00088         var $sauth = null;
00089 
00090         /*
00091          * Defines type of error handling (PHP5 || NUSOAP)
00092          * @var object
00093          */
00094         var $error_method = null;
00095 
00096 
00097         function ilSoapUserAdministration($use_nusoap = true)
00098         {
00099                 define('USER_FOLDER_ID',7);
00100                 define('NUSOAP',1);
00101                 define('PHP5',2);
00102 
00103                 if($use_nusoap)
00104                 {
00105                         $this->error_method = NUSOAP;
00106                 }
00107         }
00108                 
00109 
00110         // Service methods
00111         function login($client,$username,$password)
00112         {
00113                 $this->__initAuthenticationObject();
00114 
00115                 $this->sauth->setClient($client);
00116                 $this->sauth->setUsername($username);
00117                 $this->sauth->setPassword($password);
00118 
00119                 if(!$this->sauth->authenticate())
00120                 {
00121                         return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00122                 }
00123                 return $this->sauth->getSid().'::'.$client;
00124         }
00125 
00126         function logout($sid)
00127         {
00128                 list($sid,$client) = $this->__explodeSid($sid);
00129 
00130                 $this->__initAuthenticationObject();
00131 
00132                 $this->sauth->setClient($client);
00133                 $this->sauth->setSid($sid);
00134 
00135 
00136                 if(!$this->sauth->logout())
00137                 {
00138                         return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00139                 }
00140                 
00141                 return true;
00142         }
00143         
00144         function lookupUser($sid,$user_name)
00145         {
00146                 list($sid,$client) = $this->__explodeSid($sid);
00147 
00148                 $this->__initAuthenticationObject();
00149 
00150                 $this->sauth->setClient($client);
00151                 $this->sauth->setSid($sid);
00152 
00153                 if(!$this->sauth->validateSession())
00154                 {
00155                         return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00156                 }                       
00157 
00158                 if(!strlen($user_name))
00159                 {
00160                         return $this->__raiseError('No username given. Aborting','Client');
00161                 }
00162 
00163                 // Include main header
00164                 include_once './include/inc.header.php';
00165 
00166                 if(!$rbacsystem->checkAccess('read',USER_FOLDER_ID))
00167                 {
00168                         return $this->__raiseError('Check access failed.'.USER_FOLDER_ID,'Server');
00169                 }
00170 
00171                 return (int) ilObjUser::getUserIdByLogin($user_name);
00172         }
00173 
00174         function getUser($sid,$user_id)
00175         {
00176                 list($sid,$client) = $this->__explodeSid($sid);
00177 
00178                 $this->__initAuthenticationObject();
00179 
00180                 $this->sauth->setClient($client);
00181                 $this->sauth->setSid($sid);
00182 
00183                 if(!$this->sauth->validateSession())
00184                 {
00185                         return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00186                 }                       
00187                 
00188                 // Include main header
00189                 include_once './include/inc.header.php';
00190 
00191                 if(!$rbacsystem->checkAccess('read',USER_FOLDER_ID))
00192                 {
00193                         return $this->__raiseError('Check access failed.','Server');
00194                 }
00195 
00196                 global $ilUser;
00197 
00198                 if($ilUser->getLoginByUserId($user_id))
00199                 {
00200                         $tmp_user =& ilObjectFactory::getInstanceByObjId($user_id);
00201                         $usr_data = $this->__readUserData($tmp_user);
00202 
00203                         return $usr_data;
00204                 }
00205                 return $this->__raiseError('User does not exist','Client');
00206         }               
00207 
00208         function updateUser($sid,$user_data)
00209         {
00210                 list($sid,$client) = $this->__explodeSid($sid);
00211 
00212 
00213                 $this->__initAuthenticationObject();
00214 
00215                 $this->sauth->setClient($client);
00216                 $this->sauth->setSid($sid);
00217 
00218                 if(!$this->sauth->validateSession())
00219                 {
00220                         return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
00221                 }                       
00222                 
00223                 // Include main header
00224                 include_once './include/inc.header.php';
00225 
00226                 if(!$rbacsystem->checkAccess('write',USER_FOLDER_ID))
00227                 {
00228                         return $this->__raiseError('Check access failed.','Server');
00229                 }
00230 
00231                 global $ilUser;
00232 
00233                 if(!$user_obj =& ilObjectFactory::getInstanceByObjId($user_data['usr_id'],false))
00234                 {
00235                         return $this->__raiseError('User with id '.$user_data['usr_id'].' does not exist.','Client');
00236                 }
00237 
00238                 $user_old = $this->__readUserData($user_obj);
00239                 $user_new = $this->__substituteUserData($user_old,$user_data);
00240 
00241                 if(!$this->__validateUserData($user_data,false))
00242                 {
00243                         return $this->__raiseError($this->__getMessage(),'Client');
00244                 }
00245 
00246                 if(strlen($user_data['passwd']) != 32)
00247                 {
00248                         $user_new['passwd_type'] = IL_PASSWD_PLAIN;
00249                 }
00250                 else
00251                 {
00252                         $user_new['passwd_type'] = IL_PASSWD_MD5;
00253                 }
00254                 $this->__setUserData($user_obj,$user_new);
00255 
00256                 $log->write('SOAP: updateUser()');
00257                 $user_obj->update();
00258 
00259                 return true;
00260         }               
00261 
00262 
00263         function addUser($sid,$user_data,$global_role_id)
00264         {
00265                 list($sid,$client) = $this->__explodeSid($sid);
00266 
00267                 $this->__initAuthenticationObject();
00268 
00269                 $this->sauth->setClient($client);
00270                 $this->sauth->setSid($sid);
00271                 if(!$this->sauth->validateSession())
00272                 {
00273                         return $this->__raiseError($this->sauth->getMessage(),'Client');
00274                 }
00275 
00276                 // Include main header
00277                 include_once './include/inc.header.php';
00278 
00279                 if(!$rbacsystem->checkAccess('create_user',USER_FOLDER_ID))
00280                 {
00281                         return $this->__raiseError('Check access failed.','Server');
00282                 }
00283 
00284                 // Validate user_data
00285                 if(!$this->__validateUserData($user_data))
00286                 {
00287                         return $this->__raiseError($this->__getMessage(),'Client');
00288                 }
00289                 // Validate global role
00290                 if(!$global_role_id)
00291                 {
00292                         return $this->__raiseError('No role id given','Client');
00293                 }
00294 
00295                 // Validate global role
00296                 global $rbacreview;
00297                 
00298                 $global_roles = $rbacreview->getGlobalRoles();
00299 
00300                 if(!in_array($global_role_id,$global_roles))
00301                 {
00302                         return $this->__raiseError('Role with id: '.$global_role_id.' is not a valid global role','Client');
00303                 }
00304 
00305                 $new_user =& new ilObjUser();
00306 
00307                 $user_data['passwd_type'] =  IL_PASSWD_PLAIN;
00308                 $this->__setUserData($new_user,$user_data);
00309 
00310 
00311                 $log->write('SOAP: addUser()');
00312 
00313                 // Need this for entry in object_data
00314                 $new_user->setTitle($new_user->getFullname());
00315                 $new_user->setDescription($new_user->getEmail());
00316 
00317                 $new_user->create();
00318                 $new_user->saveAsNew();
00319 
00320                 // Assign role
00321                 $rbacadmin->assignUser($global_role_id,$new_user->getId());
00322 
00323                 // Assign user prefs
00324                 $new_user->setLanguage($user_data['user_language']);
00325                 $new_user->setPref('style',$user_data['style']);
00326                 $new_user->setPref('skin',$user_data['skin']);
00327                 $new_user->writePrefs();
00328 
00329                 return $new_user->getId();
00330         }
00331 
00332         function deleteUser($sid,$user_id)
00333         {
00334                 list($sid,$client) = $this->__explodeSid($sid);
00335 
00336                 $this->__initAuthenticationObject();
00337 
00338                 $this->sauth->setClient($client);
00339                 $this->sauth->setSid($sid);
00340                 if(!$this->sauth->validateSession())
00341                 {
00342                         return $this->__raiseError($this->sauth->getMessage(),'Client');
00343                 }
00344                 
00345                 if(!isset($user_id))
00346                 {
00347                         return $this->__raiseError('No user_id given. Aborting','Client');
00348                 }
00349 
00350                 // Include main header
00351                 include_once './include/inc.header.php';
00352 
00353                 if(!$rbacsystem->checkAccess('delete',USER_FOLDER_ID))
00354                 {
00355                         return $this->__raiseError('Check access failed.','Server');
00356                 }
00357 
00358                 global $ilUser;
00359 
00360                 if(!$ilUser->getLoginByUserId($user_id))
00361                 {
00362                         return $this->__raiseError('User id: '.$user_id.' is not a valid identifier. Aborting','Client');
00363                 }
00364                 if($ilUser->getId() == $user_id)
00365                 {
00366                         return $this->__raiseError('Cannot delete myself. Aborting','Client');
00367                 }
00368                 if($user_id == SYSTEM_USER_ID)
00369                 {
00370                         return $this->__raiseError('Cannot delete root account. Aborting','Client');
00371                 }
00372                 // Delete him
00373                 $log->write('SOAP: deleteUser()');
00374                 $delete_user =& ilObjectFactory::getInstanceByObjId($user_id,false);
00375                 $delete_user->delete();
00376 
00377                 return true;
00378         }
00379                 
00380                 
00381         // PRIVATE
00382         function __explodeSid($sid)
00383         {
00384                 $exploded = explode('::',$sid);
00385 
00386                 return is_array($exploded) ? $exploded : array('sid' => '','client' => '');
00387         }
00388 
00389 
00390         function __setMessage($a_str)
00391         {
00392                 $this->message = $a_str;
00393         }
00394         function __getMessage()
00395         {
00396                 return $this->message;
00397         }
00398         function __appendMessage($a_str)
00399         {
00400                 $this->message .= isset($this->message) ? ' ' : '';
00401                 $this->message .= $a_str;
00402         }
00403 
00404         function __validateUserData(&$user_data,$check_complete = true)
00405         {
00406                 global $lng,$styleDefinition;
00407 
00408                 $this->__setMessage('');
00409                 
00410                 if($check_complete)
00411                 {
00412                         if(!isset($user_data['login']))
00413                         {
00414                                 $this->__appendMessage('No login given.');
00415                         }
00416                         if(!isset($user_data['passwd']))
00417                         {
00418                                 $this->__appendMessage('No password given.');
00419                         }
00420                         if(!isset($user_data['email']))
00421                         {
00422                                 $this->__appendMessage('No email given');
00423                         }
00424                         if(!isset($user_data['user_language']))
00425                         {
00426                                 $user_data['user_language'] = 'en';
00427                         }
00428                 }
00429                 foreach($user_data as $field => $value)
00430                 {
00431                         switch($field)
00432                         {
00433                                 case 'login':
00434                                         if (!ilUtil::isLogin($value))
00435                                         {
00436                                                 $this->__appendMessage('Login invalid.');
00437                                         }
00438 
00439                                         // check loginname
00440                                         if($check_complete)
00441                                         {
00442                                                 if (loginExists($value))
00443                                                 {
00444                                                         $this->__appendMessage('Login already exists.');
00445                                                 }
00446                                         }
00447                                         break;
00448 
00449                                 case 'passwd':
00450                                         if (!ilUtil::isPassword($value))
00451                                         {
00452                                                 $this->__appendMessage('Password invalid.');
00453                                         }
00454                                         break;
00455 
00456                                 case 'email':
00457                                         if(!ilUtil::is_email($value))
00458                                         {
00459                                                 $this->__appendMessage('Email invalid.');
00460                                         }
00461                                         break;
00462 
00463                                 case 'time_limit_unlimited':
00464                                         if($value != 1)
00465                                         {
00466                                                 if($user_data['time_limit_from'] >= $user_data['time_limit_until'])
00467                                                 {
00468                                                         $this->__appendMessage('Time limit invalid');
00469                                                 }
00470                                         }
00471                                         break;
00472 
00473                                 case 'user_language':
00474                                         $lang_inst = $lng->getInstalledLanguages();
00475 
00476                                         if(!in_array($user_data['user_language'],$lang_inst))
00477                                         {
00478                                                 $this->__appendMessage('Language: '.$user_data['user_language'].' is not installed');
00479                                         }
00480                                         break;
00481 
00482 
00483                                 case 'user_skin':
00484                                 case 'user_style':
00485                                         if(($user_data['user_skin'] and !$user_data['user_style']) or
00486                                            (!$user_data['user_skin'] and $user_data['user_style']))
00487                                         {
00488                                                 $this->__appendMessage('user_skin, user_style not valid.');
00489                                         }
00490                                         elseif($user_data['user_skin'] and $user_data['user_style'])
00491                                         {
00492                                                 $ok = false;
00493                                                 foreach($styleDefinition->getAllTemplates() as $template)
00494                                                 {
00495                                                         $styleDef =& new ilStyleDefinition($template["id"]);
00496                                                         $styleDef->startParsing();
00497                                                         $styles = $styleDef->getStyles();
00498                                                         foreach ($styles as $style)
00499                                                         {
00500                                                                 if ($user_data['user_skin'] == $template["id"] &&
00501                                                                         $user_data['user_style'] == $style["id"])
00502                                                                 {
00503                                                                         $ok = true;
00504                                                                 }
00505                                                         }
00506                                                 }
00507                                                 if(!$ok)
00508                                                 {
00509                                                         $this->__appendMessage('user_skin, user_style not valid.');
00510                                                 }
00511                                         }
00512                                         break;
00513 
00514                                 case 'time_limit_owner':
00515                                         $type = ilObject::_lookupType($user_data['time_limit_owner'],true);
00516                                         if($type != 'cat' and $type != 'usrf')
00517                                         {
00518                                                 $this->__appendMessage('time_limit_owner must be ref_id of category or user folder'.$type);
00519                                         }
00520                                         break;
00521 
00522                                         
00523 
00524                                 default:
00525                                         continue;
00526                         }
00527                 }
00528                 return strlen($this->__getMessage()) ? false : true;
00529         }
00530 
00531         function __setUserData(&$user_obj,&$user_data)
00532         {
00533                 // Default to unlimited if no access period is given
00534                 if(!$user_data['time_limit_from'] and 
00535                    !$user_data['time_limit_until'] and
00536                    !$user_data['time_limit_unlimited'])
00537                 {
00538                         $user_data['time_limit_unlimited'] = 1;
00539                 }
00540                 if(!$user_data['time_limit_owner'])
00541                 {
00542                         $user_data['time_limit_owner'] = USER_FOLDER_ID;
00543                 }
00544 
00545                 $user_obj->assignData($user_data);
00546 
00547                 if(isset($user_data['user_language']))
00548                 {
00549                         $user_obj->setLanguage($user_data['user_language']);
00550                 }
00551                 if(isset($user_data['user_skin']) and isset($user_data['user_style']))
00552                 {
00553                         $user_obj->setPref('skin',$user_data['skin']);
00554                         $user_obj->setPref('style',$user_data['style']);
00555                 }
00556                 return true;
00557         }
00558 
00559 
00560 
00561         function __initAuthenticationObject()
00562         {
00563                 include_once './webservice/soap/classes/class.ilSoapAuthentication.php';
00564                 
00565                 return $this->sauth = new ilSoapAuthentication();
00566         }
00567                 
00568 
00569         function __raiseError($a_message,$a_code)
00570         {
00571                 switch($this->error_method)
00572                 {
00573                         case NUSOAP:
00574 
00575                                 return new soap_fault($a_code,'',$a_message);
00576                 }
00577         }
00578 
00579         
00580         function __readUserData(&$usr_obj)
00581         {
00582                 $usr_data['usr_id'] = $usr_obj->getId();
00583                 $usr_data['login'] = $usr_obj->getLogin();
00584                 $usr_data['passwd'] = $usr_obj->getPasswd();
00585                 $usr_data['passwd_type'] = $usr_obj->getPasswdType();
00586                 $usr_data['firstname'] = $usr_obj->getFirstname();
00587                 $usr_data['lastname'] = $usr_obj->getLastname();
00588                 $usr_data['title'] = $usr_obj->getUTitle();
00589                 $usr_data['gender'] = $usr_obj->getGender();
00590                 $usr_data['email'] = $usr_obj->getEmail();
00591                 $usr_data['institution'] = $usr_obj->getInstitution();
00592                 $usr_data['street'] = $usr_obj->getStreet();
00593                 $usr_data['city'] = $usr_obj->getCity();
00594                 $usr_data['zipcode'] = $usr_obj->getZipcode();
00595                 $usr_data['country'] = $usr_obj->getCountry();
00596                 $usr_data['phone_office'] = $usr_obj->getPhoneOffice();
00597                 $usr_data['last_login'] = $usr_obj->getLastLogin();
00598                 $usr_data['last_update'] = $usr_obj->getLastUpdate();
00599                 $usr_data['create_date'] = $usr_obj->getCreateDate();
00600                 $usr_data['hobby'] = $usr_obj->getHobby();
00601                 $usr_data['department'] = $usr_obj->getDepartment();
00602                 $usr_data['phone_home'] = $usr_obj->getPhoneHome();
00603                 $usr_data['phone_mobile'] = $usr_obj->getPhoneMobile();
00604                 $usr_data['fax'] = $usr_obj->getFax();
00605                 $usr_data['time_limit_owner'] = $usr_obj->getTimeLimitOwner();
00606                 $usr_data['time_limit_unlimited'] = $usr_obj->getTimeLimitUnlimited();
00607                 $usr_data['time_limit_from'] = $usr_obj->getTimeLimitFrom();
00608                 $usr_data['time_limit_until'] = $usr_obj->getTimeLimitUntil();
00609                 $usr_data['time_limit_message'] = $usr_obj->getTimeLimitMessage();
00610                 $usr_data['referral_commment'] = $usr_obj->getComment();
00611                 $usr_data['matriculation'] = $usr_obj->getMatriculation();
00612                 $usr_data['active'] = $usr_obj->getActive();
00613                 $usr_data['approve_date'] = $usr_obj->getApproveDate();
00614                 $usr_data['user_skin'] = $usr_obj->getPref('skin');
00615                 $usr_data['user_style'] = $usr_obj->getPref('style');
00616                 $usr_data['user_language'] = $usr_obj->getLanguage();
00617                 
00618                 return $usr_data;
00619         }
00620 
00621         function __substituteUserData($user_old,$user_new)
00622         {
00623                 foreach($user_new as $key => $value)
00624                 {
00625                         $user_old[$key] = $value;
00626                 }
00627                 return $user_old ? $user_old : array();
00628         }
00629 }
00630 ?>

Generated on Fri Dec 13 2013 09:06:40 for ILIAS Release_3_4_x_branch .rev 46804 by  doxygen 1.7.1