iassign_form.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. <?php
  2. /**
  3. * Form to add and edit interactive activities
  4. *
  5. *
  6. * Release Notes:
  7. * - v 1.5 2013/09/19
  8. * + Insert function for validation form (mod_iassign_form::validation).
  9. * + Fix bugs in download exercise file.
  10. * - v 1.4 2013/08/21
  11. * + Change title link with message for get file for donwload file.
  12. * - v 1.3 2013/08/15
  13. * + Change view file for allow download file.
  14. * - v 1.2 2013/08/01
  15. * + Fix error in sql query for var $igeom.
  16. * - v 1.1 2013/07/12
  17. * + Fix error messages of 'setType' in debug mode for hidden fields.
  18. *
  19. * @author Patricia Alves Rodrigues
  20. * @author Leônidas O. Brandão
  21. * @author Luciano Oliveira Borges
  22. * @version v 1.5 2013/09/19
  23. * @package mod_iassign
  24. * @since 2010/09/27
  25. * @copyright iMatica (<a href="http://www.matematica.br">iMath</a>) - Computer Science Dep. of IME-USP (Brazil)
  26. *
  27. * <b>License</b>
  28. * - http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  29. */
  30. /**
  31. * Moodle core defines constant MOODLE_INTERNAL which shall be used to make sure that the script is included and not called directly.
  32. */
  33. if(!defined('MOODLE_INTERNAL')) {
  34. die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
  35. }
  36. require_once ($CFG->libdir . '/formslib.php');
  37. require_once ($CFG->dirroot . '/course/moodleform_mod.php');
  38. require_once ($CFG->dirroot . '/mod/iassign/lib.php');
  39. /**
  40. * This class create form based moodleform.
  41. * @see moodleform
  42. */
  43. class mod_iassign_form extends moodleform {
  44. /**
  45. * Add elements to form
  46. */
  47. function definition () {
  48. global $CFG, $COURSE, $USER, $DB;
  49. $mform = & $this->_form;
  50. $instance = $this->_customdata;
  51. $params = array('name' => '%iGeom%', 'parent' => 0);
  52. $igeom = $DB->get_records_sql('SELECT s.id, s.name, s.parent
  53. FROM {iassign_ilm} s
  54. WHERE s.name LIKE :name AND s.parent = :parent', $params);
  55. $id = $COURSE->cm;
  56. foreach ($igeom as $item)
  57. $idigeom = $item->id;
  58. $tmps = $DB->get_records('iassign_ilm', array('enable' => 1));
  59. $iassigns = $DB->get_records('iassign_statement', array('iassignid' => $COURSE->iassignid));
  60. if($tmps) {
  61. $ids = "";
  62. $names = "";
  63. $evaluates = "";
  64. foreach ($tmps as $tmp) {
  65. $ids .="'" . $tmp->id . "',";
  66. $names .="'" . $tmp->name . "',";
  67. $evaluates .="'" . $tmp->evaluate . "',";
  68. }
  69. $ids .="'0'";
  70. $evaluates .="'0'";
  71. }
  72. $name_iassigns = "";
  73. if($iassigns) {
  74. foreach ($iassigns as $iassign) {
  75. $name_iassigns .="'" . $iassign->name . "',";
  76. }
  77. }
  78. $name_iassigns .="''";
  79. $error_name = get_string('error_iassign_name', 'iassign');
  80. /// @todo Código Javascript, verificar alternativa.
  81. $code_javascript = "
  82. <script type='text/javascript'>
  83. //<![CDATA[
  84. var i;
  85. var ids = new Array($ids);
  86. var evaluates = new Array($evaluates);
  87. document.forms['mform1'].filename.disabled=1;
  88. if(document.forms['mform1'].type_iassign.value==1){
  89. document.forms['mform1'].grade.style.display='none';
  90. document.forms['mform1'].max_experiment.style.display='none';
  91. }else{
  92. document.forms['mform1'].grade.style.display='block';
  93. document.forms['mform1'].max_experiment.style.display='block';
  94. }
  95. for (i=0;i<ids.length;i++){
  96. if(ids[i]==document.forms['mform1'].iassign_ilmid.value && evaluates[i]==0){
  97. document.forms['mform1'].automatic_evaluate.style.display='none';
  98. document.forms['mform1'].show_answer.style.display='none';
  99. //document.forms['mform1'].automatic_evaluate.disabled=1;
  100. // document.forms['mform1'].show_answer.disabled=1;
  101. }
  102. }
  103. if (document.forms['mform1'].iassign_ilmid.value==$idigeom){
  104. document.forms['mform1'].special_param1.style.display='block';
  105. document.forms['mform1'].special_param1.disabled=0;
  106. }
  107. else{
  108. document.forms['mform1'].special_param1.style.display='none';
  109. document.forms['mform1'].special_param1.value=0;
  110. document.forms['mform1'].special_param1.disabled=1;
  111. }
  112. function confirm_name(name){
  113. var i;
  114. var names = new Array($name_iassigns);
  115. for (i=0;i<names.length;i++){
  116. if(names[i]==name)
  117. alert('" . $error_name . "');
  118. }
  119. }
  120. function config_ilm(id){
  121. if (id==$idigeom){
  122. document.forms['mform1'].special_param1.style.display='block';
  123. document.forms['mform1'].special_param1.disabled=0;
  124. }
  125. else{
  126. document.forms['mform1'].special_param1.style.display='none';
  127. document.forms['mform1'].special_param1.value=0;
  128. document.forms['mform1'].special_param1.disabled=1;
  129. }
  130. var i;
  131. var ids = new Array($ids);
  132. var evaluates = new Array($evaluates);
  133. if(document.forms['mform1'].type_iassign.value==1){
  134. document.forms['mform1'].automatic_evaluate.disabled=1;
  135. document.forms['mform1'].show_answer.disabled=1;
  136. document.forms['mform1'].automatic_evaluate.value=0;
  137. document.forms['mform1'].show_answer.value=0;
  138. }
  139. else{
  140. for (i=0;i<ids.length;i++){
  141. if(ids[i]==id){
  142. if(document.forms['mform1'].action.value=='edit'){
  143. if (evaluates[i]==0){
  144. document.forms['mform1'].automatic_evaluate.style.display='none';
  145. document.forms['mform1'].show_answer.style.display='none';
  146. document.forms['mform1'].automatic_evaluate.disabled=1;
  147. document.forms['mform1'].show_answer.disabled=1;
  148. document.forms['mform1'].automatic_evaluate.value=0;
  149. document.forms['mform1'].show_answer.value=0;
  150. }
  151. else
  152. {
  153. document.forms['mform1'].automatic_evaluate.style.display='block';
  154. document.forms['mform1'].show_answer.style.display='block';
  155. document.forms['mform1'].automatic_evaluate.disabled=0;
  156. document.forms['mform1'].show_answer.disabled=0;
  157. document.forms['mform1'].automatic_evaluate.value=1;
  158. document.forms['mform1'].show_answer.value=1;
  159. }
  160. }
  161. if(document.forms['mform1'].action.value=='add'){
  162. if (evaluates[i]==0){
  163. document.forms['mform1'].automatic_evaluate.style.display='none';
  164. document.forms['mform1'].show_answer.style.display='none';
  165. document.forms['mform1'].automatic_evaluate.disabled=1;
  166. document.forms['mform1'].show_answer.disabled=1;
  167. document.forms['mform1'].automatic_evaluate.value=0;
  168. document.forms['mform1'].show_answer.value=0;
  169. }
  170. else
  171. {
  172. document.forms['mform1'].automatic_evaluate.style.display='block';
  173. document.forms['mform1'].show_answer.style.display='block';
  174. document.forms['mform1'].automatic_evaluate.disabled=0;
  175. document.forms['mform1'].show_answer.disabled=0;
  176. document.forms['mform1'].automatic_evaluate.value=1;
  177. document.forms['mform1'].show_answer.value=1;
  178. }
  179. }
  180. }
  181. }
  182. }
  183. }
  184. function disable_answer(resp){
  185. if (resp==0){
  186. document.forms['mform1'].show_answer.value=0;
  187. document.forms['mform1'].show_answer.disabled=1;
  188. }
  189. else{
  190. document.forms['mform1'].show_answer.disabled=0;
  191. }
  192. }
  193. function view_ilm_manager(){
  194. document.forms['mform1'].filename.disabled=1;
  195. open_ilm_manager=window.open('$CFG->wwwroot/mod/iassign/ilm_manager.php?id=$COURSE->id&from=iassign&ilmid='+document.forms['mform1'].iassign_ilmid.value,'','width=1000,height=880,menubar=0,location=0,scrollbars,status,fullscreen,resizable');
  196. }
  197. //]]>
  198. </script>";
  199. //-------------------------------------------------------------------------------
  200. /// Adding the "title_type_iassign" fieldset, where all the common settings are showed
  201. $mform->addElement('header', 'title_type_iassign', get_string('type_iassign', 'iassign'));
  202. $type_iassign = array();
  203. $type_iassign[1] = get_string('example', 'iassign');
  204. $type_iassign[2] = get_string('test', 'iassign');
  205. $type_iassign[3] = get_string('exercise', 'iassign');
  206. $mform->addElement('select', 'type_iassign', get_string('choose_type_activity', 'iassign'), $type_iassign, array('onChange' => 'config_type(this.value);'));
  207. $mform->setDefault('type_iassign', 3); // default type_iassign = 3
  208. $mform->addHelpButton('type_iassign', 'helptypeiassign', 'iassign');
  209. //-------------------------------------------------------------------------------
  210. /// Adding the "data_activity" fieldset, where all the common settings are showed
  211. $mform->addElement('header', 'data_activity', get_string('data_activity', 'iassign'));
  212. $mform->addElement('static', 'author', get_string('author_id', 'iassign'));
  213. $mform->addElement('static', 'author_modified', get_string('author_id_modified', 'iassign'));
  214. /// Adding the standard "name" field
  215. $mform->addElement('text', 'name', get_string('iassigntitle', 'iassign'), array('size' => '55', 'onChange' => 'confirm_name(this.value);'));
  216. $mform->setType('name', PARAM_TEXT);
  217. $mform->addRule('name', get_string('required', 'iassign'), 'required');
  218. /// Adding the standard "proposition" field
  219. $mform->addElement('htmleditor', 'proposition', get_string('proposition', 'iassign'));
  220. $mform->setType('proposition', PARAM_RAW);
  221. $mform->addRule('proposition', get_string('required', 'iassign'), 'required');
  222. ///-----------------------------------------------------------------------------
  223. /// Adding the "interactivy_learning_module" fieldset, where all the common settings are showed
  224. $mform->addElement('header', 'interactivy_learning_module', get_string('interactivy_learning_module', 'iassign'));
  225. //$mform->setExpanded('interactivy_learning_module');
  226. // Search imas registered in the database
  227. $ilms = search_iLM(1);
  228. $applets = array();
  229. foreach ($ilms as $ilm)
  230. $applets[$ilm->id] = $ilm->name . ' ' . $ilm->version;
  231. $mform->addElement('select', 'iassign_ilmid', get_string('choose_iLM', 'iassign'), $applets, array('onChange' => 'config_ilm(this.value);'));
  232. $mform->addHelpButton('iassign_ilmid', 'helpchoose_ilm', 'iassign');
  233. $fileurl = "";
  234. $filename = "";
  235. if(!is_null($COURSE->iassign_file_id)) {
  236. $fs = get_file_storage();
  237. $file = $fs->get_file_by_id($COURSE->iassign_file_id);
  238. $fileurl = "{$CFG->wwwroot}/pluginfile.php/{$file->get_contextid()}/mod_iassign/exercise" . '/' . $file->get_itemid() . $file->get_filepath() . $file->get_filename();
  239. $filename = $file->get_filename();
  240. }
  241. echo "123";
  242. $html_div = '<div id="fitem_id_iassign_file_id" class="fitem required fitem_fgroup">';
  243. $html_div .= '<div class="fitemtitle"><label for="id_iassign_file_id">' . get_string('choose_file', 'iassign');
  244. $html_div .= '<img class="req" title="' . get_string('requiredelement', 'form') . '" alt="' . get_string('requiredelement', 'form') . '" src="' . $CFG->wwwroot . '/theme/image.php/standard/core/1379534589/req"></label></div>';
  245. $html_div .= '<div class="felement fselect">';
  246. $html_div .= '<span id="iassign_file_link" style="color:#000000;"><a href="' . $fileurl . '" target="_blank" title="' . get_string('download_file', 'iassign') . $filename . '">' . $filename . '</a></span>';
  247. if($fileurl != "")
  248. $html_div .= '&nbsp;&nbsp;&nbsp;';
  249. $html_div .= '<input onclick="view_ilm_manager()" name="add_ilm" value="' . get_string('add_ilm', 'iassign') . '" type="button" id="id_add_ilm"/>';
  250. $html_div .= '</div>';
  251. $html_div .= '</div>';
  252. $mform->addElement('html', $html_div);
  253. //Applies only iLM iGeom
  254. $mform->addElement('selectyesno', 'special_param1', get_string('special_param', 'iassign')); //$ynoptions
  255. $mform->setDefault('special_param1', 0);
  256. $mform->addHelpButton('special_param1', 'helpspecial_param', 'iassign');
  257. ///-----------------------------------------------------------------------------
  258. //Applies only when the iLM is automatic evaluate.
  259. $mform->addElement('header', 'id_automatic_evaluate', get_string('only_automatic_evaluate', 'iassign'));
  260. // Using automatic evaluation activity? 0 - no / 1 – yes
  261. $mform->addElement('selectyesno', 'automatic_evaluate', get_string('automatic_evaluate', 'iassign'), array('onChange' => 'disable_answer(this.value);'));
  262. $mform->disabledIf('automatic_evaluate', 'type_iassign', 'eq', 1); //activity does not display if the type example
  263. $mform->setDefault('automatic_evaluate', 0);
  264. /// @todo Ver código comentado
  265. //$mform->addHelpButton('automatic_evaluate', 'helpautomatic_evaluate', 'iassign');
  266. //Show automatic evaluation results to students? 0 - no / 1 - yes
  267. $mform->addElement('selectyesno', 'show_answer', get_string('show_answer', 'iassign'));
  268. $mform->disabledIf('show_answer', 'type_iassign', 'eq', 1); //activity does not display if the type example
  269. // $mform->disabledIf('show_answer', 'automatic_evaluate', 'neq', 0);
  270. $mform->setDefault('show_answer', 0);
  271. //$mform->addHelpButton('show_answer', 'helpshow_answer', 'iassign');
  272. ///-----------------------------------------------------------------------------
  273. /// Adding the "duration_activity" fieldset, where all the common settings are showed
  274. $mform->addElement('header', 'duration_activity', get_string('duration_activity', 'iassign'));
  275. $mform->addElement('date_time_selector', 'timeavailable', get_string('availabledate', 'iassign'));
  276. $mform->setDefault('timeavailable', time());
  277. $mform->disabledIf('timeavailable', 'type_iassign', 'eq', 1); ///activity does not display if the type example
  278. $mform->addElement('date_time_selector', 'timedue', get_string('duedate', 'iassign'));
  279. $mform->setDefault('timedue', time() + 7 * 24 * 3600);
  280. $mform->disabledIf('timedue', 'type_iassign', 'eq', 1); //activity does not display if the type example
  281. //
  282. //Allow sending late? 0 - no or unlocked / 1 - yes or locked
  283. $mform->addElement('selectyesno', 'preventlate', get_string('preventlate', 'iassign'));
  284. $mform->setDefault('preventlate', 0);
  285. $mform->addHelpButton('preventlate', 'helppreventlate', 'iassign');
  286. $mform->disabledIf('preventlate', 'type_iassign', 'eq', 1); //activity does not display if the type example
  287. $mform->disabledIf('preventlate', 'type_iassign', 'eq', 2); //activity does not display if the type test
  288. //Allow test after delivery? 0 - no or unlocked / 1 - yes or locked
  289. $mform->addElement('selectyesno', 'test', get_string('permission_test', 'iassign'));
  290. $mform->setDefault('test', 0);
  291. $mform->addHelpButton('test', 'helptest', 'iassign');
  292. $mform->disabledIf('test', 'type_iassign', 'eq', 1); //activity does not display if the type example
  293. $mform->disabledIf('test', 'type_iassign', 'eq', 2); //activity does not display if the type test
  294. ///--------------
  295. $mform->addElement('header', 'op_val', get_string('op_val', 'iassign'));
  296. $mform->addElement('modgrade', 'grade', get_string('grade', 'iassign'));
  297. $mform->setDefault('grade', 100);
  298. $mform->disabledIf('grade', 'type_iassign', 'eq', 1); //activity does not display if the type example
  299. $mform->disabledIf('grade', 'type_iassign', 'eq', 2); //activity does not display if the type test
  300. $max_experiment_options = array(0 => get_string('ilimit', 'iassign'));
  301. for ($i = 1; $i <= 20; $i++)
  302. $max_experiment_options[$i] = $i;
  303. $mform->addElement('select', 'max_experiment', get_string('experiment', 'iassign'), $max_experiment_options);
  304. $mform->setDefault('max_experiment', 0);
  305. $mform->addHelpButton('max_experiment', 'helpexperiment', 'iassign');
  306. $mform->disabledIf('max_experiment', 'type_iassign', 'eq', 1); //activity does not display if the type example
  307. $mform->disabledIf('max_experiment', 'type_iassign', 'eq', 2); //activity does not display if the type test
  308. if($COURSE->iassign_list) {
  309. ///-------------- dependency
  310. $mform->addElement('header', 'headerdependency', get_string('dependency', 'iassign'));
  311. $mform->addHelpButton('headerdependency', 'helpdependency', 'iassign');
  312. foreach ($COURSE->iassign_list as $iassign) {
  313. $tmp = 'iassign_list[' . $iassign->id . ']';
  314. if($iassign->enable == 1)
  315. $mform->addElement('checkbox', $tmp, $iassign->name);
  316. } //foreach ($COURSE->iassign_list as $iassign)
  317. } //if ($COURSE->iassign_list)
  318. $mform->addElement('hidden', 'dependency');
  319. $mform->setType('dependency', PARAM_RAW);
  320. ///-------------- config
  321. $mform->addElement('header', 'config', get_string('general', 'iassign'));
  322. $visibleoptions = array(1 => get_string('show'), 0 => get_string('hide'));
  323. $mform->addElement('select', 'visible', get_string('visible', 'iassign'), $visibleoptions);
  324. $mform->setDefault('visible', 0);
  325. //-------------------------------------------------------------------------------
  326. // Hidden fields
  327. $mform->addElement('hidden', 'action');
  328. $mform->setType('action', PARAM_TEXT);
  329. $mform->addElement('hidden', 'oldname');
  330. $mform->setType('oldname', PARAM_TEXT);
  331. $mform->addElement('hidden', 'id');
  332. $mform->setType('id', PARAM_TEXT);
  333. $mform->addElement('hidden', 'iassign_id');
  334. $mform->setType('iassign_id', PARAM_TEXT);
  335. $mform->addElement('hidden', 'file', '0');
  336. $mform->setType('file', PARAM_INT);
  337. $mform->addElement('hidden', 'filename');
  338. $mform->setType('filename', PARAM_TEXT);
  339. $mform->addElement('hidden', 'fileold');
  340. $mform->setType('fileold', PARAM_TEXT);
  341. $mform->addElement('hidden', 'iassignid');
  342. $mform->setType('iassignid', PARAM_TEXT);
  343. $mform->addElement('hidden', 'author_name');
  344. $mform->setType('author_name', PARAM_TEXT);
  345. $mform->addElement('hidden', 'author_modified_name');
  346. $mform->setType('author_modified_name', PARAM_TEXT);
  347. $mform->addElement('hidden', 'timecreated');
  348. $mform->setType('timecreated', PARAM_TEXT);
  349. $mform->addElement('hidden', 'position');
  350. $mform->setType('position', PARAM_TEXT);
  351. $mform->addElement('html', $code_javascript);
  352. // add standard elements, common to all modules
  353. $this->add_action_buttons();
  354. }
  355. function validation ($data, $files) {
  356. global $COURSE, $DB;
  357. $errors = parent::validation($data, $files);
  358. $mform = & $this->_form;
  359. $errors = array();
  360. if($mform->elementExists('name')) {
  361. $value = trim($data['name']);
  362. if($value == '') {
  363. $errors['name'] = get_string('required', 'iassign');
  364. }
  365. }
  366. if($mform->elementExists('proposition')) {
  367. $value = trim($data['proposition']);
  368. if($value == '') {
  369. $errors['proposition'] = get_string('required', 'iassign');
  370. }
  371. }
  372. if($mform->elementExists('file')) {
  373. $value = trim($data['file']);
  374. if($value == 0) {
  375. $errors['iassign_ilmid'] = get_string('required_iassign_file', 'iassign');
  376. }
  377. }
  378. return $errors;
  379. }
  380. }