diff --git a/main/admin/course_edit.php b/main/admin/course_edit.php index bf66943a4a..67d23a4b31 100755 --- a/main/admin/course_edit.php +++ b/main/admin/course_edit.php @@ -1,13 +1,11 @@ 'index.php', "name" => get_lang('PlatformAdmin')]; -$interbreadcrumb[] = ["url" => "course_list.php", "name" => get_lang('CourseList')]; +$interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')]; +$interbreadcrumb[] = ['url' => 'course_list.php', 'name' => get_lang('CourseList')]; // Get all course categories $table_user = Database::get_main_table(TABLE_MAIN_USER); @@ -47,7 +45,9 @@ $courseId = $courseInfo['real_id']; $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 + 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 @@ -108,7 +108,7 @@ $form = new FormValidator( 'post', api_get_self().'?id='.$courseId ); -$form->addElement('header', get_lang('Course').' #'.$courseInfo['real_id'].' '.$course_code); +$form->addHeader(get_lang('Course').' #'.$courseInfo['real_id'].' '.$course_code); $form->addElement('hidden', 'code', $course_code); //title @@ -184,11 +184,10 @@ if ($countCategories >= 100) { } $courseTeacherNames = []; - foreach ($course_teachers as $courseTeacherId) { /** @var User $courseTeacher */ $courseTeacher = UserManager::getRepository()->find($courseTeacherId); - $courseTeacherNames[$courseTeacher->getUserId()] = UserManager::formatUserFullName($courseTeacher, true); + $courseTeacherNames[$courseTeacher->getId()] = UserManager::formatUserFullName($courseTeacher, true); } $form->addSelectAjax( @@ -267,7 +266,13 @@ $group[] = $form->createElement('radio', 'subscribe', null, get_lang('Denied'), $form->addGroup($group, '', get_lang('Subscription')); $group = []; -$group[] = $form->createElement('radio', 'unsubscribe', get_lang('Unsubscription'), get_lang('AllowedToUnsubscribe'), 1); +$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')); @@ -303,7 +308,6 @@ $form->addButtonUpdate(get_lang('ModifyCourseInfo')); $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 @@ -371,6 +375,7 @@ if ($form->validate()) { Database::query($sql); + $courseInfoBeforeUpdate = api_get_course_info_by_id($courseId); $title = str_replace('&', '&', $title); $params = [ 'course_language' => $course_language, @@ -385,6 +390,7 @@ if ($form->validate()) { 'unsubscribe' => $unsubscribe, ]; Database::update($course_table, $params, ['id = ?' => $courseId]); + CourseManager::saveSettingChanges($courseInfoBeforeUpdate, $params); // update the extra fields $courseFieldValue = new ExtraFieldValue('course'); @@ -450,10 +456,8 @@ if ($form->validate()) { Display::addFlash(Display::return_message(get_lang('ItemUpdated').': '.$message, 'info', false)); if ($visual_code_is_used) { Display::addFlash(Display::return_message($warn)); - header('Location: course_list.php'); - } else { - header('Location: course_list.php'); } + header('Location: course_list.php'); exit; } diff --git a/main/course_info/infocours.php b/main/course_info/infocours.php index dfdeeece8b..fcafa81218 100755 --- a/main/course_info/infocours.php +++ b/main/course_info/infocours.php @@ -1,4 +1,5 @@ * @author Roan Embrechts, refactoring and improved course visibility|subscribe|unsubscribe options * @author Julio Montoya Jquery support + lots of fixes - * - * @package chamilo.course_info */ require_once __DIR__.'/../inc/global.inc.php'; $current_course_tool = TOOL_COURSE_SETTING; @@ -44,7 +43,7 @@ if (!$is_allowedToEdit) { $htmlHeadXtra[] = api_get_css_asset('cropper/dist/cropper.min.css'); $htmlHeadXtra[] = api_get_asset('cropper/dist/cropper.min.js'); $show_delete_watermark_text_message = false; -if (api_get_setting('pdf_export_watermark_by_course') == 'true') { +if (api_get_setting('pdf_export_watermark_by_course') === 'true') { if (isset($_GET['delete_watermark'])) { PDF::delete_watermark($course_code); $show_delete_watermark_text_message = true; @@ -161,7 +160,7 @@ $form->addRule( ); $form->addElement('checkbox', 'delete_picture', null, get_lang('DeletePicture')); -if (api_get_setting('pdf_export_watermark_by_course') == 'true') { +if (api_get_setting('pdf_export_watermark_by_course') === 'true') { $url = PDF::get_watermark($course_code); $form->addText('pdf_export_watermark_text', get_lang('PDFExportWatermarkTextTitle'), false, ['size' => '60']); $form->addElement('file', 'pdf_export_watermark_path', get_lang('AddWaterMark')); @@ -180,7 +179,7 @@ if (api_get_setting('pdf_export_watermark_by_course') == 'true') { ); } -if (api_get_setting('allow_course_theme') == 'true') { +if (api_get_setting('allow_course_theme') === 'true') { $group = []; $group[] = $form->createElement( 'SelectTheme', @@ -308,7 +307,7 @@ $form->addPanelOption( // Documents $globalGroup = []; -if (api_get_setting('documents_default_visibility_defined_in_course') == 'true') { +if (api_get_setting('documents_default_visibility_defined_in_course') === 'true') { $group = [ $form->createElement('radio', 'documents_default_visibility', null, get_lang('Visible'), 'visible'), $form->createElement('radio', 'documents_default_visibility', null, get_lang('Invisible'), 'invisible'), @@ -633,7 +632,7 @@ $group[] = $form->createElement( $group[] = $form->createElement('radio', 'enable_lp_auto_launch', null, get_lang('Deactivate'), 0); $form->addGroup($group, '', [get_lang('LPAutoLaunch')]); -if (api_get_setting('allow_course_theme') == 'true') { +if (api_get_setting('allow_course_theme') === 'true') { // Allow theme into Learning path $group = []; $group[] = $form->createElement( @@ -678,7 +677,7 @@ if ($allowLPReturnLink === 'true') { 2 ), ]; - $form->addGroup($group, '', [get_lang("LpReturnLink")]); + $form->addGroup($group, '', [get_lang('LpReturnLink')]); } $exerciseInvisible = api_get_setting('exercise_invisible_in_session'); @@ -966,6 +965,12 @@ if ($form->validate() && is_settings_editable()) { $picture['tmp_name'], $updateValues['picture_crop_result'] ); + + Event::addEvent( + LOG_COURSE_SETTINGS_CHANGED, + 'course_picture', + $picture['name'] + ); } $visibility = $updateValues['visibility']; @@ -1016,8 +1021,6 @@ if ($form->validate() && is_settings_editable()) { } $activeLegal = isset($updateValues['activate_legal']) ? $updateValues['activate_legal'] : 0; - $table_course = Database::get_main_table(TABLE_MAIN_COURSE); - $params = [ 'title' => $updateValues['title'], 'course_language' => $updateValues['course_language'], @@ -1032,7 +1035,9 @@ if ($form->validate() && is_settings_editable()) { 'registration_code' => $updateValues['course_registration_password'], 'show_score' => $updateValues['show_score'], ]; - Database::update($table_course, $params, ['id = ?' => $courseId]); + $table = Database::get_main_table(TABLE_MAIN_COURSE); + Database::update($table, $params, ['id = ?' => $courseId]); + CourseManager::saveSettingChanges($_course, $params); // Insert/Updates course_settings table foreach ($courseSettings as $setting) { @@ -1044,6 +1049,7 @@ if ($form->validate() && is_settings_editable()) { api_get_course_int_id() ); } + // update the extra fields $courseFieldValue = new ExtraFieldValue('course'); $courseFieldValue->saveFieldValues($updateValues); diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index 2bbd7fc8ff..f2206116ec 100644 --- a/main/inc/lib/api.lib.php +++ b/main/inc/lib/api.lib.php @@ -175,6 +175,7 @@ define('DIR_HOTPOTATOES', '/HotPotatoes_files'); // event logs types define('LOG_COURSE_DELETE', 'course_deleted'); define('LOG_COURSE_CREATE', 'course_created'); +define('LOG_COURSE_SETTINGS_CHANGED', 'course_settings_changed'); // @todo replace 'soc_gr' with social_group define('LOG_GROUP_PORTAL_CREATED', 'soc_gr_created'); @@ -206,7 +207,6 @@ define('LOG_SESSION_ADD_USER', 'session_add_user'); define('LOG_SESSION_DELETE_USER', 'session_delete_user'); define('LOG_SESSION_ADD_COURSE', 'session_add_course'); define('LOG_SESSION_DELETE_COURSE', 'session_delete_course'); - define('LOG_SESSION_CATEGORY_CREATE', 'session_cat_created'); //changed in 1.9.8 define('LOG_SESSION_CATEGORY_DELETE', 'session_cat_deleted'); //changed in 1.9.8 define('LOG_CONFIGURATION_SETTINGS_CHANGE', 'settings_changed'); @@ -215,20 +215,15 @@ define('LOG_SUBSCRIBE_USER_TO_COURSE', 'user_subscribed'); define('LOG_UNSUBSCRIBE_USER_FROM_COURSE', 'user_unsubscribed'); define('LOG_ATTEMPTED_FORCED_LOGIN', 'attempted_forced_login'); define('LOG_PLUGIN_CHANGE', 'plugin_changed'); - define('LOG_HOMEPAGE_CHANGED', 'homepage_changed'); - define('LOG_PROMOTION_CREATE', 'promotion_created'); define('LOG_PROMOTION_DELETE', 'promotion_deleted'); define('LOG_CAREER_CREATE', 'career_created'); define('LOG_CAREER_DELETE', 'career_deleted'); - define('LOG_USER_PERSONAL_DOC_DELETED', 'user_doc_deleted'); define('LOG_WIKI_ACCESS', 'wiki_page_view'); - // All results from an exercise define('LOG_EXERCISE_RESULT_DELETE', 'exe_result_deleted'); - // Logs only the one attempt define('LOG_EXERCISE_ATTEMPT_DELETE', 'exe_attempt_deleted'); define('LOG_LP_ATTEMPT_DELETE', 'lp_attempt_deleted'); @@ -2271,6 +2266,7 @@ function api_format_course_array($course_data) $_course['extLink']['url'] = $course_data['department_url']; $_course['extLink']['name'] = $course_data['department_name']; $_course['categoryCode'] = $course_data['faCode']; + $_course['category_code'] = $course_data['faCode']; $_course['categoryName'] = $course_data['faName']; $_course['visibility'] = $course_data['visibility']; $_course['subscribe_allowed'] = $course_data['subscribe']; diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index dcc98251ec..8568107c5e 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -1,4 +1,5 @@ ".COURSE_RELATION_TYPE_RRHH." AND + $sql = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." + WHERE + user_id = $userId AND + relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND c_id = $courseId "; if (Database::num_rows(Database::query($sql)) > 0) { @@ -1343,10 +1342,10 @@ class CourseManager ON user.id = session_course_user.user_id AND $sessionCondition - INNER JOIN $course_table course + INNER JOIN $course_table course ON session_course_user.c_id = course.id AND $courseCondition - INNER JOIN $sessionTable session + INNER JOIN $sessionTable session ON session_course_user.session_id = session.id "; $where[] = ' session_course_user.c_id IS NOT NULL '; @@ -1354,7 +1353,7 @@ class CourseManager // 2 = coach // 0 = student if (isset($filter_by_status)) { - $filter_by_status = intval($filter_by_status); + $filter_by_status = (int) $filter_by_status; $filter_by_status_condition = " session_course_user.status = $filter_by_status AND "; } } else { @@ -1381,12 +1380,12 @@ class CourseManager } } - $sql .= " FROM ".Database::get_main_table(TABLE_MAIN_USER)." as user + $sql .= " FROM ".Database::get_main_table(TABLE_MAIN_USER)." as user LEFT JOIN ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." as course_rel_user - ON + ON user.id = course_rel_user.user_id AND course_rel_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH." - INNER JOIN $course_table course + INNER JOIN $course_table course ON course_rel_user.c_id = course.id "; if (!empty($course_code)) { @@ -1455,8 +1454,8 @@ class CourseManager if (!empty($searchByKeyword)) { $searchByKeyword = Database::escape_string($searchByKeyword); $sql .= " AND ( - user.firstname LIKE '$searchByKeyword' OR - user.username LIKE '$searchByKeyword' OR + user.firstname LIKE '$searchByKeyword' OR + user.username LIKE '$searchByKeyword' OR user.lastname LIKE '$searchByKeyword' ) "; } @@ -1489,6 +1488,7 @@ class CourseManager if ($return_count) { return $user['count']; } + $report_info = []; $user_info = $user; $user_info['status'] = $user['status']; @@ -1505,7 +1505,6 @@ class CourseManager if ($add_reports) { if ($resumed_report) { $extra = []; - if (!empty($extra_fields)) { foreach ($extra_fields as $extra) { if (in_array($extra['1'], $extra_field)) { @@ -1520,7 +1519,6 @@ class CourseManager $row_key = '-1'; $name = '-'; - if (!empty($extra)) { if (!empty($user_data[$extra['1']])) { $row_key = $user_data[$extra['1']]; @@ -1576,7 +1574,7 @@ class CourseManager } foreach ($extra_fields as $extra) { - if ($extra['1'] == 'ruc') { + if ($extra['1'] === 'ruc') { continue; } @@ -1700,7 +1698,7 @@ class CourseManager $courseId = $courseInfo['real_id']; $sql = " - SELECT DISTINCT count(user.id) as count + SELECT DISTINCT count(user.id) as count FROM $tblUser as user "; $where = []; @@ -2069,12 +2067,12 @@ class CourseManager $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $sql = "SELECT DISTINCT + $sql = "SELECT DISTINCT u.user_id, u.lastname, u.firstname, u.username - FROM $tbl_user u + FROM $tbl_user u INNER JOIN $tbl_session_course_user scu ON (u.user_id = scu.user_id) WHERE @@ -2190,7 +2188,7 @@ class CourseManager ORDER BY g.name"; } else { // get all groups even if they are empty - $sql = "SELECT g.id, g.name, g.iid + $sql = "SELECT g.id, g.name, g.iid FROM ".Database::get_course_table(TABLE_GROUP)." AS g $session_condition AND c_id = $course_id"; @@ -2377,7 +2375,7 @@ class CourseManager // Skills $table = Database::get_main_table(TABLE_MAIN_SKILL_REL_USER); $argumentation = Database::escape_string(sprintf(get_lang('SkillFromCourseXDeletedSinceThen'), $course['code'])); - $sql = "UPDATE $table SET course_id = NULL, session_id = NULL, argumentation = '$argumentation' + $sql = "UPDATE $table SET course_id = NULL, session_id = NULL, argumentation = '$argumentation' WHERE course_id = $courseId"; Database::query($sql); @@ -2589,7 +2587,7 @@ class CourseManager $student = api_get_user_info($user_id); $name_course = $information['title']; - $sql = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." + $sql = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_COURSE_USER)." WHERE c_id = $courseId"; // TODO: Ivan: This is a mistake, please, have a look at it. Intention here is diffcult to be guessed. @@ -2800,12 +2798,12 @@ class CourseManager if ($adminGetsAllCourses && UserManager::is_admin($user_id)) { // get the whole courses list $sql = "SELECT DISTINCT(course.code), course.id as real_id, course.title - FROM $tbl_course course - INNER JOIN $tableCourseUrl url + FROM $tbl_course course + INNER JOIN $tableCourseUrl url ON (course.id = url.c_id) - WHERE - url.access_url_id = $urlId - $languageCondition + WHERE + url.access_url_id = $urlId + $languageCondition "; } else { $withSpecialCourses = $withoutSpecialCourses = ''; @@ -2820,7 +2818,7 @@ class CourseManager } if (!empty($withSpecialCourses)) { - $sql = "SELECT DISTINCT (course.code), + $sql = "SELECT DISTINCT (course.code), course.id as real_id, course.category_code AS category, course.title @@ -2829,11 +2827,11 @@ class CourseManager ON course.id = course_rel_user.c_id LEFT JOIN $tbl_user_course_category user_course_category ON course_rel_user.user_course_cat = user_course_category.id - INNER JOIN $tableCourseUrl url - ON (course.id = url.c_id) - WHERE url.access_url_id = $urlId + INNER JOIN $tableCourseUrl url + ON (course.id = url.c_id) + WHERE url.access_url_id = $urlId $withSpecialCourses - $languageCondition + $languageCondition GROUP BY course.code ORDER BY user_course_category.sort, course.title, course_rel_user.sort ASC "; @@ -2850,19 +2848,19 @@ class CourseManager // get course list not auto-register. Use Distinct to avoid multiple // entries when a course is assigned to a HRD (DRH) as watcher - $sql = "SELECT - DISTINCT(course.code), - course.id as real_id, + $sql = "SELECT + DISTINCT(course.code), + course.id as real_id, course.category_code AS category, course.title FROM $tbl_course course - INNER JOIN $tbl_course_user cru + INNER JOIN $tbl_course_user cru ON (course.id = cru.c_id) - INNER JOIN $tableCourseUrl url - ON (course.id = url.c_id) - WHERE - url.access_url_id = $urlId AND - cru.user_id = $user_id + INNER JOIN $tableCourseUrl url + ON (course.id = url.c_id) + WHERE + url.access_url_id = $urlId AND + cru.user_id = $user_id $withoutSpecialCourses $languageCondition ORDER BY course.title @@ -2883,12 +2881,12 @@ class CourseManager } if ($include_sessions === true) { - $sql = "SELECT DISTINCT (c.code), - c.id as real_id, + $sql = "SELECT DISTINCT (c.code), + c.id as real_id, c.category_code AS category, s.id as session_id, s.name as session_name - FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." scu + FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." scu INNER JOIN $tbl_course c ON (scu.c_id = c.id) INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION)." s @@ -3049,7 +3047,7 @@ class CourseManager $sql = 'SELECT sc.id session_category FROM '.Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY).' sc INNER JOIN '.Database::get_main_table(TABLE_MAIN_SESSION).' s - ON sc.id = s.session_category_id + ON sc.id = s.session_category_id WHERE s.id = '.$sessionId; return Database::result( @@ -3325,7 +3323,7 @@ class CourseManager $orderBy = ' ORDER BY position'; $extraInnerJoin = " INNER JOIN $tableSessionRelCourse src ON (c.id = src.c_id AND src.session_id = $sessionId) - INNER JOIN $tableSessionRelCourseRelUser srcru + INNER JOIN $tableSessionRelCourseRelUser srcru ON (src.session_id = srcru.session_id AND srcru.c_id = src.c_id) "; } @@ -3333,9 +3331,9 @@ class CourseManager $whereConditions .= $keywordCondition; $sql = "$select FROM $tbl_course c - INNER JOIN $tbl_course_rel_user cru + INNER JOIN $tbl_course_rel_user cru ON (cru.c_id = c.id) - INNER JOIN $tbl_course_rel_access_url a + INNER JOIN $tbl_course_rel_access_url a ON (a.c_id = c.id) $extraInnerJoin WHERE @@ -3508,8 +3506,8 @@ class CourseManager code, subscribe subscr, unsubscribe unsubscr - FROM $table - WHERE + FROM $table + WHERE id IN ('".implode("','", $specialCourseList)."') $languageCondition GROUP BY code"; @@ -3743,7 +3741,7 @@ class CourseManager course.code as course_code, user_course_cat, course_rel_user.sort - FROM $TABLECOURS course + FROM $TABLECOURS course INNER JOIN $TABLECOURSUSER course_rel_user ON (course.id = course_rel_user.c_id) INNER JOIN $TABLE_ACCESS_URL_REL_COURSE url @@ -3767,6 +3765,7 @@ class CourseManager // Browse through all courses. $courseAdded = []; $courseList = []; + while ($row = Database::fetch_array($result)) { $course_info = api_get_course_info_by_id($row['id']); if (empty($course_info)) { @@ -3902,7 +3901,7 @@ class CourseManager { $userId = empty($userId) ? api_get_user_id() : (int) $userId; $table = Database::get_main_table(TABLE_USER_COURSE_CATEGORY); - $sql = "SELECT * FROM $table + $sql = "SELECT * FROM $table WHERE user_id = $userId ORDER BY sort ASC "; @@ -4116,9 +4115,9 @@ class CourseManager if (api_is_platform_admin()) { $params['edit_actions'] .= api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course_info['code']; if ($load_dirs) { - $params['document'] .= ''. Display::returnFontAwesomeIcon('folder-open').''; $params['document'] .= Display::div('', [ @@ -4770,7 +4769,7 @@ class CourseManager login_course_date <= '$now' AND login_course_date > DATE_SUB('$now', INTERVAL $days DAY) AND visibility <> ".COURSE_VISIBILITY_CLOSED." AND - visibility <> ".COURSE_VISIBILITY_HIDDEN." + visibility <> ".COURSE_VISIBILITY_HIDDEN." GROUP BY a.c_id ORDER BY course_count DESC LIMIT $limit @@ -4911,15 +4910,15 @@ class CourseManager $urlId = (int) $urlId; - $sql = "SELECT count(cu.user_id) count - FROM $courseUsers cu - INNER JOIN $table_course_rel_access_url u - ON cu.c_id = u.c_id + $sql = "SELECT count(cu.user_id) count + FROM $courseUsers cu + INNER JOIN $table_course_rel_access_url u + ON cu.c_id = u.c_id WHERE relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND - u.access_url_id = $urlId AND + u.access_url_id = $urlId AND visibility <> ".COURSE_VISIBILITY_CLOSED." AND - visibility <> ".COURSE_VISIBILITY_HIDDEN." + visibility <> ".COURSE_VISIBILITY_HIDDEN." "; $res = Database::query($sql); @@ -5177,7 +5176,7 @@ class CourseManager WHERE user_id = $userId AND c_id = $courseId"; $result = Database::query($sql); if (Database::num_rows($result)) { - $sql = "UPDATE $course_user_table + $sql = "UPDATE $course_user_table SET status = 1 WHERE c_id = $courseId AND user_id = $userId "; } else { @@ -5355,13 +5354,23 @@ class CourseManager $value = implode(',', $value); } - if (self::hasCourseSetting($variable, $courseId)) { + $settingFromDatabase = self::getCourseSetting($variable, $courseId); + + if (!empty($settingFromDatabase)) { // Update Database::update( $courseSettingTable, ['value' => $value], ['variable = ? AND c_id = ?' => [$variable, $courseId]] ); + + if ($settingFromDatabase['value'] != $value) { + Event::addEvent( + LOG_COURSE_SETTINGS_CHANGED, + $variable, + $settingFromDatabase['value']." -> $value" + ); + } } else { // Create Database::insert( @@ -5373,29 +5382,67 @@ class CourseManager 'variable' => $variable, ] ); + + Event::addEvent( + LOG_COURSE_SETTINGS_CHANGED, + $variable, + $value + ); } return true; } /** - * Check if course setting exists. + * Get course setting. * * @param string $variable * @param int $courseId * - * @return bool + * @return array */ - public static function hasCourseSetting($variable, $courseId) + public static function getCourseSetting($variable, $courseId) { $courseSetting = Database::get_course_table(TABLE_COURSE_SETTING); $courseId = (int) $courseId; $variable = Database::escape_string($variable); - $sql = "SELECT variable FROM $courseSetting + $sql = "SELECT variable, value FROM $courseSetting WHERE c_id = $courseId AND variable = '$variable'"; $result = Database::query($sql); - return Database::num_rows($result) > 0; + return Database::fetch_array($result); + } + + public static function saveSettingChanges($courseInfo, $params) + { + if (empty($courseInfo) || empty($params)) { + return false; + } + + $userId = api_get_user_id(); + $now = api_get_utc_datetime(); + + foreach ($params as $name => $value) { + $emptyValue = ' - '; + if (isset($courseInfo[$name]) && $courseInfo[$name] != $value) { + if ('' !== $courseInfo[$name]) { + $emptyValue = $courseInfo[$name]; + } + + $changedTo = $emptyValue.' -> '.$value; + + Event::addEvent( + LOG_COURSE_SETTINGS_CHANGED, + $name, + $changedTo, + $now, + $userId, + $courseInfo['real_id'] + ); + } + } + + return true; } /** @@ -5837,7 +5884,7 @@ class CourseManager $category_id = (int) $category_id; $info = Database::fetch_array( Database::query( - 'SELECT course_code + 'SELECT course_code FROM '.Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY).' WHERE id = '.$category_id ), @@ -5869,7 +5916,7 @@ class CourseManager $sql = "SELECT id, code, title FROM ".Database::get_main_table(TABLE_MAIN_COURSE)." WHERE $visibility code NOT IN ( - SELECT DISTINCT course_code + SELECT DISTINCT course_code FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE).$dateConditional." ) ORDER BY id"; @@ -6028,18 +6075,18 @@ class CourseManager } //AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." - $sql = "SELECT - course.id, - course.title, - course.code, - course.subscribe subscr, - course.unsubscribe unsubscr, + $sql = "SELECT + course.id, + course.title, + course.code, + course.subscribe subscr, + course.unsubscribe unsubscr, course_rel_user.status status, - course_rel_user.sort sort, + course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat FROM - $TABLECOURS course - INNER JOIN $TABLECOURSUSER course_rel_user + $TABLECOURS course + INNER JOIN $TABLECOURSUSER course_rel_user ON (course.id = course_rel_user.c_id) INNER JOIN $TABLE_ACCESS_URL_REL_COURSE url ON (url.c_id = course.id) @@ -6269,7 +6316,7 @@ class CourseManager $extraFieldType = EntityExtraField::COURSE_FIELD_TYPE; $name = Database::escape_string($name); $sql = "SELECT count(v.item_id) as count - FROM $tableUserFieldValues v + FROM $tableUserFieldValues v INNER JOIN $tableExtraFields f ON (f.id = v.field_id) WHERE value = '$name' AND extra_field_type = $extraFieldType"; @@ -6372,8 +6419,8 @@ class CourseManager ]; $table = Database::get_main_table(TABLE_MAIN_COURSE); - $sql = "SELECT count(id) count - FROM $table + $sql = "SELECT count(id) count + FROM $table WHERE visibility IN (".implode(',', $visibility).")"; $result = Database::query($sql); $row = Database::fetch_array($result); @@ -6394,7 +6441,7 @@ class CourseManager $table = Database::get_main_table(TABLE_MAIN_COURSE); $tableExercise = Database::get_course_table(TABLE_QUIZ_TEST); - $sql = "SELECT count(e.iid) count + $sql = "SELECT count(e.iid) count FROM $table c INNER JOIN $tableExercise e ON (c.id = e.c_id) WHERE e.active <> -1 AND visibility IN (".implode(',', $visibility).")";