Skip to content

Commit b3fcf8b

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

File tree

6 files changed

+64
-5
lines changed

6 files changed

+64
-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: 12 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,11 @@ class FileExtension extends Extension
3335
*/
3436
public function updateSearchAttributes(array &$attributes = []): void
3537
{
38+
$fileClass = Injector::inst()->get(File::class);
39+
if (!$fileClass->hasExtension(SearchServiceExtension::class)) {
40+
return;
41+
}
42+
3643
if (!isset($attributes['_attachment'])) {
3744
return;
3845
}
@@ -60,6 +67,11 @@ public function getBase64String(): ?string
6067

6168
public function onBeforeWrite(): void
6269
{
70+
$fileClass = Injector::inst()->get(File::class);
71+
if (!$fileClass->hasExtension(SearchServiceExtension::class)) {
72+
return;
73+
}
74+
6375
$file = $this->getOwner();
6476

6577
// 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,13 +6,16 @@
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;
1214
use SilverStripe\Forms\FormFactory;
1315
use SilverStripe\Forms\LiteralField;
1416
use SilverStripe\View\HTML;
1517

18+
1619
class FileFormExtension extends Extension
1720
{
1821

@@ -27,6 +30,11 @@ public function updateForm(
2730
string $name = FormFactory::DEFAULT_NAME,
2831
array $context = []
2932
): void {
33+
$fileClass = Injector::inst()->get(File::class);
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: 19 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;
@@ -44,4 +46,21 @@ public function sourceRecords(array $params = []): SS_List
4446
->sort(['Created' => 'DESC']);
4547
}
4648

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

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)