'index.php', "name" => get_lang('PlatformAdmin')]; set_time_limit(0); ini_set('memory_limit', -1); Display::display_header($tool_name); $step1Form = new FormValidator('step1Form'); $usernameListFile = $step1Form->addFile('usernameList', get_lang('UsernameList')); $step1Form->addButtonUpload(get_lang('Upload')); $step2Form = new FormValidator('step2Form'); $usernameTextarea = $step2Form->addTextarea( 'usersToBeAnonymized', get_lang('UsersAboutToBeAnonymized'), [ 'readonly' => 1, ] ); $anonymizedSessions = $step2Form->addCheckBox('anonymize_sessions', null, get_lang('AnonymizeUserSessions')); $step2Form->addButtonUpdate(get_lang('Anonymize')); if ($step1Form->validate() && $usernameListFile->isUploadedFile()) { $filePath = $usernameListFile->getValue()['tmp_name']; if (!file_exists($filePath)) { throw new Exception(get_lang('CouldNotReadFile').' '.$filePath); } $submittedUsernames = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if (false === $submittedUsernames) { throw new Exception(get_lang('CouldNotReadFileLines').' '.$filePath); } if (empty($submittedUsernames)) { printf( '

'.get_lang('FileXHasNoData').'

', ''.$usernameListFile->getValue()['name'].'' ); } else { printf( '

'.get_lang('FileXHasYNonEmptyLines').'

', ''.$usernameListFile->getValue()['name'].'', count($submittedUsernames) ); $uniqueSubmittedUsernames = array_values(array_unique($submittedUsernames)); if (count($uniqueSubmittedUsernames) !== count($submittedUsernames)) { printf( '

'.get_lang('DuplicatesOnlyXUniqueUserNames').'

', count($uniqueSubmittedUsernames) ); } $matching = UserManager::getRepository()->matching( Criteria::create()->where( Criteria::expr()->in('username', $uniqueSubmittedUsernames) ) ); foreach ($matching as $element) { if (!is_null($element)) { $users[] = $element; } } if (empty($users)) { echo '

'.get_lang('NoLineMatchedAnyActualUserName').'

'; } else { $foundUsernames = []; foreach ($users as $user) { $foundUsernames[] = $user->getUsername(); } if (count($users) !== count($uniqueSubmittedUsernames)) { printf('

'.get_lang('OnlyXLinesMatchedActualUsers').'

', count($users)); $usernamesNotFound = array_diff($uniqueSubmittedUsernames, $foundUsernames); printf( '

'.get_lang('TheFollowingXLinesDoNotMatchAnyActualUser').'

%s

', count($usernamesNotFound), join("\n", $usernamesNotFound) ); } printf('

'.get_lang('XUsersAreAboutToBeAnonymized').'

', count($foundUsernames)); $usernameTextarea->setValue(join("\n", $foundUsernames)); $step2Form->display(); } } } elseif ($step2Form->validate()) { $usernames = preg_split("/\s+/", $usernameTextarea->getValue()); if (false === $usernames) { throw new Exception('preg_split failed'); } printf('

'.get_lang('LoadingXUsers')."

\n", count($usernames)); $users = UserManager::getRepository()->matching( Criteria::create()->where( Criteria::expr()->in('username', $usernames) ) ); $anonymizedSessionsValue = $anonymizedSessions->getValue(); if (count($users) === count($usernames)) { printf('

'.get_lang('AnonymizingXUsers')."

\n", count($users)); $anonymized = []; $errors = []; $tableSession = Database::get_main_table(TABLE_MAIN_SESSION); foreach ($users as $user) { $username = $user->getUsername(); $userId = $user->getId(); $name = api_get_person_name($user->getFirstname(), $user->getLastname()); echo "

$username ($name, id= $userId)

"; try { if (UserManager::anonymize($userId)) { if ($anonymizedSessionsValue) { $sessions = SessionManager::getSessionsFollowedByUser($userId); if ($sessions) { echo '

'.get_lang('Sessions').'

'; foreach ($sessions as $session) { $sessionId = $session['id']; $sessionTitle = $session['name']; $usersCount = SessionManager::get_users_by_session($sessionId, null, true); echo '

'.$sessionTitle.' ('.$sessionId.') - '.get_lang('Students').': '.$usersCount.'

'; if (1 === $usersCount) { $uniqueId = uniqid('anon_session', true); echo '

'.get_lang('Rename').': '.$sessionTitle.' -> '.$uniqueId.'

'; $sql = "UPDATE $tableSession SET name = '$uniqueId' WHERE id = $sessionId"; Database::query($sql); } else { echo '

'.sprintf(get_lang('SessionXSkipped'), $sessionTitle).'

'; } } } } echo get_lang('Done'); $anonymized[] = $username; } else { echo 'error: UserManager::anonymize failed.'; $errors[] = $username; } } catch (Exception $exception) { echo 'error: '.$exception->getMessage(); $errors[] = $username; } echo "

\n"; } if (empty($error)) { printf('

'.get_lang('AllXUsersWereAnonymized').'

', count($users)); } else { printf( '

' .get_lang('OnlyXUsersWereAnonymized') .' ' .get_lang('AttemptedAnonymizationOfTheseXUsersFailed') .'

%s

', count($users), count($errors), implode("\n", $errors) ); } } else { printf( '

'.get_lang('InternalInconsistencyXUsersFoundForYUserNames').'

', count($users), count($usernames) ); } } else { echo '

'.get_lang('PleaseUploadListOfUsers').'

'; $step1Form->display(); } Display::display_footer();