exercise_admin.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. * @package chamilo.exercise
  10. *
  11. * @author Olivier Brouckaert, Julio Montoya
  12. */
  13. require_once __DIR__.'/../inc/global.inc.php';
  14. $this_section = SECTION_COURSES;
  15. if (!api_is_allowed_to_edit(null, true)) {
  16. api_not_allowed(true);
  17. }
  18. $limitTeacherAccess = api_get_configuration_value('limit_exercise_teacher_access');
  19. if ($limitTeacherAccess && !api_is_platform_admin()) {
  20. api_not_allowed(true);
  21. }
  22. $htmlHeadXtra[] = '<script>
  23. function activate_start_date() {
  24. if(document.getElementById(\'start_date_div\').style.display == \'none\') {
  25. document.getElementById(\'start_date_div\').style.display = \'block\';
  26. } else {
  27. document.getElementById(\'start_date_div\').style.display = \'none\';
  28. }
  29. }
  30. function activate_end_date() {
  31. if(document.getElementById(\'end_date_div\').style.display == \'none\') {
  32. document.getElementById(\'end_date_div\').style.display = \'block\';
  33. } else {
  34. document.getElementById(\'end_date_div\').style.display = \'none\';
  35. }
  36. }
  37. function feedbackselection() {
  38. var index = document.exercise_admin.exerciseFeedbackType.selectedIndex;
  39. if (index == \'1\') {
  40. document.exercise_admin.exerciseType[1].checked=true;
  41. document.exercise_admin.exerciseType[0].disabled=true;
  42. } else {
  43. document.exercise_admin.exerciseType[0].disabled=false;
  44. }
  45. }
  46. function option_time_expired() {
  47. if(document.getElementById(\'timercontrol\').style.display == \'none\')
  48. {
  49. document.getElementById(\'timercontrol\').style.display = \'block\';
  50. } else {
  51. document.getElementById(\'timercontrol\').style.display = \'none\';
  52. }
  53. }
  54. function check_per_page_one() {
  55. document.getElementById(\'exerciseType_0\').checked=true;
  56. }
  57. function check_per_page_all() {
  58. if (document.getElementById(\'exerciseType_1\') && document.getElementById(\'exerciseType_1\').checked) {
  59. document.getElementById(\'exerciseType_0\').checked = true;
  60. }
  61. }
  62. function check_feedback() {
  63. if (document.getElementById(\'result_disabled_1\').checked == true) {
  64. document.getElementById(\'result_disabled_0\').checked = true;
  65. }
  66. }
  67. function check_direct_feedback() {
  68. document.getElementById(\'option_page_one\').checked = true;
  69. document.getElementById(\'result_disabled_0\').checked = true;
  70. }
  71. function check_results_disabled() {
  72. document.getElementById(\'exerciseType_2\').checked = true;
  73. }
  74. function disabledHideRandom() {
  75. $("#hidden_random option:eq(0)").prop("selected", true);
  76. $("#hidden_random").hide();
  77. }
  78. function checkQuestionSelection() {
  79. var selection = $("#questionSelection option:selected").val();
  80. switch (selection) {
  81. case "'.EX_Q_SELECTION_ORDERED.'":
  82. disabledHideRandom();
  83. $("#hidden_matrix").hide();
  84. break;
  85. case "'.EX_Q_SELECTION_RANDOM.'":
  86. $("#hidden_random").show();
  87. $("#hidden_matrix").hide();
  88. break;
  89. case "'.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.'":
  90. disabledHideRandom();
  91. $("#hidden_matrix").show();
  92. break;
  93. case "per_categories":
  94. $("#questionSelection option:eq('.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.')").prop("selected", true);
  95. disabledHideRandom();
  96. $("#hidden_matrix").show();
  97. break;
  98. default:
  99. disabledHideRandom();
  100. $("#hidden_matrix").show();
  101. break;
  102. }
  103. }
  104. </script>';
  105. // to correct #4029 Random and number of attempt menu empty added window.onload=advanced_parameters;
  106. $htmlHeadXtra[] = '<script>
  107. function setFocus(){
  108. $("#exercise_title").focus();
  109. }
  110. $(document).ready(function () {
  111. setFocus();
  112. });
  113. </script>';
  114. $objExercise = new Exercise();
  115. $course_id = api_get_course_int_id();
  116. //INIT FORM
  117. if (isset($_GET['exerciseId'])) {
  118. $form = new FormValidator(
  119. 'exercise_admin',
  120. 'post',
  121. api_get_self().'?'.api_get_cidreq().'&exerciseId='.intval($_GET['exerciseId'])
  122. );
  123. $objExercise->read($_GET['exerciseId']);
  124. $form->addElement('hidden', 'edit', 'true');
  125. } else {
  126. $form = new FormValidator(
  127. 'exercise_admin',
  128. 'post',
  129. api_get_self().'?'.api_get_cidreq()
  130. );
  131. $form->addElement('hidden', 'edit', 'false');
  132. }
  133. $objExercise->createForm($form);
  134. // VALIDATE FORM
  135. if ($form->validate()) {
  136. $objExercise->processCreation($form);
  137. if ($form->getSubmitValue('edit') == 'true') {
  138. Display::addFlash(
  139. Display::return_message(get_lang('ExerciseEdited'), 'success')
  140. );
  141. } else {
  142. Display::addFlash(
  143. Display::return_message(get_lang('ExerciseAdded'), 'success')
  144. );
  145. }
  146. $exercise_id = $objExercise->id;
  147. Session::erase('objExercise');
  148. header('Location:admin.php?exerciseId='.$exercise_id.'&'.api_get_cidreq());
  149. exit;
  150. } else {
  151. if (api_is_in_gradebook()) {
  152. $interbreadcrumb[] = [
  153. 'url' => Category::getUrl(),
  154. 'name' => get_lang('ToolGradebook'),
  155. ];
  156. }
  157. $nameTools = get_lang('ExerciseManagement');
  158. $interbreadcrumb[] = [
  159. 'url' => 'exercise.php?'.api_get_cidreq(),
  160. 'name' => get_lang('Exercises'),
  161. ];
  162. $interbreadcrumb[] = [
  163. 'url' => 'admin.php?exerciseId='.$objExercise->id.'&'.api_get_cidreq(),
  164. 'name' => $objExercise->selectTitle(true),
  165. ];
  166. Display::display_header($nameTools, get_lang('Exercise'));
  167. echo '<div class="actions">';
  168. if ($objExercise->id != 0) {
  169. echo '<a href="admin.php?'.api_get_cidreq().'&exerciseId='.$objExercise->id.'">'.
  170. Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>';
  171. } else {
  172. if (!empty($_GET['lp_id']) || !empty($_POST['lp_id'])) {
  173. if (!empty($_POST['lp_id'])) {
  174. $lp_id = $_POST['lp_id'];
  175. //TODO:this remains to be implemented after press the first post
  176. } else {
  177. $lp_id = $_GET['lp_id'];
  178. }
  179. $lp_id = (int) $lp_id;
  180. echo "<a href=\"../lp/lp_controller.php?".api_get_cidreq()."&gradebook=&action=add_item&type=step&lp_id=".$lp_id."#resource_tab-2\">".
  181. Display::return_icon('back.png', get_lang("BackTo").' '.get_lang("LearningPaths"), '', ICON_SIZE_MEDIUM)."</a>";
  182. } else {
  183. echo '<a href="exercise.php?'.api_get_cidreq().'">'.
  184. Display::return_icon('back.png', get_lang('BackToExercisesList'), '', ICON_SIZE_MEDIUM).
  185. '</a>';
  186. }
  187. }
  188. echo '</div>';
  189. if ($objExercise->feedback_type == 1) {
  190. echo Display::return_message(get_lang('DirectFeedbackCantModifyTypeQuestion'));
  191. }
  192. if (api_get_setting('search_enabled') == 'true' &&
  193. !extension_loaded('xapian')
  194. ) {
  195. echo Display::return_message(get_lang('SearchXapianModuleNotInstalled'), 'error');
  196. }
  197. // to hide the exercise description
  198. echo '<style> .media { display:none;}</style>';
  199. $form->display();
  200. }
  201. Display::display_footer();