/**
  * Validates the time control key
  */
 public static function exercise_time_control_is_valid($exercise_id, $lp_id = 0, $lp_item_id = 0)
 {
     $course_id = api_get_course_int_id();
     $exercise_id = intval($exercise_id);
     $TBL_EXERCICES = Database::get_course_table(TABLE_QUIZ_TEST);
     $sql = "SELECT expired_time FROM {$TBL_EXERCICES} WHERE c_id = {$course_id} AND iid = {$exercise_id}";
     $result = Database::query($sql);
     $row = Database::fetch_array($result, 'ASSOC');
     if (!empty($row['expired_time'])) {
         $current_expired_time_key = ExerciseLib::get_time_control_key($exercise_id, $lp_id, $lp_item_id);
         if (isset($_SESSION['expired_time'][$current_expired_time_key])) {
             $current_time = time();
             $expired_time = api_strtotime($_SESSION['expired_time'][$current_expired_time_key], 'UTC');
             $total_time_allowed = $expired_time + 30;
             //error_log('expired time converted + 30: '.$total_time_allowed);
             //error_log('$current_time: '.$current_time);
             if ($total_time_allowed < $current_time) {
                 return false;
             }
             return true;
         } else {
             return false;
         }
     } else {
         return true;
     }
 }
 function return_exercise_block($personal_course_list)
 {
     $exercise_list = array();
     if (!empty($personal_course_list)) {
         foreach ($personal_course_list as $course_item) {
             $course_code = $course_item['c'];
             $session_id = $course_item['id_session'];
             $exercises = ExerciseLib::get_exercises_to_be_taken($course_code, $session_id);
             foreach ($exercises as $exercise_item) {
                 $exercise_item['course_code'] = $course_code;
                 $exercise_item['session_id'] = $session_id;
                 $exercise_item['tms'] = api_strtotime($exercise_item['end_time'], 'UTC');
                 $exercise_list[] = $exercise_item;
             }
         }
         if (!empty($exercise_list)) {
             $exercise_list = ArrayClass::msort($exercise_list, 'tms');
             $my_exercise = $exercise_list[0];
             $url = Display::url($my_exercise['title'], api_get_path(WEB_CODE_PATH) . 'exercice/overview.php?exerciseId=' . $my_exercise['id'] . '&cidReq=' . $my_exercise['course_code'] . '&id_session=' . $my_exercise['session_id']);
             $this->tpl->assign('exercise_url', $url);
             $this->tpl->assign('exercise_end_date', api_convert_and_format_date($my_exercise['end_time'], DATE_FORMAT_SHORT));
         }
     }
 }
示例#3
0
 /**
  * Record an hotspot spot for this attempt at answering an hotspot question
  * @param	int		Exercise ID
  * @param	int		Question ID
  * @param	int		Answer ID
  * @param	int		Whether this answer is correct (1) or not (0)
  * @param	string	Coordinates of this point (e.g. 123;324)
  * @param	bool update results?
  * @return	boolean	Result of the insert query
  * @uses Course code and user_id from global scope $_cid and $_user
  */
 public static function saveExerciseAttemptHotspot($exe_id, $question_id, $answer_id, $correct, $coords, $updateResults = false, $exerciseId = 0)
 {
     global $safe_lp_id, $safe_lp_item_id;
     if ($updateResults == false) {
         // Validation in case of fraud with activated control time
         if (!ExerciseLib::exercise_time_control_is_valid($exerciseId, $safe_lp_id, $safe_lp_item_id)) {
             $correct = 0;
         }
     }
     $tbl_track_e_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT);
     if ($updateResults) {
         $params = array('hotspot_correct' => $correct, 'hotspot_coordinate' => $coords);
         Database::update($tbl_track_e_hotspot, $params, array('hotspot_user_id = ? AND hotspot_exe_id = ? AND hotspot_question_id = ? AND hotspot_answer_id = ? ' => array(api_get_user_id(), $exe_id, $question_id, $answer_id, $answer_id)));
     } else {
         return Database::insert($tbl_track_e_hotspot, ['hotspot_course_code' => api_get_course_id(), 'hotspot_user_id' => api_get_user_id(), 'c_id' => api_get_course_int_id(), 'hotspot_exe_id' => $exe_id, 'hotspot_question_id' => $question_id, 'hotspot_answer_id' => $answer_id, 'hotspot_correct' => $correct, 'hotspot_coordinate' => $coords]);
     }
 }
