chamilo /
chamilo-lms
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /* For licensing terms, see /license.txt */ |
||
| 3 | |||
| 4 | /** |
||
| 5 | * This tool allows platform admins to create courses by uploading a CSV file |
||
| 6 | * Copyright (c) 2005 Bart Mollet <[email protected]> |
||
| 7 | * @package chamilo.admin |
||
| 8 | */ |
||
| 9 | |||
| 10 | /** |
||
| 11 | * Validates imported data. |
||
| 12 | */ |
||
| 13 | function validate_data($courses) |
||
| 14 | { |
||
| 15 | $errors = array (); |
||
| 16 | $coursecodes = array (); |
||
| 17 | foreach ($courses as $index => $course) { |
||
| 18 | $course['line'] = $index +1; |
||
| 19 | |||
| 20 | // 1. Check whether mandatory fields are set. |
||
| 21 | $mandatory_fields = array ('Code', 'Title', 'CourseCategory'); |
||
| 22 | foreach ($mandatory_fields as $field) { |
||
| 23 | if (!isset($course[$field]) || strlen($course[$field]) == 0) { |
||
| 24 | $course['error'] = get_lang($field.'Mandatory'); |
||
| 25 | $errors[] = $course; |
||
| 26 | } |
||
| 27 | } |
||
| 28 | |||
| 29 | // 2. Check current course code. |
||
| 30 | if (isset ($course['Code']) && strlen($course['Code']) != 0) { |
||
| 31 | // 2.1 Check whether code has been already used by this CVS-file. |
||
| 32 | if (isset($coursecodes[$course['Code']])) { |
||
| 33 | $course['error'] = get_lang('CodeTwiceInFile'); |
||
| 34 | $errors[] = $course; |
||
| 35 | } else { |
||
| 36 | // 2.2 Check whether course code has been occupied. |
||
| 37 | $courseInfo = api_get_course_info($course['Code']); |
||
| 38 | if (!empty($courseInfo)) { |
||
| 39 | $course['error'] = get_lang('CodeExists'); |
||
| 40 | $errors[] = $course; |
||
| 41 | } |
||
| 42 | } |
||
| 43 | $coursecodes[$course['Code']] = 1; |
||
| 44 | } |
||
| 45 | |||
| 46 | // 3. Check whether teacher exists. |
||
| 47 | $teacherList = getTeacherListInArray($course['Teacher']); |
||
| 48 | |||
| 49 | if (!empty($teacherList)) { |
||
| 50 | foreach ($teacherList as $teacher) { |
||
| 51 | $teacherInfo = api_get_user_info_from_username($teacher); |
||
| 52 | if (empty($teacherInfo)) { |
||
| 53 | $course['error'] = get_lang('UnknownTeacher').' ('.$teacher.')'; |
||
| 54 | $errors[] = $course; |
||
| 55 | } else { |
||
| 56 | /*if ($teacherInfo['status'] != COURSEMANAGER) { |
||
| 57 | $course['error'] = get_lang('UserIsNotATeacher').' ('.$teacher.')'; |
||
| 58 | $errors[] = $course; |
||
| 59 | }*/ |
||
| 60 | } |
||
| 61 | } |
||
| 62 | } |
||
| 63 | |||
| 64 | // 4. Check whether course category exists. |
||
| 65 | if (isset($course['CourseCategory']) && strlen($course['CourseCategory']) != 0) { |
||
| 66 | $categoryInfo = getCategory($course['CourseCategory']); |
||
| 67 | if (empty($categoryInfo)) { |
||
| 68 | //@todo this is so bad even all lang variables are wrong ... |
||
| 69 | $course['error'] = get_lang('UnkownCategoryCourseCode').' ('.$course['CourseCategory'].')'; |
||
| 70 | $errors[] = $course; |
||
| 71 | } |
||
| 72 | } |
||
| 73 | } |
||
| 74 | |||
| 75 | return $errors; |
||
| 76 | } |
||
| 77 | |||
| 78 | /** |
||
| 79 | * @param array $teachers |
||
| 80 | * |
||
| 81 | * @return array |
||
| 82 | */ |
||
| 83 | function getTeacherListInArray($teachers) |
||
| 84 | { |
||
| 85 | if (!empty($teachers)) { |
||
| 86 | return explode('|', $teachers); |
||
| 87 | } |
||
| 88 | |||
| 89 | return array(); |
||
| 90 | } |
||
| 91 | |||
| 92 | /** |
||
| 93 | * Saves imported data. |
||
| 94 | * @param array $courses List of courses |
||
| 95 | */ |
||
| 96 | function save_data($courses) |
||
| 97 | { |
||
| 98 | $msg = ''; |
||
| 99 | foreach ($courses as $course) { |
||
| 100 | $course_language = $course['Language']; |
||
| 101 | $teachers = getTeacherListInArray($course['Teacher']); |
||
| 102 | $teacherList = array(); |
||
| 103 | $creatorId = api_get_user_id(); |
||
| 104 | |||
| 105 | if (!empty($teachers)) { |
||
| 106 | foreach ($teachers as $teacher) { |
||
| 107 | $teacherInfo = api_get_user_info_from_username($teacher); |
||
| 108 | if (!empty($teacherInfo)) { |
||
| 109 | $teacherList[] = $teacherInfo; |
||
| 110 | } |
||
| 111 | } |
||
| 112 | } |
||
| 113 | |||
| 114 | $params = array(); |
||
| 115 | $params['title'] = $course['Title']; |
||
| 116 | $params['wanted_code'] = $course['Code']; |
||
| 117 | $params['tutor_name'] = null; |
||
| 118 | $params['course_category'] = $course['CourseCategory']; |
||
| 119 | $params['course_language'] = $course_language; |
||
| 120 | $params['user_id'] = $creatorId; |
||
| 121 | |||
| 122 | $addMeAsTeacher = isset($_POST['add_me_as_teacher']) ? $_POST['add_me_as_teacher'] : false; |
||
| 123 | $params['add_user_as_teacher'] = $addMeAsTeacher; |
||
| 124 | |||
| 125 | $courseInfo = CourseManager::create_course($params); |
||
| 126 | |||
| 127 | if (!empty($courseInfo)) { |
||
| 128 | if (!empty($teacherList)) { |
||
| 129 | foreach ($teacherList as $teacher) { |
||
| 130 | CourseManager::add_user_to_course( |
||
| 131 | $teacher['user_id'], |
||
| 132 | $courseInfo['code'], |
||
| 133 | COURSEMANAGER |
||
| 134 | ); |
||
| 135 | } |
||
| 136 | } |
||
| 137 | $msg .= '<a href="'.api_get_path(WEB_COURSE_PATH).$courseInfo['directory'].'/"> |
||
| 138 | '.$courseInfo['title'].'</a> '.get_lang('Created').'<br />'; |
||
| 139 | } |
||
| 140 | } |
||
| 141 | |||
| 142 | if (!empty($msg)) { |
||
| 143 | Display::display_normal_message($msg, false); |
||
| 144 | } |
||
| 145 | } |
||
| 146 | |||
| 147 | /** |
||
| 148 | * Read the CSV-file |
||
| 149 | * @param string $file Path to the CSV-file |
||
| 150 | * @return array All course-information read from the file |
||
| 151 | */ |
||
| 152 | function parse_csv_data($file) |
||
| 153 | { |
||
| 154 | $courses = Import::csvToArray($file); |
||
|
0 ignored issues
–
show
|
|||
| 155 | return $courses; |
||
| 156 | } |
||
| 157 | |||
| 158 | $cidReset = true; |
||
| 159 | |||
| 160 | require '../inc/global.inc.php'; |
||
| 161 | |||
| 162 | $this_section = SECTION_PLATFORM_ADMIN; |
||
| 163 | api_protect_admin_script(); |
||
| 164 | |||
| 165 | $defined_auth_sources[] = PLATFORM_AUTH_SOURCE; |
||
| 166 | |||
| 167 | if (isset($extAuthSource) && is_array($extAuthSource)) { |
||
| 168 | $defined_auth_sources = array_merge($defined_auth_sources, array_keys($extAuthSource)); |
||
| 169 | } |
||
| 170 | |||
| 171 | $tool_name = get_lang('ImportCourses').' CSV'; |
||
| 172 | |||
| 173 | $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); |
||
| 174 | |||
| 175 | set_time_limit(0); |
||
| 176 | Display :: display_header($tool_name); |
||
| 177 | |||
| 178 | if (isset($_POST['formSent']) && $_POST['formSent']) { |
||
| 179 | if (empty($_FILES['import_file']['tmp_name'])) { |
||
| 180 | $error_message = get_lang('UplUploadFailed'); |
||
| 181 | Display :: display_error_message($error_message, false); |
||
| 182 | } else { |
||
| 183 | $allowed_file_mimetype = array('csv'); |
||
| 184 | |||
| 185 | $ext_import_file = substr($_FILES['import_file']['name'], (strrpos($_FILES['import_file']['name'], '.') + 1)); |
||
| 186 | |||
| 187 | View Code Duplication | if (!in_array($ext_import_file, $allowed_file_mimetype)) { |
|
| 188 | Display :: display_error_message(get_lang('YouMustImportAFileAccordingToSelectedOption')); |
||
| 189 | } else { |
||
| 190 | $courses = parse_csv_data($_FILES['import_file']['tmp_name']); |
||
| 191 | $errors = validate_data($courses); |
||
| 192 | if (count($errors) == 0) { |
||
| 193 | save_data($courses); |
||
| 194 | } |
||
| 195 | } |
||
| 196 | } |
||
| 197 | } |
||
| 198 | |||
| 199 | if (isset($errors) && count($errors) != 0) { |
||
| 200 | $error_message = '<ul>'; |
||
| 201 | foreach ($errors as $index => $error_course) { |
||
| 202 | $error_message .= '<li>'.get_lang('Line').' '.$error_course['line'].': <strong>'.$error_course['error'].'</strong>: '; |
||
| 203 | $error_message .= get_lang('Course').': '.$error_course['Title'].' ('.$error_course['Code'].')'; |
||
| 204 | $error_message .= '</li>'; |
||
| 205 | } |
||
| 206 | $error_message .= '</ul>'; |
||
| 207 | Display :: display_error_message($error_message, false); |
||
| 208 | } |
||
| 209 | |||
| 210 | $form = new FormValidator('import', 'post', api_get_self(), null, array('enctype' => 'multipart/form-data')); |
||
| 211 | $form->addHeader($tool_name); |
||
| 212 | $form->addElement('file', 'import_file', get_lang('ImportCSVFileLocation')); |
||
| 213 | $form->addElement('checkbox', 'add_me_as_teacher', null, get_lang('AddMeAsTeacherInCourses')); |
||
| 214 | $form->addButtonImport(get_lang('Import'), 'save'); |
||
| 215 | $form->addElement('hidden', 'formSent', 1); |
||
| 216 | $form->display(); |
||
| 217 | |||
| 218 | ?> |
||
| 219 | <div style="clear: both;"></div> |
||
| 220 | <p><?php echo get_lang('CSVMustLookLike').' ('.get_lang('MandatoryFields').')'; ?> :</p> |
||
| 221 | |||
| 222 | <blockquote> |
||
| 223 | <pre> |
||
| 224 | <strong>Code</strong>;<strong>Title</strong>;<strong>CourseCategory</strong>;Teacher;Language |
||
| 225 | BIO0015;Biology;BIO;teacher1;english |
||
| 226 | BIO0016;Maths;MATH;teacher2|teacher3;english |
||
| 227 | BIO0017;Language;LANG;;english |
||
| 228 | </pre> |
||
| 229 | </blockquote> |
||
| 230 | |||
| 231 | <?php |
||
| 232 | Display :: display_footer(); |
||
| 233 |
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.