From 16bbf012b39b1ccd36fff9b04a146d7e57595dcd Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 1 Feb 2021 08:40:37 +0100 Subject: [PATCH] Fix psalm issues: Double casting, add phpdoc, fix php warning Update from 1.11.x --- public/main/course_info/download.php | 2 +- public/main/course_info/infocours.php | 9 +- public/main/forum/forumfunction.inc.php | 2 +- public/main/inc/ajax/course.ajax.php | 28 +- public/main/inc/ajax/exercise.ajax.php | 683 +++++++++--------- public/main/inc/ajax/extra_field.ajax.php | 1 - public/main/inc/ajax/gradebook.ajax.php | 38 + public/main/inc/ajax/myspace.ajax.php | 3 +- .../main/inc/ajax/record_audio_rtc.ajax.php | 1 - .../main/inc/ajax/record_audio_wami.ajax.php | 8 +- public/main/inc/lib/pdf.lib.php | 8 +- public/main/social/group_topics.php | 4 +- public/main/social/home.php | 1 + public/main/social/personal_data.php | 6 +- public/main/social/profile.php | 3 +- public/main/survey/ch_personality.php | 12 +- 16 files changed, 432 insertions(+), 377 deletions(-) diff --git a/public/main/course_info/download.php b/public/main/course_info/download.php index fa6f5a7c58..97b33f270a 100644 --- a/public/main/course_info/download.php +++ b/public/main/course_info/download.php @@ -30,7 +30,7 @@ if (in_array($extension, ['xml', 'csv']) && (api_is_platform_admin(true) || api_is_drh()) ) { $content_type = 'application/force-download'; -} elseif ('zip' === $extension && $_cid && (api_is_platform_admin(true) || api_is_course_admin())) { +} elseif ('zip' === $extension && api_get_course_id() && (api_is_platform_admin(true) || api_is_course_admin())) { $content_type = 'application/force-download'; } diff --git a/public/main/course_info/infocours.php b/public/main/course_info/infocours.php index dd8e8bde1d..37b9789f4c 100644 --- a/public/main/course_info/infocours.php +++ b/public/main/course_info/infocours.php @@ -984,11 +984,8 @@ if ($form->validate() && $isEditable) { $illustrationRepo->deleteIllustration($courseEntity); } - global $_configuration; - if (isset($_configuration[$urlId]) && - isset($_configuration[$urlId]['hosting_limit_active_courses']) && - $_configuration[$urlId]['hosting_limit_active_courses'] > 0 - ) { + $limitCourses = api_get_configuration_value('hosting_limit_active_courses'); + if ($limitCourses > 0) { $courseInfo = api_get_course_info_by_id($courseId); // Check if @@ -996,7 +993,7 @@ if ($form->validate() && $isEditable) { $visibility != $courseInfo['visibility'] ) { $num = CourseManager::countActiveCourses($urlId); - if ($num >= $_configuration[$urlId]['hosting_limit_active_courses']) { + if ($num >= $limitCourses) { api_warn_hosting_contact('hosting_limit_active_courses'); Display::addFlash( diff --git a/public/main/forum/forumfunction.inc.php b/public/main/forum/forumfunction.inc.php index 4908f3ed42..f4ccc1d52a 100644 --- a/public/main/forum/forumfunction.inc.php +++ b/public/main/forum/forumfunction.inc.php @@ -765,7 +765,7 @@ function store_forum($values, $courseInfo = [], $returnId = false) //'forum_image' => $new_file_name, $forum ->setForumTitle($values['forum_title']) - ->setForumComment($values['forum_comment'] ?? null) + ->setForumComment($values['forum_comment'] ?? '') ->setForumCategory($forumCategory) ->setAllowAnonymous($values['allow_anonymous_group']['allow_anonymous'] ?? null) ->setAllowEdit($values['students_can_edit_group']['students_can_edit'] ?? null) diff --git a/public/main/inc/ajax/course.ajax.php b/public/main/inc/ajax/course.ajax.php index 0045d0d2ee..8c3db28088 100644 --- a/public/main/inc/ajax/course.ajax.php +++ b/public/main/inc/ajax/course.ajax.php @@ -153,14 +153,14 @@ switch ($action) { //TODO change this function to search not only courses STARTING with $_GET['q'] if (api_is_platform_admin()) { $courseList = CourseManager::get_courses_list( - 0, //offset - 0, //howMany - 1, //$orderby = 1 + 0, + 0, + 1, 'ASC', - -1, //visibility + -1, $_GET['q'], - null, //$urlId - true //AlsoSearchCode + null, + true ); } elseif (api_is_teacher()) { $courseList = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id(), $_GET['q']); @@ -257,12 +257,18 @@ switch ($action) { } break; case 'search_user_by_course': - if (api_is_platform_admin()) { - $user = Database::get_main_table(TABLE_MAIN_USER); - $session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $sessionId = $_GET['session_id']; - $course = api_get_course_info_by_id($_GET['course_id']); + $sessionId = $_GET['session_id']; + $course = api_get_course_info_by_id($_GET['course_id']); + + $isPlatformAdmin = api_is_platform_admin(); + $userIsSubscribedInCourse = CourseManager::is_user_subscribed_in_course( + api_get_user_id(), + $course['code'], + !empty($sessionId), + $sessionId + ); + if ($isPlatformAdmin || $userIsSubscribedInCourse) { $json = [ 'items' => [], ]; diff --git a/public/main/inc/ajax/exercise.ajax.php b/public/main/inc/ajax/exercise.ajax.php index b1b20cd284..89525872d1 100644 --- a/public/main/inc/ajax/exercise.ajax.php +++ b/public/main/inc/ajax/exercise.ajax.php @@ -160,7 +160,6 @@ switch ($action) { } // 1. Setting variables needed by jqgrid - $action = $_GET['a']; $exercise_id = (int) $_GET['exercise_id']; $page = (int) $_REQUEST['page']; //page $limit = (int) $_REQUEST['rows']; //quantity of rows @@ -391,409 +390,431 @@ switch ($action) { echo 1; exit; break; + case 'check_answers': + if (false === api_is_allowed_to_session_edit()) { + echo 'error'; + exit; + } + + /** @var Exercise $objExercise */ + $objExercise = Session::read('objExercise'); + $questionList = Session::read('questionList'); + $exeId = Session::read('exe_id'); + + // If exercise or question is not set then exit. + if (empty($questionList) || empty($objExercise)) { + echo 'error'; + exit; + } + + $statInfo = $objExercise->get_stat_track_exercise_info_by_exe_id($exeId); + + echo Display::page_subheader(get_lang('QuestionsToReview')); + echo $objExercise->getReminderTable($questionList, $statInfo, true); + break; case 'save_exercise_by_now': $course_info = api_get_course_info_by_id($course_id); $course_id = $course_info['real_id']; - // Use have permissions? - if (api_is_allowed_to_session_edit()) { - // "all" or "simple" strings means that there's one or all questions exercise type - $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; + // Use have permissions to edit exercises results now? + if (false === api_is_allowed_to_session_edit()) { + echo 'error'; + if ($debug) { + error_log( + 'Exercises attempt '.$exeId.': Failed saving question(s) in course/session '. + $course_id.'/'.$session_id. + ': The user ('.api_get_user_id().') does not have the permission to access this session now' + ); + } + exit; + } + // "all" or "simple" strings means that there's one or all questions exercise type + $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; - // Questions choices. - $choice = isset($_REQUEST['choice']) ? $_REQUEST['choice'] : []; + // Questions choices. + $choice = isset($_REQUEST['choice']) ? $_REQUEST['choice'] : []; - // certainty degree choice - $choiceDegreeCertainty = $_REQUEST['choiceDegreeCertainty'] ?? []; + // certainty degree choice + $choiceDegreeCertainty = $_REQUEST['choiceDegreeCertainty'] ?? []; - // Hot spot coordinates from all questions. - $hot_spot_coordinates = isset($_REQUEST['hotspot']) ? $_REQUEST['hotspot'] : []; + // Hot spot coordinates from all questions. + $hot_spot_coordinates = isset($_REQUEST['hotspot']) ? $_REQUEST['hotspot'] : []; - // There is a reminder? - $remind_list = isset($_REQUEST['remind_list']) && !empty($_REQUEST['remind_list']) - ? array_keys($_REQUEST['remind_list']) : []; + // There is a reminder? + $remind_list = isset($_REQUEST['remind_list']) && !empty($_REQUEST['remind_list']) + ? array_keys($_REQUEST['remind_list']) : []; - // Needed in manage_answer. - $learnpath_id = isset($_REQUEST['learnpath_id']) ? (int) $_REQUEST['learnpath_id'] : 0; - $learnpath_item_id = isset($_REQUEST['learnpath_item_id']) ? (int) $_REQUEST['learnpath_item_id'] : 0; + // Needed in manage_answer. + $learnpath_id = isset($_REQUEST['learnpath_id']) ? (int) $_REQUEST['learnpath_id'] : 0; + $learnpath_item_id = isset($_REQUEST['learnpath_item_id']) ? (int) $_REQUEST['learnpath_item_id'] : 0; - // Attempt id. - if ($debug) { - error_log("exe_id = $exeId"); - error_log("type = $type"); - error_log('choice = '.print_r($choice, 1).' '); - error_log('hot_spot_coordinates = '.print_r($hot_spot_coordinates, 1)); - error_log('remind_list = '.print_r($remind_list, 1)); - error_log('--------------------------------'); - } + // Attempt id. + if ($debug) { + error_log("exe_id = $exeId"); + error_log("type = $type"); + error_log('choice = '.print_r($choice, 1).' '); + error_log('hot_spot_coordinates = '.print_r($hot_spot_coordinates, 1)); + error_log('remind_list = '.print_r($remind_list, 1)); + error_log('--------------------------------'); + } - // Exercise information. - /** @var Exercise $objExercise */ - $objExercise = Session::read('objExercise'); + // Exercise information. + /** @var Exercise $objExercise */ + $objExercise = Session::read('objExercise'); - // Question info. - $question_id = isset($_REQUEST['question_id']) ? (int) $_REQUEST['question_id'] : null; - $question_list = Session::read('questionList'); + // Question info. + $question_id = isset($_REQUEST['question_id']) ? (int) $_REQUEST['question_id'] : null; + $question_list = Session::read('questionList'); - // If exercise or question is not set then exit. - if (empty($question_list) || empty($objExercise)) { - echo 'error'; - if ($debug) { - if (empty($question_list)) { - error_log('question_list is empty'); - } - if (empty($objExercise)) { - error_log('objExercise is empty'); - } + // If exercise or question is not set then exit. + if (empty($question_list) || empty($objExercise)) { + echo 'error'; + if ($debug) { + if (empty($question_list)) { + error_log('question_list is empty'); } - exit; - } - - if (WhispeakAuthPlugin::questionRequireAuthentify($question_id)) { - if (ONE_PER_PAGE == $objExercise->type) { - echo 'one_per_page'; - break; + if (empty($objExercise)) { + error_log('objExercise is empty'); } + } + exit; + } - echo 'ok'; + if (WhispeakAuthPlugin::questionRequireAuthentify($question_id)) { + if (ONE_PER_PAGE == $objExercise->type) { + echo 'one_per_page'; break; - } else { - ChamiloSession::erase(WhispeakAuthPlugin::SESSION_QUIZ_QUESTION); } - // Getting information of the current exercise. - $exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exeId); - $exercise_id = $exercise_stat_info['exe_exo_id']; - $attemptList = []; + echo 'ok'; + break; + } else { + ChamiloSession::erase(WhispeakAuthPlugin::SESSION_QUIZ_QUESTION); + } + + // Getting information of the current exercise. + $exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exeId); + $exercise_id = $exercise_stat_info['exe_exo_id']; + $attemptList = []; - // First time here we create an attempt (getting the exe_id). - if (!empty($exercise_stat_info)) { - // We know the user we get the exe_id. - $exeId = $exercise_stat_info['exe_id']; - $total_score = $exercise_stat_info['score']; + // First time here we create an attempt (getting the exe_id). + if (!empty($exercise_stat_info)) { + // We know the user we get the exe_id. + $exeId = $exercise_stat_info['exe_id']; + $total_score = $exercise_stat_info['score']; - // Getting the list of attempts - $attemptList = Event::getAllExerciseEventByExeId($exeId); - } + // Getting the list of attempts + $attemptList = Event::getAllExerciseEventByExeId($exeId); + } - // Updating Reminder algorithm. - if (empty($exeId)) { - // Fires an error. - echo 'error'; - if ($debug) { - error_log('exe_id is empty'); - } - exit; + // No exe id? Can't save answer. + if (empty($exeId)) { + // Fires an error. + echo 'error'; + if ($debug) { + error_log('exe_id is empty'); } + exit; + } - Session::write('exe_id', $exeId); + Session::write('exe_id', $exeId); - // Updating Reminder algorithm. - if (ONE_PER_PAGE == $objExercise->type) { - $bd_reminder_list = explode(',', $exercise_stat_info['questions_to_check']); - if (empty($remind_list)) { - $remind_list = $bd_reminder_list; - $new_list = []; - foreach ($bd_reminder_list as $item) { - if ($item != $question_id) { - $new_list[] = $item; - } + // Updating Reminder algorithm. + if (ONE_PER_PAGE == $objExercise->type) { + $bd_reminder_list = explode(',', $exercise_stat_info['questions_to_check']); + if (empty($remind_list)) { + $remind_list = $bd_reminder_list; + $new_list = []; + foreach ($bd_reminder_list as $item) { + if ($item != $question_id) { + $new_list[] = $item; } - $remind_list = $new_list; - } else { - if (isset($remind_list[0])) { - if (!in_array($remind_list[0], $bd_reminder_list)) { - array_push($bd_reminder_list, $remind_list[0]); - } - $remind_list = $bd_reminder_list; + } + $remind_list = $new_list; + } else { + if (isset($remind_list[0])) { + if (!in_array($remind_list[0], $bd_reminder_list)) { + array_push($bd_reminder_list, $remind_list[0]); } + $remind_list = $bd_reminder_list; } } + } - // No exe id? Can't save answer. - $total_weight = 0; - if ('simple' === $type) { - foreach ($question_list as $my_question_id) { - $objQuestionTmp = Question::read($my_question_id, $objExercise->course); - $total_weight += $objQuestionTmp->selectWeighting(); - } - } - unset($objQuestionTmp); - // Fires an error. - if ($debug) { - error_log('Starting questions loop in save_exercise_by_now'); + // Getting the total weight if the request is simple. + $total_weight = 0; + if ('simple' === $type) { + foreach ($question_list as $my_question_id) { + $objQuestionTmp = Question::read($my_question_id, $objExercise->course); + $total_weight += $objQuestionTmp->selectWeighting(); } + } + unset($objQuestionTmp); + if ($debug) { + error_log('Starting questions loop in save_exercise_by_now'); + } - // Getting the total weight if the request is simple - if ('all' === $type) { - $atLeastOneAnswer = false; - foreach ($question_list as $my_question_id) { - if (!empty($choice[$my_question_id])) { - $atLeastOneAnswer = true; - break; - } - } - if (!$atLeastOneAnswer) { - error_log( - 'In '.__FILE__.'::action save_exercise_by_now,'. - ' from user '.api_get_user_id(). - ' for track_e_exercises.exe_id = '.$exeId. - ', we received an empty set of answers.'. - 'Preventing submission to avoid overwriting w/ null.'); - echo 'error'; - exit; + // Check we have at least one non-empty answer in the array + // provided by the user's click on the "Finish test" button. + if ('all' === $type) { + $atLeastOneAnswer = false; + foreach ($question_list as $my_question_id) { + if (!empty($choice[$my_question_id])) { + $atLeastOneAnswer = true; + break; } } + if (!$atLeastOneAnswer) { + error_log( + 'In '.__FILE__.'::action save_exercise_by_now,'. + ' from user '.api_get_user_id(). + ' for track_e_exercises.exe_id = '.$exeId. + ', we received an empty set of answers.'. + 'Preventing submission to avoid overwriting w/ null.'); + echo 'error'; + exit; + } + } - // Looping the question list - foreach ($question_list as $my_question_id) { - if ('simple' === $type && $question_id != $my_question_id) { - if ($debug) { - error_log('Skipping question '.$my_question_id.' in single-question save action'); - } - continue; + // Looping the question list from database (not from the user answer) + foreach ($question_list as $my_question_id) { + if ('simple' === $type && $question_id != $my_question_id) { + if ($debug) { + error_log('Skipping question '.$my_question_id.' in single-question save action'); } + continue; + } - $my_choice = isset($choice[$my_question_id]) ? $choice[$my_question_id] : null; - - // Creates a temporary Question object - $objQuestionTmp = Question::read($my_question_id, $objExercise->course); + $my_choice = isset($choice[$my_question_id]) ? $choice[$my_question_id] : null; - $myChoiceDegreeCertainty = null; - if (MULTIPLE_ANSWER_TRUE_FALSE_DEGREE_CERTAINTY === $objQuestionTmp->type) { - if (isset($choiceDegreeCertainty[$my_question_id])) { - $myChoiceDegreeCertainty = $choiceDegreeCertainty[$my_question_id]; - } - } + $objQuestionTmp = Question::read($my_question_id, $objExercise->course); - // Getting free choice data. - if (in_array($objQuestionTmp->type, [FREE_ANSWER, ORAL_EXPRESSION]) && 'all' == $type) { - $my_choice = isset($_REQUEST['free_choice'][$my_question_id]) && !empty($_REQUEST['free_choice'][$my_question_id]) - ? $_REQUEST['free_choice'][$my_question_id] - : null; + $myChoiceDegreeCertainty = null; + if (MULTIPLE_ANSWER_TRUE_FALSE_DEGREE_CERTAINTY === $objQuestionTmp->type) { + if (isset($choiceDegreeCertainty[$my_question_id])) { + $myChoiceDegreeCertainty = $choiceDegreeCertainty[$my_question_id]; } + } - if ('all' === $type) { - // If saving the whole exercise (not only one question), - // record the sum of individual max scores (called - // "exe_weighting" in track_e_exercises) - $total_weight += $objQuestionTmp->selectWeighting(); - } + // Getting free choice data. + if (in_array($objQuestionTmp->type, [FREE_ANSWER, ORAL_EXPRESSION]) && 'all' == $type) { + $my_choice = isset($_REQUEST['free_choice'][$my_question_id]) && !empty($_REQUEST['free_choice'][$my_question_id]) + ? $_REQUEST['free_choice'][$my_question_id] + : null; + } - // This variable came from exercise_submit_modal.php. - $hotspot_delineation_result = null; - if (isset($_SESSION['hotspot_delineation_result']) && - isset($_SESSION['hotspot_delineation_result'][$objExercise->getId()]) - ) { - $hotspot_delineation_result = $_SESSION['hotspot_delineation_result'][$objExercise->getId()][$my_question_id]; - } + if ('all' === $type) { + // If saving the whole exercise (not only one question), + // record the sum of individual max scores (called + // "exe_weighting" in track_e_exercises) + $total_weight += $objQuestionTmp->selectWeighting(); + } - if ('simple' === $type) { - // Getting old attempt in order to decrees the total score. - $old_result = $objExercise->manage_answer( - $exeId, - $my_question_id, - null, - 'exercise_show', - [], - false, - true, - false, - $objExercise->selectPropagateNeg() - ); - // Removing old score. - $total_score = $total_score - $old_result['score']; - } + // This variable came from exercise_submit_modal.php. + $hotspot_delineation_result = null; + if (isset($_SESSION['hotspot_delineation_result']) && + isset($_SESSION['hotspot_delineation_result'][$objExercise->getId()]) + ) { + $hotspot_delineation_result = $_SESSION['hotspot_delineation_result'][$objExercise->getId()][$my_question_id]; + } - $questionDuration = 0; - if (api_get_configuration_value('allow_time_per_question')) { - $extraFieldValue = new ExtraFieldValue('question'); - $value = $extraFieldValue->get_values_by_handler_and_field_variable($objQuestionTmp->iid, 'time'); - if (!empty($value) && isset($value['value']) && !empty($value['value'])) { - $questionDuration = Event::getAttemptQuestionDuration($exeId, $objQuestionTmp->iid); - if (empty($questionDuration)) { - echo 'error'; - if ($debug) { - error_log("Question duration = 0, in exeId: $exeId, question_id: $my_question_id"); - } - exit; + if ('simple' === $type) { + // Getting old attempt in order to decrease the total score. + $old_result = $objExercise->manage_answer( + $exeId, + $my_question_id, + null, + 'exercise_show', + [], + false, + true, + false, + $objExercise->selectPropagateNeg() + ); + // Removing old score. + $total_score = $total_score - $old_result['score']; + } + + $questionDuration = 0; + if (api_get_configuration_value('allow_time_per_question')) { + $extraFieldValue = new ExtraFieldValue('question'); + $value = $extraFieldValue->get_values_by_handler_and_field_variable($objQuestionTmp->iid, 'time'); + if (!empty($value) && isset($value['value']) && !empty($value['value'])) { + $questionDuration = Event::getAttemptQuestionDuration($exeId, $objQuestionTmp->iid); + if (empty($questionDuration)) { + echo 'error'; + if ($debug) { + error_log("Question duration = 0, in exeId: $exeId, question_id: $my_question_id"); } + exit; } } - // Deleting old attempt - if (isset($attemptList) && !empty($attemptList[$my_question_id])) { - if ($debug) { - error_log("delete_attempt exe_id : $exeId, my_question_id: $my_question_id"); - } - Event::delete_attempt( + } + // Deleting old attempt. + if (isset($attemptList) && !empty($attemptList[$my_question_id])) { + if ($debug) { + error_log("delete_attempt exe_id : $exeId, my_question_id: $my_question_id"); + } + Event::delete_attempt( + $exeId, + api_get_user_id(), + $course_id, + $session_id, + $my_question_id + ); + if (HOT_SPOT === $objQuestionTmp->type) { + Event::delete_attempt_hotspot( $exeId, api_get_user_id(), $course_id, $session_id, $my_question_id ); - if (HOT_SPOT === $objQuestionTmp->type) { - Event::delete_attempt_hotspot( - $exeId, - api_get_user_id(), - $course_id, - $session_id, - $my_question_id - ); - } - - if (isset($attemptList[$my_question_id]) && - isset($attemptList[$my_question_id]['marks']) - ) { - $total_score -= $attemptList[$my_question_id]['marks']; - } } - // We're inside *one* question. Go through each possible answer for this question - if (MULTIPLE_ANSWER_TRUE_FALSE_DEGREE_CERTAINTY === $objQuestionTmp->type) { - $myChoiceTmp = []; - $myChoiceTmp['choice'] = $my_choice; - $myChoiceTmp['choiceDegreeCertainty'] = $myChoiceDegreeCertainty; - $result = $objExercise->manage_answer( - $exeId, - $my_question_id, - $myChoiceTmp, - 'exercise_result', - $hot_spot_coordinates, - true, - false, - false, - $objExercise->selectPropagateNeg(), - $hotspot_delineation_result, - true, - false, - false, - $questionDuration - ); - } else { - $result = $objExercise->manage_answer( - $exeId, - $my_question_id, - $my_choice, - 'exercise_result', - $hot_spot_coordinates, - true, - false, - false, - $objExercise->selectPropagateNeg(), - $hotspot_delineation_result, - true, - false, - false, - $questionDuration - ); + if (isset($attemptList[$my_question_id]) && + isset($attemptList[$my_question_id]['marks']) + ) { + $total_score -= $attemptList[$my_question_id]['marks']; } + } - // Adding the new score. - $total_score += $result['score']; + // We're inside *one* question. Go through each possible answer for this question + if (MULTIPLE_ANSWER_TRUE_FALSE_DEGREE_CERTAINTY === $objQuestionTmp->type) { + $myChoiceTmp = []; + $myChoiceTmp['choice'] = $my_choice; + $myChoiceTmp['choiceDegreeCertainty'] = $myChoiceDegreeCertainty; + $result = $objExercise->manage_answer( + $exeId, + $my_question_id, + $myChoiceTmp, + 'exercise_result', + $hot_spot_coordinates, + true, + false, + false, + $objExercise->selectPropagateNeg(), + $hotspot_delineation_result, + true, + false, + false, + $questionDuration + ); + } else { + $result = $objExercise->manage_answer( + $exeId, + $my_question_id, + $my_choice, + 'exercise_result', + $hot_spot_coordinates, + true, + false, + false, + $objExercise->selectPropagateNeg(), + $hotspot_delineation_result, + true, + false, + false, + $questionDuration + ); + } - if ($debug) { - error_log("total_score: $total_score "); - error_log("total_weight: $total_weight "); - } + // Adding the new score. + $total_score += $result['score']; - $duration = 0; - $now = time(); - if ('all' == $type) { - $exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exeId); - } + if ($debug) { + error_log("total_score: $total_score "); + error_log("total_weight: $total_weight "); + } - $key = ExerciseLib::get_time_control_key( - $exercise_id, - $exercise_stat_info['orig_lp_id'], - $exercise_stat_info['orig_lp_item_id'] - ); + $duration = 0; + $now = time(); + if ('all' == $type) { + $exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exeId); + } - $durationTime = Session::read('duration_time'); - if (isset($durationTime[$key]) && !empty($durationTime[$key])) { - if ($debug) { - error_log('Session time :'.$durationTime[$key]); - } - $duration = $now - $durationTime[$key]; - if (!empty($exercise_stat_info['exe_duration'])) { - $duration += $exercise_stat_info['exe_duration']; - } - $duration = (int) $duration; - } else { - if (!empty($exercise_stat_info['exe_duration'])) { - $duration = $exercise_stat_info['exe_duration']; - } - } + $key = ExerciseLib::get_time_control_key( + $exercise_id, + $exercise_stat_info['orig_lp_id'], + $exercise_stat_info['orig_lp_item_id'] + ); + $durationTime = Session::read('duration_time'); + if (isset($durationTime[$key]) && !empty($durationTime[$key])) { if ($debug) { - error_log('duration to save in DB:'.$duration); + error_log('Session time :'.$durationTime[$key]); + } + $duration = $now - $durationTime[$key]; + if (!empty($exercise_stat_info['exe_duration'])) { + $duration += $exercise_stat_info['exe_duration']; + } + $duration = (int) $duration; + } else { + if (!empty($exercise_stat_info['exe_duration'])) { + $duration = $exercise_stat_info['exe_duration']; } + } - Session::write('duration_time', [$key => $now]); - Event::updateEventExercise( - $exeId, - $objExercise->getId(), - $total_score, - $total_weight, - $session_id, - $exercise_stat_info['orig_lp_id'], - $exercise_stat_info['orig_lp_item_id'], - $exercise_stat_info['orig_lp_item_view_id'], - $duration, - $question_list, - 'incomplete', - $remind_list - ); + if ($debug) { + error_log('duration to save in DB:'.$duration); + } + + Session::write('duration_time', [$key => $now]); + Event::updateEventExercise( + $exeId, + $objExercise->getId(), + $total_score, + $total_weight, + $session_id, + $exercise_stat_info['orig_lp_id'], + $exercise_stat_info['orig_lp_item_id'], + $exercise_stat_info['orig_lp_item_view_id'], + $duration, + $question_list, + 'incomplete', + $remind_list + ); - if (api_get_configuration_value('allow_time_per_question')) { - $questionStart = Session::read('question_start', []); - if (!empty($questionStart)) { - if (isset($questionStart[$my_question_id])) { - unset($questionStart[$my_question_id]); - } - array_filter($questionStart); - Session::write('question_start', $questionStart); + if (api_get_configuration_value('allow_time_per_question')) { + $questionStart = Session::read('question_start', []); + if (!empty($questionStart)) { + if (isset($questionStart[$my_question_id])) { + unset($questionStart[$my_question_id]); } - } - - /*HookQuizQuestionAnswered::create() - ->setEventData( - [ - 'exe_id' => (int) $exeId, - 'quiz' => [ - 'id' => (int) $objExercise->id, - 'title' => $objExercise->selectTitle(true), - ], - 'question' => [ - 'id' => (int) $my_question_id, - 'weight' => (float) $result['weight'], - ], - ] - ) - ->notifyQuizQuestionAnswered();*/ - // Destruction of the Question object - unset($objQuestionTmp); - if ($debug) { - error_log('---------- end question ------------'); + array_filter($questionStart); + Session::write('question_start', $questionStart); } } + + /*HookQuizQuestionAnswered::create() + ->setEventData( + [ + 'exe_id' => (int) $exeId, + 'quiz' => [ + 'id' => (int) $objExercise->id, + 'title' => $objExercise->selectTitle(true), + ], + 'question' => [ + 'id' => (int) $my_question_id, + 'weight' => (float) $result['weight'], + ], + ] + ) + ->notifyQuizQuestionAnswered();*/ + // Destruction of the Question object + unset($objQuestionTmp); if ($debug) { - error_log('Finished questions loop in save_exercise_by_now'); + error_log('---------- end question ------------'); } - } else { + } + if ($debug) { + error_log('Finished questions loop in save_exercise_by_now'); + } + if ($type === 'all') { if ($debug) { - error_log( - 'Exercises attempt '.$exeId.': Failed saving question(s) in course/session '. - $course_id.'/'.$session_id. - ': The user ('. - api_get_user_id(). - ') does not have the permission to access this session now'); + error_log("result: ok - all"); + error_log(" ------ end ajax call ------- "); } - echo 'error'; - exit; - } - - if ('all' == $type) { echo 'ok'; exit; } diff --git a/public/main/inc/ajax/extra_field.ajax.php b/public/main/inc/ajax/extra_field.ajax.php index d3a7b6e65d..eba5d53247 100644 --- a/public/main/inc/ajax/extra_field.ajax.php +++ b/public/main/inc/ajax/extra_field.ajax.php @@ -151,7 +151,6 @@ switch ($action) { dataType: "json", data: "values="+save, success: function(data) { - console.log(data); } }); diff --git a/public/main/inc/ajax/gradebook.ajax.php b/public/main/inc/ajax/gradebook.ajax.php index 5fa795dce5..0e06e6cb06 100644 --- a/public/main/inc/ajax/gradebook.ajax.php +++ b/public/main/inc/ajax/gradebook.ajax.php @@ -53,6 +53,44 @@ switch ($action) { $form->display(); } break;*/ + case 'export_all_certificates': + $categoryId = (int) $_GET['cat_id']; + $filterOfficialCodeGet = isset($_GET['filter']) ? Security::remove_XSS($_GET['filter']) : null; + + if (api_is_student_boss()) { + $userGroup = new UserGroup(); + $userList = $userGroup->getGroupUsersByUser(api_get_user_id()); + } else { + $userList = []; + if (!empty($filterOfficialCodeGet)) { + $userList = UserManager::getUsersByOfficialCode($filterOfficialCodeGet); + } + } + + $courseCode = api_get_course_id(); + $sessionId = api_get_session_id(); + + $commandScript = api_get_path(SYS_CODE_PATH).'gradebook/cli/export_all_certificates.php'; + + $userList = implode(',', $userList); + + shell_exec("php $commandScript $courseCode $sessionId $categoryId $userList > /dev/null &"); + break; + case 'verify_export_all_certificates': + $categoryId = (int) $_GET['cat_id']; + $courseCode = isset($_GET['cidReq']) ? Security::remove_XSS($_GET['cidReq']) : api_get_course_id(); + $sessionId = isset($_GET['id_session']) ? (int) $_GET['id_session'] : api_get_session_id(); + $date = api_get_utc_datetime(null, false, true); + + $pdfName = 'certs_'.$courseCode.'_'.$sessionId.'_'.$categoryId.'_'.$date->format('Y-m-d'); + + $sysFinalFile = api_get_path(SYS_ARCHIVE_PATH)."$pdfName.pdf"; + $webFinalFile = api_get_path(WEB_ARCHIVE_PATH)."$pdfName.pdf"; + + if (file_exists($sysFinalFile)) { + echo $webFinalFile; + } + break; default: echo ''; break; diff --git a/public/main/inc/ajax/myspace.ajax.php b/public/main/inc/ajax/myspace.ajax.php index c4aaf4366b..e07a126251 100644 --- a/public/main/inc/ajax/myspace.ajax.php +++ b/public/main/inc/ajax/myspace.ajax.php @@ -23,7 +23,6 @@ switch ($action) { if (empty($userId)) { exit; } - // At this date : 23/02/2017, a minor review can't determine where is used this case 'access_detail' $cacheAvailable = api_get_configuration_value('apc'); $table = null; $variable = 'lp_global_report_'.$userId; @@ -41,7 +40,7 @@ switch ($action) { $sessionCategoryList = UserManager::get_sessions_by_category($userId, false); $total = 0; $totalAverage = 0; - $table = new HTML_Table(['class' => 'data_table']); + $table = new HTML_Table(['class' => 'table table-hover table-striped data_table']); $row = 0; $col = 0; foreach ($sessionCategoryList as $category) { diff --git a/public/main/inc/ajax/record_audio_rtc.ajax.php b/public/main/inc/ajax/record_audio_rtc.ajax.php index ce3c07d8be..2dbda06c60 100644 --- a/public/main/inc/ajax/record_audio_rtc.ajax.php +++ b/public/main/inc/ajax/record_audio_rtc.ajax.php @@ -5,7 +5,6 @@ use ChamiloSession as Session; require_once __DIR__.'/../global.inc.php'; -// Add security from Chamilo api_block_anonymous_users(); $courseInfo = api_get_course_info(); diff --git a/public/main/inc/ajax/record_audio_wami.ajax.php b/public/main/inc/ajax/record_audio_wami.ajax.php index 53a35eb919..446440a559 100644 --- a/public/main/inc/ajax/record_audio_wami.ajax.php +++ b/public/main/inc/ajax/record_audio_wami.ajax.php @@ -19,12 +19,12 @@ if (isset($params['waminame']) && isset($params['wamidir']) && isset($params['wa $wamiuserid = $params['wamiuserid']; } else { api_not_allowed(); - die(); + exit(); } if (empty($wamiuserid)) { api_not_allowed(); - die(); + exit(); } $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : 'document'; // can be document or message @@ -49,7 +49,7 @@ $ext = explode('.', $waminame); $ext = strtolower($ext[sizeof($ext) - 1]); if ('wav' != $ext) { - die(); + exit(); } switch ($type) { @@ -67,7 +67,7 @@ switch ($type) { $documentPath = $saveDir.'/'.$waminame_to_save; // Add to disk - $fh = fopen($documentPath, 'w') or die("can't open file"); + $fh = fopen($documentPath, 'w') or exit("can't open file"); fwrite($fh, $content); fclose($fh); diff --git a/public/main/inc/lib/pdf.lib.php b/public/main/inc/lib/pdf.lib.php index 718bfb13fb..2853782ba0 100644 --- a/public/main/inc/lib/pdf.lib.php +++ b/public/main/inc/lib/pdf.lib.php @@ -559,10 +559,10 @@ class PDF * * @return bool */ - public function delete_watermark($courseCode = null) + public static function delete_watermark($courseCode = null) { $urlId = api_get_current_access_url_id(); - if (!empty($courseCode) && 'true' == api_get_setting('pdf_export_watermark_by_course')) { + if (!empty($courseCode) && 'true' === api_get_setting('pdf_export_watermark_by_course')) { $course_info = api_get_course_info($courseCode); // course path $store_path = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/'.$urlId.'_pdf_watermark.png'; @@ -588,10 +588,10 @@ class PDF * * @return mixed web path of the file if sucess, false otherwise */ - public function upload_watermark($filename, $source_file, $courseCode = null) + public static function upload_watermark($filename, $source_file, $courseCode = null) { $urlId = api_get_current_access_url_id(); - if (!empty($courseCode) && 'true' == api_get_setting('pdf_export_watermark_by_course')) { + if (!empty($courseCode) && 'true' === api_get_setting('pdf_export_watermark_by_course')) { $course_info = api_get_course_info($courseCode); $store_path = api_get_path(SYS_COURSE_PATH).$course_info['path']; // course path $web_path = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/pdf_watermark.png'; diff --git a/public/main/social/group_topics.php b/public/main/social/group_topics.php index 428820ba64..49fcae3ae6 100644 --- a/public/main/social/group_topics.php +++ b/public/main/social/group_topics.php @@ -51,9 +51,7 @@ if (isset($_REQUEST['action']) && 'delete' == $_REQUEST['action']) { } // My friends -$friend_html = SocialManager::listMyFriendsBlock( - $user_id -); +$friend_html = SocialManager::listMyFriendsBlock(api_get_user_id()); $content = null; $social_right_content = ''; diff --git a/public/main/social/home.php b/public/main/social/home.php index 25136e59da..fb81f5120b 100644 --- a/public/main/social/home.php +++ b/public/main/social/home.php @@ -39,6 +39,7 @@ if (!empty($threadList)) { $posts = SocialManager::getMyWallMessages($user_id, 0, 10, $threadIdList); $countPost = $posts['count']; $posts = $posts['posts']; +$htmlHeadXtra = []; SocialManager::getScrollJs($countPost, $htmlHeadXtra); // Block Menu diff --git a/public/main/social/personal_data.php b/public/main/social/personal_data.php index f5f0b39c86..df7b159091 100644 --- a/public/main/social/personal_data.php +++ b/public/main/social/personal_data.php @@ -88,14 +88,14 @@ switch ($action) { $contentEmail = sprintf( get_lang('User %s signed the agreement.TheDateY'), $currentUserInfo['complete_name'], - api_get_local_time($time) + api_get_local_time() ); MessageManager::send_message_simple( $bossId, $subjectEmail, $contentEmail, - $user_id + api_get_user_id() ); } } @@ -400,7 +400,7 @@ $personalData['data'] = $personalDataContent; $em = Database::getManager(); /** @var LegalRepository $legalTermsRepo */ -$legalTermsRepo = $em->getRepository('ChamiloCoreBundle:Legal'); +$legalTermsRepo = $em->getRepository(\Chamilo\CoreBundle\Entity\Legal::class); // Get data about the treatment of data $treatmentTypes = LegalManager::getTreatmentTypeList(); diff --git a/public/main/social/profile.php b/public/main/social/profile.php index 8581b03ed1..341d23cfde 100644 --- a/public/main/social/profile.php +++ b/public/main/social/profile.php @@ -106,6 +106,7 @@ if (isset($_GET['u'])) { api_block_anonymous_users(); $countPost = SocialManager::getCountWallMessagesByUser($friendId); +$htmlHeadXtra = []; SocialManager::getScrollJs($countPost, $htmlHeadXtra); $link_shared = ''; if (isset($_GET['shared'])) { @@ -237,7 +238,7 @@ if ($show_full_profile) { if (!empty($user_info['competences']) || !empty($user_info['diplomas']) || !empty($user_info['openarea']) || !empty($user_info['teach'])) { - $more_info .= '

'.get_lang('More information').'

'; + $more_info = '

'.get_lang('More information').'

'; if (!empty($user_info['competences'])) { $more_info .= '
'; $more_info .= '
'.get_lang('My competences').'
'; diff --git a/public/main/survey/ch_personality.php b/public/main/survey/ch_personality.php index afe516c918..33341dfa64 100644 --- a/public/main/survey/ch_personality.php +++ b/public/main/survey/ch_personality.php @@ -53,6 +53,7 @@ class ch_personality extends survey_question // Values of question options if (is_array($formData['values'])) { // Check if data is correct foreach ($formData['values'] as $key => &$value) { + $value = Security::remove_XSS($value); $question_values[] = ''; } } @@ -62,14 +63,9 @@ class ch_personality extends survey_question $this->html .= ''; $this->html .= ''; $this->html .= ''; - $this->html .= api_return_html_area( - 'answers['.$key.']', - api_html_entity_decode(stripslashes($formData['answers'][$key])), - '', - '', - null, - ['ToolbarSet' => 'Survey', 'Width' => '100%', 'Height' => '120'] - ); + $dataValue = api_html_entity_decode(stripslashes($formData['answers'][$key])); + $dataValue = Security::remove_XSS($dataValue); + $this->html .= ''; $this->html .= ''; $this->html .= '';