示例#4
0
 foreach ($exercise_data as $exercise_item) {
     $result_list = $exercise_item['results'];
     $exercise_info = $exercise_item['exercise_data'];
     if ($exercise_info->start_time == '0000-00-00 00:00:00') {
         $start_date = '-';
     } else {
         $start_date = $exercise_info->start_time;
     }
     if (!empty($result_list)) {
         foreach ($result_list as $exercise_result) {
             $platform_score = ExerciseLib::show_score($exercise_result['exe_result'], $exercise_result['exe_weighting']);
             $my_score = 0;
             if (!empty($exercise_result['exe_weighting']) && intval($exercise_result['exe_weighting']) != 0) {
                 $my_score = $exercise_result['exe_result'] / $exercise_result['exe_weighting'];
             }
             $position = ExerciseLib::get_exercise_result_ranking($my_score, $exercise_result['exe_id'], $my_exercise_id, $my_course_code, $session_id, $user_list);
             $exercise_info->exercise = Display::url($exercise_info->exercise, api_get_path(WEB_CODE_PATH) . "exercice/result.php?cidReq={$my_course_code}&id={$exercise_result['exe_id']}&id_session={$session_id}&show_headers=1", array('target' => SESSION_LINK_TARGET, 'class' => 'exercise-result-link'));
             $my_real_array[] = array('status' => Display::return_icon('quiz.gif', get_lang('Attempted'), '', ICON_SIZE_SMALL), 'date' => $start_date, 'course' => $course_data['name'], 'exercise' => $exercise_info->exercise, 'attempt' => $counter, 'result' => $platform_score, 'best_result' => $best_score, 'position' => $position);
             $counter++;
         }
     } else {
         // We check the date validation of the exercise if the user can make it
         if ($exercise_info->start_time != '0000-00-00 00:00:00') {
             $allowed_time = api_strtotime($exercise_info->start_time, 'UTC');
             if ($now < $allowed_time) {
                 continue;
             }
         }
         $exercise_info->exercise = Display::url($exercise_info->exercise, api_get_path(WEB_CODE_PATH) . "exercice/overview.php?cidReq={$my_course_code}&exerciseId={$exercise_info->id}&id_session={$session_id}", array('target' => SESSION_LINK_TARGET));
         $new_exercises[] = array('status' => Display::return_icon('star.png', get_lang('New'), array('width' => ICON_SIZE_SMALL)), 'date' => $start_date, 'course' => $course_data['name'], 'exercise' => $exercise_info->exercise, 'attempt' => '-', 'result' => '-', 'best_result' => '-', 'position' => '-');
     }
}
if (empty($objExercise)) {
    if (!empty($_SESSION['objExercise'])) {
        $objExercise = Session::read('objExercise');
    } else {
        $objExercise = null;
    }
}
if (!$objExercise) {
    //Redirect to the exercise overview
    //Check if the exe_id exists
    header("Location: overview.php?exerciseId=" . $exerciseId);
    exit;
}
$time_control = false;
$clock_expired_time = ExerciseLib::get_session_time_control_key($objExercise->id, $learnpath_id, $learnpath_item_id);
if ($objExercise->expired_time != 0 && !empty($clock_expired_time)) {
    $time_control = true;
}
if ($time_control) {
    // Get time left for exipiring time
    $time_left = api_strtotime($clock_expired_time, 'UTC') - time();
    $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH) . 'javascript/epiclock/stylesheet/jquery.epiclock.css');
    $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH) . 'javascript/epiclock/renderers/minute/epiclock.minute.css');
    $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.dateformat.min.js');
    $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.epiclock.min.js');
    $htmlHeadXtra[] = api_get_js('epiclock/renderers/minute/epiclock.minute.js');
    $htmlHeadXtra[] = $objExercise->show_time_control_js($time_left);
}
$exe_id = intval(Session::read('exe_id'));
$exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exe_id);
                break;
            case 'csv':
            default:
                $export->exportCompleteReportCSV($documentPath, null, $loadExtraData, null, $_GET['exerciseId']);
                exit;
                break;
        }
    } else {
        api_not_allowed(true);
    }
}
//Send student email @todo move this code in a class, library
if (isset($_REQUEST['comments']) && $_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor || $allowCoachFeedbackExercises)) {
    //filtered by post-condition
    $id = intval($_GET['exeid']);
    $track_exercise_info = ExerciseLib::get_exercise_track_exercise_info($id);
    if (empty($track_exercise_info)) {
        api_not_allowed();
    }
    $test = $track_exercise_info['title'];
    $student_id = $track_exercise_info['exe_user_id'];
    $session_id = $track_exercise_info['session_id'];
    $lp_id = $track_exercise_info['orig_lp_id'];
    //$lp_item_id        = $track_exercise_info['orig_lp_item_id'];
    $lp_item_view_id = $track_exercise_info['orig_lp_item_view_id'];
    $course_info = api_get_course_info();
    // Teacher data
    $teacher_info = api_get_user_info(api_get_user_id());
    $from_name = api_get_person_name($teacher_info['firstname'], $teacher_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS);
    $url = api_get_path(WEB_CODE_PATH) . 'exercice/result.php?id=' . $track_exercise_info['exe_id'] . '&' . api_get_cidreq() . '&show_headers=1&id_session=' . $session_id;
    $my_post_info = array();
 /**
  * Returns a category summary report
  *
  * @param int exercise id
  * @param array prefilled array with the category_id, score, and weight example: array(1 => array('score' => '10', 'total' => 20));
  * @param bool $categoryMinusOne shows category - 1 see BT#6540
  * @return string
  */
 public static function get_stats_table_by_attempt($exercise_id, $category_list = array(), $categoryMinusOne = false)
 {
     if (empty($category_list)) {
         return null;
     }
     $category_name_list = Testcategory::getListOfCategoriesNameForTest($exercise_id, false);
     $table = new HTML_Table(array('class' => 'data_table'));
     $table->setHeaderContents(0, 0, get_lang('Categories'));
     $table->setHeaderContents(0, 1, get_lang('AbsoluteScore'));
     $table->setHeaderContents(0, 2, get_lang('RelativeScore'));
     $row = 1;
     $none_category = array();
     if (isset($category_list['none'])) {
         $none_category = $category_list['none'];
         unset($category_list['none']);
     }
     $total = array();
     if (isset($category_list['total'])) {
         $total = $category_list['total'];
         unset($category_list['total']);
     }
     $em = Database::getManager();
     $repo = $em->getRepository('ChamiloCoreBundle:CQuizCategory');
     $redefineCategoryList = array();
     if (!empty($category_list) && count($category_list) > 1) {
         $globalCategoryScore = array();
         foreach ($category_list as $category_id => $category_item) {
             $cat = $em->find('ChamiloCoreBundle:CQuizCategory', $category_id);
             $path = $repo->getPath($cat);
             $categoryName = $category_name_list[$category_id];
             $index = 0;
             if ($categoryMinusOne) {
                 $index = 1;
             }
             if (isset($path[$index])) {
                 $category_id = $path[$index]->getIid();
                 $categoryName = $path[$index]->getTitle();
             }
             if (!isset($globalCategoryScore[$category_id])) {
                 $globalCategoryScore[$category_id] = array();
                 $globalCategoryScore[$category_id]['score'] = 0;
                 $globalCategoryScore[$category_id]['total'] = 0;
                 $globalCategoryScore[$category_id]['title'] = '';
             }
             $globalCategoryScore[$category_id]['score'] += $category_item['score'];
             $globalCategoryScore[$category_id]['total'] += $category_item['total'];
             $globalCategoryScore[$category_id]['title'] = $categoryName;
         }
         foreach ($globalCategoryScore as $category_item) {
             $table->setCellContents($row, 0, $category_item['title']);
             $table->setCellContents($row, 1, ExerciseLib::show_score($category_item['score'], $category_item['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($category_item['score'], $category_item['total'], true, false, true));
             $class = 'class="row_odd"';
             if ($row % 2) {
                 $class = 'class="row_even"';
             }
             $table->setRowAttributes($row, $class, true);
             $row++;
         }
         if (!empty($none_category)) {
             $table->setCellContents($row, 0, get_lang('None'));
             $table->setCellContents($row, 1, ExerciseLib::show_score($none_category['score'], $none_category['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($none_category['score'], $none_category['total'], true, false, true));
             $row++;
         }
         if (!empty($total)) {
             $table->setCellContents($row, 0, get_lang('Total'));
             $table->setCellContents($row, 1, ExerciseLib::show_score($total['score'], $total['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($total['score'], $total['total'], true, false, true));
             $table->setRowAttributes($row, 'class="row_total"', true);
         }
         return $table->toHtml();
     }
     return null;
 }
示例#8
0
     if (!(api_is_allowed_to_edit() || api_is_coach())) {
         return array();
     }
     require_once api_get_path(SYS_CODE_PATH) . 'work/work.lib.php';
     $columns = array('student', 'works');
     $result = getWorkUserListData($workId, api_get_course_id(), api_get_session_id(), api_get_group_id(), $start, $limit, $sidx, $sord);
     break;
 case 'get_hotpotatoes_exercise_results':
     $course = api_get_course_info();
     $documentPath = api_get_path(SYS_COURSE_PATH) . $course['path'] . "/document";
     if (api_is_allowed_to_edit(null, true) || api_is_drh()) {
         $columns = array('firstname', 'lastname', 'username', 'group_name', 'exe_date', 'score', 'actions');
     } else {
         $columns = array('exe_date', 'score', 'actions');
     }
     $result = ExerciseLib::get_exam_results_hotpotatoes_data($start, $limit, $sidx, $sord, $hotpot_path, $whereCondition);
     break;
 case 'get_sessions_tracking':
     if (api_is_drh()) {
         $sessions = SessionManager::get_sessions_followed_by_drh(api_get_user_id(), $start, $limit, false, false, false, null, $keyword, $description);
     } else {
         // Sessions for the coach
         $sessions = Tracking::get_sessions_coached_by_user(api_get_user_id(), $start, $limit, false, $keyword, $description);
     }
     $columns = array('name', 'date', 'course_per_session', 'student_per_session', 'details');
     $result = array();
     if (!empty($sessions)) {
         foreach ($sessions as $session) {
             if (api_drh_can_access_all_session_content()) {
                 $count_courses_in_session = count(SessionManager::get_course_list_by_session_id($session['id']));
             } else {
                if (empty($objQuestionTmp->level)) {
                    $txtQuestionLevel = '-';
                }
                $questionLevel = Display::tag('div', $txtQuestionLevel, array('style' => $styleLevel));
                // Question score
                $questionScore = Display::tag('div', $objQuestionTmp->selectWeighting(), array('style' => $styleScore));
                echo '<div id="question_id_list_' . $id . '" >';
                echo '<div class="header_operations">';
                echo $questionName;
                echo $questionType;
                echo $questionCategory;
                echo $questionLevel;
                echo $questionScore;
                echo $actions;
                echo '</div>';
                echo '<div class="question-list-description-block">';
                echo '<p class="lead">' . get_lang($question_class) . '</p>';
                //echo get_lang('Level').': '.$objQuestionTmp->selectLevel();
                ExerciseLib::showQuestion($id, false, null, null, false, true, false, true, $objExercise->feedback_type, true);
                echo '</div>';
                echo '</div>';
                unset($objQuestionTmp);
            }
        }
    }
    if (!$nbrQuestions) {
        echo Display::display_warning_message(get_lang('NoQuestion'));
    }
    echo '</div>';
    //question list div
}
示例#10
0
     $mytime = (int) $time_exe_date - (int) $time_start_date;
     $score = (double) $row_dates['exe_result'];
     $max_score = (double) $row_dates['exe_weighting'];
     $sql = "UPDATE {$TBL_LP_ITEM} SET\n                    max_score = '{$max_score}'\n                WHERE c_id = {$course_id} AND id = '" . $safe_item_id . "'";
     Database::query($sql);
     $sql = "SELECT id FROM {$TBL_LP_ITEM_VIEW}\n                WHERE\n                    c_id = {$course_id} AND\n                    lp_item_id = '{$safe_item_id}' AND\n                    lp_view_id = '" . $learnPath->lp_view_id . "'\n                ORDER BY id DESC\n                LIMIT 1";
     $res_last_attempt = Database::query($sql);
     if (Database::num_rows($res_last_attempt) && !api_is_invitee()) {
         $row_last_attempt = Database::fetch_row($res_last_attempt);
         $lp_item_view_id = $row_last_attempt[0];
         $exercise = new Exercise(api_get_course_int_id());
         $exercise->read($row_dates['exe_exo_id']);
         $status = 'completed';
         if (!empty($exercise->pass_percentage)) {
             $status = 'failed';
             $success = ExerciseLib::is_success_exercise_result($score, $max_score, $exercise->pass_percentage);
             if ($success) {
                 $status = 'passed';
             }
         }
         $sql = "UPDATE {$TBL_LP_ITEM_VIEW} SET\n                        status = '{$status}',\n                        score = {$score},\n                        total_time = {$mytime}\n                    WHERE id='" . $lp_item_view_id . "' AND c_id = {$course_id} ";
         if ($debug) {
             error_log($sql);
         }
         Database::query($sql);
         $sql = "UPDATE {$TBL_TRACK_EXERCICES} SET\n                        orig_lp_item_view_id = {$lp_item_view_id}\n                    WHERE exe_id = " . $safe_exe_id;
         Database::query($sql);
     }
 }
 if (intval($_GET['fb_type']) > 0) {
     $src = 'blank.php?msg=exerciseFinished';
示例#11
0
 if (isset($exerciseLevel) && $exerciseLevel != -1) {
     $filter .= ' AND level=' . $exerciseLevel . ' ';
 }
 if (isset($answerType) && $answerType > 0) {
     $filter .= ' AND qu.type=' . $answerType . ' ';
 }
 if (!empty($session_id) && $session_id != '-1') {
     $main_question_list = array();
     if (!empty($course_list)) {
         foreach ($course_list as $course_item) {
             if (!empty($selected_course) && $selected_course != '-1') {
                 if ($selected_course != $course_item['id']) {
                     continue;
                 }
             }
             $exercise_list = ExerciseLib::get_all_exercises($course_item, $session_id);
             if (!empty($exercise_list)) {
                 foreach ($exercise_list as $exercise) {
                     $my_exercise = new Exercise($course_item['id']);
                     $my_exercise->read($exercise['id']);
                     if (!empty($my_exercise)) {
                         if (!empty($my_exercise->questionList)) {
                             foreach ($my_exercise->questionList as $question_id) {
                                 $question_obj = Question::read($question_id, $course_item['id']);
                                 if ($exerciseLevel != '-1') {
                                     if ($exerciseLevel != $question_obj->level) {
                                         continue;
                                     }
                                 }
                                 if ($answerType > 0) {
                                     if ($answerType != $question_obj->type) {
示例#12
0
$my_attempt_array = array();
$table_content = '';
/* Make a special case for IE, which doesn't seem to be able to handle the
 * results popup -> send it to the full results page */
$browser = new Browser();
$current_browser = $browser->getBrowser();
$url_suffix = '';
$btn_class = 'ajax ';
if ($current_browser == 'Internet Explorer') {
    $url_suffix = '&amp;show_headers=1';
    $btn_class = '';
}
if (!empty($attempts)) {
    $i = $counter;
    foreach ($attempts as $attempt_result) {
        $score = ExerciseLib::show_score($attempt_result['exe_result'], $attempt_result['exe_weighting']);
        $attempt_url = api_get_path(WEB_CODE_PATH) . 'exercice/result.php?' . api_get_cidreq() . '&amp;id=' . $attempt_result['exe_id'] . '&amp;id_session=' . api_get_session_id() . '&amp;height=500&amp;width=950' . $url_suffix;
        $attempt_link = Display::url(get_lang('Show'), $attempt_url, array('class' => $btn_class . 'btn'));
        $teacher_revised = Display::label(get_lang('Validated'), 'success');
        //$attempt_link = get_lang('NoResult');
        //$attempt_link = Display::return_icon('quiz_na.png', get_lang('NoResult'), array(), ICON_SIZE_SMALL);
        if ($attempt_result['attempt_revised'] == 0) {
            $teacher_revised = Display::label(get_lang('NotValidated'), 'info');
        }
        $row = array('count' => $i, 'date' => api_convert_and_format_date($attempt_result['start_date'], DATE_TIME_FORMAT_LONG));
        $attempt_link .= "&nbsp;&nbsp;&nbsp;" . $teacher_revised;
        if (in_array($objExercise->results_disabled, array(RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS, RESULT_DISABLE_SHOW_SCORE_ONLY, RESULT_DISABLE_SHOW_FINAL_SCORE_ONLY_WITH_CATEGORIES))) {
            $row['result'] = $score;
        }
        if (in_array($objExercise->results_disabled, array(RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS, RESULT_DISABLE_SHOW_FINAL_SCORE_ONLY_WITH_CATEGORIES)) || $objExercise->results_disabled == RESULT_DISABLE_SHOW_SCORE_ONLY && $objExercise->feedback_type == EXERCISE_FEEDBACK_TYPE_END) {
            $row['attempt_link'] = $attempt_link;
示例#13
0
             if ($row['start_time'] != '0000-00-00 00:00:00') {
                 $attempt_text = sprintf(get_lang('ExerciseAvailableFromX'), api_convert_and_format_date($row['start_time']));
             }
             if ($row['end_time'] != '0000-00-00 00:00:00') {
                 $attempt_text = sprintf(get_lang('ExerciseAvailableUntilX'), api_convert_and_format_date($row['end_time']));
             }
         }
     }
 } else {
     //Normal behaviour
     //Show results
     if ($my_result_disabled == 0 || $my_result_disabled == 2) {
         if ($num > 0) {
             $row_track = Database::fetch_array($qryres);
             $attempt_text = get_lang('LatestAttempt') . ' : ';
             $attempt_text .= ExerciseLib::show_score($row_track['exe_result'], $row_track['exe_weighting']);
         } else {
             $attempt_text = get_lang('NotAttempted');
         }
     } else {
         $attempt_text = get_lang('CantShowResults');
     }
 }
 $class_tip = '';
 if (empty($num)) {
     $num = '';
 } else {
     $class_tip = 'link_tooltip';
     //@todo use sprintf and show the results validated by the teacher
     if ($num == 1) {
         $num = $num . ' ' . get_lang('Result');
示例#14
0
                    $count = ExerciseLib::get_number_students_answer_hotspot_count($answer_id, $question_id, $exercise_id, $courseCode, $sessionId);
                    $percentange = 0;
                    if (!empty($count_students)) {
                        $percentange = $count / $count_students * 100;
                    }
                    $data[$id]['attempts'] = Display::bar_progress($percentange, false, $count . ' / ' . $count_students);
                    break;
                default:
                    if ($answer_id == 1) {
                        $data[$id]['name'] = cut($question_obj->question, 100);
                    } else {
                        $data[$id]['name'] = '-';
                    }
                    $data[$id]['answer'] = $answer_info;
                    $data[$id]['correct'] = $correct_answer;
                    $count = ExerciseLib::get_number_students_answer_count($real_answer_id, $question_id, $exercise_id, $courseCode, $sessionId);
                    $percentange = 0;
                    if (!empty($count_students)) {
                        $percentange = $count / $count_students * 100;
                    }
                    $data[$id]['attempts'] = Display::bar_progress($percentange, false, $count . ' / ' . $count_students);
            }
            $id++;
        }
    }
}
// Format A table
$table = new HTML_Table(array('class' => 'data_table'));
$row = 0;
$column = 0;
foreach ($headers as $header) {
示例#15
0
 /**
  * Record an hotspot spot for this attempt at answering an hotspot question
  * @param	int		Exercise ID
  * @param	int		Question ID
  * @param	int		Answer ID
  * @param	int		Whether this answer is correct (1) or not (0)
  * @param	string	Coordinates of this point (e.g. 123;324)
  * @param	bool update results?
  * @return	boolean	Result of the insert query
  * @uses Course code and user_id from global scope $_cid and $_user
  */
 public static function saveExerciseAttemptHotspot($exe_id, $question_id, $answer_id, $correct, $coords, $updateResults = false, $exerciseId = 0)
 {
     global $safe_lp_id, $safe_lp_item_id;
     if ($updateResults == false) {
         // Validation in case of fraud with activated control time
         if (!ExerciseLib::exercise_time_control_is_valid($exerciseId, $safe_lp_id, $safe_lp_item_id)) {
             $correct = 0;
         }
     }
     $tbl_track_e_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT);
     if ($updateResults) {
         $params = array('hotspot_correct' => $correct, 'hotspot_coordinate' => $coords);
         Database::update($tbl_track_e_hotspot, $params, array('hotspot_user_id = ? AND hotspot_exe_id = ? AND hotspot_question_id = ? AND hotspot_answer_id = ? ' => array(api_get_user_id(), $exe_id, $question_id, $answer_id, $answer_id)));
     } else {
         $sql = "INSERT INTO {$tbl_track_e_hotspot} (hotspot_course_code, hotspot_user_id, c_id, hotspot_exe_id, hotspot_question_id, hotspot_answer_id, hotspot_correct, hotspot_coordinate)\n                VALUES (\n                '" . api_get_course_id() . "',\n                " . api_get_user_id() . "'," . " " . api_get_course_int_id() . ", " . " '" . Database::escape_string($exe_id) . "', " . " '" . Database::escape_string($question_id) . "'," . " '" . Database::escape_string($answer_id) . "'," . " '" . Database::escape_string($correct) . "'," . " '" . Database::escape_string($coords) . "')";
         return $result = Database::query($sql);
     }
 }
示例#16
0
 if ($objExercise->type == ALL_ON_ONE_PAGE && isset($_GET['reminder']) && $_GET['reminder'] == 2) {
     $remind_highlight = 'no_remind_highlight';
 }
 $exercise_actions = '';
 $is_remind_on = false;
 $attributes = array('id' => 'remind_list[' . $questionId . ']');
 if (in_array($questionId, $remind_list)) {
     $is_remind_on = true;
     $attributes['checked'] = 1;
     $remind_question = true;
     $remind_highlight = ' remind_highlight ';
 }
 // Showing the question
 echo '<div id="question_div_' . $questionId . '" class="main-question ' . $remind_highlight . '" >';
 // Shows the question and its answers
 ExerciseLib::showQuestion($questionId, false, $origin, $i, true, false, $user_choice, false);
 // Button save and continue
 switch ($objExercise->type) {
     case ONE_PER_PAGE:
         $exercise_actions .= $objExercise->show_button($questionId, $current_question);
         break;
     case ALL_ON_ONE_PAGE:
         $button = '<a href="javascript://" class="btn btn-info" onclick="save_now(\'' . $questionId . '\'); ">' . get_lang('SaveForNow') . '</a>';
         $button .= '<span id="save_for_now_' . $questionId . '"></span>&nbsp;';
         $exercise_actions .= Display::div($button, array('class' => 'exercise_save_now_button'));
         break;
 }
 // Checkbox review answers
 if ($objExercise->review_answers) {
     $remind_question_div = Display::tag('label', Display::input('checkbox', 'remind_list[' . $questionId . ']', '', $attributes) . get_lang('ReviewQuestionLater'), array('class' => 'checkbox', 'for' => 'remind_list[' . $questionId . ']'));
     $exercise_actions .= Display::div($remind_question_div, array('class' => 'exercise_save_now_button'));
示例#17
0
         $sql = "SELECT u.user_id as id, u.username, u.lastname, u.firstname\n                    FROM {$user} u\n                    INNER JOIN {$session_course_user} r ON u.user_id = r.user_id\n                    WHERE session_id = %d AND c_id =  '%s'\n                    AND (u.firstname LIKE '%s' OR u.username LIKE '%s' OR u.lastname LIKE '%s')";
         $needle = '%' . $_GET['q'] . '%';
         $sql_query = sprintf($sql, $_GET['session_id'], $course['real_id'], $needle, $needle, $needle);
         $result = Database::query($sql_query);
         while ($user = Database::fetch_assoc($result)) {
             $userCompleteName = api_get_person_name($user['firstname'], $user['lastname']);
             $json['items'][] = ['id' => $user['id'], 'text' => "{$user['username']} ({$userCompleteName})"];
         }
         echo json_encode($json);
     }
     break;
 case 'search_exercise_by_course':
     if (api_is_platform_admin()) {
         $course = api_get_course_info_by_id($_GET['course_id']);
         $session_id = !empty($_GET['session_id']) ? intval($_GET['session_id']) : 0;
         $exercises = ExerciseLib::get_all_exercises($course, $session_id, false, $_GET['q'], true, 3);
         foreach ($exercises as $exercise) {
             $data[] = array('id' => $exercise['id'], 'text' => html_entity_decode($exercise['title']));
         }
         if (!empty($data)) {
             $data[] = array('id' => 'T', 'text' => 'TODOS');
             echo json_encode($data);
         } else {
             echo json_encode(array(array('id' => 'T', 'text' => 'TODOS')));
         }
     }
     break;
 case 'search_survey_by_course':
     if (api_is_platform_admin()) {
         $survey = Database::get_course_table(TABLE_SURVEY);
         $sql = "SELECT survey_id as id, title, anonymous\n                    FROM {$survey}\n                    WHERE\n                      c_id = %d AND\n                      session_id = %d AND\n                      title LIKE '%s'";
 /**
  * @Route("/score-attempt/{exeId}/jury/{juryId}")
  * @Method({"GET"})
  */
 public function scoreAttemptAction($exeId, $juryId)
 {
     $userId = $this->getUser()->getUserId();
     $trackExercise = \ExerciseLib::get_exercise_track_exercise_info($exeId);
     if (empty($trackExercise)) {
         $this->createNotFoundException();
     }
     /** @var \Chamilo\CoreBundle\Entity\Jury $jury */
     $jury = $this->getRepository()->find($juryId);
     if (empty($jury)) {
         $this->createNotFoundException('Jury does not exists');
     }
     if ($jury->getExerciseId() != $trackExercise['exe_exo_id']) {
         $this->createNotFoundException('Exercise attempt is not related with this jury.');
     }
     $members = $jury->getMembers();
     $criteria = Criteria::create()->where(Criteria::expr()->eq("userId", $userId))->setFirstResult(0)->setMaxResults(1);
     /** @var JuryMembers $member */
     $member = $members->matching($criteria)->first();
     if (empty($member)) {
         $this->createNotFoundException('You are not part of the jury.');
     }
     $students = $member->getStudents();
     $criteria = Criteria::create()->where(Criteria::expr()->eq("userId", $trackExercise['exe_user_id']))->setFirstResult(0)->setMaxResults(1);
     /** @var JuryMembers $member */
     $student = $students->matching($criteria)->first();
     if (empty($student)) {
         $this->createNotFoundException('You are not assigned to this user.');
     }
     // Setting member only for president.
     if ($this->isGranted('ROLE_JURY_PRESIDENT')) {
         // Relating user with president
         if ($member) {
             $this->getManager()->getRepository('Chamilo\\CoreBundle\\Entity\\JuryMembers')->assignUserToJuryMember($trackExercise['exe_user_id'], $member->getId());
         }
     }
     $questionScoreTypeModel = array();
     $criteria = array('exeId' => $exeId, 'juryUserId' => $userId);
     $trackJury = $this->getManager()->getRepository('Chamilo\\CoreBundle\\Entity\\TrackAttemptJury')->findBy($criteria);
     if ($trackJury) {
         $this->get('session')->getFlashBag()->add('info', "You already review this exercise attempt.");
         /** @var TrackAttemptJury $track */
         foreach ($trackJury as $track) {
             $questionScoreTypeModel[$track->getQuestionId()] = $track->getQuestionScoreNameId();
         }
     }
     $questionList = explode(',', $trackExercise['data_tracking']);
     $exerciseResult = \ExerciseLib::getExerciseResult($trackExercise);
     $counter = 1;
     $objExercise = new \Exercise($trackExercise['c_id']);
     $objExercise->read($trackExercise['exe_exo_id']);
     $totalScore = $totalWeighting = 0;
     $show_media = true;
     $tempParentId = null;
     $mediaCounter = 0;
     $media_list = array();
     $modelType = $objExercise->getScoreTypeModel();
     $options = array();
     if ($modelType) {
         /** @var \Chamilo\CoreBundle\Entity\QuestionScore $questionScoreName */
         $questionScore = $this->get('orm.em')->getRepository('Chamilo\\CoreBundle\\Entity\\QuestionScore')->find($modelType);
         if ($questionScore) {
             $items = $questionScore->getItems();
             /** @var \Chamilo\CoreBundle\Entity\QuestionScoreName  $score */
             foreach ($items as $score) {
                 $options[$score->getId() . ':' . $score->getScore()] = $score;
             }
         }
     } else {
         return $this->createNotFoundException('The exercise does not contain a model type.');
     }
     $exerciseContent = null;
     foreach ($questionList as $questionId) {
         ob_start();
         $choice = isset($exerciseResult[$questionId]) ? $exerciseResult[$questionId] : null;
         // Creates a temporary Question object
         /** @var \Question $objQuestionTmp */
         $objQuestionTmp = \Question::read($questionId);
         if ($objQuestionTmp->parent_id != 0) {
             if (!in_array($objQuestionTmp->parent_id, $media_list)) {
                 $media_list[] = $objQuestionTmp->parent_id;
                 $show_media = true;
             }
             if ($tempParentId == $objQuestionTmp->parent_id) {
                 $mediaCounter++;
             } else {
                 $mediaCounter = 0;
             }
             $counterToShow = chr(97 + $mediaCounter);
             $tempParentId = $objQuestionTmp->parent_id;
         }
         $questionWeighting = $objQuestionTmp->selectWeighting();
         $answerType = $objQuestionTmp->selectType();
         $question_result = $objExercise->manageAnswers($exeId, $questionId, $choice, 'exercise_show', array(), false, true, true);
         $questionScore = $question_result['score'];
         $totalScore += $question_result['score'];
         $my_total_score = $questionScore;
         $my_total_weight = $questionWeighting;
         $totalWeighting += $questionWeighting;
         $score = array();
         $score['result'] = get_lang('Score') . " : " . \ExerciseLib::show_score($my_total_score, $my_total_weight, false, false);
         $score['pass'] = $my_total_score >= $my_total_weight ? true : false;
         $score['type'] = $answerType;
         $score['score'] = $my_total_score;
         $score['weight'] = $my_total_weight;
         $score['comments'] = isset($comnt) ? $comnt : null;
         $contents = ob_get_clean();
         $question_content = '<div class="question_row">';
         $question_content .= $objQuestionTmp->return_header($objExercise->feedback_type, $counter, $score, $show_media, $mediaCounter);
         $question_content .= '</table>';
         // display question category, if any
         $question_content .= \Testcategory::getCategoryNamesForQuestion($questionId);
         $question_content .= $contents;
         $defaultValue = isset($questionScoreTypeModel[$questionId]) ? $questionScoreTypeModel[$questionId] : null;
         //$question_content .= \Display::select('options['.$questionId.']', $options, $defaultValue);
         foreach ($options as $value => $score) {
             $attributes = array();
             if ($score->getId() == $defaultValue) {
                 $attributes = array('checked' => 'checked');
             }
             $question_content .= '<label>';
             $question_content .= \Display::input('radio', 'options[' . $questionId . ']', $value, $attributes) . ' <span title="' . $score->getDescription() . '" data-toggle="tooltip" > ' . $score->getName() . ' </span>';
             $question_content .= '</label>';
         }
         $question_content .= '</div>';
         $exerciseContent .= $question_content;
         $counter++;
     }
     $template = $this->get('template');
     $template->assign('exercise', $exerciseContent);
     $template->assign('exe_id', $exeId);
     $template->assign('jury_id', $juryId);
     $response = $this->get('template')->render_template($this->getTemplatePath() . 'score_attempt.tpl');
     return new Response($response, 200, array());
 }
示例#19
0
 /**
  * Returns the exercise result
  * @param 	int		attempt id
  * @return 	float 	exercise result
  */
 public function get_exercise_result($exe_id)
 {
     $result = array();
     $track_exercise_info = ExerciseLib::get_exercise_track_exercise_info($exe_id);
     if (!empty($track_exercise_info)) {
         $totalScore = 0;
         $objExercise = new Exercise();
         $objExercise->read($track_exercise_info['exe_exo_id']);
         if (!empty($track_exercise_info['data_tracking'])) {
             $question_list = explode(',', $track_exercise_info['data_tracking']);
         }
         foreach ($question_list as $questionId) {
             $question_result = $objExercise->manage_answer($exe_id, $questionId, '', 'exercise_show', array(), false, true, false, $objExercise->selectPropagateNeg());
             $totalScore += $question_result['score'];
         }
         if ($objExercise->selectPropagateNeg() == 0 && $totalScore < 0) {
             $totalScore = 0;
         }
         $result = array('score' => $totalScore, 'weight' => $track_exercise_info['exe_weighting']);
     }
     return $result;
 }
示例#20
0
 /**
  * Returns an HTML ribbon to show on top of the exercise result, with
  * colouring depending on the success or failure of the student
  * @param $score
  * @param $weight
  * @param bool $check_pass_percentage
  * @return string
  */
 public function get_question_ribbon($score, $weight, $check_pass_percentage = false)
 {
     $eventMessage = null;
     $ribbon = '<div class="question_row">';
     $ribbon .= '<div class="ribbon">';
     if ($check_pass_percentage) {
         $is_success = ExerciseLib::is_success_exercise_result($score, $weight, $this->selectPassPercentage());
         // Color the final test score if pass_percentage activated
         $ribbon_total_success_or_error = "";
         if (ExerciseLib::is_pass_pourcentage_enabled($this->selectPassPercentage())) {
             if ($is_success) {
                 $eventMessage = $this->getOnSuccessMessage();
                 $ribbon_total_success_or_error = ' ribbon-total-success';
             } else {
                 $eventMessage = $this->getOnFailedMessage();
                 $ribbon_total_success_or_error = ' ribbon-total-error';
             }
         }
         $ribbon .= '<div class="rib rib-total ' . $ribbon_total_success_or_error . '">';
     } else {
         $ribbon .= '<div class="rib rib-total">';
     }
     $ribbon .= '<h3>' . get_lang('YourTotalScore') . ":&nbsp;";
     $ribbon .= ExerciseLib::show_score($score, $weight, false, true);
     $ribbon .= '</h3>';
     $ribbon .= '</div>';
     if ($check_pass_percentage) {
         $ribbon .= ExerciseLib::show_success_message($score, $weight, $this->selectPassPercentage());
     }
     $ribbon .= '</div>';
     $ribbon .= '</div>';
     $ribbon .= $eventMessage;
     return $ribbon;
 }
示例#21
0
 /**
  * Get data for users list in sortable with pagination
  * @param $from
  * @param $number_of_items
  * @param $column
  * @param $direction
  * @param $includeInvitedUsers boolean Whether include the invited users
  * @return array
  */
 public static function get_user_data($from, $number_of_items, $column, $direction, $includeInvitedUsers = false)
 {
     global $user_ids, $course_code, $additional_user_profile_info, $export_csv, $is_western_name_order, $csv_content, $session_id;
     $course_code = Database::escape_string($course_code);
     $tbl_user = Database::get_main_table(TABLE_MAIN_USER);
     $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
     $access_url_id = api_get_current_access_url_id();
     // get all users data from a course for sortable with limit
     if (is_array($user_ids)) {
         $user_ids = array_map('intval', $user_ids);
         $condition_user = "******" . implode(',', $user_ids) . ") ";
     } else {
         $user_ids = intval($user_ids);
         $condition_user = "******";
     }
     if (!empty($_GET['user_keyword'])) {
         $keyword = trim(Database::escape_string($_GET['user_keyword']));
         $condition_user .= " AND (\n                user.firstname LIKE '%" . $keyword . "%' OR\n                user.lastname LIKE '%" . $keyword . "%'  OR\n                user.username LIKE '%" . $keyword . "%'  OR\n                user.email LIKE '%" . $keyword . "%'\n             ) ";
     }
     $url_table = null;
     $url_condition = null;
     if (api_is_multiple_url_enabled()) {
         $url_table = ", " . $tbl_url_rel_user . "as url_users";
         $url_condition = " AND user.user_id = url_users.user_id AND access_url_id='{$access_url_id}'";
     }
     $invitedUsersCondition = '';
     if (!$includeInvitedUsers) {
         $invitedUsersCondition = " AND user.status != " . INVITEE;
     }
     $sql = "SELECT  user.user_id as user_id,\n                    user.official_code  as col0,\n                    user.lastname       as col1,\n                    user.firstname      as col2,\n                    user.username       as col3\n                FROM {$tbl_user} as user {$url_table}\n    \t        {$condition_user} {$url_condition} {$invitedUsersCondition}";
     if (!in_array($direction, array('ASC', 'DESC'))) {
         $direction = 'ASC';
     }
     $column = intval($column);
     $from = intval($from);
     $number_of_items = intval($number_of_items);
     $sql .= " ORDER BY col{$column} {$direction} ";
     $sql .= " LIMIT {$from},{$number_of_items}";
     $res = Database::query($sql);
     $users = array();
     $course_info = api_get_course_info($course_code);
     $total_surveys = 0;
     $total_exercises = ExerciseLib::get_all_exercises($course_info, $session_id, false, null, false, 3);
     if (empty($session_id)) {
         $survey_user_list = array();
         $survey_list = SurveyManager::get_surveys($course_code, $session_id);
         $total_surveys = count($survey_list);
         if (!empty($survey_list)) {
             foreach ($survey_list as $survey) {
                 $user_list = SurveyManager::get_people_who_filled_survey($survey['survey_id'], false, $course_info['real_id']);
                 foreach ($user_list as $user_id) {
                     isset($survey_user_list[$user_id]) ? $survey_user_list[$user_id]++ : ($survey_user_list[$user_id] = 1);
                 }
             }
         }
     }
     while ($user = Database::fetch_array($res, 'ASSOC')) {
         $courseInfo = api_get_course_info($course_code);
         $courseId = $courseInfo['real_id'];
         $user['official_code'] = $user['col0'];
         $user['lastname'] = $user['col1'];
         $user['firstname'] = $user['col2'];
         $user['username'] = $user['col3'];
         $user['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, $session_id));
         $avg_student_score = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), $session_id);
         $avg_student_progress = Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), $session_id);
         if (empty($avg_student_progress)) {
             $avg_student_progress = 0;
         }
         $user['average_progress'] = $avg_student_progress . '%';
         $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $courseId, $session_id);
         $user['exercise_progress'] = $total_user_exercise;
         $total_user_exercise = Tracking::get_exercise_student_average_best_attempt($total_exercises, $user['user_id'], $courseId, $session_id);
         $user['exercise_average_best_attempt'] = $total_user_exercise;
         if (is_numeric($avg_student_score)) {
             $user['student_score'] = $avg_student_score . '%';
         } else {
             $user['student_score'] = $avg_student_score;
         }
         $user['count_assignments'] = Tracking::count_student_assignments($user['user_id'], $course_code, $session_id);
         $user['count_messages'] = Tracking::count_student_messages($user['user_id'], $course_code, $session_id);
         $user['first_connection'] = Tracking::get_first_connection_date_on_the_course($user['user_id'], $courseId, $session_id);
         $user['last_connection'] = Tracking::get_last_connection_date_on_the_course($user['user_id'], $courseInfo, $session_id);
         // we need to display an additional profile field
         $user['additional'] = '';
         if (isset($_GET['additional_profile_field']) && is_numeric($_GET['additional_profile_field'])) {
             if (isset($additional_user_profile_info[$user['user_id']]) && is_array($additional_user_profile_info[$user['user_id']])) {
                 $user['additional'] = implode(', ', $additional_user_profile_info[$user['user_id']]);
             }
         }
         if (empty($session_id)) {
             $user['survey'] = (isset($survey_user_list[$user['user_id']]) ? $survey_user_list[$user['user_id']] : 0) . ' / ' . $total_surveys;
         }
         $user['link'] = '<center><a href="../mySpace/myStudents.php?student=' . $user['user_id'] . '&details=true&course=' . $course_code . '&origin=tracking_course&id_session=' . $session_id . '"><img src="' . api_get_path(WEB_IMG_PATH) . 'icons/22/2rightarrow.png" border="0" /></a></center>';
         // store columns in array $users
         $is_western_name_order = api_is_western_name_order();
         $user_row = array();
         $user_row[] = $user['official_code'];
         //0
         if ($is_western_name_order) {
             $user_row[] = $user['firstname'];
             $user_row[] = $user['lastname'];
         } else {
             $user_row[] = $user['lastname'];
             $user_row[] = $user['firstname'];
         }
         $user_row[] = $user['username'];
         $user_row[] = $user['time'];
         $user_row[] = $user['average_progress'];
         $user_row[] = $user['exercise_progress'];
         $user_row[] = $user['exercise_average_best_attempt'];
         $user_row[] = $user['student_score'];
         $user_row[] = $user['count_assignments'];
         $user_row[] = $user['count_messages'];
         if (empty($session_id)) {
             $user_row[] = $user['survey'];
         }
         $user_row[] = $user['first_connection'];
         $user_row[] = $user['last_connection'];
         if (isset($_GET['additional_profile_field']) && is_numeric($_GET['additional_profile_field'])) {
             $user_row[] = $user['additional'];
         }
         $user_row[] = $user['link'];
         $users[] = $user_row;
         if ($export_csv) {
             if (empty($session_id)) {
                 $user_row = array_map('strip_tags', $user_row);
                 unset($user_row[14]);
                 unset($user_row[15]);
             } else {
                 $user_row = array_map('strip_tags', $user_row);
                 unset($user_row[13]);
                 unset($user_row[14]);
             }
             $csv_content[] = $user_row;
         }
     }
     return $users;
 }
示例#22
0
 /**
  * Gets the progress of the given session
  * @param int   session id
  * @param array options order and limit keys
  * @return array table with user name, lp name, progress
  */
 public static function get_session_progress($sessionId, $courseId, $date_from, $date_to, $options)
 {
     $sessionId = intval($sessionId);
     $getAllSessions = false;
     if (empty($sessionId)) {
         $sessionId = 0;
         $getAllSessions = true;
     }
     //tables
     $session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
     $user = Database::get_main_table(TABLE_MAIN_USER);
     $workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
     $workTableAssignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT);
     $forum = Database::get_course_table(TABLE_FORUM);
     $forum_post = Database::get_course_table(TABLE_FORUM_POST);
     $tbl_course_lp = Database::get_course_table(TABLE_LP_MAIN);
     $wiki = Database::get_course_table(TABLE_WIKI);
     $table_stats_default = Database::get_main_table(TABLE_STATISTIC_TRACK_E_DEFAULT);
     $table_stats_access = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS);
     $course = api_get_course_info_by_id($courseId);
     $where = " WHERE c_id = '%s' AND s.status <> 2 ";
     $limit = null;
     if (!empty($options['limit'])) {
         $limit = " LIMIT " . $options['limit'];
     }
     if (!empty($options['where'])) {
         $where .= ' ' . $options['where'];
     }
     $order = null;
     if (!empty($options['order'])) {
         $order = " ORDER BY " . $options['order'];
     }
     //TODO, fix create report without session
     $queryVariables = array($course['real_id']);
     if (!empty($sessionId)) {
         $where .= ' AND session_id = %s';
         $queryVariables[] = $sessionId;
         $sql = "SELECT\n                        u.user_id, u.lastname, u.firstname, u.username,\n                        u.email, s.c_id, s.session_id\n                    FROM {$session_course_user} s\n                    INNER JOIN {$user} u\n                    ON u.user_id = s.user_id\n                    {$where} {$order} {$limit}";
     } else {
         $sql = "SELECT\n                        u.user_id, u.lastname, u.firstname, u.username,\n                        u.email, s.c_id, s.session_id\n                    FROM {$session_course_user} s\n                    INNER JOIN {$user} u ON u.user_id = s.user_id\n                    {$where} {$order} {$limit}";
     }
     $sql_query = vsprintf($sql, $queryVariables);
     $rs = Database::query($sql_query);
     while ($user = Database::fetch_array($rs)) {
         $users[$user['user_id']] = $user;
     }
     /**
      *  Lessons
      */
     $sql = "SELECT * FROM {$tbl_course_lp} WHERE c_id = %s ";
     //AND session_id = %s
     $sql_query = sprintf($sql, $course['real_id']);
     $result = Database::query($sql_query);
     $arrLesson = array(array());
     while ($row = Database::fetch_array($result)) {
         if (empty($arrLesson[$row['session_id']]['lessons_total'])) {
             $arrLesson[$row['session_id']]['lessons_total'] = 1;
         } else {
             $arrLesson[$row['session_id']]['lessons_total']++;
         }
     }
     /**
      *  Exercises
      */
     $exercises = ExerciseLib::get_all_exercises($course, $sessionId, false, '', $getAllSessions);
     $exercises_total = count($exercises);
     /**
      *  Assignments
      */
     //total
     if ($getAllSessions) {
         $sql = "SELECT count(w.id) as count\n                    FROM {$workTable} w\n                    LEFT JOIN {$workTableAssignment} a\n                    ON (a.publication_id = w.id AND a.c_id = w.c_id)\n                    WHERE w.c_id = %s\n                    AND parent_id = 0\n                    AND active IN (1, 0)";
     } else {
         $sql = "SELECT count(w.id) as count\n                    FROM {$workTable} w\n                    LEFT JOIN {$workTableAssignment} a\n                    ON (a.publication_id = w.id AND a.c_id = w.c_id)\n                    WHERE w.c_id = %s\n                    AND parent_id = 0\n                    AND active IN (1, 0)\n                    AND  session_id = %s";
     }
     $sql_query = sprintf($sql, $course['real_id'], $sessionId);
     $result = Database::query($sql_query);
     $row = Database::fetch_array($result);
     $assignments_total = $row['count'];
     /**
      * Wiki
      */
     if ($getAllSessions) {
         $sql = "SELECT count(distinct page_id)  as count FROM {$wiki}\n                    WHERE c_id = %s";
     } else {
         $sql = "SELECT count(distinct page_id)  as count FROM {$wiki}\n                    WHERE c_id = %s and session_id = %s";
     }
     $sql_query = sprintf($sql, $course['real_id'], $sessionId);
     $result = Database::query($sql_query);
     $row = Database::fetch_array($result);
     $wiki_total = $row['count'];
     /**
      * Surveys
      */
     $survey_user_list = array();
     $survey_list = SurveyManager::get_surveys($course['code'], $sessionId);
     $surveys_total = count($survey_list);
     foreach ($survey_list as $survey) {
         $user_list = SurveyManager::get_people_who_filled_survey($survey['survey_id'], false, $course['real_id']);
         foreach ($user_list as $user_id) {
             isset($survey_user_list[$user_id]) ? $survey_user_list[$user_id]++ : ($survey_user_list[$user_id] = 1);
         }
     }
     /**
      * Forums
      */
     $forums_total = CourseManager::getCountForum($course['real_id'], $sessionId, $getAllSessions);
     //process table info
     foreach ($users as $user) {
         //Course description
         $sql = "SELECT count(*) as count\n                    FROM {$table_stats_access}\n                    WHERE access_tool = 'course_description'\n                    AND c_id = '%s'\n                    AND access_session_id = %s\n                    AND access_user_id = %s ";
         $sql_query = sprintf($sql, $course['real_id'], $user['id_session'], $user['user_id']);
         $result = Database::query($sql_query);
         $row = Database::fetch_array($result);
         $course_description_progress = $row['count'] > 0 ? 100 : 0;
         if (!empty($arrLesson[$user['id_session']]['lessons_total'])) {
             $lessons_total = $arrLesson[$user['id_session']]['lessons_total'];
         } else {
             $lessons_total = !empty($arrLesson[0]['lessons_total']) ? $arrLesson[0]['lessons_total'] : 0;
         }
         //Lessons
         //TODO: Lessons done and left is calculated by progress per item in lesson, maybe we should calculate it only per completed lesson?
         $lessons_progress = Tracking::get_avg_student_progress($user['user_id'], $course['code'], array(), $user['id_session']);
         $lessons_done = $lessons_progress * $lessons_total / 100;
         $lessons_left = $lessons_total - $lessons_done;
         //Exercises
         $exercises_progress = str_replace('%', '', Tracking::get_exercise_student_progress($exercises, $user['user_id'], $course['real_id'], $user['id_session']));
         $exercises_done = round($exercises_progress * $exercises_total / 100);
         $exercises_left = $exercises_total - $exercises_done;
         //Assignments
         $assignments_done = Tracking::count_student_assignments($user['user_id'], $course['code'], $user['id_session']);
         $assignments_left = $assignments_total - $assignments_done;
         if (!empty($assignments_total)) {
             $assignments_progress = round($assignments_done * 100 / $assignments_total, 2);
         } else {
             $assignments_progress = 0;
         }
         //Wiki
         //total revisions per user
         $sql = "SELECT count(*) as count\n                    FROM {$wiki}\n                    WHERE c_id = %s and session_id = %s and user_id = %s";
         $sql_query = sprintf($sql, $course['real_id'], $user['id_session'], $user['user_id']);
         $result = Database::query($sql_query);
         $row = Database::fetch_array($result);
         $wiki_revisions = $row['count'];
         //count visited wiki pages
         $sql = "SELECT count(distinct default_value) as count\n                    FROM {$table_stats_default}\n                    WHERE\n                        default_user_id = %s AND\n                        default_event_type = 'wiki_page_view' AND\n                        default_value_type = 'wiki_page_id' AND\n                        c_id = %s\n                    ";
         $sql_query = sprintf($sql, $user['user_id'], $course['real_id']);
         $result = Database::query($sql_query);
         $row = Database::fetch_array($result);
         $wiki_read = $row['count'];
         $wiki_unread = $wiki_total - $wiki_read;
         if (!empty($wiki_total)) {
             $wiki_progress = round($wiki_read * 100 / $wiki_total, 2);
         } else {
             $wiki_progress = 0;
         }
         //Surveys
         $surveys_done = isset($survey_user_list[$user['user_id']]) ? $survey_user_list[$user['user_id']] : 0;
         $surveys_left = $surveys_total - $surveys_done;
         if (!empty($surveys_total)) {
             $surveys_progress = round($surveys_done * 100 / $surveys_total, 2);
         } else {
             $surveys_progress = 0;
         }
         //Forums
         $forums_done = CourseManager::getCountForumPerUser($user['user_id'], $course['real_id'], $user['id_session']);
         $forums_left = $forums_total - $forums_done;
         if (!empty($forums_total)) {
             $forums_progress = round($forums_done * 100 / $forums_total, 2);
         } else {
             $forums_progress = 0;
         }
         //Overall Total
         $overall_total = ($course_description_progress + $exercises_progress + $forums_progress + $assignments_progress + $wiki_progress + $surveys_progress) / 6;
         $link = '<a href="' . api_get_path(WEB_CODE_PATH) . 'mySpace/myStudents.php?student=' . $user[0] . '&details=true&course=' . $course['code'] . '&id_session=' . $user['id_session'] . '"> %s </a>';
         $linkForum = '<a href="' . api_get_path(WEB_CODE_PATH) . 'forum/index.php?cidReq=' . $course['code'] . '&id_session=' . $user['id_session'] . '"> %s </a>';
         $linkWork = '<a href="' . api_get_path(WEB_CODE_PATH) . 'work/work.php?cidReq=' . $course['code'] . '&id_session=' . $user['id_session'] . '"> %s </a>';
         $linkWiki = '<a href="' . api_get_path(WEB_CODE_PATH) . 'wiki/index.php?cidReq=' . $course['code'] . '&session_id=' . $user['id_session'] . '&action=statistics"> %s </a>';
         $linkSurvey = '<a href="' . api_get_path(WEB_CODE_PATH) . 'survey/survey_list.php?cidReq=' . $course['code'] . '&id_session=' . $user['id_session'] . '"> %s </a>';
         $table[] = array('lastname' => $user[1], 'firstname' => $user[2], 'username' => $user[3], 'total' => round($overall_total, 2) . '%', 'courses' => sprintf($link, $course_description_progress . '%'), 'lessons' => sprintf($link, $lessons_progress . '%'), 'exercises' => sprintf($link, $exercises_progress . '%'), 'forums' => sprintf($link, $forums_progress . '%'), 'homeworks' => sprintf($link, $assignments_progress . '%'), 'wikis' => sprintf($link, $wiki_progress . '%'), 'surveys' => sprintf($link, $surveys_progress . '%'), 'course_description_progress' => $course_description_progress . '%', 'lessons_total' => sprintf($link, $lessons_total), 'lessons_done' => sprintf($link, $lessons_done), 'lessons_left' => sprintf($link, $lessons_left), 'lessons_progress' => sprintf($link, $lessons_progress . '%'), 'exercises_total' => sprintf($link, $exercises_total), 'exercises_done' => sprintf($link, $exercises_done), 'exercises_left' => sprintf($link, $exercises_left), 'exercises_progress' => sprintf($link, $exercises_progress . '%'), 'forums_total' => sprintf($linkForum, $forums_total), 'forums_done' => sprintf($linkForum, $forums_done), 'forums_left' => sprintf($linkForum, $forums_left), 'forums_progress' => sprintf($linkForum, $forums_progress . '%'), 'assignments_total' => sprintf($linkWork, $assignments_total), 'assignments_done' => sprintf($linkWork, $assignments_done), 'assignments_left' => sprintf($linkWork, $assignments_left), 'assignments_progress' => sprintf($linkWork, $assignments_progress . '%'), 'wiki_total' => sprintf($linkWiki, $wiki_total), 'wiki_revisions' => sprintf($linkWiki, $wiki_revisions), 'wiki_read' => sprintf($linkWiki, $wiki_read), 'wiki_unread' => sprintf($linkWiki, $wiki_unread), 'wiki_progress' => sprintf($linkWiki, $wiki_progress . '%'), 'surveys_total' => sprintf($linkSurvey, $surveys_total), 'surveys_done' => sprintf($linkSurvey, $surveys_done), 'surveys_left' => sprintf($linkSurvey, $surveys_left), 'surveys_progress' => sprintf($linkSurvey, $surveys_progress . '%'));
     }
     return $table;
 }
示例#23
0
 /**
  * Returns a category summary report
  * @params int exercise id
  * @params array pre filled array with the category_id, score, and weight
  * example: array(1 => array('score' => '10', 'total' => 20));
  */
 public static function get_stats_table_by_attempt($exercise_id, $category_list = array())
 {
     if (empty($category_list)) {
         return null;
     }
     $category_name_list = TestCategory::getListOfCategoriesNameForTest($exercise_id);
     $table = new HTML_Table(array('class' => 'data_table'));
     $table->setHeaderContents(0, 0, get_lang('Categories'));
     $table->setHeaderContents(0, 1, get_lang('AbsoluteScore'));
     $table->setHeaderContents(0, 2, get_lang('RelativeScore'));
     $row = 1;
     $none_category = array();
     if (isset($category_list['none'])) {
         $none_category = $category_list['none'];
         unset($category_list['none']);
     }
     $total = array();
     if (isset($category_list['total'])) {
         $total = $category_list['total'];
         unset($category_list['total']);
     }
     if (count($category_list) > 1) {
         foreach ($category_list as $category_id => $category_item) {
             $table->setCellContents($row, 0, $category_name_list[$category_id]);
             $table->setCellContents($row, 1, ExerciseLib::show_score($category_item['score'], $category_item['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($category_item['score'], $category_item['total'], true, false, true));
             $row++;
         }
         if (!empty($none_category)) {
             $table->setCellContents($row, 0, get_lang('None'));
             $table->setCellContents($row, 1, ExerciseLib::show_score($none_category['score'], $none_category['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($none_category['score'], $none_category['total'], true, false, true));
             $row++;
         }
         if (!empty($total)) {
             $table->setCellContents($row, 0, get_lang('Total'));
             $table->setCellContents($row, 1, ExerciseLib::show_score($total['score'], $total['total'], false));
             $table->setCellContents($row, 2, ExerciseLib::show_score($total['score'], $total['total'], true, false, true));
         }
         return $table->toHtml();
     }
     return null;
 }
示例#24
0
 // No category for this question!
 if ($category_was_added_for_this_test == false) {
     if (!isset($category_list['none'])) {
         $category_list['none'] = array();
         $category_list['none']['score'] = 0;
         $category_list['none']['total'] = 0;
     }
     $category_list['none']['score'] += $my_total_score;
     $category_list['none']['total'] += $my_total_weight;
 }
 if ($objExercise->selectPropagateNeg() == 0 && $my_total_score < 0) {
     $my_total_score = 0;
 }
 $score = array();
 if ($show_results) {
     $score['result'] = get_lang('Score') . " : " . ExerciseLib::show_score($my_total_score, $my_total_weight, false, false);
     $score['pass'] = $my_total_score >= $my_total_weight ? true : false;
     $score['type'] = $answerType;
     $score['score'] = $my_total_score;
     $score['weight'] = $my_total_weight;
     $score['comments'] = isset($comnt) ? $comnt : null;
 }
 unset($objAnswerTmp);
 $i++;
 $contents = ob_get_clean();
 $question_content = '<div class="question_row">';
 $show_media = false;
 $counterToShow = $counter;
 if ($objQuestionTmp->parent_id != 0) {
     if (!in_array($objQuestionTmp->parent_id, $media_list)) {
         $media_list[] = $objQuestionTmp->parent_id;
    $course_code = $_REQUEST['course_code'];
} else {
    $course_code = '';
}
if (empty($course_code)) {
    $course_code = 0;
}
$form->setDefaults(array('course_code' => (string) $course_code));
$course_info = api_get_course_info($course_code);
if (!empty($course_info)) {
    $list = new LearnpathList('', $course_code);
    $lp_list = $list->get_flat_list();
    $_course = $course_info;
    $main_question_list = array();
    foreach ($lp_list as $lp_id => $lp) {
        $exercise_list = ExerciseLib::get_all_exercises_from_lp($lp_id, $course_info['real_id']);
        foreach ($exercise_list as $exercise) {
            $my_exercise = new Exercise();
            $my_exercise->read($exercise['path']);
            $question_list = $my_exercise->selectQuestionList();
            $exercise_stats = get_all_exercise_event_from_lp($exercise['path'], $course_info['real_id'], $session_id);
            foreach ($question_list as $question_id) {
                $question_data = Question::read($question_id);
                $main_question_list[$question_id] = $question_data;
                $quantity_exercises = 0;
                $question_result = 0;
                foreach ($exercise_stats as $stats) {
                    if (!empty($stats['question_list'])) {
                        foreach ($stats['question_list'] as $my_question_stat) {
                            if ($question_id == $my_question_stat['question_id']) {
                                $question_result = $question_result + $my_question_stat['marks'];
示例#26
0
    $counter++;
    $question_content .= $contents;
    $question_content .= '</div>';
    $exercise_content .= $question_content;
}
// end of large foreach on questions
$total_score_text = null;
//Total score
if ($origin != 'learnpath' || $origin == 'learnpath' && isset($_GET['fb_type'])) {
    if ($show_results || $show_only_total_score) {
        $total_score_text .= '<div class="question_row">';
        $my_total_score_temp = $totalScore;
        if ($objExercise->selectPropagateNeg() == 0 && $my_total_score_temp < 0) {
            $my_total_score_temp = 0;
        }
        $total_score_text .= ExerciseLib::get_question_ribbon($objExercise, $my_total_score_temp, $totalWeighting, true);
        $total_score_text .= '</div>';
    }
}
if (!empty($category_list) && ($show_results || $show_only_total_score)) {
    // Adding total
    $category_list['total'] = array('score' => $my_total_score_temp, 'total' => $totalWeighting);
    echo TestCategory::get_stats_table_by_attempt($objExercise->id, $category_list);
}
echo $total_score_text;
echo $exercise_content;
echo $total_score_text;
if ($isFeedbackAllowed) {
    if (is_array($arrid) && is_array($arrmarks)) {
        $strids = implode(",", $arrid);
        $marksid = implode(",", $arrmarks);
示例#27
0
            Display::display_footer();
        }
        exit;
    }
}
$total_score = 0;
if (!empty($exercise_stat_info)) {
    $total_score = $exercise_stat_info['exe_result'];
}
$max_score = $objExercise->get_max_score();
Display::display_normal_message(get_lang('Saved') . '<br />', false);
// Display and save questions
ExerciseLib::display_question_list_by_attempt($objExercise, $exe_id, true);
//Unset session for clock time
ExerciseLib::exercise_time_control_delete($objExercise->id, $learnpath_id, $learnpath_item_id);
ExerciseLib::delete_chat_exercise_session($exe_id);
if ($origin != 'learnpath') {
    echo '<hr>';
    echo Display::url(get_lang('ReturnToCourseHomepage'), api_get_course_url(), array('class' => 'btn btn-primary'));
    if (api_is_allowed_to_session_edit()) {
        Session::erase('objExercise');
        Session::erase('exe_id');
    }
    Display::display_footer();
} else {
    $lp_mode = Session::read('lp_mode');
    $url = '../newscorm/lp_controller.php?cidReq=' . api_get_course_id() . '&action=view&lp_id=' . $learnpath_id . '&lp_item_id=' . $learnpath_item_id . '&exeId=' . $exercise_stat_info['exe_id'] . '&fb_type=' . $objExercise->feedback_type;
    $href = $lp_mode == 'fullscreen' ? ' window.opener.location.href="' . $url . '" ' : ' top.location.href="' . $url . '"';
    if (api_is_allowed_to_session_edit()) {
        Session::erase('objExercise');
        Session::erase('exe_id');
示例#28
0
if (empty($track_exercise_info)) {
    api_not_allowed($show_headers);
}
$exercise_id = $track_exercise_info['exe_exo_id'];
$student_id = $track_exercise_info['exe_user_id'];
$current_user_id = api_get_user_id();
$objExercise = new Exercise();
if (!empty($exercise_id)) {
    $objExercise->read($exercise_id);
}
// Only users can see their own results
if (!$is_allowedToEdit) {
    if ($student_id != $current_user_id) {
        api_not_allowed($show_headers);
    }
}
$htmlHeadXtra[] = '<link rel="stylesheet" href="' . api_get_path(WEB_LIBRARY_JS_PATH) . 'hotspot/css/hotspot.css">';
$htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_JS_PATH) . 'hotspot/js/hotspot.js"></script>';
if ($show_headers) {
    $interbreadcrumb[] = array("url" => "exercise.php?" . api_get_cidreq(), "name" => get_lang('Exercises'));
    $interbreadcrumb[] = array("url" => "#", "name" => get_lang('Result'));
    $this_section = SECTION_COURSES;
    Display::display_header();
} else {
    $htmlHeadXtra[] = "\n    <style>\n    body { background: none;}\n    </style>\n    ";
    Display::display_reduced_header();
}
ExerciseLib::display_question_list_by_attempt($objExercise, $id, false);
if ($show_headers) {
    Display::display_footer();
}
示例#29
0
 /**
  * @param string $courseCode
  * @param array $rules
  * @param array $columns
  * @param array $column_model
  * @return array
  */
 public static function getRules($courseCode, &$rules, &$columns, &$column_model, $questionFields, $checkFields = false)
 {
     // sessions
     // course
     // categories
     // exercises
     // difficult
     // type
     if (empty($courseCode)) {
         // Session.
         $sessionList = SessionManager::get_sessions_by_general_coach(api_get_user_id());
         $fields = array();
         if (!empty($sessionList)) {
             $new_options = array();
             $new_options[] = "-1:" . get_lang('All');
             foreach ($sessionList as $session) {
                 $new_options[] = "{$session['id']}:{$session['name']}";
             }
             $string = implode(';', $new_options);
             $fields[] = array('field_display_text' => get_lang('Session'), 'field_variable' => 'session_id', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
         }
     } else {
         // $courseList = array(api_get_course_info());
         //$courseList = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id());
     }
     // Courses.
     $courseList = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id());
     if (!empty($courseList)) {
         $new_options = array();
         $new_options[] = "-1:" . get_lang('All');
         foreach ($courseList as $course) {
             $new_options[] = "{$course['id']}:{$course['title']}";
         }
         $string = implode(';', $new_options);
         $fields[] = array('field_display_text' => get_lang('Course'), 'field_variable' => 'c_id', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
     }
     // Categories.
     $string = null;
     if (!empty($courseList)) {
         $new_options = array();
         $new_options[] = "-1:" . get_lang('All');
         // Global categories
         // @todo use tree view
         $categories = Testcategory::getCategoriesIdAndName(0);
         if (!empty($categories)) {
             foreach ($categories as $id => $category) {
                 if (!empty($id)) {
                     $new_options[] = "{$id}:[Global] - " . $category;
                 }
             }
         }
         foreach ($courseList as $course) {
             $categories = Testcategory::getCategoriesIdAndName($course['real_id']);
             if (!empty($categories)) {
                 foreach ($categories as $id => $category) {
                     if (!empty($id)) {
                         $new_options[] = "{$id}:" . $course['title'] . " - " . $category;
                     }
                 }
             }
         }
         $string = implode(';', $new_options);
         $fields[] = array('field_display_text' => get_lang('Category'), 'field_variable' => 'category_id', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
     }
     $course = api_get_course_int_id();
     $sessionId = api_get_session_id();
     // Exercises.
     $exerciseList = ExerciseLib::get_all_exercises_for_course_id($sessionId, $course);
     if (!empty($exerciseList)) {
         $new_options = array();
         $new_options[] = "-1:" . get_lang('All');
         $new_options[] = "0:" . get_lang('Orphan');
         foreach ($exerciseList as $exercise) {
             $new_options[] = "{$exercise['iid']}:{$exercise['title']}";
         }
         $string = implode(';', $new_options);
         $fields[] = array('field_display_text' => get_lang('Exercise'), 'field_variable' => 'exercise_id', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
     }
     // Question type.
     $questionList = Question::get_question_type_list();
     if (!empty($questionList)) {
         $new_options = array();
         $new_options[] = "-1:" . get_lang('All');
         foreach ($questionList as $key => $question) {
             $new_options[] = "{$key}:" . get_lang($question['1']);
         }
         $string = implode(';', $new_options);
         $fields[] = array('field_display_text' => get_lang('AnswerType'), 'field_variable' => 'question_type', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
     }
     // Difficult.
     $levels = Question::get_default_levels();
     if (!empty($levels)) {
         $new_options = array();
         $new_options[] = "-1:" . get_lang('All');
         foreach ($levels as $key => $level) {
             $new_options[] = "{$key}:{$level}";
         }
         $string = implode(';', $new_options);
         $fields[] = array('field_display_text' => get_lang('Difficulty'), 'field_variable' => 'difficulty', 'field_type' => ExtraField::FIELD_TYPE_SELECT, 'field_default_value' => null, 'field_options' => $string);
     }
     $questionFieldsKeys = array();
     if (!empty($questionFields)) {
         foreach ($questionFields as $question) {
             $questionFieldsKeys[] = $question['field'];
         }
     }
     if (!empty($fields)) {
         foreach ($fields as $field) {
             $search_options = array();
             $type = 'text';
             if (in_array($field['field_type'], array(ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_DOUBLE_SELECT))) {
                 $type = 'select';
                 $search_options['sopt'] = array('eq', 'ne');
                 //equal not equal
                 //$search_options['sopt'] = array('cn', 'nc'); //contains not contains
             } else {
                 $search_options['sopt'] = array('cn', 'nc');
                 //contains not contains
             }
             $search_options['searchhidden'] = 'true';
             $search_options['defaultValue'] = isset($search_options['field_default_value']) ? $search_options['field_default_value'] : null;
             $search_options['value'] = $field['field_options'];
             $column_model[] = array('name' => 'question_' . $field['field_variable'], 'index' => 'question_' . $field['field_variable'], 'width' => '100', 'hidden' => 'true', 'search' => 'true', 'stype' => $type, 'searchoptions' => $search_options);
             $columns[] = $field['field_display_text'];
             $rules[] = array('field' => 'question_' . $field['field_variable'], 'op' => 'eq');
         }
     }
     return $rules;
 }
示例#30
0
             if ($origin != 'learnpath') {
                 //so we are not in learnpath tool
                 echo '</div>';
                 //End glossary div
                 Display::display_footer();
             } else {
                 echo '</body></html>';
             }
             exit;
         }
     }
 } else {
     //Time control is only enabled for ONE PER PAGE
     if (!empty($exe_id) && is_numeric($exe_id)) {
         //Verify if the current test is fraudulent
         $check = ExerciseLib::exercise_time_control_is_valid($exerciseId, $learnpath_id, $learnpath_item_id);
         if ($check) {
             $sql_exe_result = "";
             if ($debug) {
                 error_log('12. exercise_time_control_is_valid is valid');
             }
         } else {
             $sql_exe_result = ", exe_result = 0";
             if ($debug) {
                 error_log('12. exercise_time_control_is_valid is NOT valid then exe_result = 0 ');
             }
         }
     }
     if ($objExercise->review_answers) {
         //header('Location: '.$urlMainExercise.'exercise_reminder.php?'.$params);
         header("Location: " . $urlMainExercise . "exercise_result.php?" . api_get_cidreq() . "&exe_id={$exe_id}&origin={$origin}&learnpath_id={$learnpath_id}&learnpath_item_id={$learnpath_item_id}&learnpath_item_view_id={$learnpath_item_view_id}");