tests_category.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  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 __DIR__.'/../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[] = [
  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_categories_'.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();
  66. $cat->name = $item['title'];
  67. $cat->description = $item['description'];
  68. $cat->save();
  69. }
  70. Display::addFlash(Display::return_message(get_lang('Imported')));
  71. }
  72. }
  73. $content = $form->returnForm();
  74. break;
  75. }
  76. Display::display_header(get_lang('Category'));
  77. displayActionBar();
  78. echo $content;
  79. echo $category->displayCategories($courseId, $sessionId);
  80. Display::display_footer();
  81. /**
  82. * @return FormValidator
  83. */
  84. function importCategoryForm()
  85. {
  86. $form = new FormValidator('import', 'post', api_get_self().'?action=import_category&'.api_get_cidreq());
  87. $form->addElement('file', 'file', get_lang('ImportCSVFileLocation'));
  88. $form->addRule('file', get_lang('ThisFieldIsRequired'), 'required');
  89. $form->addButtonImport(get_lang('Import'));
  90. return $form;
  91. }
  92. /**
  93. * Form to edit a category.
  94. *
  95. * @todo move to TestCategory.class.php
  96. *
  97. * @param string $action
  98. */
  99. function edit_category_form($action)
  100. {
  101. $action = Security::remove_XSS($action);
  102. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  103. $category_id = intval($_GET['category_id']);
  104. $objcat = new TestCategory();
  105. $objcat = $objcat->getCategory($category_id);
  106. $form = new FormValidator(
  107. 'note',
  108. 'post',
  109. api_get_self().'?action='.$action.'&category_id='.$category_id.'&'.api_get_cidreq()
  110. );
  111. // Setting the form elements
  112. $form->addElement('header', get_lang('EditCategory'));
  113. $form->addElement('hidden', 'category_id');
  114. $form->addElement('text', 'category_name', get_lang('CategoryName'), ['size' => '95']);
  115. $form->addHtmlEditor(
  116. 'category_description',
  117. get_lang('CategoryDescription'),
  118. false,
  119. false,
  120. ['ToolbarSet' => 'test_category', 'Height' => '200']
  121. );
  122. $form->addButtonSave(get_lang('ModifyCategory'), 'SubmitNote');
  123. // setting the defaults
  124. $defaults = [];
  125. $defaults["category_id"] = $objcat->id;
  126. $defaults["category_name"] = $objcat->name;
  127. $defaults["category_description"] = $objcat->description;
  128. $form->setDefaults($defaults);
  129. // setting the rules
  130. $form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
  131. // The validation or display
  132. if ($form->validate()) {
  133. $check = Security::check_token('post');
  134. if ($check) {
  135. $values = $form->exportValues();
  136. $category = new TestCategory();
  137. $category = $category->getCategory($values['category_id']);
  138. if ($category) {
  139. $category->name = $values['category_name'];
  140. $category->description = $values['category_description'];
  141. $category->modifyCategory();
  142. Display::addFlash(Display::return_message(get_lang('Updated')));
  143. } else {
  144. Display::addFlash(Display::return_message(get_lang('ModifyCategoryError'), 'error'));
  145. }
  146. }
  147. Security::clear_token();
  148. } else {
  149. $token = Security::get_token();
  150. $form->addElement('hidden', 'sec_token');
  151. $form->setConstants(['sec_token' => $token]);
  152. return $form->returnForm();
  153. }
  154. } else {
  155. Display::addFlash(
  156. Display::return_message(get_lang('CannotEditCategory'), 'error')
  157. );
  158. }
  159. }
  160. // process to delete a category
  161. function delete_category_form()
  162. {
  163. if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
  164. $category = new TestCategory();
  165. if ($category->removeCategory($_GET['category_id'])) {
  166. Display::addFlash(Display::return_message(get_lang('DeleteCategoryDone')));
  167. } else {
  168. Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
  169. }
  170. } else {
  171. Display::addFlash(Display::return_message(get_lang('CannotDeleteCategoryError'), 'error'));
  172. }
  173. }
  174. /**
  175. * form to add a category.
  176. *
  177. * @todo move to TestCategory.class.php
  178. *
  179. * @param string $action
  180. */
  181. function add_category_form($action)
  182. {
  183. $action = Security::remove_XSS($action);
  184. // initiate the object
  185. $form = new FormValidator('note', 'post', api_get_self().'?action='.$action.'&'.api_get_cidreq());
  186. // Setting the form elements
  187. $form->addElement('header', get_lang('AddACategory'));
  188. $form->addElement('text', 'category_name', get_lang('CategoryName'), ['size' => '95']);
  189. $form->addHtmlEditor(
  190. 'category_description',
  191. get_lang('CategoryDescription'),
  192. false,
  193. false,
  194. ['ToolbarSet' => 'test_category', 'Height' => '200']
  195. );
  196. $form->addButtonCreate(get_lang('AddTestCategory'), 'SubmitNote');
  197. // setting the rules
  198. $form->addRule('category_name', get_lang('ThisFieldIsRequired'), 'required');
  199. // The validation or display
  200. if ($form->validate()) {
  201. $check = Security::check_token('post');
  202. if ($check) {
  203. $values = $form->exportValues();
  204. $category = new TestCategory();
  205. $category->name = $values['category_name'];
  206. $category->description = $values['category_description'];
  207. if ($category->save()) {
  208. Display::addFlash(Display::return_message(get_lang('AddCategoryDone')));
  209. } else {
  210. Display::addFlash(Display::return_message(get_lang('AddCategoryNameAlreadyExists'), 'warning'));
  211. }
  212. }
  213. Security::clear_token();
  214. } else {
  215. $token = Security::get_token();
  216. $form->addElement('hidden', 'sec_token');
  217. $form->setConstants(['sec_token' => $token]);
  218. return $form->returnForm();
  219. }
  220. }
  221. // Display add category button
  222. function displayActionBar()
  223. {
  224. echo '<div class="actions">';
  225. echo '<a href="'.api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq().'">'.
  226. Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>';
  227. echo '<a href="'.api_get_self().'?action=addcategory&'.api_get_cidreq().'">'.
  228. Display::return_icon('new_folder.png', get_lang('AddACategory'), null, ICON_SIZE_MEDIUM).'</a>';
  229. echo Display::url(
  230. Display::return_icon('export_csv.png', get_lang('ExportAsCSV'), [], ICON_SIZE_MEDIUM),
  231. api_get_self().'?action=export_category&'.api_get_cidreq()
  232. );
  233. echo Display::url(
  234. Display::return_icon('import_csv.png', get_lang('ImportAsCSV'), [], ICON_SIZE_MEDIUM),
  235. api_get_self().'?action=import_category&'.api_get_cidreq()
  236. );
  237. echo '</div>';
  238. echo "<br/>";
  239. echo "<fieldset><legend>".get_lang('QuestionCategory')."</legend></fieldset>";
  240. }