Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: CI

on:
pull_request: null

jobs:
Silverstripe:
name: 'Silverstripe (bundle)'
uses: nswdpc/ci-files/.github/workflows/silverstripe_53_83.yml@v-4
PHPStan:
name: 'PHPStan (analyse)'
uses: nswdpc/ci-files/.github/workflows/phpstan.silverstripe_83.yml@v-4
needs: Silverstripe
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
/vendor/
.DS_Store
/.php-cs-fixer.cache
/public/
/composer.lock
21 changes: 0 additions & 21 deletions .php-cs-fixer.dist.php

This file was deleted.

51 changes: 47 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,69 @@
"role": "Developer"
}
],
"repositories": [
{
"type": "vcs",
"url": "https://codeberg.org/codemdev/silverstripe-typesense.git"
}
],
"support": {
"key" : "value"
"key": "value"
},
"require": {
"nswdpc/waratah": "^2",
"nswdpc/silverstripe-typesense-elemental": "^0.2",
"nswdpc/silverstripe-typesense-elemental": "dev-dev-stan-modules as 0.2.9999",
"silverstripe/asset-admin": "*",
"silverstripe/linkfield": "*",
"silverstripe/framework": "^5",
"silverstripe/tagfield": "*"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
"friendsofphp/php-cs-fixer": "^3"
"cambis/silverstan": "^2",
"cambis/silverstripe-rector": "^2",
"friendsofphp/php-cs-fixer": "^3",
"nswdpc/ci-files": "dev-v-4",
"phpstan/phpstan": "^2",
"rector/rector": "^2"
},
"autoload": {
"psr-4": {
"NSWDPC\\Waratah\\Typesense\\": [
"src/"
]
}
}
},
"scripts": {
"phpstan-analyse": "./vendor/bin/phpstan analyse --ansi --no-progress --no-interaction --configuration vendor/nswdpc/ci-files/phpstan/.phpstan.silverstripe.neon src/",
"rector-dryrun": "./vendor/bin/rector process --dry-run --ansi --config vendor/nswdpc/ci-files/rector/.rector.silverstripe_53_83.php src/ tests/*.php",
"rector-process": "./vendor/bin/rector process --no-diffs --ansi --config vendor/nswdpc/ci-files/rector/.rector.silverstripe_53_83.php src/ tests/*.php",
"phpcsfixer-fix": "./vendor/bin/php-cs-fixer fix --ansi --no-interaction --config vendor/nswdpc/ci-files/php-cs-fixer/.php-cs-fixer.php src/"
},
"config": {
"allow-plugins": {
"composer/installers": true,
"silverstripe/recipe-plugin": true,
"php-http/discovery": true,
"silverstripe/vendor-plugin": true,
"phpstan/extension-installer": true
}
},
"extra": {
"project-files-installed": [
".htaccess",
"app/.htaccess",
"app/_config/mimevalidator.yml",
"app/_config/mysite.yml",
"app/src/Page.php",
"app/src/PageController.php"
],
"public-files-installed": [
".htaccess",
"index.php",
"web.config"
]
},
"minimum-stability": "dev",
"prefer-stable": true
}
10 changes: 6 additions & 4 deletions src/Extensions/SiteTreeExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@

