Public Member Functions | Protected Member Functions

ilSoapUserAdministration Class Reference

Inheritance diagram for ilSoapUserAdministration:
Collaboration diagram for ilSoapUserAdministration:

Public Member Functions

 ilSoapUserAdministration ()
 login ($client, $username, $password)
 loginCAS ($client, $PT, $username)
 loginLDAP ($client, $username, $password)
 logout ($sid)
 lookupUser ($sid, $user_name)
 getUser ($sid, $user_id)
 updateUser ($sid, $user_data)
 updatePassword ($sid, $user_id, $new_password)
 addUser ($sid, $user_data, $global_role_id)
 deleteUser ($sid, $user_id)
 __validateUserData (&$user_data, $check_complete=true)
 __setUserData (&$user_obj, &$user_data)
 __readUserData (&$usr_obj)
 __substituteUserData ($user_old, $user_new)
 importUsers ($sid, $folder_id, $usr_xml, $conflict_rule, $send_account_mail)
 define ("IL_FAIL_ON_CONFLICT", 1); define ("IL_UPDATE_ON_CONFLICT", 2); define ("IL_IGNORE_ON_CONFLICT", 3);
 getUsersForContainer ($sid, $ref_id, $attachRoles, $active)
 return list of users following dtd users_3_7
 getUserForRole ($sid, $role_id, $attachRoles, $active)
 __getImportProtocolAsXML ($a_array)
 Create XML ResultSet.
 __getUserMappingAsXML ($a_array)
 return user mapping as xml
 searchUser ($sid, $a_keyfields, $query_operator, $a_keyvalues, $attach_roles, $active)
 return user xml following dtd 3.7
 __buildSearchQuery ($a_keyfields, $queryOperator, $a_keyvalues)
 create search term according to parameters
 getUserXML ($sid, $a_user_ids, $attach_roles)
 return user xmls for given user ids (csv separated ids) as xml based on usr dtd.
 hasNewMail ($sid)

Protected Member Functions

 isPermittedRole ($a_folder, $a_role)
 check if assignment is allowed

Detailed Description

Definition at line 35 of file class.ilSoapUserAdministration.php.


Member Function Documentation

ilSoapUserAdministration::__buildSearchQuery ( a_keyfields,
queryOperator,
a_keyvalues 
)

create search term according to parameters

Parameters:
array of string $a_keyfields
string $queryOperator
array of string $a_keyValues

Definition at line 1240 of file class.ilSoapUserAdministration.php.

Referenced by searchUser().

                                                                                 {
                global $ilDB;
            $query = array();

            $allowed_fields = array ("firstname","lastname","email","login","matriculation","institution","department","title","ext_account");

            foreach ($a_keyfields as $keyfield)
            {
                $keyfield = strtolower($keyfield);

                if (!in_array($keyfield, $allowed_fields))
                   continue;

                $field_query = array ();
                foreach ($a_keyvalues as $keyvalue)
                {
                    if (strlen($keyvalue) >= 3) {
                        $field_query []= $keyfield." like '%".$keyvalue."%'";
                    }

                }
                if (count($field_query))
                   $query [] = join(" ".strtoupper($queryOperator)." ", $field_query);

            }

            return count ($query) ? " AND ((". join(") OR (", $query) ."))" : "AND 0";
        }

Here is the caller graph for this function:

ilSoapUserAdministration::__getImportProtocolAsXML ( a_array  ) 

Create XML ResultSet.

Definition at line 1087 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__raiseError().

