diff --git a/lib/form/filemanager.php b/lib/form/filemanager.php index 4687bf7a945..cc285cdd871 100644 --- a/lib/form/filemanager.php +++ b/lib/form/filemanager.php @@ -14,19 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . - -/** - * FileManager form element - * - * Contains HTML class for a filemanager form element - * - * @package core_form - * @copyright 2009 Dongsheng Cai - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ +use core\context\user; global $CFG; - require_once('HTML/QuickForm/element.php'); require_once($CFG->dirroot.'/lib/filelib.php'); require_once($CFG->dirroot.'/repository/lib.php'); @@ -35,7 +25,8 @@ require_once('templatable_form_element.php'); /** * Filemanager form element * - * FilemaneManager lets user to upload/manage multiple files + * Contains HTML class for a filemanager form element + * * @package core_form * @category form * @copyright 2009 Dongsheng Cai @@ -309,6 +300,29 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element implements temp return $html; } + /** + * What to display when element is frozen + * + * @return string + */ + public function getFrozenHtml(): string { + global $USER; + + $filelist = []; + + // List all of the current draft files. + $usercontext = user::instance($USER->id); + $files = get_file_storage()->get_area_files($usercontext->id, 'user', 'draft', $this->getValue(), 'id', false); + foreach ($files as $file) { + $filelist[] = html_writer::link( + moodle_url::make_draftfile_url($file->get_itemid(), $file->get_filepath(), $file->get_filename(), true), + $file->get_filename(), + ); + } + + return html_writer::alist($filelist) . $this->_getPersistantData(); + } + public function export_for_template(renderer_base $output) { $context = $this->export_for_template_base($output); $context['html'] = $this->toHtml(); @@ -429,7 +443,7 @@ class form_filemanager implements renderable { $this->options = file_get_drafarea_files($options->itemid, '/'); // calculate file count - $usercontext = context_user::instance($USER->id); + $usercontext = user::instance($USER->id); $files = $fs->get_area_files($usercontext->id, 'user', 'draft', $options->itemid, 'id', false); $filecount = count($files); $this->options->filecount = $filecount; diff --git a/lib/form/tests/filemanager_test.php b/lib/form/tests/filemanager_test.php new file mode 100644 index 00000000000..9c141dcd8ad --- /dev/null +++ b/lib/form/tests/filemanager_test.php @@ -0,0 +1,68 @@ +. + +namespace core_form; + +use advanced_testcase; +use core\context\user; +use core\output\html_writer; +use core\url; +use MoodleQuickForm_filemanager; + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once("{$CFG->libdir}/form/filemanager.php"); + +/** + * Tests for the filemanager form element + * + * @package core_form + * @covers \MoodleQuickForm_filemanager + * @copyright 2026 Paul Holden + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +final class filemanager_test extends advanced_testcase { + /** + * Test retrieving frozen HTML + */ + public function test_get_frozen_html(): void { + global $USER; + + $this->resetAfterTest(); + $this->setAdminUser(); + + $file = get_file_storage()->create_file_from_string([ + 'contextid' => user::instance($USER->id)->id, + 'userid' => $USER->id, + 'component' => 'user', + 'filearea' => 'draft', + 'itemid' => file_get_unused_draft_itemid(), + 'filepath' => '/', + 'filename' => 'Hello.txt', + ], 'Hello'); + + $element = new MoodleQuickForm_filemanager('file', 'File'); + $element->setValue($file->get_itemid()); + + $draftfileurl = url::make_draftfile_url($file->get_itemid(), $file->get_filepath(), $file->get_filename(), true); + + $this->assertStringContainsString( + html_writer::link($draftfileurl, $file->get_filename()), + $element->getFrozenHtml(), + ); + } +}