Browse Source

Update 'locallib.php': melhoria em repositorio de atividades "online" (permitir admin editar qq um e mostrar ao prof apenas seus arq. e dos demais no curso)

---
Para permitir que Admin edite qualquer atividade:

./locallib.php:
 + function view_files_ilm ($iassign_ilm_class, $extension, $start = 0): para permitir que Admin edite qualquer arquivo
   6593/6999: if ($one_file->get_userid() == $USER->id || $hascapability==1) --- acresc. ' || $hascapability==1', dentro de 'foreach ($array_iassign_ilm as $iassign_ilm)'
---
Para carregar os arquivos em ordem decrescente e agrupando, primeiro o autor, depois os demais:

./locallib.php:
 + function get_string_JavaScript_functions ($dirid, $ilmid, $files_array, $dirs_array): nova, para gerar os codigos JavaScript para editar funcoes
   (estava no meio da funcao, muito antes de seu uso, iniciado na hoje linha 6555/7050)

   SELECT * FROM s_iassign_statement WHERE file = 282539 ORDER BY author_name,timecreated DESC

 + function view_files_ilm ($iassign_ilm_class, $extension, $start = 0):
   sai:   $array_iassign_ilm = $DB->get_records("iassign_ilm", array('extension' => $filetype, 'parent' => '0', 'enable' => '1'));
   entre: $iassign_statement_activity_list = $this->get_all_ilm_files_by_fileid($fileid);
leo 4 years ago
parent
commit
786a6896d7
1 changed files with 193 additions and 123 deletions
  1. 193 123
      locallib.php

+ 193 - 123
locallib.php

@@ -1962,12 +1962,13 @@ class iassign {
           //1     }
           //1   $output .= "</form></center>\n";
           //1   $only_one_send_button = 1; // avoid put comment frame again (bellow)
-          //1  }
+          //1   }
 
           $output .= $OUTPUT->box_end();
           print $output;
           } // if ($this->view_iassign)
 
+
         print $OUTPUT->box_end(); // Box 5 to 'proposition' - close
 
         } // if ($this->view_iassign)
@@ -5919,7 +5920,7 @@ class ilm_manager {
     }
 
 