Referenced by importUsers().

                                                    {
                include_once './webservice/soap/classes/class.ilXMLResultSet.php';
                include_once './webservice/soap/classes/class.ilXMLResultSetWriter.php';

                $xmlResultSet = new ilXMLResultSet ();
        $xmlResultSet->addColumn ("userid");
                $xmlResultSet->addColumn ("login");
                $xmlResultSet->addColumn ("action");
        $xmlResultSet->addColumn ("message");

                foreach ($a_array as $username => $messages)
                {
                        foreach ($messages as $message)
                        {

                                $xmlRow = new ilXMLResultSetRow ();
                                $xmlRow->setValue (0, 0);
                                $xmlRow->setValue (1, $username);
                                $xmlRow->setValue (2, "");
                                $xmlRow->setValue (3, $message);

                                $xmlResultSet->addRow ($xmlRow);
                        }
                }

                $xml_writer = new ilXMLResultSetWriter ($xmlResultSet);

                if ($xml_writer->start ())
                        return $xml_writer->getXML();

                return $this->__raiseError('Error in __getImportProtocolAsXML','Server');
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSoapUserAdministration::__getUserMappingAsXML ( a_array  ) 

return user mapping as xml

Parameters:
array (user_id => login) $a_array
Returns:
XML String, following resultset.dtd

Definition at line 1126 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__raiseError().

Referenced by importUsers().

                                              {
                include_once './webservice/soap/classes/class.ilXMLResultSet.php';
                include_once './webservice/soap/classes/class.ilXMLResultSetWriter.php';

                $xmlResultSet = new ilXMLResultSet ();
        $xmlResultSet->addColumn ("userid");
                $xmlResultSet->addColumn ("login");
                $xmlResultSet->addColumn ("action");
        $xmlResultSet->addColumn ("message");

                if (count($a_array))
        foreach ($a_array as $username => $message)
                {
                        $xmlRow = new ilXMLResultSetRow ();
                        $xmlRow->setValue (0, $username);
                        $xmlRow->setValue (1, $message["login"]);
                        $xmlRow->setValue (2, $message["action"]);
                        $xmlRow->setValue (3, $message["message"]);

                        $xmlResultSet->addRow ($xmlRow);
                }

                $xml_writer = new ilXMLResultSetWriter ( $xmlResultSet);

                if ($xml_writer->start ())
                        return $xml_writer->getXML();

                return $this->__raiseError('Error in __getUserMappingAsXML','Server');

        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSoapUserAdministration::__readUserData ( &$  usr_obj  ) 

Definition at line 577 of file class.ilSoapUserAdministration.php.

Referenced by getUser(), and updateUser().

        {
                $usr_data['usr_id'] = $usr_obj->getId();
                $usr_data['login'] = $usr_obj->getLogin();
                $usr_data['passwd'] = $usr_obj->getPasswd();
                $usr_data['passwd_type'] = $usr_obj->getPasswdType();
                $usr_data['firstname'] = $usr_obj->getFirstname();
                $usr_data['lastname'] = $usr_obj->getLastname();
                $usr_data['title'] = $usr_obj->getUTitle();
                $usr_data['gender'] = $usr_obj->getGender();
                $usr_data['email'] = $usr_obj->getEmail();
                $usr_data['institution'] = $usr_obj->getInstitution();
                $usr_data['street'] = $usr_obj->getStreet();
                $usr_data['city'] = $usr_obj->getCity();
                $usr_data['zipcode'] = $usr_obj->getZipcode();
                $usr_data['country'] = $usr_obj->getCountry();
                $usr_data['phone_office'] = $usr_obj->getPhoneOffice();
                $usr_data['last_login'] = $usr_obj->getLastLogin();
                $usr_data['last_update'] = $usr_obj->getLastUpdate();
                $usr_data['create_date'] = $usr_obj->getCreateDate();
                $usr_data['hobby'] = $usr_obj->getHobby();
                $usr_data['department'] = $usr_obj->getDepartment();
                $usr_data['phone_home'] = $usr_obj->getPhoneHome();
                $usr_data['phone_mobile'] = $usr_obj->getPhoneMobile();
                $usr_data['fax'] = $usr_obj->getFax();
                $usr_data['time_limit_owner'] = $usr_obj->getTimeLimitOwner();
                $usr_data['time_limit_unlimited'] = $usr_obj->getTimeLimitUnlimited();
                $usr_data['time_limit_from'] = $usr_obj->getTimeLimitFrom();
                $usr_data['time_limit_until'] = $usr_obj->getTimeLimitUntil();
                $usr_data['time_limit_message'] = $usr_obj->getTimeLimitMessage();
                $usr_data['referral_commment'] = $usr_obj->getComment();
                $usr_data['matriculation'] = $usr_obj->getMatriculation();
                $usr_data['active'] = $usr_obj->getActive();
                $usr_data['approve_date'] = $usr_obj->getApproveDate();
                $usr_data['user_skin'] = $usr_obj->getPref('skin');
                $usr_data['user_style'] = $usr_obj->getPref('style');
                $usr_data['user_language'] = $usr_obj->getLanguage();
                $usr_data['auth_mode'] = $usr_obj->getAuthMode();

                $usr_data['accepted_agreement'] = $usr_obj->hasAcceptedUserAgreement();

                return $usr_data;
        }

Here is the caller graph for this function:

ilSoapUserAdministration::__setUserData ( &$  user_obj,
&$  user_data 
)

Definition at line 533 of file class.ilSoapUserAdministration.php.

Referenced by addUser(), and updateUser().

        {
                // Default to unlimited if no access period is given
                if(!$user_data['time_limit_from'] and
                   !$user_data['time_limit_until'] and
                   !$user_data['time_limit_unlimited'])
                {
                        $user_data['time_limit_unlimited'] = 1;
                }
                if(!$user_data['time_limit_owner'])
                {
                        $user_data['time_limit_owner'] = USER_FOLDER_ID;
                }


                // not supported fields by update/addUser
                $user_data['im_icq'] = $user_obj->getInstantMessengerId('icq');
                $user_data['im_yahoo'] = $user_obj->getInstantMessengerId('yahoo');
                $user_data['im_msn'] = $user_obj->getInstantMessengerId('msn');
                $user_data['im_aim'] = $user_obj->getInstantMessengerId('aim');
                $user_data['im_skype'] = $user_obj->getInstantMessengerId('skype');
                
                $user_data['delicious'] = $user_obj->getDelicious();
                $user_data['latitude'] = $user_obj->getLatitude();
                $user_data['longitude'] = $user_obj->getLongitude();
                $user_data['loc_zoom'] = $user_obj->getLocationZoom();
                
                
                $user_data['auth_mode'] = $user_obj->getAuthMode();
                $user_data['ext_account'] = $user_obj->getExternalAccount();
                $user_obj->assignData($user_data);

                if(isset($user_data['user_language']))
                {
                        $user_obj->setLanguage($user_data['user_language']);
                }
                if(isset($user_data['user_skin']) and isset($user_data['user_style']))
                {
                        $user_obj->setPref('skin',$user_data['user_skin']);
                        $user_obj->setPref('style',$user_data['user_style']);
                }
                return true;
        }

Here is the caller graph for this function:

ilSoapUserAdministration::__substituteUserData ( user_old,
user_new 
)

Definition at line 621 of file class.ilSoapUserAdministration.php.

Referenced by updateUser().

        {
                foreach($user_new as $key => $value)
                {
                        $user_old[$key] = $value;
                }
                return $user_old ? $user_old : array();
        }

Here is the caller graph for this function:

ilSoapUserAdministration::__validateUserData ( &$  user_data,
check_complete = true 
)

Definition at line 394 of file class.ilSoapUserAdministration.php.

References $ilLog, $lng, $ok, ilSoapAdministration::__appendMessage(), ilSoapAdministration::__getMessage(), ilSoapAdministration::__setMessage(), ilAuthUtils::_getAuthMode(), ilObjUser::_loginExists(), ilObject::_lookupType(), ilAuthUtils::_needsExternalAccountByAuthMode(), ilUtil::is_email(), ilUtil::isLogin(), and ilUtil::isPassword().

Referenced by addUser(), and updateUser().

        {
                global $lng,$styleDefinition,$ilLog;

                $this->__setMessage('');
                
                include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
                $allow_empty_password = ilAuthUtils::_needsExternalAccountByAuthMode(
                        ilAuthUtils::_getAuthMode($user_data['auth_mode']));

                if($check_complete)
                {
                        if(!isset($user_data['login']))
                        {
                                $this->__appendMessage('No login given.');
                        }
                        if(!isset($user_data['passwd']) and !$allow_empty_password)
                        {
                                $this->__appendMessage('No password given.');
                        }
                        if(!isset($user_data['email']))
                        {
                                $this->__appendMessage('No email given');
                        }
                        if(!isset($user_data['user_language']))
                        {
                                $user_data['user_language'] = $lng->getDefaultLanguage();
                        }
                }
                foreach($user_data as $field => $value)
                {
                        switch($field)
                        {
                                case 'login':
                                        if (!ilUtil::isLogin($value))
                                        {
                                                $this->__appendMessage('Login invalid.');
                                        }

                                        // check loginname
                                        if($check_complete)
                                        {
                                                if (ilObjUser::_loginExists($value))
                                                {
                                                        $this->__appendMessage('Login already exists.');
                                                }
                                        }
                                        break;

                                case 'passwd':
                                        if(!strlen($value) and $allow_empty_password)
                                        {
                                                break;
                                        }
                                        if (!ilUtil::isPassword($value))
                                        {
                                                $this->__appendMessage('Password invalid.');
                                        }
                                        break;

                                case 'email':
                                        if(!ilUtil::is_email($value))
                                        {
                                                $this->__appendMessage('Email invalid.');
                                        }
                                        break;

                                case 'time_limit_unlimited':
                                        if($value != 1)
                                        {
                                                if($user_data['time_limit_from'] >= $user_data['time_limit_until'])
                                                {
                                                        $this->__appendMessage('Time limit invalid');
                                                }
                                        }
                                        break;

                                case 'user_language':
                                        $lang_inst = $lng->getInstalledLanguages();

                                        if(!in_array($user_data['user_language'],$lang_inst))
                                        {
                                                $this->__appendMessage('Language: '.$user_data['user_language'].' is not installed');
                                        }
                                        break;


                                case 'user_skin':
                                case 'user_style':
                                        if(($user_data['user_skin'] and !$user_data['user_style']) or
                                           (!$user_data['user_skin'] and $user_data['user_style']))
                                        {
                                                $this->__appendMessage('user_skin, user_style not valid.');
                                        }
                                        elseif($user_data['user_skin'] and $user_data['user_style'])
                                        {
                                                $ok = false;
                                                $templates = $styleDefinition->getAllTemplates();
                                                if (count($templates) > 0 && is_array($templates))
                                                {
                                                        foreach($templates as $template)
                                                        {
                                                                $styleDef =& new ilStyleDefinition($template["id"]);
                                                                $styleDef->startParsing();
                                                                $styles = $styleDef->getStyles();
                                                                foreach ($styles as $style)
                                                                {
                                                                        if ($user_data['user_skin'] == $template["id"] &&
                                                                                $user_data['user_style'] == $style["id"])
                                                                        {
                                                                                $ok = true;
                                                                        }
                                                                }
                                                        }
                                                        if(!$ok)
                                                        {
                                                                $this->__appendMessage('user_skin, user_style not valid.');
                                                        }
                                                }
                                        }
                                        break;

                                case 'time_limit_owner':
                                        $type = ilObject::_lookupType($user_data['time_limit_owner'],true);
                                        if($type != 'cat' and $type != 'usrf')
                                        {
                                                $this->__appendMessage('time_limit_owner must be ref_id of category or user folder'.$type);
                                        }
                                        break;



                                default:
                                        continue;
                        }
                }
                return strlen($this->__getMessage()) ? false : true;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSoapUserAdministration::addUser ( sid,
user_data,
global_role_id 
)

Definition at line 265 of file class.ilSoapUserAdministration.php.

References $ilLog, $ilSetting, $new_user, ilSoapAdministration::__checkSession(), ilSoapAdministration::__getMessage(), ilSoapAdministration::__raiseError(), __setUserData(), and __validateUserData().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $rbacreview, $ilLog, $rbacadmin,$ilSetting;

                if(!$rbacsystem->checkAccess('create_user',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                // Validate user_data
                if(!$this->__validateUserData($user_data))
                {
                        return $this->__raiseError($this->__getMessage(),'Client');
                }
                // Validate global role
                if(!$global_role_id)
                {
                        return $this->__raiseError('No role id given','Client');
                }

                // Validate global role

                $global_roles = $rbacreview->getGlobalRoles();

                if(!in_array($global_role_id,$global_roles))
                {
                        return $this->__raiseError('Role with id: '.$global_role_id.' is not a valid global role','Client');
                }

                $new_user =& new ilObjUser();

                if(strlen($user_data['passwd']) != 32)
                {
                        $user_data['passwd_type'] = IL_PASSWD_PLAIN;
                }
                else
                {
                        $user_data['passwd_type'] = IL_PASSWD_MD5;
                }
        $this->__setUserData($new_user,$user_data);

                $ilLog->write('SOAP: addUser()');

                // Need this for entry in object_data
                $new_user->setTitle($new_user->getFullname());
                $new_user->setDescription($new_user->getEmail());

                if ($user_data["import_id"] != "")
                {
                        $new_user->setImportId($user_data["import_id"]);
                }

                $new_user->create();


                $new_user->saveAsNew();

                // If agreement is given. Set user agreement accepted.
                if($user_data['accepted_agreement'])
                {
                        $new_user->writeAccepted();
                }

                // Assign role
                $rbacadmin->assignUser($global_role_id,$new_user->getId());

                // Assign user prefs
                $new_user->setLanguage($user_data['user_language']);
                $new_user->setPref('style',$user_data['user_style']);
                $new_user->setPref('skin',$user_data['user_skin']);
                $new_user->setPref('hits_per_page',$ilSetting->get('hits_per_page'));
                $new_user->setPref('show_users_online',$ilSetting->get('show_users_online'));
                $new_user->writePrefs();

                return $new_user->getId();
        }

Here is the call graph for this function:

ilSoapUserAdministration::deleteUser ( sid,
user_id 
)

Definition at line 349 of file class.ilSoapUserAdministration.php.

References $log, ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), and ilObjectFactory::getInstanceByObjId().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                if(!isset($user_id))
                {
                        return $this->__raiseError('No user_id given. Aborting','Client');
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $ilUser, $log;

                if(!$rbacsystem->checkAccess('delete',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                if(!$ilUser->getLoginByUserId($user_id))
                {
                        return $this->__raiseError('User id: '.$user_id.' is not a valid identifier. Aborting','Client');
                }
                if($ilUser->getId() == $user_id)
                {
                        return $this->__raiseError('Cannot delete myself. Aborting','Client');
                }
                if($user_id == SYSTEM_USER_ID)
                {
                        return $this->__raiseError('Cannot delete root account. Aborting','Client');
                }
                // Delete him
                $log->write('SOAP: deleteUser()');
                $delete_user =& ilObjectFactory::getInstanceByObjId($user_id,false);
                $delete_user->delete();

                return true;
        }

Here is the call graph for this function:

ilSoapUserAdministration::getUser ( sid,
user_id 
)

Definition at line 163 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), __readUserData(), and ilObjectFactory::getInstanceByObjId().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $ilUser;

                if(!$rbacsystem->checkAccess('read',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                if($ilUser->getLoginByUserId($user_id))
                {
                        $tmp_user =& ilObjectFactory::getInstanceByObjId($user_id);
                        $usr_data = $this->__readUserData($tmp_user);

                        return $usr_data;
                }
                return $this->__raiseError('User does not exist','Client');
        }

Here is the call graph for this function:

ilSoapUserAdministration::getUserForRole ( sid,
role_id,
attachRoles,
active 
)
Returns:
list of users of a specific role, following dtd users_3_7

Definition at line 1024 of file class.ilSoapUserAdministration.php.

References $data, ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), ilPrivacySettings::_getInstance(), and ilObjUser::_getUsersForRole().

        {

                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                include_once './classes/class.ilObjRole.php';
                global $ilDB, $rbacreview, $rbacsystem, $tree,$ilUser;


                $global_roles = $rbacreview->getGlobalRoles();


                if (in_array($role_id, $global_roles))
                {
                        if ($role_id == SYSTEM_ROLE_ID && ! in_array(SYSTEM_ROLE_ID, $rbacreview->assignedRoles($ilUser->getId()))
                        )
                        {
                                return $this->__raiseError("Role access not permitted. ($role_id)","Server");
                        }
                }
                else
                {
                        $rolf = $rbacreview->getFoldersAssignedToRole($role_id,true);
                        if ($rbacreview->isDeleted($rolf[0])
                                        || ! $rbacsystem->checkAccess('write',$tree->getParentId($rolf[0])))
                        {
                                return $this->__raiseError("Role access not permitted. ($role_id)","Server");
                        }
                        include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
                        $privacy = ilPrivacySettings::_getInstance();
                        if(!$rbacsystem->checkAccess('read',SYSTEM_USER_ID) and
                           !$rbacsystem->checkAccess('export_member_data',$privacy->getPrivacySettingsRefId())) {
                                        return $this->__raiseError("Export of local role members not permitted. ($role_id)","Server");
                        }
                        
                        
                }

                $data = ilObjUser::_getUsersForRole($role_id, $active);
                include_once './Services/User/classes/class.ilUserXMLWriter.php';

                $xmlWriter = new ilUserXMLWriter();
                $xmlWriter->setAttachRoles($attachRoles);
                $xmlWriter->setObjects($data);

                if($xmlWriter->start())
                {
                        return $xmlWriter->getXML();
                }
                return $this->__raiseError('Error in getUsersForRole','Server');
        }

Here is the call graph for this function:

ilSoapUserAdministration::getUsersForContainer ( sid,
ref_id,
attachRoles,
active 
)

return list of users following dtd users_3_7

Definition at line 936 of file class.ilSoapUserAdministration.php.

References $data, $ref_id, ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), ilObjUser::_getUsersForFolder(), ilObjUser::_getUsersForGroup(), and ilObjectFactory::getInstanceByRefId().

        {

            if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
        global $ilDB, $rbacreview, $rbacsystem;



                if ($ref_id == -1)
                        $ref_id = USER_FOLDER_ID;

//echo "ref_id:".$ref_id;

                if(!$rbacsystem->checkAccess('read', $ref_id))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                if (!$object = ilObjectFactory::getInstanceByRefId($ref_id, false))
                {
                        return $this->__raiseError("No object for reference id $ref_id", "Server");
                }


                $type = $object->getType();

                if ($type =="cat" || $type == "crs" || $type=="grp" || $type=="usrf")
                {
                    $data = array();
                        switch ($type) {
                            case "usrf":
                                $data = ilObjUser::_getUsersForFolder(USER_FOLDER_ID, $active);
                                break;
                                case "cat":
                                        $data =  ilObjUser::_getUsersForFolder($ref_id, $active);
                                        break;
                                case "crs":
                                {
                                        $object->initCourseMemberObject();

                                        // GET ALL MEMBERS
                                        $members = array();
                                        $roles = $object->__getLocalRoles();

                                        foreach($roles as $role_id)
                                        {
                                                $members = array_merge($rbacreview->assignedUsers($role_id, array()),$members);
                                        }

                                        $data = $members;

                                        break;
                                }
                                case "grp":
                                        $member_ids = $object->getGroupMemberIds();
                                        $data = ilObjUser::_getUsersForGroup($member_ids, $active);
                                        break;
                        }

                        if (is_array($data))
                        {
                                include_once './Services/User/classes/class.ilUserXMLWriter.php';

                                $xmlWriter = new ilUserXMLWriter();
                                $xmlWriter->setObjects($data);

                                $xmlWriter->setAttachRoles ($attachRoles);

                                if($xmlWriter->start())
                                {
                                        return $xmlWriter->getXML();
                                }
                        }
                        return $this->__raiseError('Error in processing information. This is likely a bug.','Server');
                }
                return $this->__raiseError('Type '.$type.' not yet supported','Client');
        }

Here is the call graph for this function:

ilSoapUserAdministration::getUserXML ( sid,
a_user_ids,
attach_roles 
)

return user xmls for given user ids (csv separated ids) as xml based on usr dtd.

Parameters:
string sid session id
string a_userids array of user ids, may be numeric or ilias ids
boolean attachRoles if true, role assignments will be attached, nothing will be done otherwise
Returns:
string xml string based on usr dtd

Definition at line 1277 of file class.ilSoapUserAdministration.php.

References $data, ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), and ilObjUser::_getUserData().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $ilUser, $ilDB;

                if(!$rbacsystem->checkAccess('read',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                $data = ilObjUser::_getUserData($a_user_ids);

                include_once './Services/User/classes/class.ilUserXMLWriter.php';
                $xmlWriter = new ilUserXMLWriter();
                $xmlWriter->setAttachRoles($attach_roles);
                $xmlWriter->setObjects($data);

                if($xmlWriter->start())
                {
                        return $xmlWriter->getXML();
                }

                return $this->__raiseError('User does not exist','Client');
        }

Here is the call graph for this function:

ilSoapUserAdministration::hasNewMail ( sid  ) 

Definition at line 1310 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), and ilMailbox::hasNewMail().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                include_once ("Services/Mail/classes/class.ilMailbox.php");
                global $ilUser;

                if (ilMailbox::hasNewMail($ilUser->getId()) > 0)
                {
                        return true;
                }
                else
                {
                        return false;
                }
        }

Here is the call graph for this function:

ilSoapUserAdministration::ilSoapUserAdministration (  ) 

Definition at line 37 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::ilSoapAdministration().

Here is the call graph for this function:

ilSoapUserAdministration::importUsers ( sid,
folder_id,
usr_xml,
conflict_rule,
send_account_mail 
)

define ("IL_FAIL_ON_CONFLICT", 1); define ("IL_UPDATE_ON_CONFLICT", 2); define ("IL_IGNORE_ON_CONFLICT", 3);

Definition at line 636 of file class.ilSoapUserAdministration.php.

References $ilLog, $lng, ilSoapAdministration::__checkSession(), ilUtil::__extractId(), __getImportProtocolAsXML(), __getUserMappingAsXML(), ilSoapAdministration::__raiseError(), ilObjRole::_getAssignUsersStatus(), ilObject::_lookupTitle(), domxml_open_mem(), ilObjectFactory::getInstanceByRefId(), and isPermittedRole().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }


                // Include main header
                include_once './include/inc.header.php';
                include_once './Services/User/classes/class.ilUserImportParser.php';
                include_once './classes/class.ilObjRole.php';
                include_once './classes/class.ilObjectFactory.php';
                global $rbacreview, $rbacsystem, $tree, $lng,$ilUser,$ilLog;

        // this takes time but is nescessary
                $error = false;


                // validate to prevent wrong XMLs
                $this->dom = @domxml_open_mem($usr_xml, DOMXML_LOAD_VALIDATING, $error);
                if ($error)
                {
                    $msg = array();
                    if (is_array($error))
                    {
                        foreach ($error as $err) {
                                        $msg []= "(".$err["line"].",".$err["col"]."): ".$err["errormessage"];
                        }
                    }
                    else 
                    {
                                $msg[] = $error;
                        }
                        $msg = join("\n",$msg);
                        return $this->__raiseError($msg, "Client");
                }


                switch ($conflict_rule)
                {
                        case 2:
                                $conflict_rule = IL_UPDATE_ON_CONFLICT;
                                break;
                        case 3:
                                $conflict_rule = IL_IGNORE_ON_CONFLICT;
                                break;
                        default:
                                $conflict_rule = IL_FAIL_ON_CONFLICT;
                }


                // folder id 0, means to check permission on user basis!
                // must have create user right in time_limit_owner property (which is ref_id of container)
                if ($folder_id != 0)
                {
                // determine where to import
                if ($folder_id == -1)
                        $folder_id = USER_FOLDER_ID;

                        // get folder
                $import_folder = ilObjectFactory::getInstanceByRefId($folder_id, false);
                // id does not exist
                if (!$import_folder)
                                return $this->__raiseError('Wrong reference id.','Server');

                // folder is not a folder, can also be a category
                if ($import_folder->getType() != "usrf" && $import_folder->getType() != "cat")
                        return $this->__raiseError('Folder must be a usr folder or a category.','Server');

                // check access to folder
                if(!$rbacsystem->checkAccess('cat_administrate_users',$folder_id))
                {
                        return $this->__raiseError('Missing permission for creating users within '.$import_folder->getTitle(),'Server');
                }
                }

                // first verify


                $importParser = new ilUserImportParser("", IL_VERIFY, $conflict_rule);
            $importParser->setUserMappingMode(IL_USER_MAPPING_ID);
                $importParser->setXMLContent($usr_xml);
                $importParser->startParsing();

                switch ($importParser->getErrorLevel())
                {
                        case IL_IMPORT_SUCCESS :
                                break;
                        case IL_IMPORT_WARNING :
                                return $this->__getImportProtocolAsXML ($importParser->getProtocol("User Import Log - Warning"));
                                break;
                        case IL_IMPORT_FAILURE :
                                return $this->__getImportProtocolAsXML ($importParser->getProtocol("User Import Log - Failure"));
                }

                // verify is ok, so get role assignments

                $importParser = new ilUserImportParser("", IL_EXTRACT_ROLES, $conflict_rule);
                $importParser->setXMLContent($usr_xml);
            $importParser->setUserMappingMode(IL_USER_MAPPING_ID);
                $importParser->startParsing();

                $roles = $importParser->getCollectedRoles();

                //print_r($roles);



                // roles to be assigned, skip if one is not allowed!
                $permitted_roles = array();
                foreach ($roles as $role_id => $role)
                {
                        if (!is_numeric ($role_id))
                        {
                                // check if internal id
                                $internalId = ilUtil::__extractId($role_id, IL_INST_ID);
                                
                                if (is_numeric($internalId))
                                {
                                        $role_id = $internalId;
                                        $role_name = $role_id;
                                }
/*                              else // perhaps it is a rolename
                                {
                                        $role  = ilSoapUserAdministration::__getRoleForRolename ($role_id);
                                        $role_name = $role->title;
                                        $role_id = $role->role_id;
                                }*/
                        }
                        
                        if($this->isPermittedRole($folder_id,$role_id))
                        {
                                $permitted_roles[$role_id] = $role_id;
                        }
                        else
                        {
                                $role_name = ilObject::_lookupTitle($role_id);
                                return $this->__raiseError("Could not find role ".$role_name.". Either you use an invalid/deleted role ".
                                        "or you try to assign a local role into the non-standard user folder and this role is not in its subtree.",'Server');                           
                        }
                }

                $global_roles = $rbacreview->getGlobalRoles();

                //print_r ($global_roles);



                foreach ($permitted_roles as $role_id => $role_name)
                {
                    if ($role_id != "")
                                {
                                        if (in_array($role_id, $global_roles))
                                        {
                                                if ($role_id == SYSTEM_ROLE_ID && ! in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId()))
                                                || ($folder_id != USER_FOLDER_ID && $folder_id != 0 && ! ilObjRole::_getAssignUsersStatus($role_id))
                                                )
                                                {
                                                        return $this->__raiseError($lng->txt("usrimport_with_specified_role_not_permitted")." $role_name ($role_id)",'Server');
                                                }
                                        }
                                        else
                                        {
                                                $rolf = $rbacreview->getFoldersAssignedToRole($role_id,true);
                                                if ($rbacreview->isDeleted($rolf[0])
                                                                || ! $rbacsystem->checkAccess('write',$tree->getParentId($rolf[0])))
                                                {

                                                        return $this->__raiseError($lng->txt("usrimport_with_specified_role_not_permitted")." $role_name ($role_id)","Server");
                                                }
                                        }
                                }
                }

                //print_r ($permitted_roles);

                $importParser = new ilUserImportParser("", IL_USER_IMPORT, $conflict_rule);
                $importParser->setSendMail($send_account_mail);
                $importParser->setUserMappingMode(IL_USER_MAPPING_ID);
                $importParser->setFolderId($folder_id);
                $importParser->setXMLContent($usr_xml);

                $importParser->setRoleAssignment($permitted_roles);

                $importParser->startParsing();

                if ($importParser->getErrorLevel() != IL_IMPORT_FAILURE)
                {
                          return $this->__getUserMappingAsXML ($importParser->getUserMapping());
                }
                return $this->__getImportProtocolAsXML ($importParser->getProtocol());

        }

