Skip to content

Commit 087af25

Browse files
authored
Merge pull request #27 from silverstripeltd/feature/AOS-295-large-document-report-visibility-cms6
AOS-295: CMS6 large document report visibility
2 parents 50d64d6 + cf87360 commit 087af25

File tree

6 files changed

+60
-13
lines changed

6 files changed

+60
-13
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,12 @@ SilverStripe\Forager\Service\IndexConfiguration:
110110

111111
### File attachments for content extraction
112112

113-
Firstly, you will need to set this environment variable. This will apply an extension to the `File` class, and allow you to use the `_attachment` field (detailed below).
113+
Firstly, you will need to apply the FileExtension extension onto Files. This extension will allow you to use the `_attachment` field (detailed below).
114114

115115
```yaml
116-
SEARCH_INDEX_FILES=1
116+
SilverStripe\Assets\File:
117+
extensions:
118+
ForagerBifrostFileExtension: SilverStripe\ForagerBifrost\Extensions\FileExtension
117119
```
118120

119121
Silverstripe Search supports content extraction for many different file types. These can be attached to your Documents using an `_attachment` field of type `binary`.

_config/extensions.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
---
22
Name: forager-bifrost-extensions
3-
Only:
4-
envvarset: SEARCH_INDEX_FILES
53
---
6-
SilverStripe\Assets\File:
7-
extensions:
8-
ForagerBifrostFileExtension: SilverStripe\ForagerBifrost\Extensions\FileExtension
9-
104
SilverStripe\AssetAdmin\Forms\FileFormFactory:
115
extensions:
126
ForagerBifrostFileFormExtension: SilverStripe\ForagerBifrost\Extensions\FileFormExtension

src/Extensions/FileFormExtension.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use SilverStripe\Assets\Image;
77
use SilverStripe\Control\RequestHandler;
88
use SilverStripe\Core\Extension;
9+
use SilverStripe\Core\Injector\Injector;
910
use SilverStripe\ForagerBifrost\Constants\SearchFile;
1011
use SilverStripe\Forms\FieldList;
1112
use SilverStripe\Forms\Form;
@@ -27,6 +28,12 @@ public function updateForm(
2728
string $name = FormFactory::DEFAULT_NAME,
2829
array $context = []
2930
): void {
31+
$fileClass = Injector::inst()->get(File::class);
32+
33+
if (!$fileClass->hasExtension(FileExtension::class)) {
34+
return;
35+
}
36+
3037
/** @var FieldList $fields */
3138
$fields = $form->Fields()->fieldByName('Editor.Details');
3239
$file = $context['Record'] ?? null;
@@ -79,7 +86,7 @@ private function createLargeFileWarning(File $file): ?LiteralField
7986
_t(
8087
self::class . '.LARGE_FILE_WARNING',
8188
'Text contained within this {size} file cannot be indexed for search. '
82-
. 'The file size limit for text extraction is {limit}.',
89+
. 'The file size limit for text extraction is {limit}.',
8390
[
8491
'size' => $file->getSize(),
8592
'limit' => SearchFile::sizeLimit(),

src/Reports/LargeDocumentReport.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
namespace SilverStripe\ForagerBifrost\Reports;
44

55
use SilverStripe\Assets\File;
6+
use SilverStripe\Core\Injector\Injector;
67
use SilverStripe\ForagerBifrost\Constants\SearchFile;
8+
use SilverStripe\ForagerBifrost\Extensions\FileExtension;
79
use SilverStripe\Model\List\SS_List;
810
use SilverStripe\Reports\Report;
911

@@ -21,6 +23,10 @@ class LargeDocumentReport extends Report
2123

2224
public function description(): string
2325
{
26+
if (!$this->isReportActive()) {
27+
return 'This report requires the FileExtension being applied to Files.';
28+
}
29+
2430
return sprintf(
2531
$this->description,
2632
SearchFile::sizeLimit()
@@ -44,4 +50,22 @@ public function sourceRecords(array $params = []): SS_List
4450
->sort(['Created' => 'DESC']);
4551
}
4652

53+
/**
54+
* @inheritDoc
55+
*/
56+
public function canView($member = null): bool
57+
{
58+
return $this->isReportActive();
59+
}
60+
61+
/**
62+
* This report can only be active if the required extension is enabled
63+
*/
64+
private function isReportActive(): bool
65+
{
66+
$fileClass = Injector::inst()->get(File::class);
67+
68+
return $fileClass->has_extension(FileExtension::class);
69+
}
70+
4771
}

tests/Extensions/FileExtensionTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use SilverStripe\Assets\Dev\TestAssetStore;
66
use SilverStripe\Assets\File;
77
use SilverStripe\Assets\Folder;
8-
use SilverStripe\Core\Environment;
98
use SilverStripe\Dev\SapphireTest;
109
use SilverStripe\Forager\Extensions\SearchServiceExtension;
1110
use SilverStripe\ForagerBifrost\Extensions\FileExtension;
@@ -102,7 +101,6 @@ protected function setUp(): void
102101
parent::setUp();
103102

104103
TestAssetStore::activate('SearchFileTest');
105-
Environment::setEnv('SEARCH_INDEX_FILES', 1);
106104
}
107105

108106
protected function tearDown(): void

tests/Reports/LargeDocumentReportTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use SilverStripe\Assets\Dev\TestAssetStore;
66
use SilverStripe\Assets\File;
7-
use SilverStripe\Core\Environment;
87
use SilverStripe\Dev\SapphireTest;
98
use SilverStripe\Forager\Extensions\SearchServiceExtension;
109
use SilverStripe\ForagerBifrost\Extensions\FileExtension;
@@ -34,6 +33,25 @@ public function testDescription(): void
3433
'Documents excluded for content ingestion in Silverstripe Search which exceeds 15 MB',
3534
$report->description()
3635
);
36+
37+
// Removing extension should result in a new description
38+
$this->removeFileExtension();
39+
$this->assertEquals(
40+
'This report requires the FileExtension being applied to Files.',
41+
$report->description()
42+
);
43+
44+
}
45+
46+
public function testCanView(): void
47+
{
48+
$report = new LargeDocumentReport();
49+
50+
$this->assertTrue($report->canView());
51+
52+
// When the extension is not present on the File then the report should not be viewable
53+
$this->removeFileExtension();
54+
$this->assertfalse($report->canView());
3755
}
3856

3957
public function testColumns(): void
@@ -70,12 +88,16 @@ public function testSourceRecords(): void
7088
$this->assertEquals($file21MbId, $files->first()->ID);
7189
}
7290

91+
protected function removeFileExtension(): void
92+
{
93+
File::remove_extension(FileExtension::class);
94+
}
95+
7396
protected function setUp(): void
7497
{
7598
parent::setUp();
7699

77100
TestAssetStore::activate('SearchFileTest');
78-
Environment::setEnv('SEARCH_INDEX_FILES', 1);
79101
}
80102

81103
protected function tearDown(): void

0 commit comments

Comments
 (0)