tests_category.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. hubert.borderiou
  5. Manage tests category page
  6. */
  7. $htmlHeadXtra[] = '
  8. <script>
  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. } else {
  15. document.getElementById(in_id).style.backgroundColor = oldbgcolor;
  16. return false;
  17. }
  18. }
  19. </script>';
  20. $nameTools = '';
  21. require_once '../inc/global.inc.php';
  22. $this_section = SECTION_COURSES;
  23. if (!api_is_allowed_to_edit()) {
  24. api_not_allowed(true);
  25. }
  26. $category = new TestCategory();
  27. $courseId = api_get_course_int_id();
  28. $sessionId = api_get_session_id();
  29. // breadcrumbs
  30. $interbreadcrumb[] = array(
  31. "url" => "exercise.php?".api_get_cidreq(),
  32. "name" => get_lang('Exercises'),
  33. );
  34. $action = isset($_GET['action']) ? $_GET['action'] : '';
  35. $content = '';
  36. switch ($action) {
  37. case 'addcategory':
  38. $content = add_category_form('addcategory');
  39. break;
  40. case 'editcategory':
  41. $content = edit_category_form('editcategory');
  42. break;
  43. case 'deletecategory':
  44. delete_category_form();
  45. break;
  46. case 'export_category':
  47. $archiveFile = 'export_exercise_categoroes_'.api_get_course_id().'_'.api_get_local_time();
  48. $categories = $category->getCategories($courseId, $sessionId);
  49. $export = [];
  50. $export[] = ['title', 'description'];
  51. if (!empty($categories)) {
  52. foreach ($categories as $category) {
  53. $export[] = [$category['title'], $category['description']];
  54. }
  55. }
  56. Export::arrayToCsv($export, $archiveFile);
  57. exit;
  58. break;
  59. case 'import_category':
  60. $form = importCategoryForm();
  61. if ($form->validate()) {
  62. $categories = Import::csv_reader($_FILES['file']['tmp_name']);
  63. if (!empty($categories)) {
  64. foreach ($categories as $item) {
  65. $cat = new TestCategory(0, $item['title'], $item['description']);
  66. $cat->addCategoryInBDD();
  67. }
  68. Display::addFlash(Display::return_message(get_lang('Imported')));
  69. }
  70. }
  71. $content = $form->returnForm();
  72. break;
  73. }
  74. Display::display_header(get_lang('Category'));
  75. displayActionBar();
  76. echo $content;
  77. echo $category->displayCategories($courseId, $sessionId);
  78. Display::display_footer();
  79. /**
  80. * @return FormValidator
  81. */
  82. function importCategoryForm()
  83. {
  84. $form = new FormValidator('import', 'post', api_get_self().'?action=import_category&'.api_get_cidreq());
  85. $form->addElement('file', 'file', get_lang('ImportCSVFileLocation'));
  86. $form->addRule('file', get_lang('ThisFieldIsRequired'), 'required');
  87. $form->addButtonImport(get_lang('Import'));
  88. return $form;
  89. }
  90. /**
  91. * Form to edit a category
  92. * @todo move to TestCategory.class.php
  93. * @param string $action
  94. */
  95. function edit_category_form($action)
  96. {
  97. $action = Security::remove_XSS($action);
  98. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  99. $category_id = intval($_GET['category_id']);
  100. $objcat = new TestCategory($category_id);
  101. $form = new FormValidator(
  102. 'note',
  103. 'post',
  104. api_get_self().'?action='.$action.'&category_id='.$category_id.'&'.api_get_cidreq()
  105. );
  106. // Setting the form elements
  107. $form->addElement('header', get_lang('EditCategory'));
  108. $form->addElement('hidden', 'category_id');
  109. $form->addElement('text', 'category_name', get_lang('CategoryName'), array('size' => '95'));
  110. $form->addHtmlEditor(
  111. 'category_description',
  112. get_lang('CategoryDescription'),
  113. false,
  114. false,
  115. array('ToolbarSet' => 'test_category', 'Height' => '200')
  116. );
  117. $form->addButtonSave(get_lang('ModifyCategory'), 'SubmitNote');
  118. // setting the defaults
  119. $defaults = array();
  120. $defaults["category_id"] = $objcat->id;
  121. $defaults["category_name"] = $objcat->name;
  122. $defaults["category_description"] = $objcat->description;
  123. $form->setDefaults($defaults);
  124. // setting the rules
  125. $form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
  126. // The validation or display
  127. if ($form->validate()) {
  128. $check = Security::check_token('post');
  129. if ($check) {
  130. $values = $form->exportValues();
  131. $category = new TestCategory(
  132. $values['category_id'],
  133. $values['category_name'],
  134. $values['category_description']
  135. );
  136. if ($category->modifyCategory()) {
  137. Display::addFlash(Display::return_message(get_lang('Updated')));
  138. } else {
  139. Display::addFlash(Display::return_message(get_lang('ModifyCategoryError'), 'error'));
  140. }
  141. }
  142. Security::clear_token();
  143. } else {
  144. $token = Security::get_token();
  145. $form->addElement('hidden', 'sec_token');
  146. $form->setConstants(array('sec_token' => $token));
  147. return $form->returnForm();
  148. }
  149. } else {
  150. Display::addFlash(
  151. Display::return_message(get_lang('CannotEditCategory'), 'error')
  152. );
  153. }
  154. }
  155. // process to delete a category
  156. function delete_category_form()
  157. {
  158. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  159. $category = new TestCategory($_GET['category_id']);
  160. if ($category->removeCategory()) {
  161. Display::addFlash(Display::return_message(get_lang('DeleteCategoryDone')));
  162. } else {
  163. Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
  164. }
  165. } else {
  166. Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
  167. }
  168. }
  169. /**
  170. * form to add a category
  171. * @todo move to TestCategory.class.php
  172. * @param string $action
  173. */
  174. function add_category_form($action)
  175. {
  176. $action = Security::remove_XSS($action);
  177. // initiate the object
  178. $form = new FormValidator('note', 'post', api_get_self() . '?action=' . $action.'&'.api_get_cidreq());
  179. // Setting the form elements
  180. $form->addElement('header', get_lang('AddACategory'));
  181. $form->addElement('text', 'category_name', get_lang('CategoryName'), array('size' => '95'));
  182. $form->addHtmlEditor(
  183. 'category_description',
  184. get_lang('CategoryDescription'),
  185. false,
  186. false,
  187. array('ToolbarSet' => 'test_category', 'Height' => '200')
  188. );
  189. $form->addButtonCreate(get_lang('AddTestCategory'), 'SubmitNote');
  190. // setting the rules
  191. $form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
  192. // The validation or display
  193. if ($form->validate()) {
  194. $check = Security::check_token('post');
  195. if ($check) {
  196. $values = $form->exportValues();
  197. $category = new TestCategory(0, $values['category_name'], $values['category_description']);
  198. if ($category->addCategoryInBDD()) {
  199. Display::addFlash(Display::return_message(get_lang('AddCategoryDone')));
  200. } else {
  201. Display::addFlash(Display::return_message(get_lang('AddCategoryNameAlreadyExists'), 'warning'));
  202. }
  203. }
  204. Security::clear_token();
  205. } else {
  206. $token = Security::get_token();
  207. $form->addElement('hidden', 'sec_token');
  208. $form->setConstants(array('sec_token' => $token));
  209. return $form->returnForm();
  210. }
  211. }
  212. // Display add category button
  213. function displayActionBar()
  214. {
  215. echo '<div class="actions">';
  216. echo '<a href="'.api_get_path(WEB_CODE_PATH).'exercise/exercise.php?' . api_get_cidreq() . '">' .
  217. Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM) . '</a>';
  218. echo '<a href="' . api_get_self() . '?action=addcategory&'.api_get_cidreq().'">' .
  219. Display::return_icon('question_category.gif', get_lang('AddACategory')) . '</a>';
  220. echo Display::url(
  221. Display::return_icon('export_csv.png', get_lang('ExportAsCSV'), [], ICON_SIZE_MEDIUM),
  222. api_get_self() . '?action=export_category&'.api_get_cidreq()
  223. );
  224. echo Display::url(
  225. Display::return_icon('import_csv.png', get_lang('ImportAsCSV'), [], ICON_SIZE_MEDIUM),
  226. api_get_self() . '?action=import_category&'.api_get_cidreq()
  227. );
  228. echo '</div>';
  229. echo "<br/>";
  230. echo "<fieldset><legend>" . get_lang('QuestionCategory') . "</legend></fieldset>";
  231. }