Skip to content

Commit 0c7ab71

Browse files
committed
AOS-295: CMS6 large document report visibility
1 parent 50d64d6 commit 0c7ab71

File tree

6 files changed

+71
-5
lines changed

6 files changed

+71
-5
lines changed

_config/extensions.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
---
22
Name: forager-bifrost-extensions
3-
Only:
4-
envvarset: SEARCH_INDEX_FILES
53
---
64
SilverStripe\Assets\File:
75
extensions:

src/Extensions/FileExtension.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use SilverStripe\Assets\Image;
88
use SilverStripe\Core\Convert;
99
use SilverStripe\Core\Extension;
10+
use SilverStripe\Core\Injector\Injector;
11+
use SilverStripe\Forager\Extensions\SearchServiceExtension;
1012
use SilverStripe\ForagerBifrost\Constants\SearchFile;
1113

1214
/**
@@ -33,6 +35,12 @@ class FileExtension extends Extension
3335
*/
3436
public function updateSearchAttributes(array &$attributes = []): void
3537
{
38+
$fileClass = Injector::inst()->get(File::class);
39+
40+
if (!$fileClass->hasExtension(SearchServiceExtension::class)) {
41+
return;
42+
}
43+
3644
if (!isset($attributes['_attachment'])) {
3745
return;
3846
}
@@ -60,6 +68,12 @@ public function getBase64String(): ?string
6068

6169
public function onBeforeWrite(): void
6270
{
71+
$fileClass = Injector::inst()->get(File::class);
72+
73+
if (!$fileClass->hasExtension(SearchServiceExtension::class)) {
74+
return;
75+
}
76+
6377
$file = $this->getOwner();
6478

6579
// Marks images and folders with zero content to exclude them from report generation

src/Extensions/FileFormExtension.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
use SilverStripe\Assets\Image;
77
use SilverStripe\Control\RequestHandler;
88
use SilverStripe\Core\Extension;
9+
use SilverStripe\Core\Injector\Injector;
10+
use SilverStripe\Forager\Extensions\SearchServiceExtension;
911
use SilverStripe\ForagerBifrost\Constants\SearchFile;
1012
use SilverStripe\Forms\FieldList;
1113
use SilverStripe\Forms\Form;
@@ -27,6 +29,12 @@ public function updateForm(
2729
string $name = FormFactory::DEFAULT_NAME,
2830
array $context = []
2931
): void {
32+
$fileClass = Injector::inst()->get(File::class);
33+
34+
if (!$fileClass->hasExtension(SearchServiceExtension::class)) {
35+
return;
36+
}
37+
3038
/** @var FieldList $fields */
3139
$fields = $form->Fields()->fieldByName('Editor.Details');
3240
$file = $context['Record'] ?? null;
@@ -79,7 +87,7 @@ private function createLargeFileWarning(File $file): ?LiteralField
7987
_t(
8088
self::class . '.LARGE_FILE_WARNING',
8189
'Text contained within this {size} file cannot be indexed for search. '
82-
. 'The file size limit for text extraction is {limit}.',
90+
. 'The file size limit for text extraction is {limit}.',
8391
[
8492
'size' => $file->getSize(),
8593
'limit' => SearchFile::sizeLimit(),

src/Reports/LargeDocumentReport.php

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

55
use SilverStripe\Assets\File;
6+
use SilverStripe\Core\Injector\Injector;
7+
use SilverStripe\Forager\Extensions\SearchServiceExtension;
68
use SilverStripe\ForagerBifrost\Constants\SearchFile;
79
use SilverStripe\Model\List\SS_List;
810
use SilverStripe\Reports\Report;
@@ -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 SEARCH_INDEX_FILES environment variable and file extension.';
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(SearchServiceExtension::class);
69+
}
70+
4771
}

tests/Extensions/FileExtensionTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ protected function setUp(): void
102102
parent::setUp();
103103

104104
TestAssetStore::activate('SearchFileTest');
105-
Environment::setEnv('SEARCH_INDEX_FILES', 1);
106105
}
107106

108107
protected function tearDown(): void

tests/Reports/LargeDocumentReportTest.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,25 @@ public function testDescription(): void
3434
'Documents excluded for content ingestion in Silverstripe Search which exceeds 15 MB',
3535
$report->description()
3636
);
37+
38+
// Removing extension should result in a new description
39+
$this->removeFileExtension();
40+
$this->assertEquals(
41+
'This report requires the SEARCH_INDEX_FILES environment variable and file extension.',
42+
$report->description()
43+
);
44+
45+
}
46+
47+
public function testCanView(): void
48+
{
49+
$report = new LargeDocumentReport();
50+
51+
$this->assertTrue($report->canView());
52+
53+
// When the extension is not present on the File then the report should not be viewable
54+
$this->removeFileExtension();
55+
$this->assertfalse($report->canView());
3756
}
3857

3958
public function testColumns(): void
@@ -70,12 +89,16 @@ public function testSourceRecords(): void
7089
$this->assertEquals($file21MbId, $files->first()->ID);
7190
}
7291

92+
protected function removeFileExtension(): void
93+
{
94+
File::remove_extension(SearchServiceExtension::class);
95+
}
96+
7397
protected function setUp(): void
7498
{
7599
parent::setUp();
76100

77101
TestAssetStore::activate('SearchFileTest');
78-
Environment::setEnv('SEARCH_INDEX_FILES', 1);
79102
}
80103

81104
protected function tearDown(): void

0 commit comments

Comments
 (0)