Adding new question pool filters in /web/exercise/question-pool

skala
Julio Montoya 13 years ago
parent 57faea4836
commit 78caeb5f1e
  1. 2
      main/admin/extra_fields.php
  2. 4
      main/exercice/exercise_admin.php
  3. 1
      main/exercice/overview.php
  4. 278
      main/exercice/question.class.php
  5. 16
      main/exercice/question_pool.php
  6. 16
      main/exercice/testcategory.class.php
  7. 26
      main/inc/ajax/model.ajax.php
  8. 5
      main/inc/lib/course.lib.php
  9. 7
      main/inc/lib/exercise.lib.php
  10. 27
      main/inc/lib/extra_field.lib.php
  11. 11
      main/inc/routes.php
  12. 6
      main/inc/services.php
  13. 128
      main/template/default/exercise/question_pool.tpl
  14. 87
      src/ChamiloLMS/Controller/ExerciseController.php
  15. 6
      src/ChamiloLMS/Controller/IndexController.php

@ -32,8 +32,6 @@ $tool_name = null;
$action = isset($_GET['action']) ? $_GET['action'] : null;
if (!in_array($extraFieldType, ExtraField::getValidExtraFieldTypes())) {
api_not_allowed();
}

@ -63,7 +63,7 @@ $htmlHeadXtra[] = '<script>
$(function() {
$("#category_id").fcbkcomplete({
json_url: "'.$url.'&a=search_category_parent",
json_url: "'.$url.'&a=search_category",
maxitems: 20,
addontab: false,
input_min_size: 1,
@ -268,4 +268,4 @@ if ($form->validate()) {
}
$form->display();
}
Display::display_footer();
Display::display_footer();

@ -222,7 +222,6 @@ if ($objExercise->selectAttempts()) {
if ($visible_return['value'] == true) {
$message .= $attempt_message;
}
//$options.= $attempt_message; //Display::div($attempt_message, array('class'=>"offset2 span2"));
}
if ($time_control) {

@ -851,7 +851,7 @@ abstract class Question
} else {
// Creates a new question
$sql = "SELECT max(position) FROM $TBL_QUESTIONS as question, $TBL_EXERCICE_QUESTION as test_question
WHERE question.id = test_question.question_id AND
WHERE question.iid = test_question.question_id AND
test_question.exercice_id = '".Database::escape_string($exerciseId)."' AND
question.c_id = $c_id AND
test_question.c_id = $c_id ";
@ -1989,6 +1989,10 @@ abstract class Question
return $labels;
}
/**
* Get question columns needed for the new question pool page
* @return array
*/
public static function getQuestionColumns()
{
// The order is important you need to check the the $column variable in the model.ajax.php file
@ -2017,9 +2021,14 @@ abstract class Question
'sortable' => 'false'
)*/
);
$extraField = new \ExtraField('question');
$rules = $extraField->getRules($columns, $columnModel);
// Exercise rules
self::getRules($rules, $columns, $columnModel);
$columns[] = get_lang('Actions');
$columnModel[] = array(
@ -2047,18 +2056,87 @@ abstract class Question
/**
* Get all questions
* @param $options
* @param array $options
* @return array
*/
public static function getQuestions($categoryId, $options, $get_count = false)
{
$questionTable = Database::get_course_table(TABLE_QUIZ_QUESTION);
$where = 'WHERE 1 = 1 ';
$questionPoolFields = array(
'question_session_id' => array(
'innerjoin' => " INNER JOIN ".Database::get_course_table(TABLE_QUIZ_TEST_QUESTION)." as quiz_rel_question_session ON (quiz_rel_question_session.question_id = s.iid)
INNER JOIN ".Database::get_course_table(TABLE_QUIZ_TEST)." as quizsession ON (quizsession.iid = quiz_rel_question_session.exercice_id)
INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION)." session ON (session.id = quizsession.session_id)",
'where' => 'session_id',
'inject_fields' => 'session.name as question_session_id, ',
),
'question_category_id' => array(
'innerjoin' => " INNER JOIN ".Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY)." as quiz_rel_cat ON (quiz_rel_cat.question_id = s.iid)
INNER JOIN ".Database::get_course_table(TABLE_QUIZ_QUESTION_CATEGORY)." as cat ON (cat.iid = quiz_rel_cat.category_id)
",
'where' => 'quiz_rel_cat.category_id',
'inject_fields' => 'cat.title as question_category_id, ',
),
'question_exercise_id' => array(
'innerjoin' => " INNER JOIN ".Database::get_course_table(TABLE_QUIZ_TEST_QUESTION)." as quiz_rel_question ON (quiz_rel_question.question_id = s.iid)
INNER JOIN ".Database::get_course_table(TABLE_QUIZ_TEST)." as quizexercise ON (quizexercise.iid = quiz_rel_question.exercice_id)
",
'where' => 'quiz_rel_question.exercice_id',
'inject_fields' => 'quizexercise.title as question_exercise_id, ',
),
'question_c_id' => array(
'where' => 's.c_id',
'innerjoin' => " INNER JOIN ".Database::get_main_table(TABLE_MAIN_COURSE)." as course ON (course.id = s.c_id) ",
'inject_fields' => 'course.title as question_c_id, '
),
'question_question_type' => array(
'where' => 's.type ',
'inject_fields' => 's.type as question_question_type,'
),
'question_difficulty' => array(
'where' => 's.level',
'inject_fields' => 's.level as question_difficulty, '
)
);
$inject_extra_fields = null;
$inject_joins = null;
$where = $options['where'];
$newQuestionPoolField = array();
foreach ($options['question'] as $question) {
if (isset($questionPoolFields[$question['field']])) {
$newQuestionPoolField[$question['field']] = $questionPoolFields[$question['field']];
if ($question['data'] == -1) {
}
}
}
$inject_question_fields = null;
$questionPoolFields = $newQuestionPoolField;
foreach ($questionPoolFields as $field => $option) {
$where = str_replace($field, $option['where'], $where);
if (isset($option['innerjoin']) && !empty($option['innerjoin'])) {
$inject_joins .= $option['innerjoin'];
}
if (isset($option['inject_fields']) && !empty($option['inject_fields'])) {
$inject_question_fields .= $option['inject_fields'];
}
}
//var_dump($inject_question_fields);
$options['where'] = $where;
$extra_field = new ExtraField('question');
$conditions = $extra_field->parseConditions($options);
$inject_joins = $conditions['inject_joins'];
$where .= $conditions['where'];
$inject_joins .= $conditions['inject_joins'];
$where = $conditions['where'];
$inject_where = $conditions['inject_where'];
$inject_extra_fields = $conditions['inject_extra_fields'];
$order = $conditions['order'];
@ -2067,9 +2145,11 @@ abstract class Question
if ($get_count == true) {
$select = " SELECT count(*) as total_rows";
} else {
$select = " SELECT s.*, $inject_extra_fields 1";
$select = " SELECT s.*, $inject_extra_fields $inject_question_fields 1 ";
}
$categoryCondition = null;
if (!empty($categoryId)) {
$categoryRelQuestionTable = Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY);
$categoryCondition = " INNER JOIN $categoryRelQuestionTable c ON (s.iid = c.question_id)";
@ -2077,7 +2157,8 @@ abstract class Question
$where .= " AND category_id = $categoryId ";
}
$query = " $select FROM $questionTable s $inject_joins $categoryCondition $where $inject_where $order $limit";
$query = " $select FROM $questionTable s $inject_joins $categoryCondition WHERE 1=1 $where $inject_where $order $limit";
//echo $query.'<br />';
$result = Database::query($query);
$questions = array();
@ -2087,7 +2168,6 @@ abstract class Question
return $questions[0]['total_rows'];
}
}
return $questions;
}
@ -2096,4 +2176,186 @@ abstract class Question
return Display::label($title, 'warning');
}
public static function getRules(&$rules, &$columns, &$column_model)
{
// sessions
// course
// categories
// exercises
// difficult
// type
// 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
);
}
// 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');
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
);
}
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
} 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' => 'cn');
}
}
return $rules;
}
}

