PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/mod/feedback/item/info/lib.php

https://github.com/tcubansk/moodle
PHP | 391 lines | 286 code | 52 blank | 53 comment | 37 complexity | 49315c25fcac2905aacb51d08b103319 MD5 | raw file
  1. <?php
  2. // This file is part of Moodle - http://moodle.org/
  3. //
  4. // Moodle is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // Moodle is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  16. defined('MOODLE_INTERNAL') OR die('not allowed');
  17. require_once($CFG->dirroot.'/mod/feedback/item/feedback_item_class.php');
  18. class feedback_item_info extends feedback_item_base {
  19. protected $type = "info";
  20. private $commonparams;
  21. private $item_form;
  22. private $item;
  23. public function init() {
  24. }
  25. public function build_editform($item, $feedback, $cm) {
  26. global $DB, $CFG;
  27. require_once('info_form.php');
  28. //get the lastposition number of the feedback_items
  29. $position = $item->position;
  30. $lastposition = $DB->count_records('feedback_item', array('feedback'=>$feedback->id));
  31. if ($position == -1) {
  32. $i_formselect_last = $lastposition + 1;
  33. $i_formselect_value = $lastposition + 1;
  34. $item->position = $lastposition + 1;
  35. } else {
  36. $i_formselect_last = $lastposition;
  37. $i_formselect_value = $item->position;
  38. }
  39. //the elements for position dropdownlist
  40. $positionlist = array_slice(range(0, $i_formselect_last), 1, $i_formselect_last, true);
  41. $item->presentation = empty($item->presentation) ? 1 : $item->presentation;
  42. $item->required = 0;
  43. //all items for dependitem
  44. $feedbackitems = feedback_get_depend_candidates_for_item($feedback, $item);
  45. $commonparams = array('cmid'=>$cm->id,
  46. 'id'=>isset($item->id) ? $item->id : null,
  47. 'typ'=>$item->typ,
  48. 'items'=>$feedbackitems,
  49. 'feedback'=>$feedback->id);
  50. //build the form
  51. $this->item_form = new feedback_info_form('edit_item.php',
  52. array('item'=>$item,
  53. 'common'=>$commonparams,
  54. 'positionlist'=>$positionlist,
  55. 'position' => $position));
  56. }
  57. //this function only can used after the call of build_editform()
  58. public function show_editform() {
  59. $this->item_form->display();
  60. }
  61. public function is_cancelled() {
  62. return $this->item_form->is_cancelled();
  63. }
  64. public function get_data() {
  65. if ($this->item = $this->item_form->get_data()) {
  66. return true;
  67. }
  68. return false;
  69. }
  70. public function save_item() {
  71. global $DB;
  72. if (!$item = $this->item_form->get_data()) {
  73. return false;
  74. }
  75. if (isset($item->clone_item) AND $item->clone_item) {
  76. $item->id = ''; //to clone this item
  77. $item->position++;
  78. }
  79. $item->hasvalue = $this->get_hasvalue();
  80. if (!$item->id) {
  81. $item->id = $DB->insert_record('feedback_item', $item);
  82. } else {
  83. $DB->update_record('feedback_item', $item);
  84. }
  85. return $DB->get_record('feedback_item', array('id'=>$item->id));
  86. }
  87. //liefert eine Struktur ->name, ->data = array(mit Antworten)
  88. public function get_analysed($item, $groupid = false, $courseid = false) {
  89. $presentation = $item->presentation;
  90. $analysed_val = null;
  91. $analysed_val->data = null;
  92. $analysed_val->name = $item->name;
  93. $values = feedback_get_group_values($item, $groupid, $courseid);
  94. if ($values) {
  95. $data = array();
  96. $datavalue = new stdClass();
  97. foreach ($values as $value) {
  98. switch($presentation) {
  99. case 1:
  100. $datavalue->value = $value->value;
  101. $datavalue->show = userdate($datavalue->value);
  102. break;
  103. case 2:
  104. $datavalue->value = $value->value;
  105. $datavalue->show = $datavalue->value;
  106. break;
  107. case 3:
  108. $datavalue->value = $value->value;
  109. $datavalue->show = $datavalue->value;
  110. break;
  111. }
  112. $data[] = $datavalue;
  113. }
  114. $analysed_val->data = $data;
  115. }
  116. return $analysed_val;
  117. }
  118. public function get_printval($item, $value) {
  119. if (!isset($value->value)) {
  120. return '';
  121. }
  122. return userdate($value->value);
  123. }
  124. public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false) {
  125. $analysed_item = $this->get_analysed($item, $groupid, $courseid);
  126. $data = $analysed_item->data;
  127. if (is_array($data)) {
  128. echo '<tr><th colspan="2" align="left">';
  129. echo $itemnr.'&nbsp;('.$item->label.') '.$item->name;
  130. echo '</th></tr>';
  131. $sizeofdata = count($data);
  132. for ($i = 0; $i < $sizeofdata; $i++) {
  133. echo '<tr><td colspan="2" valign="top" align="left">-&nbsp;&nbsp;';
  134. echo str_replace("\n", '<br />', $data[$i]->show);
  135. echo '</td></tr>';
  136. }
  137. }
  138. }
  139. public function excelprint_item(&$worksheet, $row_offset,
  140. $xls_formats, $item,
  141. $groupid, $courseid = false) {
  142. $analysed_item = $this->get_analysed($item, $groupid, $courseid);
  143. $worksheet->write_string($row_offset, 0, $item->label, $xls_formats->head2);
  144. $worksheet->write_string($row_offset, 1, $item->name, $xls_formats->head2);
  145. $data = $analysed_item->data;
  146. if (is_array($data)) {
  147. $worksheet->write_string($row_offset, 2, $data[0]->show, $xls_formats->value_bold);
  148. $row_offset++;
  149. $sizeofdata = count($data);
  150. for ($i = 1; $i < $sizeofdata; $i++) {
  151. $worksheet->write_string($row_offset, 2, $data[$i]->show, $xls_formats->default);
  152. $row_offset++;
  153. }
  154. }
  155. $row_offset++;
  156. return $row_offset;
  157. }
  158. /**
  159. * print the item at the edit-page of feedback
  160. *
  161. * @global object
  162. * @param object $item
  163. * @return void
  164. */
  165. public function print_item_preview($item) {
  166. global $USER, $DB, $OUTPUT;
  167. $align = right_to_left() ? 'right' : 'left';
  168. $presentation = $item->presentation;
  169. $requiredmark = ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
  170. if ($item->feedback) {
  171. $courseid = $DB->get_field('feedback', 'course', array('id'=>$item->feedback));
  172. } else { // the item must be a template item
  173. $cmid = required_param('id', PARAM_INT);
  174. $courseid = $DB->get_field('course_modules', 'course', array('id'=>$cmid));
  175. }
  176. if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
  177. print_error('error');
  178. }
  179. if ($course->id !== SITEID) {
  180. $coursecategory = $DB->get_record('course_categories', array('id'=>$course->category));
  181. } else {
  182. $coursecategory = false;
  183. }
  184. switch($presentation) {
  185. case 1:
  186. $itemvalue = time();
  187. $itemshowvalue = userdate($itemvalue);
  188. break;
  189. case 2:
  190. $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
  191. $itemvalue = format_string($course->shortname,
  192. true,
  193. array('context' => $coursecontext));
  194. $itemshowvalue = $itemvalue;
  195. break;
  196. case 3:
  197. if ($coursecategory) {
  198. $category_context = get_context_instance(CONTEXT_COURSECAT, $coursecategory->id);
  199. $itemvalue = format_string($coursecategory->name,
  200. true,
  201. array('context' => $category_context));
  202. $itemshowvalue = $itemvalue;
  203. } else {
  204. $itemvalue = '';
  205. $itemshowvalue = '';
  206. }
  207. break;
  208. }
  209. //print the question and label
  210. echo '<div class="feedback_item_label_'.$align.'">';
  211. echo '('.$item->label.') ';
  212. echo format_text($item->name.$requiredmark, true, false, false);
  213. if ($item->dependitem) {
  214. if ($dependitem = $DB->get_record('feedback_item', array('id'=>$item->dependitem))) {
  215. echo ' <span class="feedback_depend">';
  216. echo '('.$dependitem->label.'-&gt;'.$item->dependvalue.')';
  217. echo '</span>';
  218. }
  219. }
  220. echo '</div>';
  221. //print the presentation
  222. echo '<div class="feedback_item_presentation_'.$align.'">';
  223. echo '<input type="hidden" name="'.$item->typ.'_'.$item->id.'" value="'.$itemvalue.'" />';
  224. echo '<span class="feedback_item_info">'.$itemshowvalue.'</span>';
  225. echo '</div>';
  226. }
  227. /**
  228. * print the item at the complete-page of feedback
  229. *
  230. * @global object
  231. * @param object $item
  232. * @param string $value
  233. * @param bool $highlightrequire
  234. * @return void
  235. */
  236. public function print_item_complete($item, $value = '', $highlightrequire = false) {
  237. global $USER, $DB, $OUTPUT;
  238. $align = right_to_left() ? 'right' : 'left';
  239. $presentation = $item->presentation;
  240. if ($highlightrequire AND $item->required AND strval($value) == '') {
  241. $highlight = ' missingrequire';
  242. } else {
  243. $highlight = '';
  244. }
  245. $requiredmark = ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
  246. $feedback = $DB->get_record('feedback', array('id'=>$item->feedback));
  247. $course = $DB->get_record('course', array('id'=>$feedback->course));
  248. if ($course->id !== SITEID) {
  249. $coursecategory = $DB->get_record('course_categories', array('id'=>$course->category));
  250. } else {
  251. $coursecategory = false;
  252. }
  253. switch($presentation) {
  254. case 1:
  255. $itemvalue = time();
  256. $itemshowvalue = userdate($itemvalue);
  257. break;
  258. case 2:
  259. $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
  260. $itemvalue = format_string($course->shortname,
  261. true,
  262. array('context' => $coursecontext));
  263. $itemshowvalue = $itemvalue;
  264. break;
  265. case 3:
  266. if ($coursecategory) {
  267. $category_context = get_context_instance(CONTEXT_COURSECAT, $coursecategory->id);
  268. $itemvalue = format_string($coursecategory->name,
  269. true,
  270. array('context' => $category_context));
  271. $itemshowvalue = $itemvalue;
  272. } else {
  273. $itemvalue = '';
  274. $itemshowvalue = '';
  275. }
  276. break;
  277. }
  278. //print the question and label
  279. echo '<div class="feedback_item_label_'.$align.$highlight.'">';
  280. echo format_text($item->name.$requiredmark, true, false, false);
  281. echo '</div>';
  282. //print the presentation
  283. echo '<div class="feedback_item_presentation_'.$align.'">';
  284. echo '<input type="hidden" name="'.$item->typ.'_'.$item->id.'" value="'.$itemvalue.'" />';
  285. echo '<span class="feedback_item_info">'.$itemshowvalue.'</span>';
  286. echo '</div>';
  287. }
  288. /**
  289. * print the item at the complete-page of feedback
  290. *
  291. * @global object
  292. * @param object $item
  293. * @param string $value
  294. * @return void
  295. */
  296. public function print_item_show_value($item, $value = '') {
  297. global $USER, $DB, $OUTPUT;
  298. $align = right_to_left() ? 'right' : 'left';
  299. $presentation = $item->presentation;
  300. $requiredmark = ($item->required == 1)?'<span class="feedback_required_mark">*</span>':'';
  301. if ($presentation == 1) {
  302. $value = $value ? userdate($value) : '&nbsp;';
  303. }
  304. //print the question and label
  305. echo '<div class="feedback_item_label_'.$align.'">';
  306. echo '('.$item->label.') ';
  307. echo format_text($item->name . $requiredmark, true, false, false);
  308. echo '</div>';
  309. //print the presentation
  310. echo $OUTPUT->box_start('generalbox boxalign'.$align);
  311. echo $value;
  312. echo $OUTPUT->box_end();
  313. }
  314. public function check_value($value, $item) {
  315. return true;
  316. }
  317. public function create_value($data) {
  318. $data = clean_text($data);
  319. return $data;
  320. }
  321. //compares the dbvalue with the dependvalue
  322. //the values can be the shortname of a course or the category name
  323. //the date is not compareable :(.
  324. public function compare_value($item, $dbvalue, $dependvalue) {
  325. if ($dbvalue == $dependvalue) {
  326. return true;
  327. }
  328. return false;
  329. }
  330. public function get_presentation($data) {
  331. return $data->infotype;
  332. }
  333. public function get_hasvalue() {
  334. return 1;
  335. }
  336. public function can_switch_require() {
  337. return false;
  338. }
  339. }