-  /// Function for get path and infos of dirs: dirid,  dir_base, dir_parent, dir_home
+  /// Function for get path and info of directories: dirid,  dir_base, dir_parent, dir_home
   //  @param string $key Key for return information
   //  @return Ambigous <unknown, number, string, NULL> Return an information requested
   function get_dir_ilm ($key) {
@@ -5930,8 +5931,14 @@ class ilm_manager {
     if ($dirid == 0) {
       $dir = ($dir_home = $fs->create_directory($context->id, 'mod_iassign', 'activity', 0, $dir_base));
       $dirid = $dir->get_id();
-      } else {
+      }
+    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();
@@ -6179,10 +6186,11 @@ class ilm_manager {
 
 
   /// Auxiliary function the get all files in a given context
+  //  @calledby view_files_ilm($iassign_ilm_class, $extension, $start = 0)
   //  @return [array_contextid_files_thisauthor[], array_contextid_files_otherauthors[], array_contextid_files_otherauthors_userid[]]
   //TODO Falta separar os arquivos listados, apresentar primeiro aqueles do autor e depois os demais.
   //TODO Nao devemos listar aqueles que estao sem permissao (license == 'allrightsreserved')
-  function get_files_in_context (&$allfiles, $contextid, $extension, $userid) {
+  function get_files_in_context (&$filesfrommine, &$filesfromothers, $contextid, $extension, $userid) {
     // s_iassign_statement: id name iassignid type_iassign proposition author_name author_modified_name iassign_ilmid
     // (NAO s_iassign_statement.file = s_files.id)
     $fs = get_file_storage(); // Get reference to all files in Moodle data
@@ -6194,125 +6202,44 @@ class ilm_manager {
       //$filename = $item_fc->get_filename();
       //$filepath = $item_fc->get_filepath();
       //$fileid = $item_fc->get_id(); // get file ID (in *_iassign_statement table)
-      //$fileuserid = $item_fc->get_userid(); // get user.id of the author
+      $fileuserid = $item_fc->get_userid(); // get user.id of the author
       // $array_files_aux[] = $item_fc;
       $itemid = $item_fc->get_id();
       if (!in_array($itemid, $array_files_id)) {
         //TODO Avoid to insert twice - necessary since it has been inserting 2 copies in iassign_statement
-        $allfiles[] = $item_fc;
+        if ($fileuserid == $userid)
+          $filesfrommine[] = $item_fc;
+        else
+          $filesfromothers[] = $item_fc;
         $array_files_id[] = $itemid;
         $countf++;
         }
       }
     //D echo "get_files_in_context: dir_base=$dir_base, contextid=$contextid, #array_files_id=".count($array_files_id) . " = $countf<br/>";
     return $countf;
-    }
-
-
-  /// 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
-    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    
-    $ilmid = optional_param('ilmid', NULL, PARAM_INT);
-    $dirid = $this->get_dir_ilm('dirid');
-    $dir_base = $this->get_dir_ilm('dir_base');
+    } // function get_files_in_context(&$filesfrommine, &$filesfromothers, $contextid, $extension, $userid)
 
-    // Get all files in module iAssign
-    // -- start
-    $array_all_files = array();           // all files from all context.id (in data decreasing order)
-    $array_contextid_files = array();     // context.id in data decreasing order
 
-    $array_contextid_files_aux = array(); // all context.id in data creasing order
-
-    // 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'";
-      }
-    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 . ")";
-      }
-    // 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 = 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/>";
-   
-    if (is_array($files_iassign))
-    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 { echo ".";// 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;
-          $total_in_context = $this->get_files_in_context($array_all_files, $contextid, $extension, $USER->id); // $array_all_files by reference
-
-          $count_all_files += $total_in_context;
-          }
-        }
-      }
-
-    //D echo "view_files_ilm: #array_contextid_files_aux=".count($array_contextid_files_aux). ", count_all_files=$count_all_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
-    $error_files_exists = "''"; // idem
-    for ($ii=$count_all_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];
-
-      $files_array = '';
-      $files_array .= "''";
-      $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] . "',";
-          }
-        } // foreach ($files_course as $one_file)
-      } // for ($ii=0; $ii<$num_contexts; $ii++)
+  // Function to get all iLM files from the same "file type": (usually) files under the same directory
+  // @calledby view_files_ilm($iassign_ilm_class, $extension, $start = 0)
+  function get_all_ilm_files_by_fileid ($fileid) {
+    global $DB, $USER;
+    //        $iassign_statement_activity_list = $DB->get_records("iassign_statement", array("file" => $fileid));
+    //TODO Criar coluna 'authorid'
+    $str_query = "SELECT * FROM {iassign_statement} " .
+                 " WHERE file = " . $fileid . " ORDER BY author_name, timecreated DESC";
+    $array_iassign_ilm = $DB->get_records_sql($str_query);
+    return $array_iassign_ilm;
+    }
 
-    print "#" . $count_all_files . "<br/>";
-    // -- end
 
-    $dirs_array .= "''";
+//NN
+  // Build string with JavaScript code with function to edit/remove/double iLM files
+  // @calledby view_files_ilm($iassign_ilm_class, $extension, $start = 0)
+  function get_string_JavaScript_functions ($dirid, $ilmid, $files_array, $dirs_array) {
+    global $CFG;
+    $error_files_exists = get_string('error_file_exists', 'iassign');
     $error_dir_exists = get_string('error_dir_exists', 'iassign');
-
-    //TODO Rever o 'preview' pois soh poder deixar ver uma vez
     $code_javascript_ilm = "
 <script type='text/javascript'>
  //<![CDATA[
@@ -6352,7 +6279,7 @@ class ilm_manager {
    function duplicate_ilm (ilmid, filename, fileid) { //JavaScript function
      var filenamecopy;
      var i;
-     var files = new Array($files_array);
+     var files = new Array(" . $files_array . ");
      do {
       filenamecopy = prompt ('" . get_string('duplicate_file', 'iassign') . "',filename);
        } while (filenamecopy == '');
@@ -6361,7 +6288,7 @@ class ilm_manager {
      else {
        for (i=0;i<files.length;i++) {
          if (files[i]==filenamecopy) {
-           alert('$error_files_exists');
+           alert('" . $error_files_exists . "');
            return false;\n
            }
          }\n" .
@@ -6384,7 +6311,7 @@ class ilm_manager {
      else {
        for (i=0;i<files.length;i++) {
          if (files[i]==filenamecopy) {
-           alert('$error_files_exists');
+           alert('" . $error_files_exists . "');
            return false;
            }
          }
@@ -6422,7 +6349,7 @@ class ilm_manager {
   function new_dir_ilm () { //JavaScript function
     var dirname = '';
     var i;
-    var dirs = new Array($dirs_array);
+    var dirs = new Array(" . $dirs_array . ");
     do {
      var dirname = prompt ('" . get_string('question_new_dir', 'iassign') . "', '');
     }  while (dirname == '');
@@ -6431,7 +6358,7 @@ class ilm_manager {
     else {
       for (i=0;i<dirs.length;i++) {
         if (dirs[i]==dirname) {
-          alert('$error_dir_exists');
+          alert('" . $error_dir_exists . "');
           return false;\n
           }
         }
@@ -6459,7 +6386,7 @@ class ilm_manager {
      else {
        for (i=0;i<dirs.length;i++) {
          if (dirs[i]==dirnamecopy) {
-           alert('$error_dir_exists');
+           alert('" . $error_dir_exists . "');
            return false;\n
            }
          }
@@ -6504,6 +6431,146 @@ class ilm_manager {
 
    //]]>
 </script>\n"; // end of $code_javascript_ilm
+     return $code_javascript_ilm;
+     } // function get_string_JavaScript_functions($dirid, $ilmid, $files_array, $dirs_array)
+
+
+  /// 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
+    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    
+    $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
+
+    // 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'";
+      }
+    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 . ")";
+      }
+    // 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);
+
+              $count_all_files_others += $total_in_context;
+              }
+            }
+          }
+        }
+      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;
+        }
+      }
+
+
+    // 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];
+
+      $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] . "',";
+          }
+        } // foreach ($files_course as $one_file)
+      } // for ($ii=0; $ii<$num_contexts; $ii++)
+
+    print "#" . $total_files . "<br/>";
+    // -- end
+
+    $dirs_array .= "''";
+    //NN $error_dir_exists = get_string('error_dir_exists', 'iassign');
+
+    //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
 
     $output = "";
     $select_all = "";
@@ -6514,8 +6581,8 @@ 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=$count_all_files-1; $ii>0; $ii--) { // function view_files_ilm ($iassign_ilm_class, $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];
@@ -6526,7 +6593,7 @@ class ilm_manager {
       $filepath = $one_file->get_filepath();
       $pathname = explode("/", substr($filepath, 0, strlen($filepath) - 1));
       $pathname = $pathname[count($pathname) - 1];
-      $fileid = $one_file->get_id();
+      $fileid = $one_file->get_id(); // get the file id (in table 'files')
 
       $tmp = explode(".", $filename);
       if (is_array($tmp)) { // define file type
@@ -6549,14 +6616,17 @@ class ilm_manager {
 
         // 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 = $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)
+
         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'));
+        $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
 
@@ -6588,7 +6658,7 @@ class ilm_manager {
           $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) {
+          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');
@@ -6597,7 +6667,7 @@ class ilm_manager {
                 }
              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_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";
                 }
@@ -6660,7 +6730,7 @@ class ilm_manager {
 
         } // if (in_array(strtolower($filetype), $extensions) || $one_file->is_directory() || $this->from == 'block' || $this->from == 'tinymce' || $this->from == 'atto')
 
-      } // for ($ii=$count_all_files-1; $ii>0; $ii--) // for ($ii=0; $ii<$num_contexts; $ii++)
+      } // 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 = "";
@@ -6705,7 +6775,7 @@ class ilm_manager {
     $html .= $OUTPUT->help_icon('file_ilm_recover', 'iassign') . "</td></tr></table>\n";
     $html .= "</form>\n";
 
-    print $code_javascript_ilm;
+    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 $html;
     } // function view_files_ilm($extension)