settings_activities.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. /**
  3. *
  4. * This is prepared to examin all the activities associates with a particular iLM.
  5. * It is invoked by Moodle through the Administrative interface to edit iLM (./admin/search.php),
  6. * chosing the "see activities" options.
  7. *
  8. * The association {iassign_statement} with {files} must be:
  9. * - {files}.itemid = {iassign_statement}.id (despite the Moodle usual association {files}.itemid = {iassign}.id
  10. * - {iassign_statement}.filesid = {files}.id (reduntant option to easy verification)
  11. * Remember: {course_modules}.instance = {iassign}.id and {course_modules}.id = {context}.instanceid
  12. *
  13. * settings_activities.php
  14. *
  15. * Release Notes:
  16. * - v 0.1.0 2022/02/22
  17. * + First version
  18. *
  19. * @author Leo^nidas de Oliveira Branda~o
  20. * @version v 0.1.0 2022/02/22
  21. * @package mod_iassign_settings
  22. * @since 2022/02/22
  23. * @copyright iMatica (<a href="http://www.matematica.br">iMath</a>) - Computer Science Dep. of IME-USP (Brazil)
  24. *
  25. * @calledby ./mod/iassign/settings.php: when choosed option "see all activities" in iAssign setting to an specific iLM (ilm_id)
  26. *
  27. * <b>License</b>
  28. * - http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  29. */
  30. // See: locallib.php ! static function update_iassign_statement_files (...): 2289/9174
  31. // Moodle core defines constant MOODLE_INTERNAL which shall be used to make sure that the script is included and not called directly.
  32. // Must be directly called... remove: defined('MOODLE_INTERNAL') || die();
  33. global $OUTPUT, $CFG, $DB; //, $PAGE;
  34. require_once('../../config.php'); //NAO
  35. require_once($CFG->dirroot . '/mod/iassign/lib.php');
  36. require_once($CFG->dirroot . '/mod/iassign/locallib.php');
  37. // require login as Admin
  38. if (!is_siteadmin()) { // ./lib/accesslib.php
  39. // require_login(0, true);
  40. print "Access denied!<br/>";
  41. exit();
  42. }
  43. //$PAGE->set_context(context_system::instance());
  44. //$PAGE->set_url('/admin/settings.php', array('section' => $section));
  45. //$PAGE->set_pagetype('admin-setting-' . $section);
  46. //$PAGE->set_pagelayout('admin');
  47. //$PAGE->navigation->clear_cache();
  48. //navigation_node::require_admin_tree();
  49. print $OUTPUT->header();
  50. print $OUTPUT->box(get_string('see_ilm_activities', 'iassign'));
  51. // print $PAGE;
  52. //D echo "<br/><br/><br/>2<br/>";
  53. //D echo "action=" . $action . ", ilm_id=" . $ilm_id . ", ilm_param_id=" . $ilm_param_id . ", status=" . $status . "<br/>\n";
  54. //D echo "CFG->dirroot=" . $CFG->dirroot . "<br/>\n";
  55. // Used to recover only {iassign_statement} with {iassign_statement}.iassignid == {modules}.id == $ilm_id, such that {modules}.name=='iassign'
  56. // that also means {iassign}.id == $ilm_id
  57. $ilm_id = optional_param('ilm_id', 0, PARAM_INT);
  58. $action = optional_param('action', 'view', PARAM_TEXT);
  59. $ilm_param_id = optional_param('ilm_param_id', 0, PARAM_INT);
  60. $ilm_id_parent = optional_param('ilm_id_parent', 0, PARAM_INT);
  61. $status = optional_param('status', 0, PARAM_INT);
  62. $courseid = optional_param('courseid', 0, PARAM_INT);
  63. $contextid = optional_param('contextid', 0, PARAM_INT);
  64. //D echo "action=" . $action . ", ilm_id=" . $ilm_id . ", ilm_param_id=" . $ilm_param_id . ", status=" . $status . "<br/>\n";
  65. //D echo "courseid=" . $courseid . ", contextid=" . $contextid . "<br/>\n";
  66. //D if (!$courseid) $courseid = 484; //DEBUG: se nao definido, usar como teste o curso MAC118 2021
  67. if (!$action && !$ilm_id) {
  68. return; // nothing to be done (it is the Admin entering at the initial administrative section)
  69. }
  70. // Get the iLM
  71. $list_all_iassign_ilm = $DB->get_records('iassign_ilm', array('id' => $ilm_id));
  72. //$list_all_iassign_ilm = $DB->get_records('iassign_ilm', array('parent' => 0, 'enable' => 1));
  73. //$msgD .= " -- #list_all_iassign_ilm = " . count($list_all_iassign_ilm) . "\n"; //D
  74. //D echo "iLM.id=" . $ilm_id . ": total = " . sizeof($list_all_iassign_ilm) . "<br/>\n";
  75. //D foreach ($list_all_iassign_ilm as $ilm) {
  76. //D // iLM.id=7 => iVProg 1
  77. //D // iLM.id=7 => 1
  78. //D echo " - iLM: id=" . $ilm->id . "; name=" . $ilm->name . "; extension=" . $ilm->extension . ", version=" . $ilm->version . "<br/>\n";
  79. //D //$list_all_iassign_ilm->name . ", " . $list_all_iassign_ilm->extension . "<br/>\n";
  80. //D //print_r($list_all_iassign_ilm);
  81. //D }
  82. //D echo "--------------------<br/><br/>\n";
  83. $module_iassign = $DB->get_record('modules', array('name' => 'iassign')); // get 'modules.id' of iAssign
  84. if (!$module_iassign) exit(1);
  85. // echo "module_iassign: "; print_r($module_iassign); echo "<br/>";
  86. // Get all course/context with iAssign
  87. //D $str_query = "SELECT {course}.id, {context}.id AS contextid, {course}.shortname FROM {course}, {context}, {course}_modules WHERE " .
  88. //D " {course}.id={course}_modules.course AND {course}_modules.id={context}.instanceid AND {course}_modules.module=" . $module_iassign->id . " ORDER BY {course}.id, {context}.id";
  89. //DD echo $str_query;
  90. //D $context_course = $DB->get_records_sql($str_query);
  91. //D $countC = 0; foreach ($context_course as $item) { $countC++; echo " - " . $item->id . ", " . $item->contextid . ", " . $item->shortname . "<br/>"; } echo "Total = " . $countC . "<br/>";
  92. //DD 173 cursos/contextos
  93. //DD - 484, 54184, 2021_mac118_ivprog
  94. // = $DB->set_field('course_modules', 'instance', $newitemid, array('id' => $this->task->get_moduleid()));
  95. //echo "this->get_instance()->name = " . $this->get_instance()->name . "<br>";
  96. //D $context = context_module::instance($USER->cm); //2022/02: get 'context.id' = 'files.contextid' ($USER->cm is the 'course_modules.id')
  97. //D echo "course.id=" . $USER->cm->course . ", module=" . $USER->cm->module . "<br/>";
  98. //D print_r($USER->cm); echo "<br/>";
  99. //2022/02 update_iassign_statement_files(...)
  100. //iassign::test_iassign_statement_files(); //DEBUG: test association 'iassign_statement' with 'files'
  101. require('files_functions.php'); // load 'function see_files_context($contextid, $DB)'
  102. // see_all_files_context($contextid, $DB); // inside 'files_functions.php'
  103. // see_all_files_context(484, $DB); // inside 'files_functions.php'
  104. // From 'settings.php' courseid came here undefined
  105. // The $ilm_id has the iLM selected: get only {iassign_statement}.iassignid == {modules}.id == $ilm_id, such that {modules}.name=='iassign'
  106. [$list_all_instances_of_iassign, $all_context, $list_of_ia_files, $list_of_contextid_by_courses, $list_of_courses] = get_files($courseid, $ilm_id, $DB); // inside 'files_functions.php'
  107. //D echo "#list_all_instances_of_iassign=" . sizeof($list_all_instances_of_iassign) . ", #all_context=" . sizeof($all_context) . ", #list_of_ia_files=" . sizeof($list_of_ia_files) . "<br/>";
  108. /*
  109. $ilm = $DB->get_record('iassign_ilm', array('id' => $ilm_id));
  110. $upgrade_file = $ilm->url . 'ilm-upgrade_' . strtolower($ilm->name) . '.xml';
  111. $upgrade_xml = @simplexml_load_file($upgrade_file, null, LIBXML_NOCDATA);
  112. $lang = current_language();
  113. if (array_key_exists($lang, $upgrade_xml->description)) $description = $upgrade_xml->description->$lang;
  114. else $description = $upgrade_xml->description->en;
  115. */
  116. $str = "";
  117. $str .= $OUTPUT->box_start();
  118. // $str .= '<center>' . $OUTPUT->error_text(get_string('error_check_iassign_filter', 'iassign')) . '</center>';
  119. // $str .= "<center>"; // . $OUTPUT->heading(get_string('settings_see_activities', 'iassign'), 3, 'helptitle', 'uniqueid');
  120. print "<style>
  121. .error { background-color: #f4d6d2; color: #ca3120; }
  122. .course { background-color: #a1d2f3; }
  123. </style>\n";
  124. // All course with activities of this iLM ($ilm_id):
  125. $size_contexts = sizeof($all_context);
  126. print "Size of contexts: " . $size_contexts . "<br/>\n";
  127. //for ($ii=0; $ii<$size_contexts; $ii++)
  128. // if ($all_context[$ii]->contextid) // if not empty
  129. // print "Course: <tt title='" . $all_context[$ii]->contextid . "'>id=" . $all_context[$ii]->id . "</tt>; <strong title='fullname'>" . $all_context[$ii]->fullname . "</strong><br/>\n";
  130. $size_of_courses = sizeof($list_of_courses); // $list_of_courses[i] = array({course}.id, {course}.shortname, {course}.fullname)
  131. print "Size of courses: " . $size_of_courses . "<br/>\n";
  132. for ($ii=0; $ii<$size_of_courses; $ii++) {
  133. $course = $list_of_courses[$ii]; // the $ii-th course: {course}.id, {course}.shortname, {course}.fullname
  134. if (isset($course)) {
  135. $courseid = $course[0]; // {course}.id;
  136. $list_of_context = $list_of_contextid_by_courses[$courseid]; // $list_of_contextid_by_courses[] is indexed by {course}.id
  137. $total_of_context = sizeof($list_of_context);
  138. print "Course.<tt title='" . $course[2] . "'>id=" . $courseid . "</tt>: <strong title='shortname'>" . $course[1] . "</strong>: #context=" . $total_of_context . " : " . $course[2] . "<br/> &nbsp; \n";
  139. for ($jj=0; $jj<$total_of_context; $jj++)
  140. if (isset($list_of_context[$jj]))
  141. print $list_of_context[$jj] . ", "; // if not empty
  142. print "<br/>\n";
  143. }
  144. } // for $list_of_contextid_by_courses, $list_of_courses
  145. print "<br/>";
  146. $courseid0 = -1; // last {course}.id
  147. $str .= "<table id='outlinetable' class='generaltable boxaligncenter' width='100%'>\n";
  148. $str .= "<tr class='course'><td class='course' title='course.id'>c.id</td><td class='course' colspan='4' title='course.fullname'>{course}.fullname</td></tr>\n";
  149. $str .= "<tr><td title='context.id'>cxtid</td><td title='iAssign statement id'>{ia}.id</td><td title='ID:={course_modules}.id to access mod/iassign/view.php?id=ID'>{course_modules}.id</td><td># files</td><td>fullname</td></tr>\n";
  150. $sizeList = sizeof($list_all_instances_of_iassign);
  151. for ($ii=0; $ii<=$sizeList; $ii++) {
  152. $context_statement = $all_context[$ii]; //REVER!!!!
  153. $list_of_iassign = $list_all_instances_of_iassign[$ii]; // title='iassign_statement.id'
  154. $list_of_files = $list_of_ia_files[$ii]; // { ia_id, ia_file, ia_filesid, filesid=files.id, filename=files.filename, itemid=files.itemid, contextid=files.contextid }
  155. if (!$list_of_iassign || !$list_of_iassign->courseid) continue; // jump this item, it is empty!
  156. $courseid = $list_of_iassign->courseid; // last {course}.id
  157. if ($courseid!=$courseid0) { // new course
  158. $str .= "<tr class='course'><td class='course' title='course.id'>" . $courseid . "</td><td class='course' colspan='4' title='course.fullname'>" . $list_of_iassign->fullname . "</td></tr>\n";
  159. $courseid0 = $courseid; // update last {course}.id
  160. }
  161. $sizeofFiles = sizeof($list_of_files);
  162. if ($sizeofFiles==0) continue;
  163. $str .= "<tr><td title='context.id'>" . $context_statement->contextid . "</td><td title='iassign.id=course_modules.instance'>" . $list_of_iassign->id. "</td>";
  164. $str .= "<td title='ID:={course_modules}.id to access mod/iassign/view.php?id=ID'>" . $context_statement->course_module_id . "</td>\n";
  165. $str .= "<td title='Number of activities in this block'>" . $sizeofFiles . "</td><td>" . $list_of_iassign->name . "</td></tr>\n";
  166. $str .= "<tr><td></td><td colspan='4'><table>\n";
  167. // Line table : {iassign_statement}.id ; {iassign_statement}.name ; {iassign_statement}.file ; {iassign_statement}.filesid ; {files}.id ; {files}.itemid ; {files}.filename
  168. $str .= "<tr><td title='{iassign_statement}.id'>ia_id</td><td title='{iassign_statement}.name'>ia_name</td><td title='{iassign_statement}.file'>ia_file</td>";
  169. $str .= "<td title='{iassign_statement}.filesid'>ia_filesid</td>\n";
  170. $str .= " <td title='{files}.id'>filesid</td><td title='{files}.itemid'>filesitemid</td><td title='{files}.filename'>filename</td></tr>\n";
  171. for ($jj=0; $jj<$sizeofFiles; $jj++) {
  172. $item = $list_of_files[$jj];
  173. if ($item->ia_id) {
  174. $msgUpdateItem = ""; $msgUpdateIA = ""; $msgFilesNotFound = "";
  175. if ($item->itemid!=$item->ia_id)
  176. $msgUpdateItem = " title='must update {files}.itemid <- {iassign_statement}.id=" . $item->ia_id . "' class='error'"; // td {files}.itemid <- {iassign_statement}.id
  177. if ($item->filename!="." && $item->ia_filesid!=$item->filesid) // item->ia_filesid={iassign_statement}.filesid != item->filesid={files}.id
  178. $msgUpdateIA = " title='must update {iassign_statement}.filesid <- {files}.id=" . $item->id . "' class='error'"; // td {iassign_statement}.filesid <- {files}.id
  179. if ($item->filesid == NULL)
  180. $msgFilesNotFound = " title='lost file!' class='error'";
  181. $str .= "<tr><td title='{iassign_statement}.id - item " . $jj . "'>" . $item->ia_id . "</td>\n"; // {iassign_statement}.id
  182. $str .= " <td" . $msgFilesNotFound . ">" . $item->ia_name . "</td>\n"; // {iassign_statement}.name
  183. $str .= " <td" . $msgFilesNotFound . ">" . $item->ia_file . "</td>\n"; // {iassign_statement}.file
  184. $str .= " <td" . $msgUpdateIA . ">" . $item->ia_filesid . "</td>\n"; // {iassign_statement}.filesid
  185. if ($item->filesid != NULL) $str .= " <td title='files.id'>" . $item->filesid . "</td>\n"; // {files}.id
  186. else $str .= " <td title='files.id' class='error'>-</td>\n"; // idem
  187. $str .= " <td" . $msgUpdateItem . ">" . $item->itemid . "</td>\n"; // {files}.itemid
  188. if ($item->filesid != NULL) $str .= " <td>" . $item->filename . "</td></tr>\n"; // {files}.filename
  189. else $str .= " <td class='error'>(emprty!)</td></tr>\n"; // idem
  190. }
  191. else echo "Erro: jj=" . $jj . " vazio {" . $item->ia_id . "," . $item->itemid . "}<br>";
  192. } // for ($jj=0; $jj<$sizeofFiles; $jj++)
  193. $str .= "</table></td></tr>\n";
  194. //D print_r($context_statement); echo "<br/>";
  195. }
  196. $str .= "</table>\n";
  197. //echo $str;
  198. // $optionsno = new moodle_url('/admin/settings.php', array('section' => 'modsettingiassign', 'action' => 'view'));
  199. // $optionsyes = new moodle_url('/mod/iassign/settings_ilm.php', array('action' => 'upgrade', 'ilm_id' => $ilm_id));
  200. //$str .= "<center>" . $OUTPUT->heading(get_string('confirm_upgrade_ilm', 'iassign'), 3, 'helptitle', 'uniqueid');
  201. //$url_yes = new moodle_url('/mod/iassign/settings_ilm.php', array('action' => 'upgrade', 'ilm_id' => $ilm_id));
  202. //$link_yes = $OUTPUT->action_link($url_yes, "<font color='green'><b>" . get_string('yes', 'iassign') . "</b></font>");
  203. //$url_no = new moodle_url('/admin/settings.php', array('section' => 'modsettingiassign', 'action' => 'view'));
  204. //$link_no = $OUTPUT->action_link($url_no, "<b>" . get_string('no', 'iassign') . "</b>");
  205. //$str .= $link_no . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $link_yes . "</center>";
  206. //$str .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . "</center>\n";
  207. $str .= $OUTPUT->box_end();
  208. print $str;
  209. print $OUTPUT->footer();
  210. //$settings_activities->add(new admin_setting_heading('iassign', get_string('upgrade_ilm_title', 'iassign'), $str));