You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.0 KiB
172 lines
6.0 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
require_once __DIR__.'/../inc/global.inc.php';
|
|
$this_section = SECTION_COURSES;
|
|
|
|
// notice for unauthorized people.
|
|
api_protect_course_script(true);
|
|
|
|
if (api_get_setting('allow_user_course_subscription_by_course_admin') == 'false') {
|
|
if (!api_is_platform_admin()) {
|
|
api_not_allowed(true);
|
|
}
|
|
}
|
|
|
|
// Make sure we know if we're importing students or teachers into the course
|
|
$userType = STUDENT;
|
|
if (!empty($_REQUEST['type']) && $_REQUEST['type'] == COURSEMANAGER) {
|
|
$userType = COURSEMANAGER;
|
|
}
|
|
|
|
$tool_name = get_lang('Import users list');
|
|
|
|
$interbreadcrumb[] = ["url" => "user.php", "name" => get_lang("Users")];
|
|
$interbreadcrumb[] = ["url" => "#", "name" => get_lang("Import users list")];
|
|
|
|
$form = new FormValidator('user_import', 'post', 'user_import.php');
|
|
$form->addElement('header', $tool_name);
|
|
$form->addElement('file', 'import_file', get_lang('CSV file import location'));
|
|
$form->addElement('checkbox', 'unsubscribe_users', null, get_lang('Unsubscribe users already added'));
|
|
$form->addElement('hidden', 'type', $userType);
|
|
$form->addButtonImport(get_lang('Import'));
|
|
|
|
$course_code = api_get_course_id();
|
|
|
|
if (empty($course_code)) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
$session_id = api_get_session_id();
|
|
$message = '';
|
|
$user_to_show = [];
|
|
$type = '';
|
|
|
|
if ($form->validate()) {
|
|
if (isset($_FILES['import_file']['size']) && $_FILES['import_file']['size'] !== 0) {
|
|
$unsubscribe_users = isset($_POST['unsubscribe_users']) ? true : false;
|
|
//@todo : csvToArray deprecated
|
|
$users = Import::csvToArray($_FILES['import_file']['tmp_name']);
|
|
$invalid_users = [];
|
|
$clean_users = [];
|
|
|
|
if (!empty($users)) {
|
|
$empty_line = 0;
|
|
foreach ($users as $user_data) {
|
|
$user_id = null;
|
|
$user_data = array_change_key_case($user_data, CASE_LOWER);
|
|
|
|
// Checking "username" field
|
|
if (isset($user_data['username']) && !empty($user_data['username'])) {
|
|
$user_id = UserManager::get_user_id_from_username($user_data['username']);
|
|
}
|
|
|
|
// Checking "id" field
|
|
if (isset($user_data['id']) && !empty($user_data['id'])) {
|
|
$user_id = $user_data['id'];
|
|
}
|
|
|
|
if (UserManager::is_user_id_valid($user_id)) {
|
|
$clean_users[] = $user_id;
|
|
} else {
|
|
$invalid_users[] = $user_data;
|
|
}
|
|
}
|
|
|
|
if (empty($invalid_users)) {
|
|
$type = 'confirmation';
|
|
$message = get_lang('List of users subscribed to course');
|
|
|
|
if ($unsubscribe_users) {
|
|
$current_user_list = CourseManager::get_user_list_from_course_code(
|
|
$course_code,
|
|
$session_id,
|
|
null,
|
|
null,
|
|
$userType
|
|
);
|
|
if (!empty($current_user_list)) {
|
|
$user_ids = [];
|
|
foreach ($current_user_list as $user) {
|
|
if ($userType == COURSEMANAGER) {
|
|
if (CourseManager::is_course_teacher($user['user_id'], $course_code)) {
|
|
$user_ids[] = $user['user_id'];
|
|
}
|
|
} else {
|
|
if (!CourseManager::is_course_teacher($user['user_id'], $course_code)) {
|
|
$user_ids[] = $user['user_id'];
|
|
}
|
|
}
|
|
}
|
|
CourseManager::unsubscribe_user($user_ids, $course_code, $session_id);
|
|
}
|
|
}
|
|
|
|
foreach ($clean_users as $userId) {
|
|
$userInfo = api_get_user_info($userId);
|
|
CourseManager::subscribeUser($userId, $course_code, $userType, $session_id);
|
|
if (empty($session_id)) {
|
|
//just to make sure
|
|
if (CourseManager::is_user_subscribed_in_course($userId, $course_code)) {
|
|
$user_to_show[] = $userInfo['complete_name'];
|
|
}
|
|
} else {
|
|
//just to make sure
|
|
if (CourseManager::is_user_subscribed_in_course($userId, $course_code, true, $session_id)) {
|
|
$user_to_show[] = $userInfo['complete_name'];
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$message = get_lang('Use user\'s IDs from the file to subscribe them');
|
|
$type = 'warning';
|
|
foreach ($invalid_users as $invalid_user) {
|
|
$user_to_show[] = $invalid_user;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Display::display_header();
|
|
|
|
if (!empty($message)) {
|
|
if (!empty($user_to_show)) {
|
|
$userMessage = null;
|
|
foreach ($user_to_show as $user) {
|
|
if (!is_array($user)) {
|
|
$user = [$user];
|
|
}
|
|
$user = array_filter($user);
|
|
$userMessage .= implode(', ', $user)."<br />";
|
|
}
|
|
if ($type == 'confirmation') {
|
|
echo Display::return_message($message.': <br />'.$userMessage, 'confirm', false);
|
|
} else {
|
|
echo Display::return_message($message.': <br />'.$userMessage, 'warning', false);
|
|
}
|
|
} else {
|
|
$empty_line_msg = ($empty_line == 0) ? get_lang('Errors when importing file') : get_lang('Errors when importing file').': '.get_lang('There are empty lines in the header of selected file');
|
|
echo Display::return_message($empty_line_msg, 'error');
|
|
}
|
|
}
|
|
|
|
$form->display();
|
|
|
|
echo get_lang('The CSV file must look like this');
|
|
echo '<blockquote><pre>
|
|
username
|
|
jdoe
|
|
jmontoya
|
|
</pre>
|
|
</blockquote>';
|
|
|
|
echo get_lang('or');
|
|
echo '<blockquote><pre>
|
|
id
|
|
23
|
|
1337
|
|
</pre>
|
|
</blockquote>';
|
|
|
|
Display::display_footer();
|
|
|