Browse Source

Several bug fixes

Igor 4 years ago
parent
commit
2e7a61c9c6
4 changed files with 318 additions and 243 deletions
  1. 30 8
      iassign_form.php
  2. 1 1
      ilm_manager.php
  3. 1 1
      lang/en/iassign.php
  4. 286 233
      locallib.php

+ 30 - 8
iassign_form.php

@@ -250,7 +250,7 @@ class mod_iassign_form extends moodleform {
     //-----------------------------------------------------------------------------
     // Adding the "interactivy_learning_module" fieldset, where all the common settings are showed
     $mform->addElement('header', 'interactivy_learning_module', get_string('interactivy_learning_module', 'iassign'));
-    //$mform->setExpanded('interactivy_learning_module');
+    $mform->setExpanded('interactivy_learning_module');
 
     // Search iLM registered in the database
     // Field : 'iassign_ilmid'
@@ -332,14 +332,18 @@ class mod_iassign_form extends moodleform {
       $filename = $file->get_filename();
       }
     //D echo "123";
-    $html_div = '<br/>&nbsp;<br/><div id="fitem_id_iassign_file_id" class="fitem required fitem_fgroup">';
-    $html_div .= '<div class="fitemtitle"><label for="id_iassign_file_id">' . get_string('choose_file', 'iassign'); // 'Choose the file with the iLM activity'
-    $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>';
-    $html_div .= '<div class="felement fselect">';
-    $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>';
+    $html_div = '<div id="fitem_id_iassign_file_id" class="fitem required fitem_fgroup" style="padding: 35px; padding-left: 0;">';
+    $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'
+    
+    $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>';
+    
+    $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;">';
+
+    $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>';
+    
     if ($fileurl != "")
       $html_div .= '&nbsp;&nbsp;&nbsp;';
-    $html_div .= '<input onclick="view_ilm_manager()" name="add_ilm" value="' . get_string('add_ilm', 'iassign') . '" type="button" id="id_add_ilm"/>';
+    $html_div .= '<input onclick="view_ilm_manager()" name="add_ilm" value="' . get_string('add_ilm', 'iassign') . '" type="button" id="id_add_ilm"/></div>';
     $html_div .= '</div>';
     $html_div .= '</div>';
     $mform->addElement('html', $html_div);
@@ -507,7 +511,25 @@ class mod_iassign_form extends moodleform {
     if ($mform->elementExists('file')) {
       $value = trim($data['file']);
       if ($value == 0) {
-        $errors['iassign_ilmid'] = get_string('required_iassign_file', 'iassign');
+        $errors['iassign_ilmid_t'] = get_string('required_iassign_file', 'iassign');
+
+        echo "<script>
+              window.onload = function(e){ 
+                document.getElementById('error_message_file').innerHTML += '<span style=\"font-size: 80%;color: #d9534f; margin-left: 1em;\">".get_string('required_iassign_file', 'iassign')."</span>';
+                document.getElementById('file_border').style.borderColor = '#d9534f';
+              } </script>";
+        } else {
+          $fs = get_file_storage(); // Get reference to all files in Moodle data
+          $file = $fs->get_file_by_id($value);
+
+          if ($file) {
+            echo "<script>
+              window.onload = function(e){ 
+                document.getElementById('iassign_file_link').innerHTML = '".$file->get_filename()."&nbsp;&nbsp;&nbsp;';
+              } </script>";
+            }
+
+          
         }
       }
 

+ 1 - 1
ilm_manager.php

@@ -249,7 +249,7 @@ if (has_capability('mod/iassign:editiassign', $context, $USER->id)) {
       $dir_base = '/';
     else {
       $dir_base = $fs->get_file_by_id($formdata->dirid);
-      $dir_base = $dir_base->get_filepath();
+      //$dir_base = $dir_base->get_filepath();
       }
 
     if ($newfilename = $mform->get_new_filename('file')) {

+ 1 - 1
lang/en/iassign.php

@@ -404,7 +404,7 @@ $string['number_submissions']             = 'Number of submissions related to th
 $string['ok_import_ilm_version']          = 'The iLM was successfully imported!';
 $string['online_new_iassign']             = 'Create / Edit Task Interactive Online';
 $string['only_automatic_evaluate']        = 'Applies only when the iLM has automatic evaluate';
-$string['op_val']                         = 'options evaluation';
+$string['op_val']                         = 'Evaluation options';
 $string['open_dir']                       = 'Full path of directory';
 $string['open_editor_ilm']                = 'Open Editor {$a} Online';
 $string['out_object']                     = 'Output objects';

+ 286 - 233
locallib.php

@@ -933,12 +933,12 @@ class iassign {
     if ($this->action == 'add') {
 
       $iassign_data = $DB->get_record("iassign", array('id' => $iassignid));
-      $total_of_activities = count($iassign_data);
 
       $params = array('iassignid' => $iassignid);
 
       $query_str = "SELECT s.id, s.name, s.dependency FROM {iassign_statement} s WHERE s.iassignid = :iassignid ORDER BY s.position ASC";
       $iassign_statement = $DB->get_records_sql($query_str, $params); //
+      $total_of_activities = count($iassign_statement);
 
       $param->iassignid = $iassignid;
       $param->name = "";
@@ -2902,8 +2902,8 @@ class iassign {
       }
       print '</tr></table>' . "\n";
     
-    if (has_capability('mod/iassign:submitiassign', $this->context, $USER->id))
-      $this->view_legend_icons();
+    // if (has_capability('mod/iassign:submitiassign', $this->context, $USER->id))
+    //   $this->view_legend_icons();
 
     print $OUTPUT->box_end();
 
@@ -5519,7 +5519,7 @@ class ilm_manager {
       'component' => 'mod_iassign', // usually = table name
       'filearea' => 'activity', // usually = table name
       'itemid' => 0, // usually = ID of row in table
-      'filepath' => $dir->get_filepath(), // any path beginning and ending whith '/'
+      'filepath' => '/', // any path beginning and ending whith '/'
       'userid' => $USER->id,
       'author' => $USER->firstname . ' ' . $USER->lastname, 'license' => 'allrightsreserved', // allrightsreserved
       'filename' => $filename); // any filename
@@ -5943,11 +5943,6 @@ class ilm_manager {
       }
     else {
       $dir = $fs->get_file_by_id($dirid);
-      if (!isset($dir) || !is_dir($dir)) {
-//        print "Error: $key - $dirid => dir=''<br/>";
-//exit;
-        return;
-        }
       $dir_base = $dir->get_filepath();
       }
     $dir_parent = $dir->get_parent_directory();
@@ -6447,140 +6442,225 @@ class ilm_manager {
 
   /// List iassign files from course directory
   //  @calledby ilm_manager.php : $ilm_manager_instance->view_files_ilm($iassign_ilm->extension);
-  function view_files_ilm ($iassign_ilm_class, $extension, $start = 0) {
-    //TODO usar $start para trazer no maximo 50 arquivos iniciando em $start
+  function view_files_ilm ($iassign_ilm_class, $extension) {
     global $CFG, $DB, $USER, $OUTPUT;
-    $fs = get_file_storage(); // Get reference to all files in Moodle data
-    $context = context_course::instance($this->id); // $this->id = ID of the current course    
+    $fs = get_file_storage();
+    $context = context_course::instance($this->id);
     $ilmid = optional_param('ilmid', NULL, PARAM_INT);
     $dirid = $this->get_dir_ilm('dirid');
     $dir_base = $this->get_dir_ilm('dir_base');
 
-    // Get all files in module iAssign
-    // -- start
-    $array_contextid_files = array();     // context.id in data decreasing order
-
-    $array_contextid_files_aux = array(); // all context.id in data creasing order
+    $files_course = $fs->get_directory_files($context->id, 'mod_iassign', 'activity', 0, $dir_base, false, true, 'filename');
+    $files_array = '';
+    foreach ($files_course as $value) {
+      if (!$value->is_directory())
+        $files_array .= "'" . $value->get_filename() . "',";
+      }
+    $files_array .= "''";
+    $error_files_exists = get_string('error_file_exists', 'iassign');
 
-    // Get all files from table '*_files': id ; contenthash ; pathnamehash ; contextid ; component ;... filename ; userid ...
-    // $DB is 'mysqli_native_moodle_database' object
-    // if (has_capability("moodle/site:config", $context, $USER->id, true))
-    // if (has_capability("mod/iassign:addinstance", $context, $USER->id, true))
-    $hascapability = has_capability("moodle/site:config", $context, $USER->id); // *_capabilities="moodle/site:config" : greatest one)
-    if ($hascapability==1) {
-      //$array_query = array('component' => 'mod_iassign');
-      $query_sql = "SELECT * FROM {files} WHERE component='mod_iassign' AND filearea='activity'";
+    $dirs_array = '';
+    foreach ($files_course as $value) {
+      if ($value->is_directory()) {
+        $pathname = explode("/", substr($value->get_filepath(), 0, strlen($value->get_filepath()) - 1));
+        $dirs_array .= "'" . $pathname[count($pathname) - 1] . "',";
+        }
       }
-    else {
-      // $array_query = array('component' => 'mod_iassign', 'userid' => $USER->id);
-      $query_sql = "SELECT * FROM {files} WHERE component='mod_iassign' AND filearea='activity' AND " .
-                   " (license<>'allrightsreserved' OR contextid=" . $context->id . " OR userid=" . $USER->id . ")";
+    $dirs_array .= "''";
+    $error_dir_exists = get_string('error_dir_exists', 'iassign');
+
+    // TODO Rever o preview pois só deixar ver uma vez.
+    $code_javascript_ilm = "
+<script type='text/javascript'>
+ //<![CDATA[
+   function preview_ilm (fileid, ilmid) {
+   var param = '" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=preview&fileid='+fileid+'&ilmid='+ilmid;
+   var preview_ilm=window.open(param,'','menubar=0,location=0,scrollbars,status,resizable,width=900 height=700');
+     }
+
+   function update_ilm (ilmid, fileid) {
+     window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=update&ilmid='+ilmid+'&dirid=" . $dirid . "&fileid='+fileid;
+     }
+
+   function delete_ilm (ilmid, fileid) {
+     var msgAnswer;
+     msgAnswer = confirm('" . get_string('delete_file', 'iassign') . "');
+     if (msgAnswer) {
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=delete&ilmid='+ilmid+'&dirid=" . $dirid . "&fileid='+fileid;
+       }
+     }
+
+   function delete_selected_ilm () {
+     var msgAnswer;
+     var param = getCheckbox();
+     if (param.join() != '') {
+       msgAnswer = confirm('" . get_string('delete_files', 'iassign') . "');
+       if (msgAnswer)
+         window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=selected_delete&dirid=" . $dirid . "&files_id='+param.join();
+       }
+     else
+       alert('" . get_string('er_file_not_selected_to_delete', 'iassign') . "');
+     }
+
+   function add_ilm_iassign (ilmid, filename, fileid) {
+     window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=addilm&ilmid='+ilmid+'&fileid='+fileid+'&filename='+filename;
+     }
+
+   function duplicate_ilm (ilmid, filename, fileid) {
+     var filenamecopy;
+     var i;
+     var files = new Array($files_array);
+     do {
+      filenamecopy = prompt ('" . get_string('duplicate_file', 'iassign') . "',filename);
+       } while (filenamecopy == '');
+     if (filenamecopy == null)
+       return false;\n
+     else {
+       for (i=0;i<files.length;i++) {
+         if (files[i]==filenamecopy) {
+           alert('$error_files_exists');
+           return false;\n
+           }
+         }\n" .
+       // @see: function 'duplicate_file_ilm()' above
+       "
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?" .
+         "from=" . $this->from . "&id=" . $this->id . "&action=duplicate&ilmid=' + ilmid + '&dirid=" . $dirid . "&fileid=' + fileid + '&filename=' + filenamecopy;
+       } // else
+     }
+
+   function rename_ilm (ilmid, filename, fileid) {
+     var filenamecopy;
+     var i;
+     var files = new Array($files_array);
+     do {
+      filenamecopy = prompt('" . get_string('rename_file', 'iassign') . "',filename);
+     } while (filenamecopy == '');
+     if (filenamecopy == null)
+       return false;
+     else {
+       for (i=0;i<files.length;i++) {
+         if (files[i]==filenamecopy) {
+           alert('$error_files_exists');
+           return false;
+           }
+         }
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=rename&ilmid='+ilmid+'&dirid=" . $dirid . "&fileid='+fileid+'&filename='+filenamecopy;
+       }
+     }
+   
+   function export_files_ilm () {
+     var param = getCheckbox();
+     if (param.join() != '')
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=export&dirid=" . $dirid . "&files_id='+param.join();
+     else
+       alert('" . get_string('er_file_not_selected_to_export', 'iassign') . "');
+     }
+
+  function select_all_ilm () {
+    var checkBoxes = document.getElementsByTagName('input');
+    var selectAll = document.getElementById('select_all');
+    for (var counter=0; counter < checkBoxes.length; counter++) {
+      if (checkBoxes[counter].type.toUpperCase()=='CHECKBOX' && checkBoxes[counter].name == 'selected_file')
+        checkBoxes[counter].checked = selectAll.checked;
       }
-    // files : id contenthash pathnamehash contextid component filearea itemid filepath filename userid filesize mimetype status source author license timecreated timemodified sortorder referencefileid
-    // $files_iassign = $DB->get_records('files', $array_query); // extensions for all iLM...
-    $files_iassign = $DB->get_records_sql($query_sql);
-    //D echo "view_files_ilm: " . $USER->id . ", " . $hascapability . ": " . $query_sql . "<br/>";
-    //D SELECT id,contextid,component,filearea,itemid,filepath,filename,userid FROM s_files WHERE component='mod_iassign' AND filearea='exercise';
-
-    $count_all_files_others = 0;
-    $count_all_files_my = 0;
-    $count_files_with_ext = 0;
-    $count_thisauthor_contextid = 0;
-    $count_otherauthors_contextid = 0;
-    //D echo "view_files_ilm: user.id=" . $USER->id . ", ext=$extension, #files=" . count($files_iassign) . "<br/>";
-
-//$files_from_others + $files_from_mine      
-    $files_from_mine   = array();           // all files from all context.id (in data decreasing order) from this user
-    $files_from_others = array();           // all files from all context.id (in data decreasing order) from others then this user
-
-
-    if (is_array($files_iassign)) {
-      if ($hascapability == 1) { // is Admin => get all files from this extension $extension
-        foreach ($files_iassign as $item_files_iassign) {
-          $extensionF = explode(".", $item_files_iassign->filename); // $item_files_iassign->get_filename()
-          $lastitem = sizeof($extensionF);
-          if ($lastitem>0) $lastitem--;
-          else { 
-            // print "x";// error: it must have extension (after ".")
-            continue;
-            }
-          $str_extension = $extensionF[$lastitem];
-          $count_files_with_ext++;
-          if ($extension == $str_extension) {
-            $contextid = $item_files_iassign->contextid;
-            if (!in_array($contextid, $array_contextid_files_aux)) { // not yet in array of context with this extension
-              $array_contextid_files_aux[] = $contextid;
+    }
 
-              // Parameters '$files_from_mine' and '$files_from_others' are by reference (will be altered by 'get_files_in_context(...)'
-              $total_in_context = $this->get_files_in_context($files_from_mine, $files_from_others, $contextid, $extension, $USER->id);
+  function getCheckbox () {
+    var checkBoxes = document.getElementsByTagName('input');
+    var param = new Array();
+    for (var counter=0; counter < checkBoxes.length; counter++) {
+    if (checkBoxes[counter].type.toUpperCase()=='CHECKBOX' && checkBoxes[counter].checked == true && checkBoxes[counter].name == 'selected_file')
+      param.push(checkBoxes[counter].value);
+      }
+    return param;
+    }
 
-              $count_all_files_others += $total_in_context;
-              }
-            }
+  function new_dir_ilm () {
+    var dirname = '';
+    var i;
+    var dirs = new Array($dirs_array);
+    do {
+     var dirname = prompt ('" . get_string('question_new_dir', 'iassign') . "', '');
+    }  while (dirname == '');
+    if (dirname == null)
+      return false;\n
+    else {
+      for (i=0;i<dirs.length;i++) {
+        if (dirs[i]==dirname) {
+          alert('$error_dir_exists');
+          return false;\n
           }
         }
-      else { // not admin, get only on this context
-	$contextid = $context->id;
-        $array_contextid_files_aux[] = $contextid;
-	// Parameters '$files_from_mine' and '$files_from_others' are by reference (will be altered by 'get_files_in_context(...)'
-        $total_in_context = $this->get_files_in_context($files_from_mine, $files_from_others, $contextid, $extension, $USER->id);
-
-        $count_all_files_others = $total_in_context;
-        }
+      window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=new_dir&ilmid=" . $ilmid . "&dirid=" . $dirid . "&dirname='+dirname;
       }
+    }
+
+   function delete_dir_ilm (ilmid, dirid) {
+     var msgAnswer;
+     msgAnswer = confirm('" . get_string('question_delete_dir', 'iassign') . "');
+     if (msgAnswer) {
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=delete_dir&ilmid='+ilmid+'&dirid='+dirid;
+       }
+     }
+
+   function rename_dir_ilm (ilmid, dirname, dirid) {
+     var dirnamecopy;
+     var i;
+     var dirs = new Array($dirs_array);
+     do {
+       dirnamecopy = prompt ('" . get_string('question_rename_dir', 'iassign') . "',dirname);
+       } while (dirnamecopy == '');
+     if (dirnamecopy == null)
+       return false;\n
+     else {
+       for (i=0;i<dirs.length;i++) {
+         if (dirs[i]==dirnamecopy) {
+           alert('$error_dir_exists');
+           return false;\n
+           }
+         }
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=rename_dir&ilmid='+ilmid+'&dirid='+dirid+'&dirname='+dirnamecopy;
+       }
+     }
 
+   function move_selected_ilm (ilmid) {
+   var param = getCheckbox();
+   if (param.join() != '')
+     window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=selected_move&ilmid='+ilmid+'&dirid=" . $dirid . "&files_id='+param.join();
+   else
+     alert('" . get_string('er_file_not_selected_to_move', 'iassign') . "');
+     }
 
-    // Joint all files to $array_all_files
-    $totalFromMine = count($files_from_mine);
-    $totalOthers   = count($files_from_others);
-    $total_files = $totalFromMine + $totalOthers; //$count_all_files_others;
-    $array_all_files = array(); // all files from all context.id (in data decreasing order)
-    for ($ii=0; $ii<$totalOthers; $ii++) // Insert in first position all files from other then this user (bellow is inverted)
-      $array_all_files[] = $files_from_others[$ii];
-    for ($ii=0; $ii<$totalFromMine; $ii++) // Now insert the user's files (bellow is inverted) => will appear on first
-      $array_all_files[] = $files_from_mine[$ii];
-
-    //D echo "view_files_ilm: #array_contextid_files_aux=".count($array_contextid_files_aux). ", count_all_files_others=$total_files<br/>";
-    //view_files_ilm: #array_contextid_files_aux=54
-
-    //TODO Deste modo vem: se ADMIN => todos os arquivos de extensao compativel; senao todos os arquivos do usuario
-    //TODO Implementar:    se NAO ADMIN => pegar TODOS os arquivos do curso
-    //TODO Tabela pegar todos '*_files.contextid' tais que '*_files.component=="mod_iassign"'
-    $array_files_course = array();
-    $dirs_array = '';  // if there are none 'exercise' file
-    $files_array = ''; // idem
-    $files_array = "''"; // idem
-    //NN $error_files_exists = "''"; // idem
-    for ($ii=$total_files-1; $ii>0; $ii--) {
-      //$contextid = $array_contextid_files[$ii];
-      //$files_course = $fs->get_directory_files($contextid, 'mod_iassign', 'activity', 0, $dir_base, false, true, 'filename');
-      //$array_files_course[] = $files_course;
-      $files_course = $array_all_files[$ii];
+   function recover_files_ilm () {
+     var msgAnswer;
+     msgAnswer = confirm('" . get_string('question_recover_files', 'iassign') . "');
+     if (msgAnswer) {
+       window.location='" . $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&action=recover&ilmid=" . $ilmid . "&dirid=" . $dirid . "';
+       }
+    }
 
-      $files_array = '';
-      $files_array .= "''";
-      //NN $error_files_exists = get_string('error_file_exists', 'iassign');
-
-      $dirs_array = '';
-      foreach ($files_course as $one_file) {
-        if (!$one_file->is_directory())
-          $files_array .= "'" . $one_file->get_filename() . "',";
-        else { //if ($one_file->is_directory())
-          $pathname = explode("/", substr($one_file->get_filepath(), 0, strlen($one_file->get_filepath()) - 1));
-          $dirs_array .= "'" . $pathname[count($pathname) - 1] . "',";
+    window.onload = function() {
+
+      var xPosition = 0;
+      var yPosition = 0;
+
+      element=document.getElementById('new_file');
+
+      while(element) {
+          xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft);
+          yPosition += (element.offsetTop - element.scrollTop + element.clientTop);
+          element = element.offsetParent;
           }
-        } // foreach ($files_course as $one_file)
-      } // for ($ii=0; $ii<$num_contexts; $ii++)
 
-    print "#" . $total_files . "<br/>";
-    // -- end
+      document.getElementById('new_file').style.top = '' + (yPosition - 400) + 'px';
+      document.getElementById('new_file').style.right = '' + 0 + 'px';
 
-    $dirs_array .= "''";
-    //NN $error_dir_exists = get_string('error_dir_exists', 'iassign');
+      location.hash = '#new_file';
+      };
 
-    //TODO Rever o 'preview' pois soh poder deixar ver uma vez
-    //NN Retirei daqui as X linhas para definir javascript via variavel '$code_javascript_ilm'
-    //NN Agora em funcao get_string_JavaScript_functions(...) bellow
+   //]]>
+</script>\n";
 
     $output = "";
     $select_all = "";
@@ -6591,156 +6671,129 @@ class ilm_manager {
     foreach ($iassign_ilm as $item_iassign_ilm)
       $extensions_allow = array_merge($extensions_allow, explode(",", $item_iassign_ilm->extension));
 
-    // Estava foreach ($files_course as $one_file)
-    for ($ii=$total_files-1; $ii>0; $ii--) { // function view_files_ilm ($iassign_ilm_class, $extension)
-
-      //$contextid = $array_contextid_files[$ii]; // Notice: Undefined offset: 2257 in /var/www/html/saw/mod/iassign/locallib.php on line 6333
-      //$files_course = $array_files_course[$ii];
-      $one_file = $array_all_files[$ii];
-
+    foreach ($files_course as $value) {
 
-      $filename = $one_file->get_filename();
-      $filepath = $one_file->get_filepath();
+      $filename = $value->get_filename();
+      $filepath = $value->get_filepath();
       $pathname = explode("/", substr($filepath, 0, strlen($filepath) - 1));
       $pathname = $pathname[count($pathname) - 1];
-      $fileid = $one_file->get_id(); // get the file id (in table 'files')
-
+      $fileid = $value->get_id();
       $tmp = explode(".", $filename);
-      if (is_array($tmp)) { // define file type
-        if (sizeof($tmp)>1)
-          $filetype = $tmp[1];
-        else
-          $filetype = $extension;
-        }
-      else
-        $filetype = $extension;
-
-      $author = $one_file->get_author();
-      $timemodified = date("d/m/Y H:i:s", $one_file->get_timemodified());
-      $timecreated = date("d/m/Y H:i:s", $one_file->get_timecreated());
+      $filetype = $tmp[1];
+      $author = $value->get_author();
+      $timemodified = date("d/m/Y H:i:s", $value->get_timemodified());
+      $timecreated = date("d/m/Y H:i:s", $value->get_timecreated());
       $extensions = explode(",", $extension);
 
-      if (in_array(strtolower($filetype), $extensions) || $one_file->is_directory() || $this->from == 'block' || $this->from == 'tinymce' || $this->from == 'atto') {
+      if (in_array(strtolower($filetype), $extensions) || $value->is_directory() || $this->from == 'block' || $this->from == 'tinymce' || $this->from == 'atto') {
 
         $count_files ++;
 
         // buscar fileid nas tabelas do iassign
         $list_filein_use = "";
-
-        // $iassign_statement_activity_list = $DB->get_records("iassign_statement", array("file" => $fileid));
-        $iassign_statement_activity_list = $this->get_all_ilm_files_by_fileid($fileid); // get all files under this directory (if it is the case)
-
+        $iassign_statement_activity_list = $DB->get_records("iassign_statement", array("file" => $fileid));
         if ($iassign_statement_activity_list) {
           foreach ($iassign_statement_activity_list as $iassign_statement_activity_item) {
             $list_filein_use .= $iassign_statement_activity_item->name . "</br>\n";
             }
           }
 
-        $array_iassign_ilm = $DB->get_records("iassign_ilm", array('extension' => $filetype, 'parent' => '0', 'enable' => '1')); // get all iLM from this "file type"
-
-        foreach ($array_iassign_ilm as $iassign_ilm) { // get files from all iLM equivalent
-
-          if (!$iassign_ilm) {
-            $iassign_ilm = new stdClass();
-            $iassign_ilm->id = $ilmid;
-            }
+        $iassign_ilm = $DB->get_record("iassign_ilm", array('extension' => $filetype, 'id' => $ilmid, 'enable' => '1'));
+        if (!$iassign_ilm) {
+          $iassign_ilm = new stdClass();
+          $iassign_ilm->id = $ilmid;
+          }
 
-          // Do not use $var inside "..." - problem with some "unusual" operational system
-          $url = $CFG->wwwroot . "/pluginfile.php/" . $one_file->get_contextid() . "/mod_iassign/activity";
-          $fileurl = $url . '/' . $one_file->get_itemid() . $filepath . $filename;
-          $dirurl = new moodle_url($this->url) . '&ilmid=' . $iassign_ilm->id . '&dirid=' . $fileid;
-
-          $straux = $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&fileid=" . $fileid . "&";
-          $link_add_ilm_iassign = "&nbsp;&nbsp;<a href='" . $straux . "action=addilm&filename=$filename&nbsp;&nbsp;&nbsp;'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
-          $link_add_ilm_tinymce = "&nbsp;&nbsp;<a href='" . $straux . "action=tinymceilm'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
-          $link_add_ilm_atto = "&nbsp;&nbsp;<a href='" . $straux . "action=attoilm'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
-
-          $check_select = "";
-          $link_rename = "";
-          $link_delete = "";
-          $link_duplicate = "&nbsp;&nbsp;<a href='#' onclick='duplicate_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" . iassign_icons::insert('duplicate_iassign') . "</a>\n";
-          $link_edit = "&nbsp;&nbsp;" . iassign_icons::insert('no_edit_iassign');
-          $link_filter = "&nbsp;&nbsp;<a href='#' onclick='preview_ilm(" . $fileid . "," . $ilmid . ");'>" . iassign_icons::insert('preview_iassign') . "</a>\n";
-
-          $link_duplicate = "&nbsp;&nbsp;<a href='#' onclick='duplicate_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" .
-                iassign_icons::insert('duplicate_iassign') . "</a>\n";
-
-          $link_edit = "&nbsp;&nbsp;" . iassign_icons::insert('no_edit_iassign');
-          $link_filter = "&nbsp;&nbsp;<a href='#' onclick='preview_ilm(" . $fileid . "," . $ilmid . ");'>" . iassign_icons::insert('preview_iassign') . "</a>\n";
-
-          if ($one_file->get_userid() == $USER->id || $hascapability==1) { // is the author or is Admin
-            if ($iassign_statement_activity_list) {
-                $check_select = "";
-                $link_edit = iassign_icons::insert('edit_iassign_disable');
-                $link_delete = "&nbsp;&nbsp;" . iassign_icons::insert('delete_iassign_disable');
-                $link_rename = "";
-                }
-             else {
-                $check_select = "<input name='selected_file' type='checkbox' value='$fileid'/>\n";
-                $link_edit = "&nbsp;&nbsp;<a href='#' onclick='update_ilm(\"" . $iassign_ilm->id . "\", $fileid)'>" . iassign_icons::insert('edit_iassign') . "</a>\n";
-                $link_delete = "&nbsp;&nbsp;<a href='#' onclick='delete_ilm(\"$iassign_ilm->id\", $fileid);'>" . iassign_icons::insert('delete_iassign') . "</a>\n";
-                $link_rename = "&nbsp;&nbsp;<a href='#' onclick='rename_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" . iassign_icons::insert('rename_iassign') . "</a>\n";
-                }
-             } // if ($one_file->get_userid() == $USER->id)
-
-          if (!in_array($filetype, $extensions_allow)) {
-            $link_edit = "";
-            $link_add_ilm_iassign = "";
-            $link_add_ilm_tinymce = "";
-            $link_add_ilm_atto = "";
-            $link_filter = "";
+        // Do not use $var inside "..." - problem with some "unusual" operational system
+        $url = $CFG->wwwroot . "/pluginfile.php/" . $value->get_contextid() . "/mod_iassign/activity";
+        $fileurl = $url . '/' . $value->get_itemid() . $filepath . $filename;
+        $dirurl = new moodle_url($this->url) . '&ilmid=' . $iassign_ilm->id . '&dirid=' . $fileid;
+
+        $straux = $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $this->from . "&id=" . $this->id . "&fileid=" . $fileid . "&";
+        $link_add_ilm_iassign = "&nbsp;&nbsp;<a href='" . $straux . "action=addilm&filename=$filename&nbsp;&nbsp;&nbsp;'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
+        $link_add_ilm_tinymce = "&nbsp;&nbsp;<a href='" . $straux . "action=tinymceilm'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
+        $link_add_ilm_atto = "&nbsp;&nbsp;<a href='" . $straux . "action=attoilm'>" . iassign_icons::insert('add_ilm_iassign') . "</a>\n";
+
+        $check_select = "";
+        $link_rename = "";
+        $link_delete = "";
+        $link_duplicate = "&nbsp;&nbsp;<a href='#' onclick='duplicate_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" . iassign_icons::insert('duplicate_iassign') . "</a>\n";
+        $link_edit = "&nbsp;&nbsp;" . iassign_icons::insert('no_edit_iassign');
+        $link_filter = "&nbsp;&nbsp;<a href='#' onclick='preview_ilm(" . $fileid . "," . $ilmid . ");'>" . iassign_icons::insert('preview_iassign') . "</a>\n";
+
+        $link_duplicate = "&nbsp;&nbsp;<a href='#' onclick='duplicate_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" .
+              iassign_icons::insert('duplicate_iassign') . "</a>\n";
+
+        $link_edit = "&nbsp;&nbsp;" . iassign_icons::insert('no_edit_iassign');
+        $link_filter = "&nbsp;&nbsp;<a href='#' onclick='preview_ilm(" . $fileid . "," . $ilmid . ");'>" . iassign_icons::insert('preview_iassign') . "</a>\n";
+
+        if ($value->get_userid() == $USER->id) {
+          if ($iassign_statement_activity_list) {
+              $check_select = "";
+              $link_edit = iassign_icons::insert('edit_iassign_disable');
+              $link_delete = "&nbsp;&nbsp;" . iassign_icons::insert('delete_iassign_disable');
+              $link_rename = "";
+            } else {
+              $check_select = "<input name='selected_file' type='checkbox' value='$fileid'/>\n";
+              $link_edit = "&nbsp;&nbsp;<a href='#' onclick='update_ilm(\"$iassign_ilm->id\", $fileid)'>" . iassign_icons::insert('edit_iassign') . "</a>\n";
+              $link_delete = "&nbsp;&nbsp;<a href='#' onclick='delete_ilm(\"$iassign_ilm->id\", $fileid);'>" . iassign_icons::insert('delete_iassign') . "</a>\n";
+              $link_rename = "&nbsp;&nbsp;<a href='#' onclick='rename_ilm(\"$iassign_ilm->id\", \"$filename\"," . $fileid . ");'>" . iassign_icons::insert('rename_iassign') . "</a>\n";
             }
+          }
+        if (!in_array($filetype, $extensions_allow)) {
+          $link_edit = "";
+          $link_add_ilm_iassign = "";
+          $link_add_ilm_tinymce = "";
+          $link_add_ilm_atto = "";
+          $link_filter = "";
+          }
 
-          if ($one_file->is_directory()) {
-            $link_delete = "&nbsp;&nbsp;<a href='#' onclick='delete_dir_ilm(\"$iassign_ilm->id\", $fileid);'>" . iassign_icons::insert('delete_dir') . "</a>\n";
-            $link_rename = "&nbsp;&nbsp;<a href='#' onclick='rename_dir_ilm(\"$iassign_ilm->id\", \"" . $pathname . "\"," . $fileid . ");'>" . iassign_icons::insert('rename_dir') . "</a>\n";
-            $output .= "<tr><td>$check_select$link_rename$link_delete</td>
+        if ($value->is_directory()) {
+          $link_delete = "&nbsp;&nbsp;<a href='#' onclick='delete_dir_ilm(\"$iassign_ilm->id\", $fileid);'>" . iassign_icons::insert('delete_dir') . "</a>\n";
+          $link_rename = "&nbsp;&nbsp;<a href='#' onclick='rename_dir_ilm(\"$iassign_ilm->id\", \"" . $pathname . "\"," . $fileid . ");'>" . iassign_icons::insert('rename_dir') . "</a>\n";
+          $output .= "<tr><td>$check_select$link_rename$link_delete</td>
    <td><a href='$dirurl' title='" . get_string('dir', 'iassign') . $pathname . "'>" . iassign_icons::insert('dir') . '&nbsp;' . $pathname . "</a></td>
    <td><center>$author</center></td>
    <td><center>$timecreated</center></td>
    <td><center>$timemodified</center></td></tr>\n";
+          }
+        else if ($this->from == 'iassign') {
+          $new_id = "";
+          $new_class = "";
+          if (isset($_SESSION['file_name']) && $filename == $_SESSION['file_name']) {
+            $new_class = "<div id='new_file' style='position: absolute;'></div>"; unset($_SESSION['file_name']);
+            $new_id = "id='id_new_blink' style='background-color: hsl(244,61%,90%);'";
             }
-          else if ($this->from == 'iassign') {
-            $new_id = "";
-            $new_class = "";
-            if (isset($_SESSION['file_name']) && $filename == $_SESSION['file_name']) {
-              $new_class = "<div id='new_file' style='position: absolute;'></div>"; unset($_SESSION['file_name']);
-              $new_id = "id='id_new_blink' style='background-color: hsl(244,61%,90%);'";
-              }
-              
-            $output .= "<tr $new_id><td>$new_class $check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_iassign</td>
+
+          $output .= "<tr $new_id><td>$new_class $check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_iassign</td>
    <td><a href='$fileurl' title='" . get_string('download_file', 'iassign') . "$filename'>$filename</a></td>
    <td><center>$author</center></td>
    <td><center>$timecreated</center></td>
    <td><center>$timemodified</center></td></tr>\n";
-            }
-          else if ($this->from == 'block') {
-            $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter</td>
+          }
+        else if ($this->from == 'block') {
+          $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter</td>
    <td><a href='$fileurl' title='" . get_string('download_file', 'iassign') . "$filename'>$filename</a></td>
    <td><center>$author</center></td>
    <td><center>$timecreated</center></td>
    <td><center>$timemodified</center></td></tr>\n";
-            }
-          else if ($this->from == 'tinymce') {
-            $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_tinymce</td>
+          }
+        else if ($this->from == 'tinymce') {
+          $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_tinymce</td>
    <td><a href='$fileurl' title='" . get_string('download_file', 'iassign') . "$filename'>$filename</a></td>
    <td><center>$author</center></td>
    <td><center>$timecreated</center></td>
    <td><center>$timemodified</center></td></tr>\n";
-            }
-          else if ($this->from == 'atto') {
-            $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_atto</td>
+          }
+        else if ($this->from == 'atto') {
+          $output .= "<tr><td>$check_select$link_rename$link_delete$link_duplicate$link_edit$link_filter$link_add_ilm_atto</td>
    <td><a href='$fileurl' title='" . get_string('download_file', 'iassign') . "$filename'>$filename</a></td>
    <td><center>$author</center></td>
    <td><center>$timecreated</center></td>
    <td><center>$timemodified</center></td></tr>\n";
-            }
-
-          } // foreach ($array_iassign_ilm as $iassign_ilm)
-
-        } // if (in_array(strtolower($filetype), $extensions) || $one_file->is_directory() || $this->from == 'block' || $this->from == 'tinymce' || $this->from == 'atto')
-
-      } // for ($ii=$total_files-1; $ii>0; $ii--) // for ($ii=0; $ii<$num_contexts; $ii++)
+          }
+        }
+      }
 
     $basename = explode("/", substr($dir_base, 0, strlen($dir_base) - 1));
     $dir_base = "";
@@ -6785,7 +6838,7 @@ class ilm_manager {
     $html .= $OUTPUT->help_icon('file_ilm_recover', 'iassign') . "</td></tr></table>\n";
     $html .= "</form>\n";
 
-    print $this->get_string_JavaScript_functions($ilmid, $dirid, $files_array, $dirs_array); //NN put here all JavaScript code to edit/remove/double ($code_javascript_ilm)
+    print $code_javascript_ilm;
 
     print $html;
     } // function view_files_ilm($extension)