Here is the call graph for this function:

ilSoapUserAdministration::isPermittedRole ( a_folder,
a_role 
) [protected]

check if assignment is allowed

protected

Parameters:
@return 

Definition at line 838 of file class.ilSoapUserAdministration.php.

References $ilLog, $location, and ilObjRole::_getAssignUsersStatus().

Referenced by importUsers().

        {
                static $checked_roles = array();
                static $global_roles = null;
                
                
                if(isset($checked_roles[$a_role]))
                {
                        return $checked_roles[$a_role];
                }
                
                global $rbacsystem,$rbacreview,$ilUser,$tree,$ilLog;
                
                $locations = $rbacreview->getFoldersAssignedToRole($a_role,true);
                $location = $locations[0];
                
                // global role
                if($location == ROLE_FOLDER_ID)
                {
                        $ilLog->write(__METHOD__.': Check global role');
                        // check assignment permission if called from local admin
                        
                        
                        if($a_folder != USER_FOLDER_ID and $a_folder != 0)
                        {
                        $ilLog->write(__METHOD__.': '.$a_folder);
                                include_once './classes/class.ilObjRole.php';
                                if(!ilObjRole::_getAssignUsersStatus($a_role))
                                {
                                        $ilLog->write(__METHOD__.': No assignment allowed');
                                    $checked_roles[$a_role] = false;
                                    return false;
                                }
                        }
                        // exclude anonymous role from list
                        if ($a_role == ANONYMOUS_ROLE_ID)
                        {
                                $ilLog->write(__METHOD__.': Anonymous role chosen.');
                            $checked_roles[$a_role] = false;
                                return false;
                        }
                        // do not allow to assign users to administrator role if current user does not has SYSTEM_ROLE_ID
                        if($a_role == SYSTEM_ROLE_ID and !in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
                        {
                                $ilLog->write(__METHOD__.': System role assignment forbidden.');
                            $checked_roles[$a_role] = false;
                                return false;
                        }
                        
                        // Global role assignment ok
                        $ilLog->write(__METHOD__.': Assignment allowed.');
                    $checked_roles[$a_role] = true;
                        return true;
                }
                elseif($location)
                {
                        $ilLog->write(__METHOD__.': Check local role.');

                        // It's a local role
                        $rolfs = $rbacreview->getFoldersAssignedToRole($a_role,true);
                        $rolf = $rolfs[0];


                        // only process role folders that are not set to status "deleted"
                        // and for which the user has write permissions.
                        // We also don't show the roles which are in the ROLE_FOLDER_ID folder.
                        // (The ROLE_FOLDER_ID folder contains the global roles).
                        if($rbacreview->isDeleted($rolf)
                                || !$rbacsystem->checkAccess('edit_permission',$tree->getParentId($rolf)))
                        {
                                $ilLog->write(__METHOD__.': Role deleted or no permission.');
                            $checked_roles[$a_role] = false;
                                return false;
                        }
                        // A local role is only displayed, if it is contained in the subtree of
                        // the localy administrated category. If the import function has been
                        // invoked from the user folder object, we show all local roles, because
                        // the user folder object is considered the parent of all local roles.
                        // Thus, if we start from the user folder object, we initializ$isInSubtree = $folder_id == USER_FOLDER_ID || $folder_id == 0;e the
                        // isInSubtree variable with true. In all other cases it is initialized
                        // with false, and only set to true if we find the object id of the
                        // locally administrated category in the tree path to the local role.
                        if($a_folder != USER_FOLDER_ID and $a_folder != 0 and !$tree->isGrandChild($a_folder,$rolf))
                        {
                                $ilLog->write(__METHOD__.': Not in path of category.');
                            $checked_roles[$a_role] = false;
                            return false;
                        }
                        $ilLog->write(__METHOD__.': Assignment allowed.');
                    $checked_roles[$a_role] = true;
                    return true;
                }
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilSoapUserAdministration::login ( client,
username,
password 
)

Definition at line 44 of file class.ilSoapUserAdministration.php.

References $client, ilSoapAdministration::__initAuthenticationObject(), and ilSoapAdministration::__raiseError().

        {
                $this->__initAuthenticationObject();
                $this->sauth->setClient($client);
                $this->sauth->setUsername($username);
                $this->sauth->setPassword($password);

                $authenticated = true;
                if(!$this->sauth->authenticate())
                {
                        // Check if password is md5 crypted check for it
                        if(strlen($password) == 32)
                        {
                                $this->__initAuthenticationObject();
                                $this->sauth->setClient($client);
                                $this->sauth->setUsername($username);
                                $this->sauth->setPassword($password);
                                $this->sauth->setPasswordType(IL_AUTH_MD5);
                                if(!$this->sauth->authenticate())
                                {
                                        $authenticated = false;
                                }
                        }
                        else
                        {
                                $authenticated = false;
                        }
                }
                if(!$authenticated)
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }
                return $this->sauth->getSid().'::'.$client;
        }

Here is the call graph for this function:

ilSoapUserAdministration::loginCAS ( client,
PT,
username 
)

Definition at line 80 of file class.ilSoapUserAdministration.php.

References $client, ilSoapAdministration::__initAuthenticationObject(), and ilSoapAdministration::__raiseError().

        {
                $this->__initAuthenticationObject(AUTH_CAS);
                $this->sauth->setClient($client);
                $this->sauth->setUsername($username);
                $this->sauth->setPT($PT);
                $authenticated = true;
                //include_once("./Services/CAS/classes/class.ilCASAuth.php");
                //include_once("./Services/CAS/phpcas/source/CAS/CAS.php");
                if(!$this->sauth->authenticate())
                {
                        $authenticated = false;
                }
                if(!$authenticated)
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }
                return $this->sauth->getSid().'::'.$client;
        }

