1<?php 2/* Copyright (c) 1998-2016 ILIAS open source, Extended GPL, see docs/LICENSE */ 3 4/** 5 * Class ilServicesUserTasks 6 * 7 * @author Maximilian Becker <mbecker@databay.de> 8 * @version $Id$ 9 * 10 */ 11class ilServicesUserTasks 12{ 13 const ANON_FIRSTNAME = 'Anonymous'; 14 const ANON_LASTNAME = 'Exam-User'; 15 const ANON_LOGIN_PREFIX = 'EX-'; 16 const ANON_GENDER = 'm'; 17 const PASSWORD_CHARACTERSET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; 18 19 /** 20 * @param ilNode $context 21 * @param array $params 22 * 23 * @return array 24 */ 25 public static function createAnonymousUsers($context, $params) 26 { 27 $input_params = $params[0]; 28 $output_params =$params[1]; 29 30 // IN: useridlist 31 // OUT: anonaccountlist, userIdList 32 33 $pseudonymousUserMap = array(); 34 $discloseMap = array(); 35 $usrIdList = array(); 36 37 foreach ($input_params['usrIdList'] as $user_id) { 38 $source_user = new ilObjUser($user_id, false); 39 $anon_login = self::getValidLogin(); 40 $anon_password = self::generatePassword(); 41 $new_id = self::createUser( 42 $anon_login, 43 $anon_password, 44 $source_user->getEmail() 45 ); 46 47 $pseudonymousUserMap[] = array( 48 'Original User' => $user_id, 49 'Anonymous User' => $new_id 50 ); 51 52 $discloseMap[] = array( 53 'Original User' => $user_id, 54 'Original Login' => $source_user->getLogin(), 55 'Original Firstname' => $source_user->getFirstname(), 56 'Original Lastname' => $source_user->getLastname(), 57 'Original Matriculation' => $source_user->getMatriculation(), 58 'Original Gender' => $source_user->getGender(), 59 'Original EMail' => $source_user->getEmail(), 60 'Anon User' => $new_id, 61 'Anon Login' => $anon_login, 62 'Anon Password' => $anon_password 63 ); 64 65 $usrIdList[] = $new_id; 66 } 67 68 return array($output_params[0] => $discloseMap); 69 } 70 71 /** 72 * @return string 73 */ 74 protected static function getValidLogin() 75 { 76 $random = new \ilRandom(); 77 do { 78 $login = self::ANON_LOGIN_PREFIX . str_pad($random->int(0, 9999999), 7, STR_PAD_LEFT); 79 } while (ilObjUser::_loginExists($login)); 80 81 return $login; 82 } 83 84 /** 85 * @param int $length 86 * 87 * @return string 88 */ 89 protected static function generatePassword($length = 8) 90 { 91 $random = new \ilRandom(); 92 $password = array(); 93 $setLength = strlen(self::PASSWORD_CHARACTERSET) - 1; 94 95 for ($i = 0; $i < $length; $i++) { 96 $index = $random->int(0, $setLength); 97 $password[] = self::PASSWORD_CHARACTERSET[$index]; 98 } 99 100 return implode($password); 101 } 102 103 /** 104 * @param string $login 105 * @param string $password 106 * @param string $email 107 * 108 * @return int 109 */ 110 protected static function createUser($login, $password, $email) 111 { 112 global $DIC; 113 $rbacadmin = $DIC['rbacadmin']; 114 115 $user = new ilObjUser(); 116 $user->setTimeLimitUnlimited(true); 117 $user->setFirstname(self::ANON_FIRSTNAME); 118 $user->setLastname(self::ANON_LASTNAME); 119 $user->setEmail($email); 120 $user->setGender(self::ANON_GENDER); 121 $user->setPasswd($password, IL_PASSWD_PLAIN); 122 $user->setLogin($login); 123 $user->setActive(true, 6); 124 $user->create(); 125 126 $user->setLastPasswordChangeTS(0); 127 $user->saveAsNew(); 128 129 $user->setPref('send_info_mails', 'n'); 130 $user->writePrefs(); 131 132 $rbacadmin->assignUser(4, $user->getId(), true); 133 134 return $user->getId(); 135 } 136 137 /** 138 * @param ilNode $context 139 * @param array $params 140 */ 141 public static function repersonalizeUsers($context, $params) 142 { 143 // IN: discloseMap 144 $input_params = $params[0]; 145 $output_params =$params[1]; 146 147 foreach ($input_params['discloseMap'] as $disclose_entry) { 148 $anon_user = new ilObjUser($disclose_entry['Anon User'], false); 149 $anon_user->setFirstname($disclose_entry['Original Firstname']); 150 $anon_user->setLastname($disclose_entry['Original Lastname']); 151 $anon_user->setMatriculation($disclose_entry['Original Matriculation']); 152 $anon_user->setGender($disclose_entry['Original Gender']); 153 $anon_user->update(); 154 } 155 156 // OUT: void 157 } 158} 159