소스 검색

Update 'settings_ilm.php'

328 to 376 lines.
"!isset($mform) ||", "isset($mform) && " e "else if (isset($mform))"
leo 1 주 전
부모
커밋
866e6839d8
1개의 변경된 파일103개의 추가작업 그리고 55개의 파일을 삭제
  1. 103 55
      settings_ilm.php

+ 103 - 55
settings_ilm.php

@@ -1,9 +1,12 @@
 <?php
 
 /**
- * Settings iLM manager. Reaches this code from administrative Moodle area, in setting 'plugins' of iAssign.
- * 1. action==new_version: allow enter a new version of a selected iLM
- * 2. action==new_version
+ * Settings iLM manager.
+ * Interface:
+ * 1. Reaches this code from administrative Moodle area
+ *    'Site administration|Plugins|Activity modules|iAssign:Add iLM'; or
+ *    'Site administration|Plugins|Activity modules|iAssign:Import iLM'; or
+ *    'Site administration|Plugins|Activity modules|iAssign: "click" on the "gear" of any iLM then in "Add new iLM version" or "edit"
  * 
  * Release Notes:
  * - v 2.0.1 2022/09/15
@@ -26,7 +29,8 @@
  * @since 2013/01/29
  * @see   locallib.php : class ilm_settings
  * @see   settings_form.php
- * @copyright iMatica (<a href="http://www.matematica.br">iMath</a>) - Computer Science Dep. of IME-USP (Brazil)
+ * @copyleft iMatica (<a href="http://www.matematica.br">iMath</a>) - Computer Science Dep. of IME-USP (Brazil)
+ * @copyleft LInE (<a href="http://www.usp.br/line">LInE</a>) - IME-USP (Brazil)
  * 
  * <b>License</b> 
  *  - http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -38,13 +42,12 @@ require_once("../../config.php");
 require_once($CFG->dirroot . '/mod/iassign/locallib.php');
 require_once($CFG->dirroot . '/mod/iassign/settings_form.php');
 
-
 require_login();
 if (isguestuser()) {
   die();
   }
 
-//Parameters GET e POST (parâmetros GET e POST)
+// Parameters GET e POST
 $ilm_id = optional_param('ilm_id', 0, PARAM_INT);
 $ilmid = optional_param('ilmid', 0, PARAM_INT);
 $ilm_parent = optional_param('ilm_parent', 0, PARAM_INT);
@@ -71,13 +74,8 @@ if ($action == 'edit') { // Edit data of an iLM => processed in 'settings_form.p
 
   // On the first call $ilm_id is defined: the calling is necessary to fill in data to the form
   // on the second call $ilm_id empty and could be avoided
-  //? if ($ilm_id) $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action); // locallib.php: class ilm_settings: add_edit_copy_ilm($ilm_id, $action)
-  //? else $param = new stdClass();
   // without 'ilm_settings::add_edit_copy_ilm(.)' the process are not successfully finished
 
-  //D echo "settings_ilm.php: edit: $title"; // echo "param->description="; print_r($param->description); 
-  //D $description = $param->description_lang; // used to present the iLM description in 'settings_form.php'
-  //D $description = $param->description; //TODO in 'settings_form.php' it does NOT present the description!!!
   $description = $param->description_lang; // used to present the iLM description in 'settings_form.php' - {"en":"...","pt":"..."}
 
   $mform = new mod_ilm_form(); // in 'settings_form.php': class mod_ilm_form
@@ -109,28 +107,47 @@ if ($action == 'new_version') { // Administration > plugins > iAssign : after se
 
   $title = get_string('new_version_ilm', 'iassign') . $OUTPUT->help_icon('add_ilm_iassign', 'iassign');
   $PAGE->set_title($title);
-  $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action); // locallib.php: class iassign
-    
-  $mform = new mod_ilm_form();
-  $mform->set_data($param);
 
-  if ($mform->is_cancelled()) {
+  //echo "settings_ilm.php: form = "; print_r($form); echo "<br/>";
+
+  if (!isset($mform) || !$mform) {
+    // Get values from the parent iLM in {iassign_ilm}, put them in array $param
+    $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action); // locallib.php: class iassign
+  
+    // Field "description_lang" is used to present the iLM description in 'settings_form.php' - {"en":"...","pt":"..."}
+    // {iassign_ilm}.description is JSON like: {"en":"interactive...", "pt_br":"interativo..."}
+    // $lang = current_language(); $sizel = strlen($lang); if ($sizel>2) $lang = $lang[0] . $lang[1];
+    // locallib.php : class iassign_language : static function get_description_lang($lang, $descriptions)
+    $description = iassign_language::get_description_lang(current_language(), $param->description_lang);
+    if (isset($description)) // necessary to present a simple text inside form "text" field
+      $param->description = $description;
+
+    //D echo "settings_ilm.php: " . $msg . ", description=" . $description . "<br/>lang=" . $lang . "<br/>";
+    //D echo "param="; print_r($param); echo "<br/>"; // description_lang
+    //D print_r($description); echo "<br/>";
+  
+    $mform = new mod_ilm_form(); // in 'settings_form.php': class mod_ilm_form
+    $mform->set_data($param);
+    }
+  //D $msg1 .= "param->ilm_id=" . $param->ilm_id; echo "settings_ilm.php: msg1 = " . $msg1 . "<br/>";
+
+  if (isset($mform) && $mform->is_cancelled()) {
     close_window();
     die;
     }
-  else { // Final form processing! Registered by 'locallib.php' with ilm_settings::copy_new_version_ilm($formdata)
+  else if (isset($mform)) { // Final form processing! Registered by 'locallib.php' with ilm_settings::copy_new_version_ilm($formdata)
     $formdata = $mform->get_data();
     if ($formdata) { // already exists the iLM
-      //D echo "settings_ilm.php: FINAL!<br/>"; print_r($formdata);
       ilm_settings::copy_new_version_ilm($formdata); // locallib.php: class ilm_settings
       close_window(0, true);
       die;
       }
     }
-
+  
   print($OUTPUT->header());
   print($OUTPUT->heading($title));
-  $mform->display();
+  if (isset($mform))
+    $mform->display();
   print($OUTPUT->footer());
   die;
   }
@@ -141,7 +158,7 @@ if ($action == 'copy') {
   $PAGE->set_title($title);
   $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action);
 
-  $mform = new mod_ilm_form();
+  $mform = new mod_ilm_form(); // in 'settings_form.php': class mod_ilm_form
   $mform->set_data($param);
   if ($mform->is_cancelled()) {
     close_window();
@@ -161,12 +178,12 @@ if ($action == 'copy') {
   }
 else
 
-if ($action == 'add') {
-  $title = get_string('add_ilm_iassign', 'iassign') . $OUTPUT->help_icon('add_ilm_iassign', 'iassign');
+if ($action == 'add') { // add new iLM using data from form and package from ZIP file
+  $title = get_string('add_ilm_iassign', 'iassign') . $OUTPUT->help_icon('add_ilm_iassign', 'iassign'); // add_ilm_iassign='Add iLM'
   $PAGE->set_title($title);
-  $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action);
+  $param = ilm_settings::add_edit_copy_ilm($ilm_id, $action); // ./mod/iassign/locallib.php
 
-  $mform = new mod_ilm_form();
+  $mform = new mod_ilm_form(); // iLM form to fill data (name, extension,...)
   $mform->set_data($param);
 
   if ($mform->is_cancelled()) {
@@ -174,64 +191,87 @@ if ($action == 'add') {
     die;
     }
   else if ($formdata = $mform->get_data()) {
-
-    $extension = explode(".", $mform->get_new_filename('file'));
-    
-    if ($extension[count($extension) - 1] == 'ipz') {
-       $retorno = ilm_settings::new_ilm($formdata->file);
-       if($retorno == true) {
-         close_window(0, true);
-         die;
-       }
-     } else
-       print($OUTPUT->notification(get_string('error_upload_ilm', 'iassign'), 'notifyproblem'));
+    $filename = strtolower($mform->get_new_filename('file'));
+    $extension = explode(".", $filename);
+    if ($extension[count($extension) - 1] == 'zip') { // accept ZIP file
+      // {iassign_ilm}.typ: $formdata->type : 0 = package JavaScript; 1 = package Java (JAR)
+      $retorno = ilm_settings::new_ilm($formdata); // ./mod/iassign/locallib.php: unpack and process it (create directory...)
+      if ($retorno == true) {
+        close_window(0, true);
+        die;
+        }
+      }
+    else { // Open a frame (on the same page) with warnings
+      // 'Error while extracting the content from iLM package file.'
+      print($OUTPUT->notification(get_string('error_add_ilm_zip', 'iassign'), 'notifyproblem'));
+      }
     }
   print($OUTPUT->header());
   print($OUTPUT->heading($title));
   $mform->display();
   print($OUTPUT->footer());
   die;
-  }
+  } // if ($action == 'add')
 else
 
-if ($action == 'import') {
+if ($action == 'import') { // must be file with extension 'ipz'
+echo "settings_ilm.php: 5 - action=" . $action . "<br/>"; //leo //DEBUG remover
+  // About IPZ format see https://www.matematica.br/ia/about_ilm-application.html
   $title = get_string('import_ilm', 'iassign') . $OUTPUT->help_icon('import_ilm', 'iassign');
   $PAGE->set_title($title);
   $param = new stdClass();
   $param->action = $action;
   $CFG->action_ilm = $action;
 
-  $mform = new mod_ilm_form();
+echo "settings_ilm.php: 6 - action=" . $action . "<br/>"; //leo //DEBUG remover
+
+  $mform = new mod_ilm_form(); // in 'settings_form.php': class mod_ilm_form
+echo "settings_ilm.php: 7 - action=" . $action . "<br/>"; //leo //DEBUG remover
   $mform->set_data($param);
-  if ($mform->is_cancelled()) {
+  if ($mform->is_cancelled()) { // enter here if user "clicks" at button "Cancel"
+echo "settings_ilm.php: 8 - action=" . $action . "<br/>"; //leo //DEBUG remover
     close_window();
     die;
     }
-  else if ($formdata = $mform->get_data()) {
-    $extension = explode(".", $mform->get_new_filename('file'));
+  else if ($formdata = $mform->get_data()) { // enter here if user adds an IPZ file and "clicks" at button "Sava changes"
+echo "settings_ilm.php: 9 - action=" . $action . "<br/>"; //leo //DEBUG remover
+    $filename = strtolower($mform->get_new_filename('file'));      
+    $extension = explode(".", $filename);
+echo "settings_ilm.php: 10 - explode filename="; print_r($extension); echo "<br/>"; //leo //DEBUG remover
+// settings_ilm.php: 10 - explode filename=Array ( [0] => ifractions_2025_04_07 [1] => ipz ) 
+//if (is_array($extension)) $extension = $extension[sizeof($extension)-1];
+//echo "settings_ilm.php: 11 - filename=" . $filename . ", extension=" . $extension . "<br/>"; //leo //DEBUG remover
     if ($extension[count($extension) - 1] == 'ipz') {
-       $retorno = ilm_settings::import_ilm($formdata->file);
+echo "settings_ilm.php: 12 - action=" . $action . "<br/>"; //leo //DEBUG remover
+       $retorno = ilm_settings::import_ilm($formdata->file); // locallib.php: class ilm_settings
+echo "settings_ilm.php: 13 - retorno=" . ($retorno?"true":"false") . "<br/>"; //leo //DEBUG remover
        if ($retorno == true) {
          close_window(5, true);
          die;
          }
       }
-    else
+    else { // Open a frame (on the same page) with warnings
+echo "settings_ilm.php: 10 - action=" . $action . "<br/>"; //leo //DEBUG remover
       print($OUTPUT->notification(get_string('error_upload_ilm', 'iassign'), 'notifyproblem'));
+      }
     }
   print($OUTPUT->header());
   print($OUTPUT->heading($title));
   $mform->display();
   print($OUTPUT->footer());
   die;
-  }
+  } // if ($action == 'import')
 else
 
-if ($action == 'confirm_delete_ilm') {
+if ($action == 'confirm_delete_ilm') { // Step 1 to remove iLM: will provide information about activities with this iLM
+echo "<br/><br/><br/><br/><br/>settings_ilm.php: (0) delete  action=" . $action . ", ilm_parent=" . $ilm_parent . "<br/>\n"; //2025/04/11 leo
+  // iLM removal: step 1
+  // After Admin "click" button "Delete iLM", it reaches this point (verify the presence of activities of this iLM and ask Admin to confirm his intention)
+  // If Admin "click" "Continue" (to confirm remotion) it calls "settings_ilm.php!$action=='delete'"
   $title = get_string('delete_ilm', 'iassign');
   $PAGE->set_title($title);
   $PAGE->set_pagelayout('base');
-  $delete_ilm = ilm_settings::confirm_delete_ilm($ilm_id, $ilm_parent);
+  $delete_ilm = ilm_settings::confirm_delete_ilm($ilm_id, $ilm_parent); // ./locallib.php : class ilm_settings : static function confirm_delete_ilm($ilm_id, $ilm_parent)
   print($OUTPUT->header());
   print($OUTPUT->heading($title));
   print($delete_ilm);
@@ -240,32 +280,40 @@ if ($action == 'confirm_delete_ilm') {
   }
 else
 
-if ($action == 'delete') {
-  
+if ($action == 'delete') { // Step 2 to remove iLM:
+echo "<br/><br/><br/><br/><br/>settings_ilm.php: delete action=" . $action . "<br/>\n"; //2025/04/11 leo
+  // iLM removal: step 2
+  // After Admin "click" button "Delete iLM" and confirm his intention to remove the iLM, reaches this point (really remove the iLM)
+  // If Admin "click" "Continue" (to confirm remotion) it calls "settings_ilm.php!$action=='delete'"
   $title = get_string('delete_ilm', 'iassign');
   $PAGE->set_title($title);
   
   $PAGE->set_pagelayout('redirect');
-  $parent = ilm_settings::delete_ilm($ilm_id);
+  $parent = ilm_settings::delete_ilm($ilm_id); // ./locallib.php
+echo "settings_ilm.php: (1) delete parent null, action=" . $action . "<br/>\n"; //2025/04/11 leo
 
   if ($parent == null) {
+echo "settings_ilm.php: (2) delete parent null<br/>\n"; //2025/04/11 leo
     $title = get_string('delete_ilm', 'iassign');
     $PAGE->set_title($title);
     $PAGE->set_pagelayout('base');
-    $delete_ilm = ilm_settings::confirm_delete_ilm($ilm_id, $ilm_parent);
+    $delete_ilm = ilm_settings::confirm_delete_ilm($ilm_id, $ilm_parent); // ./locallib.php : class ilm_settings : static function confirm_delete_ilm($ilm_id, $ilm_parent)
+    $msg_error = get_string('error_folder_permission_denied', 'iassign');
+    if ($CFG->debugdisplay) // debug messages is turned on
+      $msg_error .= "<br/>On settings_ilm.php: no iLM returned!<br/>";
+    // Open a frame (on the same page) with warnings
     print($OUTPUT->header());
     print($OUTPUT->heading($title));
-    print($OUTPUT->notification(get_string('error_folder_permission_denied', 'iassign'), 'notifyproblem'));
+    print($OUTPUT->notification($msg_error, 'notifyproblem'));
     print($delete_ilm);
     print($OUTPUT->footer());
     die;
     }
-  
   if ($parent == 0)
     redirect(new moodle_url('/admin/settings.php?', array('section' => 'modsettingiassign', 'action' => 'view')));
   else
     redirect(new moodle_url('/admin/settings.php?', array('section' => 'modsettingiassign', 'action' => 'config', 'ilm_id' => $ilm_parent)));
-  }
+  } // if ($action == 'delete') : step 2
 else
 
 if ($action == 'confirm_default_ilm') {
@@ -317,7 +365,7 @@ else
 
 if ($action == 'view') {
   $iassign_ilm = $DB->get_record('iassign_ilm', array('id' => $ilm_id));
-  $title = get_string('view_ilm', 'iassign') . $OUTPUT->help_icon('add_ilm_iassign', 'iassign');
+  $title = get_string('view_ilm', 'iassign') . $OUTPUT->help_icon('add_ilm_iassign', 'iassign'); // add_ilm_iassign='Add iLM'
   $PAGE->set_title($title . ': ' . $iassign_ilm->name . ' ' . $iassign_ilm->version);
   $view_ilm = ilm_settings::view_ilm($ilm_id, $from);
   print($OUTPUT->header());