/**
* Waratah smarts for the advanced search form
* @extends \SilverStripe\Core\Extension<(\SilverStripe\CMS\Model\SiteTree & static)>
*/
class SiteTreeExtension extends Extension {

class SiteTreeExtension extends Extension
{
/**
* Provide specific updates to the search result data
*/
public function afterGetTypesenseSearchResult(array &$data): void {
public function afterGetTypesenseSearchResult(array &$data): void
{
$owner = $this->getOwner();
if($lastupdated = $owner->PageLastUpdated()) {
if (($owner instanceof \Page) && ($lastUpdated = $owner->PageLastUpdated())) {
$data['Date'] = $lastUpdated->Human;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/Forms/AdvancedSearchForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
/**
* Waratah smarts for the advanced search form
*/
class AdvancedSearchForm extends BaseAdvancedSearchForm {

class AdvancedSearchForm extends BaseAdvancedSearchForm
{
use FilterFormTrait;

}
11 changes: 6 additions & 5 deletions src/Models/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@
/**
* Provides configuration for search forms and global search forms
*/
class Configuration implements TemplateGlobalProvider {

class Configuration implements TemplateGlobalProvider
{
use Configurable;

/**
* Provide a global search form
*/
public static function get_global_search_form(): ?SearchForm {
$form = null;
if($searchPage = TypesenseSearchPage::get()->filter(['IsGlobalSearch' => 1])->first()) {
public static function get_global_search_form(): ?SearchForm
{
if ($searchPage = TypesenseSearchPage::get()->filter(['IsGlobalSearch' => 1])->first()) {
$controller = TypesenseSearchPageController::create($searchPage);
// @phpstan-ignore return.type
return SearchForm::create(
$controller,
'GlobalSearchForm'
Expand Down
43 changes: 30 additions & 13 deletions src/Models/Elements/HeroSearch.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,23 @@
use NSWDPC\Typesense\Elemental\Models\Elements\TypesenseSearchElement;
use SilverStripe\AssetAdmin\Forms\UploadField;
use SilverStripe\Assets\Image;
use SilverStripe\Forms\ListboxField;
use SilverStripe\Forms\TextField;
use SilverStripe\LinkField\Form\MultiLinkField;
use SilverStripe\LinkField\Models\Link;
use SilverStripe\ORM\ArrayList;
use SilverStripe\View\ArrayData;


/**
* Provides a hero search element conforming to the NSW Design System Hero Search Component
* @property string $Title
* @property ?string $Subtitle
* @property ?string $SuggestedTerms
* @property int $BackgroundImageID
* @method \SilverStripe\Assets\Image BackgroundImage()
* @method \SilverStripe\ORM\HasManyList<\SilverStripe\LinkField\Models\Link> Links()
*/
class HeroSearch extends TypesenseSearchElement {

class HeroSearch extends TypesenseSearchElement
{
private static string $icon = 'font-icon-search';

private static string $table_name = 'TypesenseHeroSearch';
Expand Down Expand Up @@ -56,14 +60,18 @@ class HeroSearch extends TypesenseSearchElement {
/**
* @inheritdoc
*/
public function getType() {
#[\Override]
public function getType()
{
return _t(static::class . '.BlockType', $this->i18n_singular_name());
}

/**
* Update CMS fields
*/
public function getCmsFields() {
#[\Override]
public function getCmsFields()
{
$fields = parent::getCmsFields();
$fields->removeByName(['Links']);
$fields->addFieldsToTab(
Expand Down Expand Up @@ -100,19 +108,22 @@ public function getCmsFields() {
return $fields;
}

public function getSuggestedTermsAsArray(): array {
public function getSuggestedTermsAsArray(): array
{
$list = explode(",", $this->SuggestedTerms ?? '');
return array_filter(array_values($list));
return array_filter($list);
}

public function getLinkedSuggestedTerms(): ArrayList {
public function getLinkedSuggestedTerms(): ArrayList
{
$list = ArrayList::create();
$page = $this->SearchPage();
if(!$page || !$page->isInDB()) {
if (!$page || !$page->isInDB()) {
return $list;
}

$terms = $this->getSuggestedTermsAsArray();
foreach($terms as $term) {
foreach ($terms as $term) {
$term = strip_tags(trim((string) $term));
$list->push(
ArrayData::create([
Expand All @@ -121,25 +132,31 @@ public function getLinkedSuggestedTerms(): ArrayList {
])
);
}

return $list;
}

/**
* Render element into template
*/
public function forTemplate($holder = true) {
#[\Override]
public function forTemplate($holder = true)
{
$templates = $this->getRenderTemplates();
/** @var \NSWDPC\Typesense\Elemental\Controllers\TypesenseSearchElementController $controller */
$controller = $this->getController();
$templateData = ArrayData::create([
'Title' => $this->Title,
'Subtitle' => $this->Subtitle,
'Form' => $this->getController()->SearchForm(),
'Form' => $controller->SearchForm(),
'Image' => $this->BackgroundImage(),
'Links' => $this->Links(),
'Terms' => $this->getLinkedSuggestedTerms()
]);
if ($templates) {
return $this->customise($templateData)->renderWith($templates);
}

return null;
}

Expand Down