Here is the call graph for this function:

ilSoapUserAdministration::loginLDAP ( client,
username,
password 
)

Definition at line 101 of file class.ilSoapUserAdministration.php.

References $client, ilSoapAdministration::__initAuthenticationObject(), and ilSoapAdministration::__raiseError().

        {
                $this->__initAuthenticationObject(AUTH_LDAP);
                $this->sauth->setClient($client);
                $this->sauth->setUsername($username);
                $this->sauth->setPassword($password);
                $authenticated = true;
                if(!$this->sauth->authenticate())
                {
                        $authenticated = false;
                }
                if(!$authenticated)
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }
                return $this->sauth->getSid().'::'.$client;
        }

Here is the call graph for this function:

ilSoapUserAdministration::logout ( sid  ) 

Definition at line 119 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__checkSession(), and ilSoapAdministration::__raiseError().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                if(!$this->sauth->logout())
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                return true;
        }

Here is the call graph for this function:

ilSoapUserAdministration::lookupUser ( sid,
user_name 
)

Definition at line 134 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), and ilObjUser::getUserIdByLogin().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                if(!strlen($user_name))
                {
                        return $this->__raiseError('No username given. Aborting','Client');
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $ilUser ;


                if($ilUser->getLogin() != $user_name && !$rbacsystem->checkAccess('read',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed. '.USER_FOLDER_ID,'Server');
                }

                $user_id = ilObjUser::getUserIdByLogin($user_name);


                return $user_id ? $user_id : "0";

        }

Here is the call graph for this function:

ilSoapUserAdministration::searchUser ( sid,
a_keyfields,
query_operator,
a_keyvalues,
attach_roles,
active 
)

return user xml following dtd 3.7

Parameters:
String $sid session id
String array $a_keyfields array of user fieldname, following dtd 3.7
String $queryOperator any logical operator
String array $a_keyValues values separated by space, at least 3 chars per search term

Definition at line 1165 of file class.ilSoapUserAdministration.php.

References $data, __buildSearchQuery(), ilSoapAdministration::__checkSession(), and ilSoapAdministration::__raiseError().

                                                                                                        {

            if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }


                // Include main header
                include_once './include/inc.header.php';

                global $ilDB, $rbacsystem;

                if(!$rbacsystem->checkAccess('read', USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }


        if (!count($a_keyfields))
           $this->__raiseError('At least one keyfield is needed','Client');

        if (!count ($a_keyvalues))
           $this->__raiseError('At least one keyvalue is needed','Client');

        if (!strcasecmp($query_operator,"and")==0 || !strcasecmp($query_operator,"or") == 0)
           $this->__raiseError('Query operator must be either \'and\' or \'or\'','Client');


        $query = $this->__buildSearchQuery ($a_keyfields, $query_operator, $a_keyvalues);

                $query = "SELECT usr_data.*, usr_pref.value AS language
                          FROM usr_data
                          LEFT JOIN usr_pref
                          ON usr_pref.usr_id = usr_data.usr_id AND usr_pref.keyword = 'language'
                          WHERE 1 ".$query;

             if (is_numeric($active) && $active > -1)
                        $query .= " AND active = ". $ilDB->quote($active);

                 $query .= " ORDER BY usr_data.lastname, usr_data.firstname ";

                 //echo $query;

             $r = $ilDB->query($query);

             $data = array();

                 while($row = $r->fetchRow(DB_FETCHMODE_ASSOC))
                 {
                      $data[] = $row;
                 }

                 include_once './Services/User/classes/class.ilUserXMLWriter.php';

                 $xmlWriter = new ilUserXMLWriter();
                 $xmlWriter->setAttachRoles($attach_roles);
                 $xmlWriter->setObjects($data);

                 if($xmlWriter->start())
                 {
                        return $xmlWriter->getXML();
                 }

                 return $this->__raiseError('Error in searchUser','Server');
           }

Here is the call graph for this function:

ilSoapUserAdministration::updatePassword ( sid,
user_id,
new_password 
)

Definition at line 239 of file class.ilSoapUserAdministration.php.

References ilSoapAdministration::__checkSession(), ilSoapAdministration::__raiseError(), and ilObjectFactory::getInstanceByObjId().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem;

                if(!$rbacsystem->checkAccess('write',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                if(!$tmp_user =& ilObjectFactory::getInstanceByObjId($user_id,false))
                {
                        return $this->__raiseError('No valid user_id given.','Client');
                }

                $tmp_user->replacePassword($new_password);

                return true;
        }

Here is the call graph for this function:

ilSoapUserAdministration::updateUser ( sid,
user_data 
)

Definition at line 189 of file class.ilSoapUserAdministration.php.

References $log, ilSoapAdministration::__checkSession(), ilSoapAdministration::__getMessage(), ilSoapAdministration::__raiseError(), __readUserData(), __setUserData(), __substituteUserData(), __validateUserData(), and ilObjectFactory::getInstanceByObjId().

        {
                if(!$this->__checkSession($sid))
                {
                        return $this->__raiseError($this->sauth->getMessage(),$this->sauth->getMessageCode());
                }

                // Include main header
                include_once './include/inc.header.php';
                global $rbacsystem, $ilUser, $log;

                if(!$rbacsystem->checkAccess('write',USER_FOLDER_ID))
                {
                        return $this->__raiseError('Check access failed.','Server');
                }

                if(!$user_obj =& ilObjectFactory::getInstanceByObjId($user_data['usr_id'],false))
                {
                        return $this->__raiseError('User with id '.$user_data['usr_id'].' does not exist.','Client');
                }

                $user_old = $this->__readUserData($user_obj);
                $user_new = $this->__substituteUserData($user_old,$user_data);

                if(!$this->__validateUserData($user_new,false))
                {
                        return $this->__raiseError($this->__getMessage(),'Client');
                }

                if(strlen($user_data['passwd']) != 32)
                {
                        $user_new['passwd_type'] = IL_PASSWD_PLAIN;
                }
                else
                {
                        $user_new['passwd_type'] = IL_PASSWD_MD5;
                }
                $this->__setUserData($user_obj,$user_new);

                $log->write('SOAP: updateUser()');
                $user_obj->update();

                if($user_data['accepted_agreement'] and !$user_obj->hasAcceptedUserAgreement())
                {
                        $user_obj->writeAccepted();
                }

                return true;
        }

Here is the call graph for this function:


The documentation for this class was generated from the following file: