tests_category.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. hubert.borderiou
  5. Manage tests category page
  6. */
  7. $htmlHeadXtra[] = '
  8. <script type="text/javascript">
  9. function confirmDelete(in_txt, in_id) {
  10. var oldbgcolor = document.getElementById(in_id).style.backgroundColor;
  11. document.getElementById(in_id).style.backgroundColor="#AAFFB0";
  12. if (confirm(in_txt)) {
  13. return true;
  14. }
  15. else {
  16. document.getElementById(in_id).style.backgroundColor = oldbgcolor;
  17. return false;
  18. }
  19. }
  20. </script>
  21. ';
  22. // name of the language file that needs to be included
  23. $language_file='exercice';
  24. $nameTools= "";
  25. include('question.class.php');
  26. include('testcategory.class.php');
  27. include('../inc/global.inc.php');
  28. include('exercise.lib.php');
  29. //Library already added in global.inc.php
  30. //require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  31. $this_section=SECTION_COURSES;
  32. if(!api_is_allowed_to_edit()) {
  33. api_not_allowed(true);
  34. }
  35. // breadcrumbs
  36. $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices'));
  37. Display::display_header(get_lang('Category'));
  38. // Action handling: add, edit and remove
  39. if (isset($_GET['action']) && $_GET['action'] == 'addcategory') {
  40. add_category_form(Security::remove_XSS($_GET['action']));
  41. }
  42. else if (isset($_GET['action']) && $_GET['action'] == 'editcategory') {
  43. edit_category_form(Security::remove_XSS($_GET['action']));
  44. }
  45. else if (isset($_GET['action']) && $_GET['action'] == 'deletecategory') {
  46. delete_category_form(Security::remove_XSS($_GET['action']));
  47. }
  48. else {
  49. display_add_category();
  50. display_categories();
  51. }
  52. Display::display_footer();
  53. // FUNCTIONS
  54. // form to edit a category
  55. function edit_category_form($in_action) {
  56. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  57. $category_id = Security::remove_XSS($_GET['category_id']);
  58. $objcat = new Testcategory($category_id);
  59. // initiate the object
  60. $form = new FormValidator('note','post', api_get_self().'?action='.$in_action.'&category_id='.$category_id);
  61. // settting the form elements
  62. $form->addElement('header', '', get_lang('EditCategory'));
  63. $form->addElement('hidden', 'category_id');
  64. $form->addElement('text', 'category_name', get_lang('CategoryName'),array('size'=>'95'));
  65. $form->addElement('html_editor', 'category_description', get_lang('CategoryDescription'), null, array('ToolbarSet' => 'test_category', 'Width' => '90%', 'Height' => '200'));
  66. $form->addElement('style_submit_button', 'SubmitNote', get_lang('ModifyCategory'), 'class="add"');
  67. // --------------------
  68. // setting the defaults
  69. // --------------------
  70. $defaults = array();
  71. $defaults["category_id"] = $objcat->id;
  72. $defaults["category_name"] = $objcat->name;
  73. $defaults["category_description"] = $objcat->description;
  74. $form->setDefaults($defaults);
  75. // --------------------
  76. // setting the rules
  77. // --------------------
  78. $form->addRule('category_name', '<div class="required">'.get_lang('ThisFieldIsRequired'), 'required');
  79. // --------------------
  80. // The validation or display
  81. // --------------------
  82. if ($form->validate())
  83. {
  84. $check = Security::check_token('post');
  85. if ($check) {
  86. $values = $form->exportValues();
  87. $v_id = Security::remove_XSS($values['category_id']);
  88. $v_name = Security::remove_XSS($values['category_name'], COURSEMANAGER);
  89. $v_description = Security::remove_XSS($values['category_description'], COURSEMANAGER);
  90. $objcat = new Testcategory($v_id, $v_name, $v_description);
  91. if ($objcat->modifyCategory()) {
  92. Display::display_confirmation_message(get_lang('MofidfyCategoryDone'));
  93. } else {
  94. Display::display_confirmation_message(get_lang('ModifyCategoryError'));
  95. }
  96. }
  97. Security::clear_token();
  98. display_add_category();
  99. display_categories();
  100. }
  101. else
  102. {
  103. display_goback();
  104. $token = Security::get_token();
  105. $form->addElement('hidden','sec_token');
  106. $form->setConstants(array('sec_token' => $token));
  107. $form->display();
  108. display_categories();
  109. }
  110. }
  111. else {
  112. Display::display_error_message(get_lang('CannotEditCategory'));
  113. }
  114. }
  115. // process to delete a category
  116. function delete_category_form($in_action) {
  117. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  118. $category_id = Security::remove_XSS($_GET['category_id']);
  119. $catobject = new Testcategory($category_id);
  120. if ($catobject->getCategoryQuestionsNumber() == 0) {
  121. if ($catobject->removeCategory()) {
  122. Display::display_confirmation_message(get_lang('DeleteCategoryDone'));
  123. }
  124. else {
  125. Display::display_error_message(get_lang('CannotDeleteCategoryError'));
  126. }
  127. }
  128. else {
  129. Display::display_error_message(get_lang('CannotDeleteCategory'));
  130. }
  131. }
  132. else {
  133. Display::display_error_message(get_lang('CannotDeleteCategoryError'));
  134. }
  135. display_add_category();
  136. display_categories();
  137. }
  138. // form to add a category
  139. function add_category_form($in_action) {
  140. // initiate the object
  141. $form = new FormValidator('note','post', api_get_self().'?action='.$in_action);
  142. // settting the form elements
  143. $form->addElement('header', '', get_lang('AddACategory'));
  144. $form->addElement('text', 'category_name', get_lang('CategoryName'),array('size'=>'95'));
  145. $form->addElement('html_editor', 'category_description', get_lang('CategoryDescription'), null, array('ToolbarSet' => 'test_category', 'Width' => '90%', 'Height' => '200'));
  146. $form->addElement('style_submit_button', 'SubmitNote', get_lang('AddTestCategory'), 'class="add"');
  147. // setting the rules
  148. $form->addRule('category_name', '<div class="required">'.get_lang('ThisFieldIsRequired'), 'required');
  149. // The validation or display
  150. if ($form->validate())
  151. {
  152. $check = Security::check_token('post');
  153. if ($check) {
  154. $values = $form->exportValues();
  155. $v_name = Security::remove_XSS($values['category_name'], COURSEMANAGER);
  156. $v_description = Security::remove_XSS($values['category_description'], COURSEMANAGER);
  157. $objcat = new Testcategory(0, $v_name, $v_description);
  158. if ($objcat->addCategoryInBDD()) {
  159. Display::display_confirmation_message(get_lang('AddCategoryDone'));
  160. }
  161. else {
  162. Display::display_confirmation_message(get_lang('AddCategoryNameAlreadyExists'));
  163. }
  164. }
  165. Security::clear_token();
  166. display_add_category();
  167. display_categories();
  168. }
  169. else
  170. {
  171. display_goback();
  172. $token = Security::get_token();
  173. $form->addElement('hidden','sec_token');
  174. $form->setConstants(array('sec_token' => $token));
  175. $form->display();
  176. display_categories();
  177. }
  178. }
  179. // Display add category button
  180. function display_add_category() {
  181. echo '<div class="actions">';
  182. echo '<a href="exercice.php?'.api_get_cidreq().'">'.Display::return_icon('back.png', get_lang('GoBackToQuestionList'),'',ICON_SIZE_MEDIUM).'</a>';
  183. echo '<a href="'.api_get_self().'?action=addcategory">'.Display::return_icon('question_category.gif', get_lang('AddACategory')).'</a>';
  184. echo '</div>';
  185. echo "<br/>";
  186. echo "<fieldset><legend>".get_lang('QuestionCategory')."</legend></fieldset>";
  187. }
  188. // Display category list
  189. function display_categories() {
  190. $course_id = api_get_course_int_id();
  191. $t_cattable = Database::get_course_table(TABLE_QUIZ_QUESTION_CATEGORY);
  192. $sql = "SELECT * FROM $t_cattable WHERE c_id = $course_id ORDER BY title";
  193. $res = Database::query($sql);
  194. while ($row = Database::fetch_array($res)) {
  195. // le titre avec le nombre de questions qui sont dans cette cat�gorie
  196. $tmpobj = new Testcategory($row['id']);
  197. $nb_question = $tmpobj->getCategoryQuestionsNumber();
  198. echo '<div class="sectiontitle" id="id_cat'.$row['id'].'">';
  199. $nb_question_label = $nb_question == 1 ? $nb_question.' '.get_lang('Question') : $nb_question.' '.get_lang('Questions');
  200. echo "<span style='float:right'>".$nb_question_label."</span>";
  201. echo $row['title'];
  202. echo '</div>';
  203. echo '<div class="sectioncomment">';
  204. echo $row['description'];
  205. echo '</div>';
  206. echo '<div>';
  207. echo '<a href="'.api_get_self().'?action=editcategory&amp;category_id='.$row['id'].'">'.Display::return_icon('edit.gif', get_lang('Edit')).'</a>';
  208. if ($nb_question > 0) {
  209. echo '<a href="javascript:void(0)" onclick="alert(\''.protectJSDialogQuote(get_lang('CannotDeleteCategory')).'\')">';
  210. echo Display::return_icon('delete_na.gif', get_lang('CannotDeleteCategory'));
  211. echo '</a>';
  212. }
  213. else {
  214. $rowname = protectJSDialogQuote($row['title']);
  215. echo '<a href="'.api_get_self().'?action=deletecategory&amp;category_id='.$row['id'].'" ';
  216. echo 'onclick="return confirmDelete(\''.protectJSDialogQuote(get_lang('DeleteCategoryAreYouSure').'['.$rowname).'] ?\', \'id_cat'.$row['id'].'\');">';
  217. echo Display::return_icon('delete.gif', get_lang('Delete')).'</a>';
  218. }
  219. echo '</div>';
  220. }
  221. }
  222. // ------------------------------------------------------------------------
  223. // display goback to category list page link
  224. // ------------------------------------------------------------------------
  225. function display_goback() {
  226. echo '<div class="actions">';
  227. echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png', get_lang('BackToCategoryList'), array(), 32).'</a>';
  228. echo '</div>';
  229. }
  230. // ------------------------------------------------------------------------
  231. // To allowed " in javascript dialog box without bad surprises
  232. // replace " with two '
  233. // ------------------------------------------------------------------------
  234. function protectJSDialogQuote($in_txt) {
  235. $res = $in_txt;
  236. $res = str_replace("'", "\'", $res);
  237. $res = str_replace('"', "\'\'", $res); // super astuce pour afficher les " dans les boite de dialogue
  238. return $res;
  239. }