iassign_form.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. <?php
  2. /**
  3. * Form to add and edit interactive activities
  4. *
  5. *
  6. * Release Notes:
  7. * - v 1.5.1 2020/01/21
  8. * + Filter 'addslach(.)' to avoid ' and " close command JavaScript and verify if field 'grade' in JS is 'undefined'
  9. * - v 1.5 2013/09/19
  10. * + Insert function for validation form (mod_iassign_form::validation).
  11. * + Fix bugs in download exercise file.
  12. * - v 1.4 2013/08/21
  13. * + Change title link with message for get file for donwload file.
  14. * - v 1.3 2013/08/15
  15. * + Change view file for allow download file.
  16. * - v 1.2 2013/08/01
  17. * + Fix error in sql query for var $igeom.
  18. * - v 1.1 2013/07/12
  19. * + Fix error messages of 'setType' in debug mode for hidden fields.
  20. *
  21. * @calledby ./locallib.php: function add_edit_iassign(): $mform = new mod_iassign_form(null, null, null, null, array('id'=>'mform1'));
  22. *
  23. * @author Patricia Alves Rodrigues
  24. * @author Leo^nidas de Oliveira Branda~o
  25. * @version v 1.5 2013/09/19
  26. * @package mod_iassign
  27. * @since 2010/09/27
  28. * @copyright iMatica (<a href="http://www.matematica.br">iMath</a>) - Computer Science Dep. of IME-USP (Brazil)
  29. *
  30. * <b>License</b>
  31. * - http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  32. */
  33. // Moodle core defines constant MOODLE_INTERNAL which shall be used to make sure that the script is included and not called directly.
  34. if (!defined('MOODLE_INTERNAL')) {
  35. die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
  36. }
  37. require_once($CFG->libdir . '/formslib.php');
  38. require_once($CFG->dirroot . '/course/moodleform_mod.php');
  39. require_once($CFG->dirroot . '/mod/iassign/lib.php');
  40. /// This class create form based moodleform.
  41. // @see ./lib/formslib.php: __construct($action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true, $ajaxformdata=null)
  42. // @calledby ./mod/iassign/locallib.php : add_edit_iassign() : $mform = new mod_iassign_form(...)
  43. // @see ./mod/iassign/locallib.php : function update_iassign($param) : that will register in {iassign_statement}
  44. class mod_iassign_form extends moodleform {
  45. /// Add elements to form
  46. function definition () {
  47. global $CFG, $COURSE, $USER, $DB, $OUTPUT; // $OUTPUT only used to get '$OUTPUT->help_icon(...)'
  48. $mform = $this->_form;
  49. $instance = $this->_customdata;
  50. //D echo "<br/><br/><br/><br/>iassign_form.php: this->_customdata="; print_r($this->_customdata); echo "<br/>";
  51. // iGeom has special parameter 'script'
  52. $params = array('name' => '%iGeom%', 'parent' => 0);
  53. $igeom = $DB->get_records_sql(
  54. "SELECT s.id, s.name, s.parent FROM {iassign_ilm} s
  55. WHERE s.name LIKE :name AND s.parent = :parent", $params);
  56. // $id = $COURSE->cm;
  57. foreach ($igeom as $item)
  58. $idigeom = $item->id; // get the last id of iGeom
  59. //D echo "iassign_form.php!definition(): COURSE->iassignid=" . $COURSE->iassignid . "<br/>\n"; // NAO def ", id=" . $id .
  60. // Get recently used ilm id: @igor
  61. $params = array('curso' => $COURSE->id);
  62. $result_recent = $DB->get_record_sql(
  63. "SELECT stm.iassign_ilmid FROM {iassign_statement} stm, {iassign} ias
  64. WHERE stm.iassignid = ias.id AND ias.course=:curso ORDER BY stm.id DESC LIMIT 1", $params);
  65. $all_ilm = $DB->get_records('iassign_ilm', array('enable' => 1)); // or use ./lib.php function: $all_ilm = search_iLM(1);
  66. // $COURSE->iassignid is define in 'locallib.php!add_edit_iassign()' with "$COURSE->iassignid = $iassignid;"
  67. $iassigns = $DB->get_records('iassign_statement', array('iassignid' => $COURSE->iassignid));
  68. if ($all_ilm) {
  69. $ids = "";
  70. $names = "";
  71. $evaluates = "";
  72. foreach ($all_ilm as $one_ilm) {
  73. $ids .= "'" . $one_ilm->id . "',";
  74. $names .= "'" . $one_ilm->name . "',";
  75. $evaluates .= "'" . $one_ilm->evaluate . "',";
  76. }
  77. $ids .= "'0'";
  78. $evaluates .= "'0'";
  79. }
  80. $name_iassigns = "";
  81. if ($iassigns) {
  82. foreach ($iassigns as $iassign) {
  83. $name_iassigns .= "'" . addslashes($iassign->name) . "',"; // if the name has ' it implies close JavaScript string => error!
  84. }
  85. }
  86. $name_iassigns .= "''";
  87. $error_name = get_string('error_iassign_name', 'iassign');
  88. // Javascript code to build form
  89. $code_javascript = "
  90. <script type='text/javascript'>
  91. //<![CDATA[
  92. var i;
  93. var ids = new Array(" . $ids . ");
  94. var evaluates = new Array($evaluates);
  95. document.forms['mform1'].filename.disabled=1;
  96. if (document.forms['mform1'].type_iassign.value==1) {
  97. if (typeof document.forms['mform1'].grade === 'undefined') ; // do nothing
  98. else document.forms['mform1'].grade.style.display='none';
  99. document.forms['mform1'].max_experiment.style.display='none';
  100. } else {
  101. if (typeof document.forms['mform1'].grade === 'undefined') ; // do nothing
  102. else document.forms['mform1'].grade.style.display='block';
  103. document.forms['mform1'].max_experiment.style.display='block';
  104. }
  105. for (i=0;i<ids.length;i++) {
  106. if (ids[i]==document.forms['mform1'].iassign_ilmid.value && evaluates[i]==0) {
  107. document.forms['mform1'].automatic_evaluate.style.display='none';
  108. document.forms['mform1'].show_answer.style.display='none';
  109. //document.forms['mform1'].automatic_evaluate.disabled=1;
  110. // document.forms['mform1'].show_answer.disabled=1;
  111. }
  112. }
  113. if (document.forms['mform1'].iassign_ilmid.value==" . $idigeom .") { // iGeom has special parameter 'script'
  114. document.forms['mform1'].special_param1.style.display='block';
  115. document.forms['mform1'].special_param1.disabled=0;
  116. }
  117. else {
  118. document.forms['mform1'].special_param1.style.display='none';
  119. document.forms['mform1'].special_param1.value=0;
  120. document.forms['mform1'].special_param1.disabled=1;
  121. }
  122. function confirm_name (name) {
  123. var i;
  124. var names = new Array(" . $name_iassigns . ");
  125. for (i=0;i<names.length;i++) {
  126. if (names[i]==name)
  127. alert('" . $error_name . "');
  128. }
  129. }
  130. function config_ilm (id) {
  131. //alert('config_ilm('+id+'): idigeom=" . $idigeom . ", ilmid='+document.forms['mform1'].iassign_ilmid.value);
  132. if (id==" . $idigeom . ") {
  133. document.forms['mform1'].special_param1.style.display='block';
  134. document.forms['mform1'].special_param1.disabled=0;
  135. }
  136. else {
  137. document.forms['mform1'].special_param1.style.display='none';
  138. document.forms['mform1'].special_param1.value=0;
  139. document.forms['mform1'].special_param1.disabled=1;
  140. }
  141. var i;
  142. var ids = new Array(" . $ids . ");
  143. var evaluates = new Array($evaluates);
  144. if (document.forms['mform1'].type_iassign.value==1) {
  145. document.forms['mform1'].automatic_evaluate.disabled=1;
  146. document.forms['mform1'].show_answer.disabled=1;
  147. document.forms['mform1'].automatic_evaluate.value=0;
  148. document.forms['mform1'].show_answer.value=0;
  149. }
  150. else { // if (document.forms['mform1'].type_iassign.value==1)
  151. for (i=0;i<ids.length;i++) {
  152. if (ids[i]==id) {
  153. if (document.forms['mform1'].action.value=='edit') {
  154. if (evaluates[i]==0){
  155. document.forms['mform1'].automatic_evaluate.style.display='none';
  156. document.forms['mform1'].show_answer.style.display='none';
  157. document.forms['mform1'].automatic_evaluate.disabled=1;
  158. document.forms['mform1'].show_answer.disabled=1;
  159. document.forms['mform1'].automatic_evaluate.value=0;
  160. document.forms['mform1'].show_answer.value=0;
  161. }
  162. else {
  163. document.forms['mform1'].automatic_evaluate.style.display='block';
  164. document.forms['mform1'].show_answer.style.display='block';
  165. document.forms['mform1'].automatic_evaluate.disabled=0;
  166. document.forms['mform1'].show_answer.disabled=0;
  167. document.forms['mform1'].automatic_evaluate.value=1;
  168. document.forms['mform1'].show_answer.value=1;
  169. }
  170. }
  171. if (document.forms['mform1'].action.value=='add') {
  172. if (evaluates[i]==0) {
  173. document.forms['mform1'].automatic_evaluate.style.display='none';
  174. document.forms['mform1'].show_answer.style.display='none';
  175. document.forms['mform1'].automatic_evaluate.disabled=1;
  176. document.forms['mform1'].show_answer.disabled=1;
  177. document.forms['mform1'].automatic_evaluate.value=0;
  178. document.forms['mform1'].show_answer.value=0;
  179. }
  180. else {
  181. document.forms['mform1'].automatic_evaluate.style.display='block';
  182. document.forms['mform1'].show_answer.style.display='block';
  183. document.forms['mform1'].automatic_evaluate.disabled=0;
  184. document.forms['mform1'].show_answer.disabled=0;
  185. document.forms['mform1'].automatic_evaluate.value=1;
  186. document.forms['mform1'].show_answer.value=1;
  187. }
  188. }
  189. } // if (ids[i]==id)
  190. } // for (i=0;i<ids.length;i++)
  191. } // else if (document.forms['mform1'].type_iassign.value==1)
  192. } // function config_ilm(id)
  193. function disable_answer (resp) {
  194. if (resp==0) {
  195. document.forms['mform1'].show_answer.value=0;
  196. document.forms['mform1'].show_answer.disabled=1;
  197. }
  198. else {
  199. document.forms['mform1'].show_answer.disabled=0;
  200. }
  201. }
  202. function view_ilm_manager () {
  203. document.forms['mform1'].filename.disabled=1;
  204. 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');
  205. }
  206. //]]>
  207. </script>";
  208. //-------------------------------------------------------------------------------
  209. // Adding the "title_type_iassign" fieldset, where all the common settings are showed
  210. // Data is insert through 'locallib.php ! action() -> new_iassign($param) : 3433/6441'
  211. $mform->addElement('header', 'title_type_iassign', get_string('type_iassign', 'iassign'));
  212. $type_iassign = array();
  213. $type_iassign[1] = get_string('example', 'iassign');
  214. $type_iassign[2] = get_string('test', 'iassign');
  215. $type_iassign[3] = get_string('exercise', 'iassign');
  216. $mform->addElement('select', 'type_iassign', get_string('choose_type_activity', 'iassign'), $type_iassign, array('onChange' => 'config_type(this.value);'));
  217. $mform->setDefault('type_iassign', 3); // default type_iassign = 3
  218. $mform->addHelpButton('type_iassign', 'helptypeiassign', 'iassign');
  219. //-------------------------------------------------------------------------------
  220. // Adding the "data_activity" fieldset, where all the common settings are showed
  221. // Information activity
  222. // Author activity:
  223. // Last modified by:
  224. $mform->addElement('header', 'data_activity', get_string('data_activity', 'iassign')); // data_activity ='Information activity'
  225. $mform->addElement('static', 'author', get_string('author_id', 'iassign')); // author_id ='Author activity:'
  226. $mform->addElement('static', 'author_modified', get_string('author_id_modified', 'iassign')); // author_id_modified ='Last modified by:'
  227. // Adding the standard "name" field: the title of this activity
  228. // Title [ ]
  229. $mform->addElement('text', 'name', get_string('iassigntitle', 'iassign'), array('size' => '55', 'onChange' => 'confirm_name(this.value);'));
  230. $mform->setType('name', PARAM_TEXT);
  231. $mform->addRule('name', get_string('required', 'iassign'), 'required');
  232. // Adding the standard "proposition" field
  233. //moodle2: $mform->addElement('htmleditor', 'proposition', get_string('proposition', 'iassign'));
  234. $mform->addElement('editor', 'proposition', get_string('proposition', 'iassign')); //moodle 3
  235. $mform->setType('proposition', PARAM_RAW);
  236. $mform->addRule('proposition', get_string('required', 'iassign'), 'required');
  237. //-----------------------------------------------------------------------------
  238. // Adding the "interactivy_learning_module" fieldset, where all the common settings are showed
  239. $mform->addElement('header', 'interactivy_learning_module', get_string('interactivy_learning_module', 'iassign'));
  240. $mform->setExpanded('interactivy_learning_module');
  241. // Search iLM registered in the database
  242. // Field : 'iassign_ilmid'
  243. // $ilms = search_iLM(1);
  244. $ilms = $all_ilm;
  245. //TODO Trick: was difficult to use 'mform->addGroup(...)', then I made by hand <select name='iassign_ilmid'...>' with 'optgroup' by hand!
  246. //TODO But MoodleForm clear/do not register the 'iassign_ilmid' in 'locallib.php!new_iassign($param)'
  247. //TODO Then (in 'new_iassign(...)') get $_POST['iassign_ilmid'] directly!!
  248. //TODO See: 'locallib.php!add_edit_iassign()', 'locallib.php!function add_edit_iassign()' and 'locallib.php!function new_iassign($param)'
  249. //2019 $applets = array();
  250. //2019 foreach ($ilms as $ilm)
  251. //2019 $applets[$ilm->id] = $ilm->name . ' ' . $ilm->version;
  252. //2019 $mform->addElement('select', 'iassign_ilmid', get_string('choose_iLM', 'iassign'), $applets, array('onChange' => 'config_ilm(this.value);'));
  253. //2019 $mform->addHelpButton('iassign_ilmid', 'helpchoose_ilm', 'iassign');
  254. //D echo "<br/>&nbsp;<br/>&nbsp;<br/>&nbsp;<br/>&nbsp;<br/>iassign_form.php:<br/>";
  255. // Split all iLM in those HTML from Java
  256. $list_html = array(); $list_html_id = array();
  257. $list_applets = array(); $list_applets_id = array();
  258. $num_iLM_html = $num_iLM_java = 0;
  259. foreach ($ilms as $ilm) {
  260. $type4 = substr($ilm->type, 0,4); // ensure the use of the only first 4 character (avoid difference if type is defined as 'HTML5')
  261. if (strcasecmp($type4, "HTML") == 0) { // Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
  262. $list_html[$num_iLM_html] = $ilm->name . ' (' . $ilm->version . ')';
  263. $list_html_id[$num_iLM_html] = $ilm->id;
  264. $num_iLM_html++;
  265. } else {
  266. $list_applets[$num_iLM_java] = $ilm->name . ' (' . $ilm->version . ')';
  267. $list_applets_id[$num_iLM_java] = $ilm->id;
  268. $num_iLM_java++;
  269. } //D echo $ilm->id . " : " . $ilm->type . " <br/>";
  270. }
  271. //D echo "" . get_string('interactivy_learning_module', 'iassign') . ": num_iLM_html=$num_iLM_html, num_iLM_java=$num_iLM_java<br/>";
  272. //D Interactive Learning Modules: num_iLM_html=0, num_iLM_java=9
  273. //TODO Assim o '/lib/formslib.php : get_data()' destroi o campo 'iassign_ilmid'...
  274. $html_group = get_string("group", "iassign") . " HTML";
  275. $java_group = get_string("group", "iassign") . " Java";
  276. $arrayHTML = array();
  277. $arrayJava = array();
  278. for ($ii=0; $ii<$num_iLM_html; $ii++) {
  279. $arrayHTML[$list_html_id[$ii]] = $list_html[$ii];
  280. }
  281. for ($ii=0; $ii<$num_iLM_java; $ii++) {
  282. $arrayJava[$list_applets_id[$ii]] = $list_applets[$ii];
  283. }
  284. $selectElems = array($html_group => $arrayHTML, $java_group => $arrayJava);
  285. $ilm_select = $mform->addElement('selectgroups', 'iassign_ilmid', get_string('choose_iLM', 'iassign'), $selectElems);
  286. $mform->addHelpButton('iassign_ilmid', 'choose_iLM', 'iassign');
  287. // Select the iLM associated to this activity/file
  288. // It is defined in "locallib.php:add_edit_iassign()": $mform = new mod_iassign_form(null, array('id'=>'mform1', 'iassign_ilmid'=>$param->iassign_ilmid));
  289. // if (isset($this->_customdata['iassign_ilmid'])) $iassign_ilmid = $this->_customdata['iassign_ilmid'];
  290. if (isset($mform->_attributes['iassign_ilmid'])) { // if it is first acces, define 'iassign_ilmid'
  291. // ATTENTION, if the iLM is disabled, it is not selected under the JavaScript command bellow
  292. // $mform->_attributes = Array([id] => mform1 [iassign_ilmid] => 1 [autocomplete] => off [action] => http://localhost/dev_saw/mod/iassign/view.php [method] => post [accept-charset] => utf-8 [class] => mform )
  293. $iassign_ilmid = $mform->_attributes['iassign_ilmid'];
  294. // If the page has more then one 'mform' the line bellow could fail, it is better to get "mform" by its id="mform1"
  295. // $code_javascript .= ' <script> document.forms[0].iassign_ilmid.value = ' . $iassign_ilmid . '</script>' . "\n";
  296. $code_javascript .= ' <script> document.forms["mform1"].iassign_ilmid.value = ' . $iassign_ilmid . '</script>' . "\n";
  297. }
  298. else
  299. if ($result_recent && isset($result_recent->iassign_ilmid)) { // try the last iLM used...
  300. // $code_javascript .= ' <script> document.forms[0].iassign_ilmid.value = ' . $result_recent->iassign_ilmid . '</script>' . "\n";
  301. $code_javascript .= ' <script> document.forms["mform1"].iassign_ilmid.value = ' . $result_recent->iassign_ilmid . '</script>' . "\n";
  302. }
  303. //TODO Adjusts to use API of MoodleForm
  304. // addOption($optgroup, $text, $value, $attributes=null)
  305. // $allOptions = array(); $ilmHtml = array(); $ilmJava = array();
  306. // $ilmHtml[] = $mform->createElement('optgroup', 'groupHtml', 'Group HTML');
  307. // for ($ii=0; $ii<$num_iLM_html; $ii++) $ilmHtml[] = $mform->createElement('optgroup', 'groupHtml', 'Group HTML'); //$allOptions[] = $mform->addOption('Group HTML', $list_html[$ii], $list_html_id[$ii]);
  308. // $mform->addGroup($ilmHtml, 'groupHtml', '', array(' '), false);
  309. // $list_html $list_html_id $num_iLM_html
  310. // $list_applets $list_applets_id $num_iLM_java
  311. // echo "<br/>&nbsp;<br/>&nbsp;<br/>&nbsp;<br/>&nbsp;<br/>iassign_form.php: num_iLM_html=$num_iLM_html, num_iLM_java=$num_iLM_java<br/>";exit;
  312. // $allOptions[] = array('-1' => 'Group HTML'); for ($ii=0; $ii<$num_iLM_html; $ii++) $allOptions[] = array(''.$list_html_id[$ii] => $list_html[$ii]);
  313. // $allOptions[] = array('-2' => 'Group Java'); for ($ii=0; $ii<$num_iLM_java; $ii++) $allOptions[] = array(''.$list_applets_id[$ii] => $list_applets[$ii]);
  314. // $allOptions[$ilm->id] = $ilm->name . ' ' . $ilm->version;
  315. // $mform->addElement('select', 'iassign_ilmid', get_string('choose_iLM', 'iassign'), $allOptions, array('onChange' => 'config_ilm(this.value);'));
  316. // for ($ii=0; $ii<$num_iLM_html; $ii++) $allOptions[] = $list_html[$ii];
  317. // for ($jj=0; $jj<$num_iLM_java; $jj++) $allOptions[] = $list_applets[$jj];
  318. // $mform->addElement('select', 'iassign_ilmid', get_string('choose_iLM', 'iassign'), $allOptions, array('onChange' => 'config_ilm(this.value);'));
  319. // $mform->addHelpButton('iassign_ilmid', 'helpchoose_ilm', 'iassign');
  320. // Field 'action'
  321. $fileurl = "";
  322. $filename = "";
  323. if (!is_null($COURSE->iassign_file_id)) { // "$COURSE->iassign_file_id" must be filled in "locallib.php : function add_edit_iassign(): ... = $file_item->get_id()"
  324. $mform->addElement('hidden', 'action', 'viewpluginpage');
  325. $fs = get_file_storage();
  326. $file = $fs->get_file_by_id($COURSE->iassign_file_id);
  327. $fileurl = $CFG->wwwroot . "/pluginfile.php/" . $file->get_contextid() . "/mod_iassign/exercise" . '/' . $file->get_itemid() . $file->get_filepath() . $file->get_filename();
  328. $filename = $file->get_filename();
  329. }
  330. //D echo "iassign_form.php: COURSE->id=" . $COURSE->id . ", COURSE->iassign_file_id=" . $COURSE->iassign_file_id . ", filename=" . $filename . "<br/>\n";// exit;
  331. // Form field: "Choose the file with the iLM activity"
  332. // Here appears the file name (content to the iLM)
  333. $html_div = '<div id="fitem_id_iassign_file_id" class="fitem required fitem_fgroup" style="padding: 35px; padding-left: 0;">' . chr(13);
  334. $html_div .= '<div class="fitemtitle col-md-3" style="padding: 0; float: left;">' . get_string('choose_file', 'iassign'); // 'Choose the file with the iLM activity'
  335. $html_div .= '<span><a><i class="icon fa fa-exclamation-circle text-danger fa-fw " title="' . get_string('requiredelement', 'form') . '" aria-label="' . get_string('requiredelement', 'form') . '" style="float: right; cursor: help; padding-right: 15px;"></i></a></span></div>' . chr(13);
  336. $html_div .= '<div class="felement fselect" id="error_message_file"><div class="file_iassign" id="file_border" style="display: inline;margin-left: 14px;border: 1px solid #cecfd1;padding: 8px;padding-right: 8px;border-radius: 4px;padding-right: 2px;">' . chr(13);
  337. $html_div .= '<i class="icon fa fa-file-text-o fa-fw" id="icon_doc" style="color: #8f8f8f;"></i><span id="iassign_file_link" style="color:#000000;"><a href="' . $fileurl . '" target="_blank" title="' . get_string('download_file', 'iassign') . $filename . '">' . $filename . '</a></span>' . chr(13);
  338. if ($fileurl != "")
  339. $html_div .= '&nbsp;&nbsp;&nbsp;';
  340. $html_div .= '<input onclick="view_ilm_manager()" name="add_ilm" value="' . get_string('add_ilm', 'iassign') . '" type="button" id="id_add_ilm"/></div>';
  341. $html_div .= '</div>';
  342. $html_div .= '</div>';
  343. $mform->addElement('html', $html_div);
  344. $mform->addElement('selectyesno', 'store_all_submissions', get_string('store_all_submissions', 'iassign'));
  345. $mform->setDefault('store_all_submissions', 1);
  346. $mform->addHelpButton('store_all_submissions', 'store_all_submissions_help', 'iassign');
  347. //-----------------------------------------------------------------------------
  348. // Applies only iLM iGeom
  349. $mform->addElement('selectyesno', 'special_param1', get_string('special_param', 'iassign')); //$ynoptions
  350. $mform->setDefault('special_param1', 0);
  351. $mform->addHelpButton('special_param1', 'helpspecial_param', 'iassign');
  352. //-----------------------------------------------------------------------------
  353. //Applies only when the iLM is automatic evaluate.
  354. $mform->addElement('header', 'id_automatic_evaluate', get_string('only_automatic_evaluate', 'iassign'));
  355. // Using automatic evaluation activity? 0 - no / 1 - Yes
  356. $mform->addElement('selectyesno', 'automatic_evaluate', get_string('automatic_evaluate', 'iassign'), array('onChange' => 'disable_answer(this.value);'));
  357. $mform->disabledIf('automatic_evaluate', 'type_iassign', 'eq', 1); //activity does not display if the type example
  358. $mform->setDefault('automatic_evaluate', 0);
  359. // @todo See commentd code
  360. //$mform->addHelpButton('automatic_evaluate', 'helpautomatic_evaluate', 'iassign');
  361. //Show automatic evaluation results to students? 0 - no / 1 - yes
  362. $mform->addElement('selectyesno', 'show_answer', get_string('show_answer', 'iassign'));
  363. $mform->disabledIf('show_answer', 'type_iassign', 'eq', 1); //activity does not display if the type example
  364. // $mform->disabledIf('show_answer', 'automatic_evaluate', 'neq', 0);
  365. $mform->setDefault('show_answer', 0);
  366. //$mform->addHelpButton('show_answer', 'helpshow_answer', 'iassign');
  367. //-----------------------------------------------------------------------------
  368. // Adding the "duration_activity" fieldset, where all the common settings are showed
  369. $mform->addElement('header', 'duration_activity', get_string('duration_activity', 'iassign'));
  370. $mform->addElement('date_time_selector', 'timeavailable', get_string('availabledate', 'iassign'));
  371. $mform->setDefault('timeavailable', time());
  372. $mform->disabledIf('timeavailable', 'type_iassign', 'eq', 1); // activity does not display if the type example
  373. $mform->addElement('date_time_selector', 'timedue', get_string('duedate', 'iassign'));
  374. $mform->setDefault('timedue', time() + 7 * 24 * 3600);
  375. $mform->disabledIf('timedue', 'type_iassign', 'eq', 1); //activity does not display if the type example
  376. //Allow sending late? 0 - no or unlocked / 1 - yes or locked
  377. $mform->addElement('selectyesno', 'preventlate', get_string('preventlate', 'iassign'));
  378. $mform->setDefault('preventlate', 0);
  379. $mform->addHelpButton('preventlate', 'helppreventlate', 'iassign');
  380. $mform->disabledIf('preventlate', 'type_iassign', 'eq', 1); //activity does not display if the type example
  381. $mform->disabledIf('preventlate', 'type_iassign', 'eq', 2); //activity does not display if the type test
  382. //Allow test after delivery? 0 - no or unlocked / 1 - yes or locked
  383. $mform->addElement('selectyesno', 'test', get_string('permission_test', 'iassign'));
  384. $mform->setDefault('test', 0);
  385. $mform->addHelpButton('test', 'helptest', 'iassign');
  386. $mform->disabledIf('test', 'type_iassign', 'eq', 1); //activity does not display if the type example
  387. $mform->disabledIf('test', 'type_iassign', 'eq', 2); //activity does not display if the type test
  388. //--------------
  389. $mform->addElement('header', 'op_val', get_string('op_val', 'iassign'));
  390. $mform->addElement('modgrade', 'grade', get_string('grade', 'iassign') . ':'); // 'grade'='Grade activity'
  391. $mform->setDefault('grade', 100);
  392. $mform->disabledIf('grade', 'type_iassign', 'eq', 1); //activity does not display if the type example
  393. $mform->disabledIf('grade', 'type_iassign', 'eq', 2); //activity does not display if the type test
  394. $max_experiment_options = array(0 => get_string('ilimit', 'iassign'));
  395. for ($i = 1; $i <= 20; $i++)
  396. $max_experiment_options[$i] = $i;
  397. $mform->addElement('select', 'max_experiment', get_string('experiment', 'iassign'), $max_experiment_options);
  398. $mform->setDefault('max_experiment', 0);
  399. $mform->addHelpButton('max_experiment', 'helpexperiment', 'iassign');
  400. $mform->disabledIf('max_experiment', 'type_iassign', 'eq', 1); //activity does not display if the type example
  401. $mform->disabledIf('max_experiment', 'type_iassign', 'eq', 2); //activity does not display if the type test
  402. if ($COURSE->iassign_list) {
  403. //-------------- dependency
  404. $mform->addElement('header', 'headerdependency', get_string('dependency', 'iassign'));
  405. $mform->addHelpButton('headerdependency', 'helpdependency', 'iassign');
  406. foreach ($COURSE->iassign_list as $iassign) {
  407. $tmp = 'iassign_list[' . $iassign->id . ']';
  408. if ($iassign->enable == 1)
  409. $mform->addElement('checkbox', $tmp, $iassign->name);
  410. } //foreach ($COURSE->iassign_list as $iassign)
  411. } //if ($COURSE->iassign_list)
  412. $mform->addElement('hidden', 'dependency');
  413. $mform->setType('dependency', PARAM_RAW);
  414. //-------------- config
  415. $mform->addElement('header', 'config', get_string('general', 'iassign'));
  416. $visibleoptions = array(1 => get_string('show'), 0 => get_string('hide'));
  417. $mform->addElement('select', 'visible', get_string('visible', 'iassign'), $visibleoptions);
  418. $mform->setDefault('visible', 0);
  419. //-------------------------------------------------------------------------------
  420. // Hidden fields
  421. $mform->addElement('hidden', 'action');
  422. $mform->setType('action', PARAM_TEXT);
  423. $mform->addElement('hidden', 'oldname');
  424. $mform->setType('oldname', PARAM_TEXT);
  425. $mform->addElement('hidden', 'id');
  426. $mform->setType('id', PARAM_TEXT);
  427. $mform->addElement('hidden', 'iassign_id');
  428. $mform->setType('iassign_id', PARAM_TEXT);
  429. $mform->addElement('hidden', 'file', '0');
  430. $mform->setType('file', PARAM_INT);
  431. $mform->addElement('hidden', 'filename');
  432. $mform->setType('filename', PARAM_TEXT);
  433. $mform->addElement('hidden', 'fileold');
  434. $mform->setType('fileold', PARAM_TEXT);
  435. $mform->addElement('hidden', 'iassignid');
  436. $mform->setType('iassignid', PARAM_TEXT);
  437. $mform->addElement('hidden', 'author_name');
  438. $mform->setType('author_name', PARAM_TEXT);
  439. $mform->addElement('hidden', 'author_modified_name');
  440. $mform->setType('author_modified_name', PARAM_TEXT);
  441. $mform->addElement('hidden', 'timecreated');
  442. $mform->setType('timecreated', PARAM_TEXT);
  443. $mform->addElement('hidden', 'position');
  444. $mform->setType('position', PARAM_TEXT);
  445. $mform->addElement('html', $code_javascript);
  446. // add standard elements, common to all modules
  447. $this->add_action_buttons();
  448. } // function definition()
  449. function validation ($data, $files) {
  450. global $COURSE, $DB;
  451. $errors = parent::validation($data, $files);
  452. $mform = & $this->_form;
  453. $errors = array();
  454. if ($mform->elementExists('name')) {
  455. $value = trim($data['name']);
  456. if ($value == '') {
  457. $errors['name'] = get_string('required', 'iassign');
  458. }
  459. }
  460. if ($mform->elementExists('proposition')) {
  461. // echo "iassign_form.php : data['proposition'] :<br/>"; print_r($data['proposition']);
  462. // $data['proposition'] = Array ([text] => ... [format] => ) - segundo esta' vazio!
  463. if (is_array($data['proposition'])) {
  464. // foreach ($data['proposition'] as $key => $value) echo "key=" . $key . " - value=" . $value . "<br/>";
  465. // $data['proposition'] = [format] => ) key=text - value=
  466. $aux = $data['proposition']; // Format JSON: {"em":"...","pt":"..."}
  467. if (isset($aux['text']))
  468. $value = trim($aux['text']);
  469. else
  470. $value = trim($aux[0]);
  471. }
  472. else
  473. $value = trim($data['proposition']);
  474. if ($value == '') {
  475. $errors['proposition'] = get_string('required', 'iassign');
  476. }
  477. }
  478. // echo "iassign_form.php : mform :<br/>"; // print_r($mform); exit();
  479. if ($mform->elementExists('file')) {
  480. $value = trim($data['file']);
  481. if ($value == 0) {
  482. $errors['iassign_ilmid_t'] = get_string('required_iassign_file', 'iassign');
  483. print "<script>
  484. window.onload = function (e) {
  485. document.getElementById('error_message_file').innerHTML += '<span style=\"font-size: 80%;color: #d9534f; margin-left: 1em;\">".get_string('required_iassign_file', 'iassign')."</span>';
  486. document.getElementById('file_border').style.borderColor = '#d9534f';
  487. } </script>\n";
  488. }
  489. else {
  490. $fs = get_file_storage(); // Get reference to all files in Moodle data
  491. $file = $fs->get_file_by_id($value);
  492. if ($file) {
  493. // Verify if file extension is correct to iLM
  494. $iassign_ilm = $DB->get_record('iassign_ilm', array('id' => $data['iassign_ilmid']));
  495. print "<script>
  496. window.onload = function (e) {
  497. document.getElementById('iassign_file_link').innerHTML = '".$file->get_filename()."&nbsp;&nbsp;&nbsp;';\n";
  498. if ($iassign_ilm->extension != pathinfo($file->get_filename(), PATHINFO_EXTENSION)) {
  499. $errors['iassign_ilmid_t'] = get_string('incompatible_extension_file', 'iassign');
  500. print " document.getElementById('error_message_file').innerHTML += '<span style=\"font-size: 80%;color: #d9534f; margin-left: 1em;\">".get_string('incompatible_extension_file', 'iassign')."</span>';
  501. document.getElementById('file_border').style.borderColor = '#d9534f';\n";
  502. }
  503. print " } </script>\n";
  504. }
  505. }
  506. }
  507. return $errors;
  508. } // function validation($data, $files)
  509. } // class mod_iassign_form extends moodleform