extension)' * locallib.php : function view_files_ilm($iassign_ilm, $extension) 6184/6732 * $link_filter = "  "... 6441/6734 * $link_filter = "  "... 6447/6734 * - v 2.7 2020/08/03 * + the 'utils' class was changed to "iassign utils" * - v 2.6 2016/05/12 * + the 'utils' class was changed to "iassign utils" * - v 2.5 2016/02/16 * + In 'optional_param(...)', some 'PARAM_ALPHANUMEXT' changed by 'PARAM_TEXT' * + Fixed bug, now allow to rename iLM files * - v 2.4 2013/10/24 * + Insert function for recover iassign file in course. * - v 2.3 2013/08/26 * + Fix bug to upload file from block. * - v 2.2 2013/08/23 * + Fix bug to import zip files. * - v 2.1 2013/08/22 * + Merge for import zip files and iassign files. * + Insert function for rename iassign file. * - v 2.0 2013/08/21 * + Change title link with message for get file for donwload file. * + Manage import files. * + Rename files for format accepted. * + Change position of close and return buttons. * - v 1.9 2013/08/15 * + Insert functions for import files, export files and remove selected files. * - v 1.8 2013/08/02 * + Insert return button for block view. * + Insert close button for iassign view. * - v 1.7 2013/07/03 * + Replace var 'DIRECTORY_SEPARATOR' for '/' (Server on Windows error of section) * + Diferent view of block and iassign in files views. * + Change button of open online editor ('open_online_ilm()'). * + View modified and created date in files views. * - v 1.3 2013/06/28 * + Correction function delete and duplicate. * + Allow copying the file from another user. * - v 1.1 2013/06/26 * + Filter file extension for permission only compatilbe with iLM and block view all user files. * * @author Patricia Alves Rodrigues * @author Leônidas O. Brandão * @version v 2.7 2019/03/13 * @version v 2.6 2016/05/12 * @package mod_iassign_ilm * @since 2012/01/10 * @copyright iMath (http://www.matematica.br) and LInE (http://line.ime.usp.br) - Computer Science Dep. of IME-USP (Brazil) * * License * - http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once("../../config.php"); require_once($CFG->dirroot . '/mod/iassign/lib.php'); require_once($CFG->dirroot . '/mod/iassign/locallib.php'); require_once($CFG->dirroot . '/mod/iassign/ilm_manager_form.php'); //DEBUG To exam files in Moodle data //D $id = optional_param('id', 0, PARAM_INT); // Course Module ID //D $action = optional_param('action', NULL, PARAM_TEXT); //2016:: PARAM_ALPHANUMEXT //D $from = optional_param('from', NULL, PARAM_TEXT); //2016:: PARAM_ALPHANUMEXT //D $ilmid = optional_param('ilmid', 1, PARAM_INT); //D $fileid = optional_param('fileid', 1, PARAM_INT); //D $url = "$CFG->wwwroot/mod/iassign/ilm_manager.php?from=$from&id=$id&ilmid=$ilmid"; //D $ilm_manager_instance = new ilm_manager($id, $url, $from); //D echo "ilm_manager.php: ilmid=$ilmid, fileid=$fileid
" . $ilm_manager_instance->get_file_ilm($ilmid, $fileid); exit; //D print $ilm_manager_instance->get_file_ilm($ilmid, $fileid); //D exit; require_login(); if (isguestuser()) { // Security! die(); } if (session_id() === "") session_start(); // Prepare iLM content file in secure are to the iLM access it function prepare_secure_access ($ilmid, $fileid, $userid) { require_once ('ilm_security.php'); // ./lib/moodlelib.php : function get_file_storage(): $fs = new file_storage($filedir, $trashdirdir, "$CFG->tempdir/filestorage", $CFG->directorypermissions, $CFG->filepermissions); // ./lib/filestorage/file_storage.php : class file_storage $fs = get_file_storage(); $md_file = $fs->get_file_by_id($fileid); $ilm_content_file = $md_file->get_content(); $timecreated = time(); $token = md5($timecreated); $filename = $md_file->get_filename(); // $md_file is instanceof 'class file_storage' from './lib/filestorage/file_storage.php' $id_iLM_security = ilm_security::write_iLM_security($userid, $timecreated, -1, $ilm_content_file); // insert in 'iassign_security': class with: iassign_statementid, userid, file,... $security = array('filename' => $filename, 'content' => $ilm_content_file, 'token' => $token, 'secure_id' => $id_iLM_security); return $security; } // Parameters GET or POST $id = optional_param('id', 0, PARAM_INT); // Course Module ID $action = optional_param('action', NULL, PARAM_TEXT); //2016:: PARAM_ALPHANUMEXT $from = optional_param('from', NULL, PARAM_TEXT); //2016:: PARAM_ALPHANUMEXT $ilmid = optional_param('ilmid', 1, PARAM_INT); if ($id>0) { // if reach here by iLM get request, id is not defined! $contextuser = context_user::instance($USER->id); $context = context_course::instance($id); } $url = $CFG->wwwroot . "/mod/iassign/ilm_manager.php?iLM_PARAM_Authoring=true&from=" . $from . "&id=" . $id . "&ilmid=" . $ilmid; //xx $course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST); //QUARANTINE it is not necessary to present the course in the header... $iassign_ilm = $DB->get_record('iassign_ilm', array('id' => $ilmid)); if (empty($iassign_ilm)) { $iassign_ilm = new stdClass(); $iassign_ilm->name = ""; $iassign_ilm->extension = ""; } $returnurl = optional_param('returnurl', NULL, PARAM_TEXT); if ($returnurl != NULL) $_SESSION['returnurl'] = optional_param('returnurl', $CFG->wwwroot . "/course/view.php?id=$id&ilmid=$ilmid", PARAM_TEXT); //2016:: PARAM_ALPHANUMEXT $title = get_string('ilm_manager_title', 'iassign'); if ($id>0) { // if reach here by iLM get request, id is not defined! $PAGE->set_url($url); $PAGE->set_context($context); //xx $PAGE->set_course($course); $PAGE->blocks->show_only_fake_blocks(); //xx $PAGE->set_title($course->fullname); if (is_null($action)) // first load: with iLM identification and with all iLM files of this iLM $PAGE->navbar->add($title); else $PAGE->navbar->add($title, $url); $PAGE->set_heading($title); } //Test: if (has_capability('mod/iassign:editiassign', $context, $USER->id)) echo "ilm_manager.php: permissao!
"; else echo "ilm_manager.php: SEM permissao!
"; if (has_capability('mod/iassign:editiassign', $context, $USER->id)) { $ilm_manager_instance = new ilm_manager($id, $url, $from); // ./locallib.php: class ilm_manager //echo "ilm_manager.php: $id, $url, $from
"; $dirid = $ilm_manager_instance->get_dir_ilm('dirid'); // ./locallib.php: class ilm_manager: // Enter here whenever : teacher is viewing/creating an iLM content (preview), here is called by the iLM do not verify credentials. if ($action == 'get') { $fileid = optional_param('fileid', 1, PARAM_INT); return $ilm_manager_instance->get_file_ilm($ilmid, $fileid); } if ($action) { // avoid several tests when empty... switch ($action) { // '$ilm_manager_instance' instace of 'locallib.php : class ilm_manager' case 'new': $ilm_manager_instance->ilm_editor_new(); // ./mod/iassign/locallib.php: function ilm_editor_new() break; case 'update': $fileid = optional_param('fileid', NULL, PARAM_INT); $security = prepare_secure_access($ilmid, $fileid, $USER->id); //x $ilm_manager_instance->ilm_editor_update(); $ilm_manager_instance->ilm_editor_update($security['filename'], $security['content'], $security['token'], $security['secure_id']); break; case 'delete': $ilm_manager_instance->delete_file_ilm(); break; case 'duplicate': $ilm_manager_instance->duplicate_file_ilm(); break; case 'rename': $ilm_manager_instance->rename_file_ilm(); break; case 'preview': // The function bellow calls '/filter/iassign_filter/filter.php' function 'filter($text, array $options = array())' and exit (do not continue bellow) //// prepare_secure_access(): array('content' => $ilm_content_file, 'token' => $token, 'secure_id' => $id_iLM_security) if (isset($iassign_statementid)) $ilm_manager_instance->preview_ilm($id, $iassign_ilm, $iassign_statementid); // in '/mod/iassign/locallib.php' else $ilm_manager_instance->preview_ilm($id, $iassign_ilm); // in '/mod/iassign/locallib.php' break; case 'addilm': $ilm_manager_instance->add_ilm(); break; case 'tinymceilm': $fileid = optional_param('fileid', NULL, PARAM_INT); $ilm_manager_instance->editor_ilm($fileid, 'tinyMCE'); // $ilm_manager_instance->tinymce_ilm($fileid); break; case 'attoilm': $fileid = optional_param('fileid', NULL, PARAM_INT); $ilm_manager_instance->editor_ilm($fileid, 'atto'); // $ilm_manager_instance->atto_ilm($fileid); break; case 'export': $ilm_manager_instance->export_files_ilm(); break; case 'import': $ilm_manager_instance->import_files_ilm(); break; case 'selected_delete': $ilm_manager_instance->delete_selected_ilm(); break; case 'new_dir': $ilm_manager_instance->new_dir_ilm(); break; case 'delete_dir': $ilm_manager_instance->delete_dir_ilm(); break; case 'rename_dir': $ilm_manager_instance->rename_dir_ilm(); break; case 'selected_move': $ilm_manager_instance->selected_move_ilm(); break; case 'move': $ilm_manager_instance->move_files_ilm(); break; case 'recover': $ilm_manager_instance->recover_files_ilm(); break; } } // if ($action) $mform = new ilm_manager_form(); // ./mod/iassign/ilm_manager_form.php $param = new stdClass(); $param->id = $id; $param->from = $from; $param->ilmid = $ilmid; $param->dirid = $dirid; $mform->set_data($param); if ($mform->is_cancelled()) { redirect(new moodle_url("/course/view.php?id=" . $id)); } else if ($formdata = $mform->get_data()) { // if exists '$mform->get_data()' use with '$formdata' $fs = get_file_storage(); if ($formdata->dirid == 0) $dir_base = '/'; else { $dir_base = $fs->get_file_by_id($formdata->dirid); //$dir_base = $dir_base->get_filepath(); } if ($newfilename = $mform->get_new_filename('file')) { $url = $CFG->wwwroot . "/mod/iassign/ilm_manager.php?from=" . $formdata->from . "&id=" . $id . "&ilmid=" . $ilmid . "&dirid=" . $formdata->dirid; $file_extension_array = explode(".", $newfilename); $index_last_ext = count($file_extension_array) - 1; if ($index_last_ext < 0) $file_extension = ""; else $file_extension = $file_extension_array[$index_last_ext]; if (strtolower($file_extension) != 'zip') { $filename = $newfilename; $files_course = $fs->get_directory_files($context->id, 'mod_iassign', 'activity', 0, '/', false, true, 'filename'); if ($files_course) { foreach ($files_course as $value) { if ($value->get_filename() == $newfilename) { $filename = iassign_utils::version_filename($value->get_filename()); } } } $ilm_extensions = explode(",", $iassign_ilm->extension); if (in_array($file_extension, $ilm_extensions)) $file = $mform->save_stored_file( 'file', $context->id, 'mod_iassign', 'activity', 0, '/', $filename, 0, $USER->id); else if ($from == 'block' || $from == 'tinymce' || $from == 'atto') $file = $mform->save_stored_file('file', $context->id, 'mod_iassign', 'activity', 0, $dir_base, iassign_utils::format_filename($filename), 0, $USER->id); else $url .= "&error=incompatible_extension_file"; } else { // if (strtolower($file_extension[1]) != 'zip') $zip_filename = $CFG->dataroot . '/temp/' . $newfilename; $zip = new zip_packer(); $mform->save_file('file', $zip_filename, true) or die("Save file not found"); $zip_files = $zip->list_files($zip_filename); $files = $fs->get_directory_files($context->id, 'mod_iassign', 'activity', 0, $dir_base, false, true, 'filename'); //TODO: --- inicio : linhas abaixo estavam comentadas, mas noutra versao funcional (MOOC) estao ativas $rename_files = array(); foreach ($zip_files as $zip_file) { foreach ($files as $file) { if (iassign_utils::format_filename($zip_file->original_pathname) == $file->get_filename()) $rename_files = array_merge($rename_files, array(iassign_utils::version_filename(iassign_utils::format_filename($zip_file->original_pathname)) => iassign_utils::format_filename($zip_file->original_pathname))); } } //TODO: --- final 2016/02/16 $zip->extract_to_storage($zip_filename, $context->id, 'mod_iassign', 'activity', 0, $dir_base, $USER->id); //TODO: --- inicio : linhas abaixo estavam comentadas, mas noutra versao funcional (MOOC) estao ativas $files = $fs->get_area_files($context->id, 'mod_iassign', 'activity', 0, 'filename'); foreach ($files as $file) { if ($file->get_author() == "") { $file->set_author($USER->firstname . ' ' . $USER->lastname); if ($new_name = array_search($file->get_filename(), $rename_files)) $file->rename($dir_base, $new_name); else if ($file->get_filename() != '.' && $file->get_filename() != iassign_utils::format_filename($file->get_filename())) $file->rename($dir_base, iassign_utils::format_filename($file->get_filename())); } } //TODO: --- final 2016/02/16 unlink($zip_filename); } // else if (strtolower($file_extension[1]) != 'zip') $fs->delete_area_files($contextuser->id, 'user', 'draft', $formdata->file); } // if ($newfilename = $mform->get_new_filename('file')) redirect(new moodle_url($url)); } // else if ($formdata = $mform->get_data()) - 172/271,10 print $OUTPUT->header(); if ($from == 'iassign') { // came from iAssign (./mod/iassign/ilm_manager_form.php) => is selection of iLM activity file print '
' . "\n" . '
' . "\n"; // 'Close this window (any change will be lost)' } else if ($from == 'block') { //returnurl if (isset($_SERVER['HTTP_REFERER'])) $strh=$_SERVER['HTTP_REFERER']; else $strh="<>, from=$from
"; if (isset($_SERVER['HTTP_REFERER'])) print '
' . "\n"; } else if ($from == 'tinymce' || $from == 'atto') { print '
' . "\n"; } else if ($from == 'qtype') { // print $OUTPUT->header(); print $OUTPUT->heading($title); print '
' . "\n"; } if (!is_null($error = optional_param('error', NULL, PARAM_TEXT))) print $OUTPUT->notification(get_string($error, 'iassign'), 'notifyproblem'); $mform->display(); $ilm_manager_instance->view_files_ilm($iassign_ilm, $iassign_ilm->extension); // locallib.php : function view_files_ilm($iassign_ilm, $extension) print $OUTPUT->footer(); die; } // if (has_capability('mod/iassign:editiassign', $context, $USER->id))