exercise_admin.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use ChamiloSession as Session;
  4. /**
  5. * Exercise administration
  6. * This script allows to manage an exercise. It is included from
  7. * the script admin.php.
  8. *
  9. * @author Olivier Brouckaert, Julio Montoya
  10. */
  11. require_once __DIR__.'/../inc/global.inc.php';
  12. $this_section = SECTION_COURSES;
  13. api_protect_course_script(true);
  14. if (!api_is_allowed_to_edit(null, true)) {
  15. api_not_allowed(true);
  16. }
  17. $htmlHeadXtra[] = '<script>
  18. function activate_start_date() {
  19. if(document.getElementById(\'start_date_div\').style.display == \'none\') {
  20. document.getElementById(\'start_date_div\').style.display = \'block\';
  21. } else {
  22. document.getElementById(\'start_date_div\').style.display = \'none\';
  23. }
  24. }
  25. function activate_end_date() {
  26. if(document.getElementById(\'end_date_div\').style.display == \'none\') {
  27. document.getElementById(\'end_date_div\').style.display = \'block\';
  28. } else {
  29. document.getElementById(\'end_date_div\').style.display = \'none\';
  30. }
  31. }
  32. function feedbackselection() {
  33. var index = document.exercise_admin.exerciseFeedbackType.selectedIndex;
  34. if (index == \'1\') {
  35. document.exercise_admin.exerciseType[1].checked=true;
  36. document.exercise_admin.exerciseType[0].disabled=true;
  37. } else {
  38. document.exercise_admin.exerciseType[0].disabled=false;
  39. }
  40. }
  41. function option_time_expired() {
  42. if(document.getElementById(\'timercontrol\').style.display == \'none\') {
  43. document.getElementById(\'timercontrol\').style.display = \'block\';
  44. } else {
  45. document.getElementById(\'timercontrol\').style.display = \'none\';
  46. }
  47. }
  48. function check_per_page_one() {
  49. document.getElementById(\'exerciseType_0\').checked=true;
  50. }
  51. function check_per_page_all() {
  52. if (document.getElementById(\'exerciseType_1\') && document.getElementById(\'exerciseType_1\').checked) {
  53. document.getElementById(\'exerciseType_0\').checked = true;
  54. }
  55. }
  56. function check_feedback() {
  57. if (document.getElementById(\'result_disabled_1\').checked == true) {
  58. document.getElementById(\'result_disabled_0\').checked = true;
  59. }
  60. }
  61. function check_direct_feedback() {
  62. document.getElementById(\'option_page_one\').checked = true;
  63. document.getElementById(\'result_disabled_0\').checked = true;
  64. }
  65. function check_results_disabled() {
  66. document.getElementById(\'exerciseType_2\').checked = true;
  67. }
  68. function disabledHideRandom() {
  69. $("#hidden_random option:eq(0)").prop("selected", true);
  70. $("#hidden_random").hide();
  71. }
  72. function checkQuestionSelection() {
  73. var selection = $("#questionSelection option:selected").val();
  74. switch (selection) {
  75. case "'.EX_Q_SELECTION_ORDERED.'":
  76. disabledHideRandom();
  77. $("#hidden_matrix").hide();
  78. break;
  79. case "'.EX_Q_SELECTION_RANDOM.'":
  80. $("#hidden_random").show();
  81. $("#hidden_matrix").hide();
  82. break;
  83. case "'.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.'":
  84. disabledHideRandom();
  85. $("#hidden_matrix").show();
  86. break;
  87. case "per_categories":
  88. $("#questionSelection option:eq('.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.')").prop("selected", true);
  89. disabledHideRandom();
  90. $("#hidden_matrix").show();
  91. break;
  92. default:
  93. disabledHideRandom();
  94. $("#hidden_matrix").show();
  95. break;
  96. }
  97. }
  98. </script>';
  99. // to correct #4029 Random and number of attempt menu empty added window.onload=advanced_parameters;
  100. $htmlHeadXtra[] = '<script>
  101. function setFocus(){
  102. $("#exercise_title").focus();
  103. }
  104. $(function() {
  105. setFocus();
  106. });
  107. </script>';
  108. $objExercise = new Exercise();
  109. $course_id = api_get_course_int_id();
  110. //INIT FORM
  111. if (isset($_GET['exerciseId'])) {
  112. $form = new FormValidator(
  113. 'exercise_admin',
  114. 'post',
  115. api_get_self().'?'.api_get_cidreq().'&exerciseId='.intval($_GET['exerciseId'])
  116. );
  117. $objExercise->read($_GET['exerciseId'], false);
  118. $form->addElement('hidden', 'edit', 'true');
  119. } else {
  120. $form = new FormValidator(
  121. 'exercise_admin',
  122. 'post',
  123. api_get_self().'?'.api_get_cidreq()
  124. );
  125. $form->addElement('hidden', 'edit', 'false');
  126. }
  127. $objExercise->createForm($form);
  128. // VALIDATE FORM
  129. if ($form->validate()) {
  130. $objExercise->processCreation($form);
  131. if ($form->getSubmitValue('edit') === 'true') {
  132. Display::addFlash(
  133. Display::return_message(get_lang('Test name and settings have been saved.'), 'success')
  134. );
  135. } else {
  136. Display::addFlash(
  137. Display::return_message(get_lang('Test added'), 'success')
  138. );
  139. }
  140. $exercise_id = $objExercise->id;
  141. Session::erase('objExercise');
  142. header('Location:admin.php?exerciseId='.$exercise_id.'&'.api_get_cidreq());
  143. exit;
  144. } else {
  145. if (api_is_in_gradebook()) {
  146. $interbreadcrumb[] = [
  147. 'url' => Category::getUrl(),
  148. 'name' => get_lang('Assessments'),
  149. ];
  150. }
  151. $nameTools = get_lang('Tests management');
  152. $interbreadcrumb[] = [
  153. 'url' => 'exercise.php?'.api_get_cidreq(),
  154. 'name' => get_lang('Tests'),
  155. ];
  156. $interbreadcrumb[] = [
  157. 'url' => 'admin.php?exerciseId='.$objExercise->id.'&'.api_get_cidreq(),
  158. 'name' => $objExercise->selectTitle(true),
  159. ];
  160. Display::display_header($nameTools, get_lang('Test'));
  161. echo '<div class="actions">';
  162. if ($objExercise->id != 0) {
  163. echo '<a href="admin.php?'.api_get_cidreq().'&exerciseId='.$objExercise->id.'">'.
  164. Display::return_icon('back.png', get_lang('Go back to the questions list'), '', ICON_SIZE_MEDIUM).'</a>';
  165. } else {
  166. if (!empty($_GET['lp_id']) || !empty($_POST['lp_id'])) {
  167. if (!empty($_POST['lp_id'])) {
  168. $lp_id = $_POST['lp_id'];
  169. //TODO:this remains to be implemented after press the first post
  170. } else {
  171. $lp_id = $_GET['lp_id'];
  172. }
  173. $lp_id = (int) $lp_id;
  174. echo "<a href=\"../lp/lp_controller.php?".api_get_cidreq()."&gradebook=&action=add_item&type=step&lp_id=".$lp_id."#resource_tab-2\">".
  175. Display::return_icon('back.png', get_lang("Back to").' '.get_lang('Learning paths'), '', ICON_SIZE_MEDIUM)."</a>";
  176. } else {
  177. echo '<a href="exercise.php?'.api_get_cidreq().'">'.
  178. Display::return_icon('back.png', get_lang('Back toTestsList'), '', ICON_SIZE_MEDIUM).
  179. '</a>';
  180. }
  181. }
  182. echo '</div>';
  183. if (in_array($objExercise->getFeedbackType(), [EXERCISE_FEEDBACK_TYPE_DIRECT, EXERCISE_FEEDBACK_TYPE_POPUP])) {
  184. echo Display::return_message(get_lang('The test type cannot be modified since it was set to self evaluation. Self evaluation gives you the possibility to give direct feedback to the user, but this is not compatible with all question types and, so this type quiz cannot be changed afterward.'));
  185. }
  186. if (api_get_setting('search_enabled') === 'true' &&
  187. !extension_loaded('xapian')
  188. ) {
  189. echo Display::return_message(get_lang('The Xapian search module is not installed'), 'error');
  190. }
  191. // to hide the exercise description
  192. echo '<style> .media { display:none;}</style>';
  193. $form->display();
  194. }
  195. Display::display_footer();