Container::getRouter()->generate('administration') , "name" => get_lang('PlatformAdmin')); $interbreadcrumb[] = array("url" => "course_list.php", "name" => get_lang('CourseList')); // Get all course categories $table_user = Database :: get_main_table(TABLE_MAIN_USER); $course_code = $courseInfo['code']; $courseId = $courseInfo['real_id']; // Get course teachers $table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname'; $sql = "SELECT user.user_id,lastname,firstname FROM $table_user as user,$table_course_user as course_user WHERE course_user.status='1' AND course_user.user_id=user.user_id AND course_user.c_id ='" . $courseId . "'" . $order_clause; $res = Database::query($sql); $course_teachers = array(); while ($obj = Database::fetch_object($res)) { $course_teachers[] = $obj->user_id; } // Get all possible teachers without the course teachers if (api_is_multiple_url_enabled()) { $access_url_rel_user_table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql = "SELECT u.user_id,lastname,firstname FROM $table_user as u INNER JOIN $access_url_rel_user_table url_rel_user ON (u.user_id=url_rel_user.user_id) WHERE url_rel_user.access_url_id=" . api_get_current_access_url_id() . " AND status=1" . $order_clause; } else { $sql = "SELECT user_id, lastname, firstname FROM $table_user WHERE status='1'" . $order_clause; } $courseInfo['tutor_name'] = null; $res = Database::query($sql); $teachers = array(); $allTeachers = array(); $platform_teachers[0] = '-- ' . get_lang('NoManager') . ' --'; while ($obj = Database::fetch_object($res)) { $allTeachers[$obj->user_id] = api_get_person_name($obj->firstname, $obj->lastname); if (!array_key_exists($obj->user_id, $course_teachers)) { $teachers[$obj->user_id] = api_get_person_name($obj->firstname, $obj->lastname); } if (isset($course_teachers[$obj->user_id]) && $courseInfo['tutor_name'] == $course_teachers[$obj->user_id] ) { $courseInfo['tutor_name'] = $obj->user_id; } // We add in the array platform teachers $platform_teachers[$obj->user_id] = api_get_person_name($obj->firstname, $obj->lastname); } // Case where there is no teacher in the course if (count($course_teachers) == 0) { $sql = 'SELECT tutor_name FROM ' . $course_table . ' WHERE code="' . $course_code . '"'; $res = Database::query($sql); $tutor_name = Database::result($res, 0, 0); $courseInfo['tutor_name'] = array_search($tutor_name, $platform_teachers); } // Build the form $form = new FormValidator('update_course', 'post', api_get_self().'?id='.$courseId); $form->addElement('header', get_lang('Course') . ' #' . $courseInfo['real_id'] . ' ' . $course_code); $form->addElement('hidden', 'code', $course_code); //title $form->addText('title', get_lang('Title'), true); $form->applyFilter('title', 'html_filter'); $form->applyFilter('title', 'trim'); // Code $element = $form->addElement('text', 'real_code', array(get_lang('CourseCode'), get_lang('ThisValueCantBeChanged'))); $element->freeze(); // Visual code $form->addText( 'visual_code', array( get_lang('VisualCode'), get_lang('OnlyLettersAndNumbers'), get_lang('ThisValueIsUsedInTheCourseURL') ), true, [ 'maxlength' => CourseManager::MAX_COURSE_LENGTH_CODE, 'pattern' => '[a-zA-Z0-9]+', 'title' => get_lang('OnlyLettersAndNumbers') ] ); $form->applyFilter('visual_code', 'strtoupper'); $form->applyFilter('visual_code', 'html_filter'); $form->addElement('advmultiselect', 'course_teachers', get_lang('CourseTeachers'), $allTeachers); $courseInfo['course_teachers'] = $course_teachers; if (array_key_exists('add_teachers_to_sessions_courses', $courseInfo)) { $form->addElement('checkbox', 'add_teachers_to_sessions_courses', null, get_lang('TeachersWillBeAddedAsCoachInAllCourseSessions')); } $coursesInSession = SessionManager::get_session_by_course($courseInfo['real_id']); if (!empty($coursesInSession)) { foreach ($coursesInSession as $session) { $sessionId = $session['id']; $coaches = SessionManager::getCoachesByCourseSession($sessionId, $courseInfo['real_id']); $teachers = $allTeachers; $sessionTeachers = array(); foreach ($coaches as $coachId) { $userInfo = api_get_user_info($coachId); $sessionTeachers[] = $coachId; if (isset($teachers[$coachId])) { unset($teachers[$coachId]); } } $groupName = 'session_coaches[' . $sessionId . ']'; $platformTeacherId = 'platform_teachers_by_session_' . $sessionId; $coachId = 'coaches_by_session_' . $sessionId; $platformTeacherName = 'platform_teachers_by_session'; $coachName = 'coaches_by_session'; $sessionUrl = api_get_path(WEB_CODE_PATH) . 'session/resume_session.php?id_session=' . $sessionId; $form->addElement( 'advmultiselect', $groupName, Display::url( $session['name'], $sessionUrl, array('target' => '_blank') ) . ' - ' . get_lang('Coaches'), $allTeachers ); $courseInfo[$groupName] = $sessionTeachers; } } // Category code $url = api_get_path(WEB_AJAX_PATH) . 'course.ajax.php?a=search_category'; $categorySelect = $form->addElement( 'select_ajax', 'category_code', get_lang('CourseFaculty'), null, array('url' => $url) ); if (!empty($courseInfo['categoryCode'])) { $data = CourseCategory::getCategory($courseInfo['categoryCode']); $categorySelect->addOption($data['name'], $data['code']); } $form->addText('department_name', get_lang('CourseDepartment'), false, array('size' => '60')); $form->applyFilter('department_name', 'html_filter'); $form->applyFilter('department_name', 'trim'); $form->addText('department_url', get_lang('CourseDepartmentURL'), false, array('size' => '60')); $form->applyFilter('department_url', 'html_filter'); $form->applyFilter('department_url', 'trim'); $form->addElement('select_language', 'course_language', get_lang('CourseLanguage')); $form->applyFilter('select_language', 'html_filter'); $group = array(); $group[]= $form->createElement('radio', 'visibility', get_lang("CourseAccess"), get_lang('OpenToTheWorld'), COURSE_VISIBILITY_OPEN_WORLD); $group[]= $form->createElement('radio', 'visibility', null, get_lang('OpenToThePlatform'), COURSE_VISIBILITY_OPEN_PLATFORM); $group[]= $form->createElement('radio', 'visibility', null, get_lang('Private'), COURSE_VISIBILITY_REGISTERED); $group[]= $form->createElement('radio', 'visibility', null, get_lang('CourseVisibilityClosed'), COURSE_VISIBILITY_CLOSED); $group[]= $form->createElement('radio', 'visibility', null, get_lang('CourseVisibilityHidden'), COURSE_VISIBILITY_HIDDEN); $form->addGroup($group, '', get_lang('CourseAccess')); $group = array(); $group[] = $form->createElement('radio', 'subscribe', get_lang('Subscription'), get_lang('Allowed'), 1); $group[] = $form->createElement('radio', 'subscribe', null, get_lang('Denied'), 0); $form->addGroup($group, '', get_lang('Subscription')); $group = array(); $group[] = $form->createElement('radio', 'unsubscribe', get_lang('Unsubscription'), get_lang('AllowedToUnsubscribe'), 1); $group[] = $form->createElement('radio', 'unsubscribe', null, get_lang('NotAllowedToUnsubscribe'), 0); $form->addGroup($group, '', get_lang('Unsubscription')); $form->addElement('text', 'disk_quota', array(get_lang('CourseQuota'), null, get_lang('MB'))); $form->addRule('disk_quota', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('disk_quota', get_lang('ThisFieldShouldBeNumeric'), 'numeric'); //Extra fields $extra_field = new ExtraField('course'); $extra = $extra_field->addElements($form, $courseId); $htmlHeadXtra[] = ' '; $form->addButtonUpdate(get_lang('ModifyCourseInfo')); // Set some default values $courseInfo['disk_quota'] = round(DocumentManager::get_course_quota($courseInfo['code']) / 1024 / 1024, 1); $courseInfo['real_code'] = $courseInfo['code']; $courseInfo['add_teachers_to_sessions_courses'] = isset($courseInfo['add_teachers_to_sessions_courses']) ? $courseInfo['add_teachers_to_sessions_courses'] : 0; $form->setDefaults($courseInfo); // Validate form if ($form->validate()) { $course = $form->getSubmitValues(); $visibility = $course['visibility']; $visual_code = $course['visual_code']; $visual_code = CourseManager::generate_course_code($visual_code); // Check if the visual code is already used by *another* course $visual_code_is_used = false; $warn = get_lang('TheFollowingCoursesAlreadyUseThisVisualCode'); if (!empty($visual_code)) { $list = CourseManager::get_courses_info_from_visual_code($visual_code); foreach ($list as $course_temp) { if ($course_temp['code'] != $course_code) { $visual_code_is_used = true; $warn .= ' ' . $course_temp['title'] . ' (' . $course_temp['code'] . '),'; } } $warn = substr($warn, 0, -1); } $teachers = isset($course['course_teachers']) ? $course['course_teachers'] : ''; $title = $course['title']; $category_code = isset($course['category_code']) ? $course['category_code'] : ''; $department_name = $course['department_name']; $department_url = $course['department_url']; $course_language = $course['course_language']; $course['disk_quota'] = $course['disk_quota'] * 1024 * 1024; $disk_quota = $course['disk_quota']; $subscribe = $course['subscribe']; $unsubscribe = isset($course['unsubscribe']) ? $course['unsubscribe'] : ''; $course['course_code'] = $course_code; if (!stristr($department_url, 'http://')) { $department_url = 'http://' . $department_url; } $manager = Database::getManager(); $courseObj = $manager->getRepository('ChamiloCoreBundle:Course')->find($courseId); if ($courseObj) { $url = $manager->getRepository('ChamiloCoreBundle:AccessUrl')->find(api_get_current_access_url_id()); $courseObj ->setTitle($title) ->setCourseLanguage($course_language) ->setCategoryCode($category_code) ->setVisualCode($visual_code) ->setDepartmentName($department_name) ->setDepartmentUrl($department_url) ->setDiskQuota(intval($disk_quota)) ->setVisibility($visibility) ->setSubscribe(intval($subscribe)) ->setUnsubscribe(intval($unsubscribe)) ->setCurrentUrl($url) ; $manager->persist($courseObj); $manager->flush(); } // update the extra fields $courseFieldValue = new ExtraFieldValue('course'); $courseFieldValue->saveFieldValues($course); $addTeacherToSessionCourses = isset($course['add_teachers_to_sessions_courses']) && !empty($course['add_teachers_to_sessions_courses']) ? 1 : 0; $sessionCoaches = isset($course['session_coaches']) ? $course['session_coaches'] : ''; // Updating teachers if ($addTeacherToSessionCourses) { if (!empty($sessionCoaches)) { foreach ($sessionCoaches as $sessionId => $teacherInfo) { $coachesToSubscribe = $teacherInfo['coaches_by_session']; SessionManager::updateCoaches( $sessionId, $courseId, $coachesToSubscribe, true ); } } CourseManager::updateTeachers($courseInfo, $teachers, true, true, false); } else { // Normal behaviour CourseManager::updateTeachers($courseInfo, $teachers, true, false); // Updating session coaches $sessionCoaches = $course['session_coaches']; if (!empty($sessionCoaches)) { foreach ($sessionCoaches as $sessionId => $coachesToSubscribe) { if (!empty($coachesToSubscribe)) { SessionManager::updateCoaches( $sessionId, $courseId, $coachesToSubscribe, true ); } } } } if (array_key_exists('add_teachers_to_sessions_courses', $courseInfo)) { $sql = "UPDATE $course_table SET add_teachers_to_sessions_courses = '$addTeacherToSessionCourses' WHERE id = " . $courseInfo['real_id']; Database::query($sql); } $course_id = $courseInfo['real_id']; Display::addFlash(Display::return_message(get_lang('ItemUpdated'))); if ($visual_code_is_used) { Display::addFlash(Display::return_message($warn)); header('Location: course_list.php'); } else { header('Location: course_list.php'); } exit; } Display::display_header($tool_name); echo '