diff --git a/main/exercice/exercise.lib.php b/main/exercice/exercise.lib.php index ede1dec93e..d2c0c67945 100644 --- a/main/exercice/exercise.lib.php +++ b/main/exercice/exercise.lib.php @@ -1416,9 +1416,11 @@ function convert_score($score, $weight) { * Getting all active exercises from a course from a session (if a session_id is provided we will show all the exercises in the course + all exercises in the session) * @param array course data * @param int session id + * @param boolean Check publications dates + * @param string Search exercise name * @return array array with exercise data */ -function get_all_exercises($course_info = null, $session_id = 0, $check_publication_dates = false) { +function get_all_exercises($course_info = null, $session_id = 0, $check_publication_dates = false, $search_exercise = '') { $TBL_EXERCICES = Database :: get_course_table(TABLE_QUIZ_TEST); $course_id = api_get_course_int_id(); @@ -1440,16 +1442,27 @@ function get_all_exercises($course_info = null, $session_id = 0, $check_publicat $time_conditions .= " (start_time = '0000-00-00 00:00:00' AND end_time = '0000-00-00 00:00:00')) "; // nothing is set } + $needle_where = (!empty($search_exercise)) ? " AND title LIKE '?' " : ''; + $needle = (!empty($search_exercise)) ? "%" . $search_exercise . "%" : ''; + if ($session_id == 0) { - $conditions = array('where'=>array('active = ? AND session_id = ? AND c_id = ? '.$time_conditions => array('1', $session_id, $course_id)), 'order'=>'title'); + $conditions = array('where'=>array('active = ? AND session_id = ? AND c_id = ? '. $needle_where . $time_conditions => array('1', $session_id, $course_id, $needle)), 'order'=>'title'); } else { //All exercises - $conditions = array('where'=>array('active = ? AND (session_id = 0 OR session_id = ? ) AND c_id = ? '.$time_conditions => array('1', $session_id, $course_id)), 'order'=>'title'); + $conditions = array('where'=>array('active = ? AND (session_id = 0 OR session_id = ? ) AND c_id = ? ' . $needle_where . $time_conditions => array('1', $session_id, $course_id, $needle)), 'order'=>'title'); } return Database::select('*',$TBL_EXERCICES, $conditions); } - - +/** + * Get exercise information by id + * @param int Exercise Id + * @return array Exercise info + */ +function get_exercise_by_id($exerciseId = 0) { + $TBL_EXERCICES = Database :: get_course_table(TABLE_QUIZ_TEST); + $conditions = array('where' => array('id = ?' => array($exerciseId))); + return Database::select('*', $TBL_EXERCICES, $conditions); +} /** * Getting all active exercises from a course from a session (if a session_id is provided we will show all the exercises in the course + all exercises in the session) * @param array course data diff --git a/main/inc/ajax/course.ajax.php b/main/inc/ajax/course.ajax.php index a659a9f0e1..e8186166f8 100644 --- a/main/inc/ajax/course.ajax.php +++ b/main/inc/ajax/course.ajax.php @@ -147,6 +147,28 @@ switch ($action) { } } break; + case 'search_exercise_by_course': + if (api_is_platform_admin()) + { + + $course = api_get_course_info_by_id($_GET['course_id']); + require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; + error_log($_GET['q']); + $exercises = get_all_exercises($course, intval($_GET['session_id']), false, $_GET['q']); + + foreach ($exercises as $exercise) + { + $data[] = array('id' => $exercise['id'], 'text' => $exercise['title'] ); + } + if (!empty($data)) + { + echo json_encode($data); + } else + { + echo json_encode(array()); + } + } + break; default: echo ''; } diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 7e3e5f93ff..563701cab3 100644 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -557,7 +557,6 @@ class SessionManager INNER JOIN $user u ON u.user_id = a.user_id $where $order $limit"; - $sql_query = sprintf($sql, $sessionId, $course['code'], $exerciseId); $rs = Database::query($sql_query); @@ -751,7 +750,7 @@ class SessionManager * Exercises */ require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; - $exercises = get_all_exercises($course_info, $sessionId); + $exercises = get_all_exercises($course, $sessionId); $exercises_total = count($exercises); /** diff --git a/main/mySpace/index.php b/main/mySpace/index.php index 2af24685c3..ae36d3ea6e 100644 --- a/main/mySpace/index.php +++ b/main/mySpace/index.php @@ -685,6 +685,36 @@ if ($is_platform_admin && in_array($view, array('admin')) && $display != 'yourst }); '; } + //exercise + if (in_array($display, array('exerciseprogress'))) + { + $exerciseFilter = new FormValidator('student_filter', 'get', '', '', array('class'=> 'form-search'), false); + $url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_exercise_by_course&session_id=' . $_GET['session_id'] . '&course_id=' . $_GET['course_id']; + $exerciseList = array(); + $exerciseId = isset($_GET['exercise_id']) ? $_GET['exercise_id'] : null; + if (!empty($exerciseId)) { + $exerciseList = array(); + $exerciseInfo = current(get_exercise_by_id($exerciseId)); + $exerciseList[] = array('id' => $exerciseInfo['id'], 'text' => $exerciseInfo['title']); + } + $exerciseFilter->addElement('select_ajax', 'exercise_name', get_lang('SearchExercise'), null, array('url' => $url, 'defaults' => $exerciseList)); + $courseListUrl = api_get_self(); + + echo '
'; + echo $exerciseFilter->return_form(); + echo '
'; + + echo ''; + } } if ($display === 'useroverview') {