00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00033 include_once './webservice/soap/lib/nusoap.php';
00034
00035
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
00086
00087
00088 var $sauth = null;
00089
00090
00091
00092
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
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
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
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
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
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
00285 if(!$this->__validateUserData($user_data))
00286 {
00287 return $this->__raiseError($this->__getMessage(),'Client');
00288 }
00289
00290 if(!$global_role_id)
00291 {
00292 return $this->__raiseError('No role id given','Client');
00293 }
00294
00295
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
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
00321 $rbacadmin->assignUser($global_role_id,$new_user->getId());
00322
00323
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
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
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
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
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
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 ?>