@ -26,7 +26,7 @@ require_once '../inc/global.inc.php';
$this_section = SECTION_COURSES;
$is_allowedToEdit=api_is_allowed_to_edit(null,true);
$is_allowedToEdit = api_is_allowed_to_edit(null,true);
$delete = isset($_GET['delete']) ? intval($_GET['delete']) : null;
$recup = isset($_GET['recup']) ? intval($_GET['recup']) : null;
@ -297,20 +297,20 @@ echo Display::form_row(get_lang("QuestionCategory"), $selectCourseCateogry);
// Get exercice list for this course
$exercise_list = ExerciseLib::get_all_exercises_for_course_id($course_info, $session_id, $selected_course);
$exercise_list = ExerciseLib::get_all_exercises_for_course_id($session_id, $selected_course);
//Exercise List
$my_exercise_list = array();
$my_exercise_list['0'] = get_lang('AllExercises');
$my_exercise_list['-1'] = get_lang('OrphanQuestions');
if (is_array($exercise_list)) {
foreach($exercise_list as $row) {
$my_exercise_list[$row['iid']] = "";
if ($row['iid'] == $fromExercise && $selected_course == api_get_course_int_id()) {
$my_exercise_list[$row['iid']] = ">&nbsp;&nbsp;&nbsp;&nbsp;"; // hub 13-10-2011
foreach($exercise_list as $row) {
$my_exercise_list[$row['iid']] = "";
if ($row['iid'] == $fromExercise && $selected_course == api_get_course_int_id()) {
$my_exercise_list[$row['iid']] = ">&nbsp;&nbsp;&nbsp;&nbsp;"; // hub 13-10-2011
}
$my_exercise_list[$row['iid']] .= $row['title'];
}
$my_exercise_list[$row['iid']] .= $row['title'];
}
}
if ($exercice_id_changed == 1) {

@ -146,7 +146,7 @@ class Testcategory
*/
public function modifyCategory()
{
// @todo inject the app in the claas
// @todo inject the app in the class
global $app;
$category = $app['orm.em']->find('\Entity\CQuizCategory', $this->id);
if (!$category) {
@ -275,7 +275,6 @@ class Testcategory
$where_condition .= $course_condition;
$order_clause = " ORDER BY title";
$sql .= $where_condition.$order_clause;
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
@ -312,10 +311,8 @@ class Testcategory
If in_field=="" Return an array of all category objects in the database
Otherwise, return an array of all in_field value in the database (in_field = id or name or description)
*/
public static function getCategoryListInfo($in_field = "", $courseId = null) {
if (empty($courseId) || $courseId=="") {
$courseId = api_get_course_int_id();
}
public static function getCategoryListInfo($in_field = "", $courseId = null)
{
$courseId = intval($courseId);
$t_cattable = Database :: get_course_table(TABLE_QUIZ_QUESTION_CATEGORY);
$in_field = Database::escape_string($in_field);
@ -661,11 +658,8 @@ class Testcategory
* tabresult[0] = get_lang('NoCategory');
*
*/
static function getCategoriesIdAndName($in_courseid = "")
static function getCategoriesIdAndName($in_courseid = 0)
{
if (empty($in_courseid) || $in_courseid=="") {
$in_courseid = api_get_course_int_id();
}
$tabcatobject = Testcategory::getCategoryListInfo("", $in_courseid);
$tabresult = array("0"=>get_lang('NoCategorySelected'));
for ($i=0; $i < count($tabcatobject); $i++) {
@ -890,6 +884,7 @@ class Testcategory
*/
public static function get_stats_table_by_attempt($exercise_id, $category_list = array())
{
global $app;
if (empty($category_list)) {
return null;
}
@ -913,7 +908,6 @@ class Testcategory
$total = $category_list['total'];
unset($category_list['total']);
}
global $app;
$em = $app['orm.em'];
$repo = $em->getRepository('Entity\CQuizCategory');

@ -108,6 +108,7 @@ $search_oper = isset($_REQUEST['searchOper']) ? $_REQUEST['searchOper']
$search_string = isset($_REQUEST['searchString']) ? $_REQUEST['searchString'] : false;
$extra_fields = array();
$questionFields = array();
if ($_REQUEST['_search'] == 'true') {
$where_condition = ' 1 = 1 ';
@ -120,7 +121,6 @@ if ($_REQUEST['_search'] == 'true') {
// for now
if (!empty($filters)) {
switch($action) {
case 'get_questions':
$type = 'question';
@ -130,8 +130,11 @@ if ($_REQUEST['_search'] == 'true') {
break;
}
// Extra field.
$extraField = new ExtraField($type);
$result = $extraField->getExtraFieldRules($filters);
$result = $extraField->getExtraFieldRules($filters, 'extra_');
$extra_fields = $result['extra_fields'];
$condition_array = $result['condition_array'];
@ -140,6 +143,20 @@ if ($_REQUEST['_search'] == 'true') {
$where_condition .= implode($filters->groupOp, $condition_array);
$where_condition .= ' ) ';
}
// Question field
$resultQuestion = $extraField->getExtraFieldRules($filters, 'question_');
$questionFields = $resultQuestion['extra_fields'];
$condition_array = $resultQuestion['condition_array'];
if (!empty($condition_array)) {
$where_condition .= ' AND ( ';
$where_condition .= implode($filters->groupOp, $condition_array);
$where_condition .= ' ) ';
}
}
}
@ -162,7 +179,7 @@ switch ($action) {
if (isset($_REQUEST['categoryId'])) {
$categoryId = intval($_REQUEST['categoryId']);
}
$count = Question::getQuestions($categoryId, array('where'=> $where_condition, 'extra' => $extra_fields), true);
$count = Question::getQuestions($categoryId, array('where'=> $where_condition, 'extra' => $extra_fields, 'question' => $questionFields), true);
break;
case 'get_user_list_plugin_widescale':
$count = UserManager::get_user_data(null, null, null, null, true);
@ -326,7 +343,8 @@ switch ($action) {
$questions = $category->getQuestions();*/
$columns = Question::getQuestionColumns();
$columns = $columns['simple_column_name'];
$result = Question::getQuestions($categoryId, array('where'=> $where_condition, 'order'=>"$sidx $sord", 'extra' => $extra_fields, 'limit'=> "$start , $limit"));
//var_dump($columns);
$result = Question::getQuestions($categoryId, array('where'=> $where_condition, 'order'=>"$sidx $sord", 'extra' => $extra_fields, 'question' => $questionFields, 'limit'=> "$start , $limit"));
break;
case 'get_user_list_plugin_widescale':

@ -3258,8 +3258,9 @@ class CourseManager
* @todo move code for what's new icons to a separate function to clear things up
* @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this.
*/
public static function get_logged_user_course_html($course, $session_id = 0, $load_dirs = false) {
$course_info = api_get_course_info($course['code']);
public static function get_logged_user_course_html($course, $session_id = 0, $load_dirs = false)
{
$course_info = api_get_course_info_by_id($course['id']);
$course_info['id_session'] = $session_id;
// Display course entry.

@ -1568,13 +1568,12 @@ class ExerciseLib
/**
* 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 int course c_id
* @param int session id
* @param int course c_id
* @return array array with exercise data
* modified by Hubert Borderiou
*/
public static function get_all_exercises_for_course_id($course_info = null, $session_id = 0, $course_id = 0)
public static function get_all_exercises_for_course_id($session_id = 0, $course_id = 0)
{
$TBL_EXERCICES = Database :: get_course_table(TABLE_QUIZ_TEST);
if ($session_id == -1) {

@ -1162,7 +1162,7 @@ EOF;
* @param array $options
* @return array
*/
function parseConditions($options)
public function parseConditions($options)
{
$inject_extra_fields = null;
$extraFieldOption = new ExtraFieldOption($this->type);
@ -1177,7 +1177,7 @@ EOF;
$extra_field_info = $extra_field_obj->get($extra['id']);
$extra['extra_field_info'] = $extra_field_info;
if (in_array(
if (isset($extra_field_info['field_type']) && in_array(
$extra_field_info['field_type'],
array(
ExtraField::FIELD_TYPE_SELECT,
@ -1197,7 +1197,7 @@ EOF;
$info = $this->get($extra['id']);
$extra_fields_info[$extra['id']] = $info;
}
if ($info['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
if (isset($info['field_type']) && $info['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
$double_fields[$info['id']] = $info;
}
$counter++;
@ -1231,7 +1231,7 @@ EOF;
$inject_joins .= " INNER JOIN $this->table_field_values fv$counter ON (s.".$this->primaryKey." = fv$counter.".$this->handler_id.") ";
//Add options
if (in_array(
if (isset($extra_field_info['field_type']) && in_array(
$extra_field_info['field_type'],
array(
ExtraField::FIELD_TYPE_SELECT,
@ -1286,7 +1286,7 @@ EOF;
);
}
public function getExtraFieldRules($filters)
public function getExtraFieldRules($filters, $stringToSearch = 'extra_')
{
$extra_fields = array();
@ -1304,10 +1304,10 @@ EOF;
$condition_array = array();
foreach ($filters->rules as $rule) {
if (strpos($rule->field, 'extra_') === false) {
if (strpos($rule->field, $stringToSearch) === false) {
//normal fields
$field = $rule->field;
if (!empty($rule->data)) {
if (!empty($rule->data) && $rule->data != -1) {
$condition_array[] = get_where_clause($field, $rule->op, $rule->data);
}
} else {
@ -1316,7 +1316,7 @@ EOF;
//normal
if (strpos($rule->field, '_second') === false) {
//No _second
$original_field = str_replace('extra_', '', $rule->field);
$original_field = str_replace($stringToSearch, '', $rule->field);
$field_option = $this->get_handler_field_info_by_field_variable($original_field);
if ($field_option['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
@ -1335,13 +1335,20 @@ EOF;
}
} else {
if (!empty($rule->data)) {
if ($rule->data == -1) {
continue;
}
$condition_array[] = ' ('.get_where_clause($rule->field, $rule->op, $rule->data).') ';
$extra_fields[] = array('field' => $rule->field, 'id' => $field_option['id']);
$extra_fields[] = array(
'field' => $rule->field,
'id' => $field_option['id'],
'data' => $rule->data
);
}
}
} else {
$my_field = str_replace('_second', '', $rule->field);
$original_field = str_replace('extra_', '', $my_field);
$original_field = str_replace($stringToSearch, '', $my_field);
$field_option = $this->get_handler_field_info_by_field_variable($original_field);
$extra_fields[] = array('field' => $rule->field, 'id' => $field_option['id']);
}

@ -431,6 +431,12 @@ $app->get('/logout', 'index.controller:logoutAction')
->bind('logout')
->after($cleanCourseSession);
/** Login */
$app->get('/login', 'index.controller:loginAction')
->bind('login')
->after($cleanCourseSession);
/** Course home instead of courses/MATHS the new URL is web/courses/MATHS */
$app->match('/courses/{cidReq}/{id_session}/', 'course_home.controller:indexAction', 'GET|POST')
->assert('id_session', '\d+')
@ -538,3 +544,8 @@ $app->match('/editor/connector', 'editor.controller:connectorAction', 'GET|POST'
->assert('type', '.+')
->bind('editor_connector');
/** Exercises */
$app->match('/exercise/question-pool', 'exercise_manager.controller:questionPoolAction', 'POST')
->before($settingCourseConditions)
->before($userPermissionsInsideACourse)
->bind('admin_category_delete');

@ -485,3 +485,9 @@ $app['question_manager.controller'] = $app->share(
return new ChamiloLMS\Controller\Admin\QuestionManager\QuestionManagerController();
}
);
$app['exercise_manager.controller'] = $app->share(
function () use ($app) {
return new ChamiloLMS\Controller\ExerciseController();
}
);

@ -0,0 +1,128 @@
{% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
{% block content %}
<script>
function setSearchSelect(columnName) {
$("#questions").jqGrid('setColProp', columnName, {
/*searchoptions:{
dataInit:function(el){
$("option[value='1']",el).attr("selected", "selected");
setTimeout(function(){
$(el).trigger('change');
}, 1000);
}
}*/
});
}
var added_cols = [];
var original_cols = [];
function clean_cols(grid, added_cols) {
//Cleaning
for (key in added_cols) {
//console.log('hide: ' + key);
grid.hideCol(key);
};
grid.showCol('name');
grid.showCol('display_start_date');
grid.showCol('display_end_date');
grid.showCol('course_title');
}
function show_cols(grid, added_cols) {
grid.showCol('name').trigger('reloadGrid');
for (key in added_cols) {
//console.log('show: ' + key);
grid.showCol(key);
};
}
var second_filters = [];
$(function () {
{{ js }}
setSearchSelect("status");
var grid = $("#questions"),
prmSearch = {
multipleSearch : true,
overlay : false,
width: 'auto',
caption: '{{ 'Search' | get_lang }}',
formclass:'data_table',
onSearch : function() {
var postdata = grid.jqGrid('getGridParam', 'postData');
if (postdata && postdata.filters) {
filters = jQuery.parseJSON(postdata.filters);
clean_cols(grid, added_cols);
added_cols = [];
$.each(filters, function(key, value){
//console.log('key: ' + key );
if (key == 'rules') {
$.each(value, function(subkey, subvalue) {
if (subvalue.data == undefined) {
}
//if (added_cols[value.field] == undefined) {
added_cols[subvalue.field] = subvalue.field;
//}
//grid.showCol(value.field);
});
}
});
show_cols(grid, added_cols);
}
},
onReset: function() {
clean_cols(grid, added_cols);
}
};
original_cols = grid.jqGrid('getGridParam', 'colModel');
grid.jqGrid('navGrid','#questions_pager',
{edit:false,add:false,del:false},
{height:280,reloadAfterSubmit:false}, // edit options
{height:280,reloadAfterSubmit:false}, // add options
{reloadAfterSubmit:false},// del options
prmSearch
);
// create the searching dialog
grid.searchGrid(prmSearch);
// Fixes search table.
var searchDialogAll = $("#fbox_"+grid[0].id);
searchDialogAll.addClass("table");
var searchDialog = $("#searchmodfbox_"+grid[0].id);
searchDialog.addClass("ui-jqgrid ui-widget ui-widget-content ui-corner-all");
searchDialog.css({position:"relative", "z-index":"auto", "float":"left"})
var gbox = $("#gbox_"+grid[0].id);
gbox.before(searchDialog);
gbox.css({clear:"left"});
//Select first elements by default
$('.input-elm').each(function(){
$(this).find('option:first').attr('selected', 'selected');
});
$('.delete-rule').each(function(){
$(this).click(function(){
$('.input-elm').each(function(){
$(this).find('option:first').attr('selected', 'selected');
});
});
});
});
</script>
<div class="questions">
{{ grid }}
</div>
{% endblock %}

@ -0,0 +1,87 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Controller;
use Silex\Application;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
/**
* @package ChamiloLMS.Controller
* @author Julio Montoya <gugli100@gmail.com>
*/
class ExerciseController
{
/**
* @param Application $app
* @return Response
*/
public function questionPoolAction(Application $app)
{
$extraJS = array();
//@todo improve this JS includes should be added using twig
$extraJS[] = api_get_jqgrid_js();
$app['extraJS'] = $extraJS;
//$questions = $category->getQuestions();
/*$questionFields = $em->getRepository('Entity\QuestionField')->findAll();
$rules = array();
foreach ($questionFields as $extraField) {
$extraField->getFieldVariable();
$rules[] = ;
}*/
$questionColumns = \Question::getQuestionColumns();
$columnModel = $questionColumns['column_model'];
$columns = $questionColumns['columns'];
$rules = $questionColumns['rules'];
$grid = \Display::grid_html('questions');
//jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_questions';
$extraParams['postData'] = array(
'filters' => array(
"groupOp" => "AND",
"rules" => $rules
)
);
// Autowidth.
$extraParams['autowidth'] = 'true';
// Height auto.
$extraParams['height'] = 'auto';
$token = null;
$editUrl = $app['url_generator']->generate('admin_questions');
$actionLinks = 'function action_formatter(cellvalue, options, rowObject) {
return \'<a href="'.$editUrl.'/\'+rowObject[0]+\'/edit">'.\Display::return_icon(
'edit.png',
get_lang('Edit'),
'',
ICON_SIZE_SMALL
).'</a>'.'\';
}';
$js = \Display::grid_js(
'questions',
$url,
$columns,
$columnModel,
$extraParams,
array(),
$actionLinks,
true
);
$app['template']->assign('grid', $grid);
$app['template']->assign('js', $js);
$response = $app['template']->render_template('exercise/question_pool.tpl');
return new Response($response, 200, array());
}
}

@ -186,6 +186,8 @@ class IndexController extends CommonController
}
}
}*/
$response = null;
return new Response($response, 200, array());
}
/**
@ -280,9 +282,9 @@ class IndexController extends CommonController
'text',
'login',
get_lang('UserName'),
array('class' => 'autocapitalize_off', 'autofocus' => 'autofocus')
array('class' => 'input-medium autocapitalize_off', 'autofocus' => 'autofocus')
);
$form->addElement('password', 'password', get_lang('Pass'), array('class' => ''));
$form->addElement('password', 'password', get_lang('Pass'), array('class' => 'input-medium '));
$form->addElement('style_submit_button', 'submitAuth', get_lang('LoginEnter'), array('class' => 'btn'));
$html = $form->return_form();
if (api_get_setting('openid_authentication') == 'true') {

Loading…
Cancel
Save