Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show in search check for files #92

Merged
merged 13 commits into from
May 2, 2024
3 changes: 3 additions & 0 deletions _config/extensions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ SilverStripe\ORM\FieldType\DBHTMLVarchar:
Symbiote\QueuedJobs\Controllers\QueuedJobsAdmin:
extensions:
- SilverStripe\SearchService\Extensions\QueuedJobsAdminExtension
SilverStripe\AssetAdmin\Forms\FileFormFactory:
extensions:
- SilverStripe\SearchService\Extensions\SearchFormFactoryExtension
---
Name: 'silverstripe-search-service-cms'
Only:
Expand Down
58 changes: 58 additions & 0 deletions src/Extensions/SearchFormFactoryExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php

namespace SilverStripe\SearchService\Extensions;

use SilverStripe\Control\RequestHandler;
use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Extension;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\DatetimeField;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\FormFactory;

class SearchFormFactoryExtension extends Extension
{

public function updateForm(
Form $form,
?RequestHandler $controller = null,
string $name = FormFactory::DEFAULT_NAME,
array $context = []
): void {
$fields = $form->Fields()->findOrMakeTab('Editor.Details');
$file = $context['Record'] ?? null;

$excludedClasses = Config::inst()->get(self::class, 'exclude_classes') ?? [];
blueo marked this conversation as resolved.
Show resolved Hide resolved
$excludeFileTypes = Config::inst()->get(self::class, 'exclude_file_extensions') ?? [];

if (!$fields
|| !$file
|| in_array($file->ClassName, $excludedClasses)
|| in_array($file->getExtension(), $excludeFileTypes)
) {
return;
}

$fields->push(
CheckboxField::create(
'ShowInSearch',
_t(
'SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.SHOWINSEARRCH',
'Show in search?'
)
)
);

$fields->push(
DatetimeField::create(
'SearchIndexed',
_t(
'SilverStripe\\SearchService\\Extensions\\SearchServiceExtension.LastIndexed',
'Last indexed in search'
)
)
->setReadonly(true)
);
}

}
15 changes: 12 additions & 3 deletions src/Extensions/SearchServiceExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Exception;
use SilverStripe\Core\Config\Configurable;
use SilverStripe\Core\Injector\Injectable;
use SilverStripe\Forms\CheckboxField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\ReadonlyField;
use SilverStripe\ORM\DataExtension;
Expand Down Expand Up @@ -36,9 +37,14 @@ class SearchServiceExtension extends DataExtension
use BatchProcessorAware;

private static array $db = [
'ShowInSearch' => 'Boolean',
'SearchIndexed' => 'Datetime',
];

private static $defaults = [
'ShowInSearch' => true,
];

private bool $hasConfigured = false;

public function __construct(
Expand All @@ -59,12 +65,15 @@ public function updateCMSFields(FieldList $fields): void
return;
}

$field = ReadonlyField::create('SearchIndexed', _t(self::class.'.LastIndexed', 'Last indexed in search'));
$showInSearchField = CheckboxField::create("ShowInSearch", _t(self::class . '.ShowInSearch', 'Show in search?'));
$searchIndexedField = ReadonlyField::create('SearchIndexed', _t(self::class . '.LastIndexed', 'Last indexed in search'));

if ($fields->hasTabSet()) {
$fields->addFieldToTab('Root.Main', $field);
$fields->addFieldToTab('Root.Main', $showInSearchField);
$fields->addFieldToTab('Root.Main', $searchIndexedField);
} else {
$fields->push($field);
$fields->push($showInSearchField);
$fields->push($searchIndexedField);
}
}

Expand Down
27 changes: 27 additions & 0 deletions tests/DataObject/DataObjectDocumentTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -758,4 +758,31 @@ public function testIndexDataObjectDocument(): void
});
}

public function testIndexDataObjectDocumentShowInSearch(): void
{
$dataObject = $this->objFromFixture(DataObjectFakeVersioned::class, 'two');
$doc = DataObjectDocument::create($dataObject);

$config = $this->mockConfig();
$config->set(
'getIndexesForDocument',
[
$doc->getIdentifier() => [
'index' => 'data',
],
]
);

// Should not index as ShowInSearch is false for this DataObject
$this->assertFalse($doc->shouldIndex());

// Should index as ShowInSearch is now set to true
$dataObject->ShowInSearch = true;
$dataObject->publishRecursive();
blueo marked this conversation as resolved.
Show resolved Hide resolved

$doc = DataObjectDocument::create($dataObject);

$this->assertTrue($doc->shouldIndex());
}

}
1 change: 0 additions & 1 deletion tests/Fake/DataObjectFake.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class DataObjectFake extends DataObject implements TestOnly

private static array $db = [
'Title' => 'Varchar',
'ShowInSearch' => 'Boolean',
'Sort' => 'Int',
];

Expand Down