'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 "'.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();