PageRenderTime 74ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/mod/hotpot/mod_form.php

https://bitbucket.org/ceu/moodle_demo
PHP | 347 lines | 235 code | 42 blank | 70 comment | 43 complexity | 8af38b1aff2adb20bd6c64b2082f9b10 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, LGPL-2.1
  1. <?php
  2. require_once ($CFG->dirroot.'/course/moodleform_mod.php');
  3. require_once ($CFG->dirroot.'/mod/hotpot/lib.php');
  4. $HOTPOT_TEXTSOURCE = array(
  5. HOTPOT_TEXTSOURCE_QUIZ => get_string('textsourcequiz', 'hotpot'),
  6. HOTPOT_TEXTSOURCE_FILENAME => get_string('textsourcefilename', 'hotpot'),
  7. HOTPOT_TEXTSOURCE_FILEPATH => get_string('textsourcefilepath', 'hotpot'),
  8. HOTPOT_TEXTSOURCE_SPECIFIC => get_string('textsourcespecific', 'hotpot')
  9. );
  10. class mod_hotpot_mod_form extends moodleform_mod {
  11. // documentation on formslib.php here:
  12. // http://docs.moodle.org/dev/lib/formslib.php_Form_Definition
  13. function definition() {
  14. // TO DO
  15. // =====
  16. // $mform->setType('name', PARAM_xxx);
  17. // $mform->setDefault('name', array('elementhelpfilename', get_string('helpicontitlestring', 'hotpot'), 'hotpot'));
  18. global $CFG, $COURSE;
  19. global $HOTPOT_FEEDBACK, $HOTPOT_GRADEMETHOD, $HOTPOT_LOCATION;
  20. global $HOTPOT_NAVIGATION, $HOTPOT_OUTPUTFORMAT, $HOTPOT_TEXTSOURCE;
  21. $mform =&$this->_form;
  22. // initialize values for $hours, $minutes and $seconds
  23. $hours = array();
  24. $minutes = array();
  25. $seconds = array();
  26. for ($i=0; $i<60; $i++) {
  27. $str = sprintf('%02d', $i);
  28. if ($i<24) {
  29. $hours[$i] = $str;
  30. }
  31. $minutes[$i] = $str;
  32. $seconds[$i] = $str;
  33. }
  34. //-----------------------------------------------------------------------------------------------
  35. $mform->addElement('header', 'general', get_string('general', 'form'));
  36. //-----------------------------------------------------------------------------------------------
  37. // Name
  38. global $form;
  39. if (isset($form->add)) {
  40. // new HotPot
  41. $elements = array();
  42. $elements[] = &$mform->createElement('select', 'namesource', '', $HOTPOT_TEXTSOURCE);
  43. $elements[] = &$mform->createElement('text', 'name', '', array('size' => '40'));
  44. $mform->addGroup($elements, 'name_elements', get_string('name'), array(' '), false);
  45. $mform->disabledIf('name_elements', 'namesource', 'ne', HOTPOT_TEXTSOURCE_SPECIFIC);
  46. // $mform->setAdvanced('name_elements');
  47. } else {
  48. // existing HotPot
  49. $mform->addElement('hidden', 'namesource', HOTPOT_TEXTSOURCE_SPECIFIC);
  50. $mform->setType('namesource', PARAM_RAW);
  51. $mform->addElement('text', 'name', get_string('name'), array('size' => '40'));
  52. }
  53. $mform->setType('namesource', PARAM_INT);
  54. if (!empty($CFG->formatstringstriptags)) {
  55. $mform->setType('name', PARAM_TEXT);
  56. } else {
  57. $mform->setType('name', PARAM_CLEAN);
  58. }
  59. // Location
  60. $sitecontext = get_context_instance(CONTEXT_SYSTEM);
  61. if (has_capability('moodle/course:managefiles', $sitecontext)) {
  62. $site = get_site();
  63. if ($COURSE->id==$site->id) {
  64. $id = $site->id;
  65. $location = HOTPOT_LOCATION_SITEFILES;
  66. } else {
  67. $id = "'+(getObjValue(this.form.location)==".HOTPOT_LOCATION_SITEFILES."?".$site->id.":".$COURSE->id.")+'";
  68. $location = '';
  69. }
  70. } else { // ordinary teacher or content creator
  71. $id = $COURSE->id;
  72. $location = HOTPOT_LOCATION_COURSEFILES;
  73. }
  74. if (array_key_exists($location, $HOTPOT_LOCATION)) {
  75. $mform->addElement('hidden', 'location', $location);
  76. $mform->setType('location', PARAM_RAW);
  77. } else { // admin can select from "site" or "course" files
  78. $mform->addElement('select', 'location', get_string('location', 'hotpot'), $HOTPOT_LOCATION);
  79. }
  80. $mform->setType('location', PARAM_INT);
  81. // Reference
  82. // create "Choose file" button
  83. $choosefile_button = $mform->createElement('button', 'popup', get_string('chooseafile', 'resource') .' ...');
  84. // create a 'reference' group of form elements, comprising text box + buttons
  85. $elements = array();
  86. $elements[] = $mform->createElement('text', 'reference', '', array('size'=>'60'));
  87. $elements[] = &$choosefile_button;
  88. $mform->addGroup($elements, 'reference_elements', get_string('filename', 'resource'), ' ' , false);
  89. // set attributes on the button
  90. if ($choosefile_button) {
  91. $wdir = "'+getDir(this.form.reference.value)+'";
  92. $url="/files/index.php?id=$id&wdir=$wdir&choose=id_reference";
  93. $options = 'menubar=0,location=0,scrollbars,resizable,width=750,height=500';
  94. $attributes = array(
  95. 'title'=>get_string('chooseafile', 'resource'),
  96. 'onclick'=>"return openpopup('$url', '".$choosefile_button->getName()."', '$options', 0);"
  97. );
  98. $choosefile_button->updateAttributes($attributes);
  99. }
  100. $mform->setType('reference', PARAM_TEXT);
  101. // Summary
  102. if (isset($form->add)) {
  103. // new HotPot
  104. $elements = array();
  105. $elements[] = &$mform->createElement('select', 'summarysource', '', $HOTPOT_TEXTSOURCE);
  106. $elements[] = &$mform->createElement('htmleditor', 'summary', '');
  107. $mform->addGroup($elements, 'summary_elements', get_string('summary'), array(' '), false);
  108. $mform->setAdvanced('summary_elements');
  109. } else {
  110. // existing HotPot
  111. $mform->addElement('hidden', 'summarysource', HOTPOT_TEXTSOURCE_SPECIFIC);
  112. $mform->setType('summarysource', PARAM_RAW);
  113. $mform->addElement('htmleditor', 'summary', get_string('summary'));
  114. $mform->setType('summary', PARAM_RAW);
  115. $mform->setHelpButton('summary', array('writing', 'questions', 'richtext'), false, 'editorhelpbutton');
  116. $mform->setAdvanced('summary');
  117. }
  118. $mform->setType('summarysource', PARAM_INT);
  119. $mform->setType('summary', PARAM_RAW);
  120. // Add/Update quiz chain?
  121. if (isset($form->add)) {
  122. $quizchain = 'addquizchain';
  123. } else {
  124. $quizchain = 'updatequizchain';
  125. }
  126. $mform->addElement('selectyesno', 'quizchain', get_string($quizchain, 'hotpot'));
  127. $mform->setDefault('quizchain', get_user_preferences("hotpot_$quizchain", HOTPOT_NO));
  128. $mform->setHelpButton('quizchain', array($quizchain, get_string($quizchain, 'hotpot'), 'hotpot'));
  129. // $mform->setAdvanced('quizchain');
  130. //-----------------------------------------------------------------------------------------------
  131. $mform->addElement('header', 'displayhdr', get_string('display', 'form'));
  132. //-----------------------------------------------------------------------------------------------
  133. // Output format
  134. $mform->addElement('select', 'outputformat', get_string('outputformat', 'hotpot'), $HOTPOT_OUTPUTFORMAT);
  135. $mform->setDefault('outputformat', get_user_preferences('hotpot_outputformat', HOTPOT_OUTPUTFORMAT_BEST));
  136. $mform->setHelpButton('outputformat', array('outputformat', get_string('outputformat', 'hotpot'), 'hotpot'));
  137. // Navigation
  138. $mform->addElement('select', 'navigation', get_string('navigation', 'hotpot'), $HOTPOT_NAVIGATION);
  139. $mform->setDefault('navigation', get_user_preferences('hotpot_navigation', HOTPOT_NAVIGATION_BAR));
  140. $mform->setHelpButton('navigation', array('navigation', get_string('navigation', 'hotpot'), 'hotpot'));
  141. // Use Moode player ?
  142. $mform->addElement('selectyesno', 'forceplugins', get_string('forceplugins', 'hotpot'));
  143. $mform->setDefault('forceplugins', get_user_preferences('hotpot_forceplugins', HOTPOT_NO));
  144. $mform->setHelpButton('forceplugins', array('forceplugins', get_string('forceplugins', 'hotpot'), 'hotpot'));
  145. // $mform->setAdvanced('forceplugins');
  146. // Student feedback
  147. $elements = array();
  148. $elements[] = &$mform->createElement('select', 'studentfeedback', '', $HOTPOT_FEEDBACK);
  149. $elements[] = &$mform->createElement('text', 'studentfeedbackurl', '', array('size'=>'50'));
  150. $mform->addGroup($elements, 'studentfeedback_elements', get_string('studentfeedback', 'hotpot'), array(' '), false);
  151. $mform->setHelpButton('studentfeedback_elements', array('studentfeedback', get_string('studentfeedback', 'hotpot'), 'hotpot'));
  152. $mform->disabledIf('studentfeedback_elements', 'studentfeedback', 'eq', HOTPOT_FEEDBACK_NONE);
  153. $mform->disabledIf('studentfeedback_elements', 'studentfeedback', 'eq', HOTPOT_FEEDBACK_MOODLEFORUM);
  154. $mform->disabledIf('studentfeedback_elements', 'studentfeedback', 'eq', HOTPOT_FEEDBACK_MOODLEMESSAGING);
  155. // $mform->setAdvanced('studentfeedback_elements');
  156. $mform->setType('studentfeedbackurl', PARAM_URL);
  157. // Show next quiz ?
  158. $mform->addElement('selectyesno', 'shownextquiz', get_string('shownextquiz', 'hotpot'));
  159. $mform->setDefault('shownextquiz', get_user_preferences('hotpot_shownextquiz', HOTPOT_NO));
  160. $mform->setHelpButton('shownextquiz', array('shownextquiz', get_string('shownextquiz', 'hotpot'), 'hotpot'));
  161. // $mform->setAdvanced('shownextquiz');
  162. //-----------------------------------------------------------------------------------------------
  163. $mform->addElement('header', 'accesscontrolhdr', get_string('accesscontrol', 'lesson'));
  164. //-----------------------------------------------------------------------------------------------
  165. // Open time
  166. $mform->addElement('date_time_selector', 'timeopen', get_string('quizopen', 'quiz'), array('optional'=>true));
  167. $mform->setHelpButton('timeopen', array('timeopen', get_string('quizopen', 'quiz'), 'quiz'));
  168. // Close time
  169. $mform->addElement('date_time_selector', 'timeclose', get_string('quizclose', 'quiz'), array('optional'=>true));
  170. $mform->setHelpButton('timeclose', array('timeopen', get_string('quizclose', 'quiz'), 'quiz'));
  171. // Password
  172. $mform->addElement('text', 'password', get_string('requirepassword', 'quiz'));
  173. $mform->setType('password', PARAM_TEXT);
  174. $mform->setHelpButton('password', array('requirepassword', get_string('requirepassword', 'quiz'), 'quiz'));
  175. // $mform->setAdvanced('password');
  176. // Subnet
  177. $mform->addElement('text', 'subnet', get_string('requiresubnet', 'quiz'));
  178. $mform->setType('subnet', PARAM_TEXT);
  179. $mform->setHelpButton('subnet', array('requiresubnet', get_string('requiresubnet', 'quiz'), 'quiz'));
  180. $mform->setDefault('subnet', get_user_preferences('hotpot_subnet'));
  181. // $mform->setAdvanced('subnet');
  182. // Allow review?
  183. $mform->addElement('selectyesno', 'review', get_string('allowreview', 'quiz'));
  184. $mform->setDefault('review', get_user_preferences('hotpot_review', HOTPOT_YES));
  185. $mform->setHelpButton('review', array('review', get_string('allowreview', 'quiz'), 'quiz'));
  186. // $mform->setAdvanced('review');
  187. // Maximum number of attempts
  188. $options = array(
  189. 0 => get_string("attemptsunlimited", "quiz"),
  190. 1 => '1 '.strtolower(get_string("attempt", "quiz"))
  191. );
  192. for ($i=2; $i<=10; $i++) {
  193. $options[$i] = "$i ".strtolower(get_string("attempts", "quiz"));
  194. }
  195. $mform->addElement('select', 'attempts', get_string('attemptsallowed', 'quiz'), $options);
  196. $mform->setDefault('attempts', get_user_preferences('hotpot_attempts', 0)); // 0=unlimited
  197. $mform->setHelpButton('attempts', array('attempts', get_string('attemptsallowed', 'quiz'), 'quiz'));
  198. // $mform->setAdvanced('attempts');
  199. //-----------------------------------------------------------------------------------------------
  200. $mform->addElement('header', 'gradeshdr', get_string('grades', 'grades'));
  201. //-----------------------------------------------------------------------------------------------
  202. // Maximum grading method
  203. $mform->addElement('select', 'grademethod', get_string('grademethod', 'quiz'), $HOTPOT_GRADEMETHOD);
  204. $mform->setDefault('grademethod', get_user_preferences('hotpot_grademethod', HOTPOT_GRADEMETHOD_HIGHEST));
  205. $mform->setHelpButton('grademethod', array('grademethod', get_string('grademethod', 'quiz'), 'quiz'));
  206. // $mform->setAdvanced('grademethod');
  207. // Maximum grade
  208. $options = array();
  209. for ($i=100; $i>=1; $i--) {
  210. $options[$i] = $i;
  211. }
  212. $options[0] = get_string("nograde");
  213. $mform->addElement('select', 'grade', get_string('maximumgrade'), $options);
  214. $mform->setDefault('grade', get_user_preferences('hotpot_grade', 100));
  215. $mform->setHelpButton('grade', array('maxgrade', get_string('maximumgrade'), 'quiz'));
  216. // $mform->setAdvanced('grade');
  217. // Remove grade item
  218. if (empty($this->_instance) || ! record_exists('grade_items', 'itemtype', 'mod', 'itemmodule', 'hotpot', 'iteminstance', $this->_instance)) {
  219. $mform->addElement('hidden', 'removegradeitem', 0);
  220. $mform->setType('removegradeitem', PARAM_INT);
  221. } else {
  222. $mform->addElement('selectyesno', 'removegradeitem', get_string('removegradeitem', 'hotpot'));
  223. $mform->setHelpButton('removegradeitem', array('removegradeitem', get_string('removegradeitem', 'hotpot'), 'hotpot'));
  224. //$mform->setAdvanced('removegradeitem');
  225. $mform->setType('removegradeitem', PARAM_INT);
  226. // element is only available if grade==0
  227. $mform->disabledIf('removegradeitem', 'grade', 'selected', 0);
  228. }
  229. //-----------------------------------------------------------------------------------------------
  230. $mform->addElement('header', 'reportshdr', get_string('reports'));
  231. //-----------------------------------------------------------------------------------------------
  232. // Enable click reporting?
  233. $mform->addElement('selectyesno', 'clickreporting', get_string('clickreporting', 'hotpot'));
  234. $mform->setDefault('clickreporting', get_user_preferences('hotpot_clickreporting', HOTPOT_NO));
  235. $mform->setHelpButton('clickreporting', array('clickreporting', get_string('clickreporting', 'hotpot'), 'hotpot'));
  236. // $mform->setAdvanced('clickreporting');
  237. //-----------------------------------------------------------------------------------------------
  238. $features = new stdClass;
  239. $features->groups = true;
  240. $features->groupings = true;
  241. $features->groupmembersonly = true;
  242. $this->standard_coursemodule_elements($features);
  243. //-----------------------------------------------------------------------------------------------
  244. $this->add_action_buttons();
  245. $js = '<script type="text/javascript" src="'.$CFG->wwwroot.'/mod/hotpot/mod_form.js"></script>';
  246. $mform->addElement('static', 'hotpot_mod_form_js', '', $js);
  247. }
  248. function data_preprocessing(&$defaults){
  249. }
  250. function validation(&$data) {
  251. // http://docs.moodle.org/dev/lib/formslib.php_Validation
  252. global $CFG, $COURSE;
  253. $errors = array();
  254. // location
  255. if (empty($data['location'])) {
  256. // this shouldn't happen
  257. $data['location'] = $COURSE->id;
  258. } else {
  259. if ($data['location']==$COURSE->id) {
  260. // this is normal
  261. } else if ($data['location']==SITEID && has_capability('moodle/course:managefiles', get_context_instance(CONTEXT_SYSTEM))) {
  262. // admin can access site files
  263. } else {
  264. // location is invalid or missing, so set to default
  265. $data['location'] = $COURSE->id;
  266. }
  267. }
  268. // reference
  269. if (isset($data['reference'])) {
  270. $data['reference'] = trim($data['reference']);
  271. }
  272. if (empty($data['reference'])) {
  273. $errors['reference_elements'] = get_string('error_nofilename', 'hotpot');
  274. } else {
  275. if (preg_match('|^https?://|', $data['reference'])) {
  276. // URL
  277. $errors['reference_elements'] = 'Sorry, handling of URLs is not implemented yet';
  278. } else {
  279. // course files
  280. $filepath = $CFG->dataroot.'/'.$data['location'].'/'.$data['reference'];
  281. if (! file_exists($filepath)) {
  282. $errors['reference_elements'] = get_string('error_pathdoesnotexist', 'hotpot', $filepath);
  283. } else if (! $data['quizchain'] && ! is_file($filepath)) {
  284. $errors['reference_elements'] = get_string('error_folderwithoutquizchain', 'hotpot');
  285. }
  286. }
  287. }
  288. // studentfeedbackurl
  289. if (empty($data['studentfeedbackurl']) || $data['studentfeedbackurl']=='http://') {
  290. $data['studentfeedbackurl'] = '';
  291. $error = false;
  292. if ($data['studentfeedback']==HOTPOT_FEEDBACK_WEBPAGE) {
  293. $error = true;
  294. }
  295. if ($data['studentfeedback']==HOTPOT_FEEDBACK_FORMMAIL) {
  296. $error = true;
  297. }
  298. if ($error) {
  299. $errors['studentfeedback_elements']= get_string('error_nofeedbackurlformmail', 'hotpot');
  300. }
  301. }
  302. return $errors;
  303. }
  304. }
  305. ?>