From e5c89630af0149e6c4eceb5a14cbeb1aa6b2cc0d Mon Sep 17 00:00:00 2001 From: David Castro Date: Thu, 13 Apr 2023 14:03:38 -0500 Subject: [PATCH] MDL-77791 data: Fix file attachment to search doc --- mod/data/classes/search/entry.php | 28 ++++++++++++++++++---- mod/data/tests/search/search_test.php | 34 +++++++++++++-------------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/mod/data/classes/search/entry.php b/mod/data/classes/search/entry.php index 7cf20be4d71..35b5ec89d9a 100644 --- a/mod/data/classes/search/entry.php +++ b/mod/data/classes/search/entry.php @@ -239,12 +239,30 @@ class entry extends \core_search\base_mod { $cm = $this->get_cm('data', $entry->dataid, $doc->get('courseid')); $context = \context_module::instance($cm->id); - // Get the files and attach them. - $fs = get_file_storage(); - $files = $fs->get_area_files($context->id, 'mod_data', 'content', $entryid, 'filename', false); - foreach ($files as $file) { - $doc->add_stored_file($file); + // Get all content fields which have files in them. + $contentssql = " + SELECT con.* + FROM {data_content} con + JOIN {files} fil + ON fil.component = :component + AND fil.filearea = :filearea + AND fil.itemid = con.id + WHERE con.recordid = :recordid + "; + $contents = $DB->get_recordset_sql($contentssql, [ + 'recordid' => $entryid, + 'component' => 'mod_data', + 'filearea' => 'content', + ]); + foreach ($contents as $content) { + // Get the files and attach them. + $fs = get_file_storage(); + $files = $fs->get_area_files($context->id, 'mod_data', 'content', $content->id, 'filename', false); + foreach ($files as $file) { + $doc->add_stored_file($file); + } } + $contents->close(); } /** diff --git a/mod/data/tests/search/search_test.php b/mod/data/tests/search/search_test.php index 7d6f1642ffe..5d2569d570d 100644 --- a/mod/data/tests/search/search_test.php +++ b/mod/data/tests/search/search_test.php @@ -923,22 +923,22 @@ class search_test extends \advanced_testcase { $data1record1id = $DB->insert_record('data_records', $record); - $filerecord = array( - 'contextid' => \context_module::instance($data1->cmid)->id, - 'component' => 'mod_data', - 'filearea' => 'content', - 'itemid' => $data1record1id, - 'filepath' => '/', - 'filename' => 'myfile1.txt' - ); - - $data1record1file = $fs->create_file_from_string($filerecord, 'Some contents 1'); - $record = new \stdClass; $record->fieldid = $data1filefieldid; $record->recordid = $data1record1id; $record->content = 'myfile1.txt'; - $DB->insert_record('data_content', $record); + $data1contentfileid1 = $DB->insert_record('data_content', $record); + + $filerecord = [ + 'contextid' => \context_module::instance($data1->cmid)->id, + 'component' => 'mod_data', + 'filearea' => 'content', + 'itemid' => $data1contentfileid1, + 'filepath' => '/', + 'filename' => 'myfile1.txt' + ]; + + $data1record1file = $fs->create_file_from_string($filerecord, 'Some contents 1'); $record = new \stdClass; $record->fieldid = $data1textfieldid; @@ -960,15 +960,15 @@ class search_test extends \advanced_testcase { $record->groupid = 0; $data1record2id = $DB->insert_record('data_records', $record); - $filerecord['itemid'] = $data1record2id; - $filerecord['filename'] = 'myfile2.txt'; - $data1record2file = $fs->create_file_from_string($filerecord, 'Some contents 2'); - $record = new \stdClass; $record->fieldid = $data1filefieldid; $record->recordid = $data1record2id; $record->content = 'myfile2.txt'; - $DB->insert_record('data_content', $record); + $data1contentfileid2 = $DB->insert_record('data_content', $record); + + $filerecord['itemid'] = $data1contentfileid2; + $filerecord['filename'] = 'myfile2.txt'; + $data1record2file = $fs->create_file_from_string($filerecord, 'Some contents 2'); $record = new \stdClass; $record->fieldid = $data1textfieldid;