From 9c69fab2c760d54e44b07b9ecf69bf336985cdab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9?= Date: Fri, 26 Jan 2024 14:38:30 +0100 Subject: [PATCH] feat: component filter added (#176) (#188) * fix: only add column when it doesn't exist (#167) * fix: only add column when it doesn't exist * style: formatting * feat: export cms (#169) * feat: import export * feat: use file instead of database * feat: move import/export to model * fix: export from tableitem * feat: move export to Trait * style: formatting * style: formatting * fix: never use file as source of truth * style: formatting * chore: cleanup * fix: use export to file * feat: comment things that no longer work * feat: add meta data * feat: list filenames * feat: cleaner export * feat: remove UI for import/export * style: formatting * feat: add import command * feat: import from files * feat: remove import UI * feat: prevent editing tables with changes on disk * feat: do not use id's in export for tables * feat: optionally export ids * feat: import ids when available --------- * feat: component filter added * feat: added filterparams * feat: only query if filter exists * feat: WIP * feat: typed editor classes * feat: editor changes * feat: removed code * feat: removed request from editor and overview * feat: added TODO * chore: update dependency * feat: migration for model column in cms_table * fix: retain model on import export cms_table * feat: moved code to component * feat: added guards * style: formatting * feat: parameters now in tableservice * feat: removed parameter * feat: removed request() from editor * fix: return empty array if key not exists * style: formatting * style: formatting --------- Co-authored-by: Xander Schuurman <44030544+keeama13@users.noreply.github.com> --- composer.json | 2 +- ...143607_add_model_column_to_table_table.php | 28 ++++++ src/Events/AfterSaveEvent.php | 2 +- src/Events/BeforeSaveEvent.php | 2 +- src/Helpers/CmsImportHelper.php | 2 + src/Helpers/LayoutInputDropdownHelper.php | 10 +-- src/Helpers/SitebossHelper.php | 4 +- .../Assets/AssetEditorController.php | 25 +++++- .../Assets/TableEditorController.php | 26 ++++-- .../Assets/TableOverviewController.php | 41 ++++----- .../ContentBlocks/ContentBlockController.php | 2 +- src/Http/Helpers.php | 4 +- src/Models/CmsUser.php | 8 +- src/Models/Editor/AbstractEditor.php | 87 +++++++++++++++++++ src/Models/Editor/DefaultEditor.php | 7 ++ src/Models/Forms/Field.php | 6 +- src/Models/Menu.php | 2 +- src/Models/Table.php | 2 +- src/Services/Assets/AbstractAssetService.php | 22 ++++- .../Assets/Components/AbstractComponent.php | 2 +- .../Assets/Components/ComponentFile.php | 2 +- .../Assets/Components/ComponentFilter.php | 39 +++++++++ .../Assets/Components/ComponentImage.php | 2 +- src/Services/Assets/GlobalPageService.php | 2 +- src/Services/Assets/TableQueryService.php | 15 ++++ src/Services/Editor/Fields/Filter.php | 26 ++++++ src/Services/Editor/FieldsProperties.php | 4 +- src/Services/Editor/Properties.php | 2 +- src/Services/Forms/Fields/AbstractType.php | 6 +- src/Services/Forms/FormValidator.php | 4 +- src/Traits/Exportable.php | 3 +- 31 files changed, 319 insertions(+), 70 deletions(-) create mode 100644 database/migrations/2024_01_18_143607_add_model_column_to_table_table.php create mode 100644 src/Models/Editor/AbstractEditor.php create mode 100644 src/Models/Editor/DefaultEditor.php create mode 100644 src/Services/Assets/Components/ComponentFilter.php create mode 100644 src/Services/Editor/Fields/Filter.php diff --git a/composer.json b/composer.json index 26a5888a..8bc18c06 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "spatie/laravel-package-tools": "^1.14.0", "spatie/laravel-honeypot": "^4.3.2", "illuminate/contracts": "^10.0", - "notfoundnl/siteboss-layout": "^1.4.3", + "notfoundnl/siteboss-layout": "^1.6", "notfoundnl/siteboss-static": "^1.13", "mcamara/laravel-localization": "^1.8", "xenolope/quahog": "^3.0", diff --git a/database/migrations/2024_01_18_143607_add_model_column_to_table_table.php b/database/migrations/2024_01_18_143607_add_model_column_to_table_table.php new file mode 100644 index 00000000..ec7d6d65 --- /dev/null +++ b/database/migrations/2024_01_18_143607_add_model_column_to_table_table.php @@ -0,0 +1,28 @@ +string('model')->after('table')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('cms_table', function (Blueprint $table) { + $table->dropColumn('model'); + }); + } +}; diff --git a/src/Events/AfterSaveEvent.php b/src/Events/AfterSaveEvent.php index 0ddafc91..001052dc 100644 --- a/src/Events/AfterSaveEvent.php +++ b/src/Events/AfterSaveEvent.php @@ -15,7 +15,7 @@ class AfterSaveEvent /** * Create a new event instance. * - * @param $model is an model of Table or Strings that they extends from BaseModel + * @param $model is an model of Table or Strings that they extends from BaseModel * @return void */ public function __construct(BaseModel $model) diff --git a/src/Events/BeforeSaveEvent.php b/src/Events/BeforeSaveEvent.php index 9a392ee9..a5333496 100644 --- a/src/Events/BeforeSaveEvent.php +++ b/src/Events/BeforeSaveEvent.php @@ -15,7 +15,7 @@ class BeforeSaveEvent /** * Create a new event instance. * - * @param $model is an model of Table or Strings that they implements IAsset + * @param $model is an model of Table or Strings that they implements IAsset * @return void */ public function __construct(BaseModel $model) diff --git a/src/Helpers/CmsImportHelper.php b/src/Helpers/CmsImportHelper.php index 5d315b01..9cf97e40 100644 --- a/src/Helpers/CmsImportHelper.php +++ b/src/Helpers/CmsImportHelper.php @@ -70,6 +70,7 @@ private function importTables(string $tableName): object $table->id = $fileSource->id; } $table->name = $fileSource->name; + $table->model = $fileSource->model; $table->url = $fileSource->url; $table->rights = $fileSource->rights; @@ -137,6 +138,7 @@ private function createImportTables(): void $table->id(); $table->string('name', 128)->nullable(); $table->string('table', 128)->nullable(); + $table->string('model', 128)->nullable(); $table->string('url', 128)->nullable(); $table->string('rights', 128)->nullable(); $table->text('comments')->nullable(); diff --git a/src/Helpers/LayoutInputDropdownHelper.php b/src/Helpers/LayoutInputDropdownHelper.php index 32f75610..fe5a46c8 100644 --- a/src/Helpers/LayoutInputDropdownHelper.php +++ b/src/Helpers/LayoutInputDropdownHelper.php @@ -13,11 +13,11 @@ class LayoutInputDropdownHelper /** * Easily create a dropdown based on a model * - * @param $model Model to be queried - * @param $label Label for the dropdown - * @param $internal defaults to $model table name + '_id' - * @param $tableColumnName The column name of site table to get the readable name from - * @param $value default value for the dropdown + * @param $model Model to be queried + * @param $label Label for the dropdown + * @param $internal defaults to $model table name + '_id' + * @param $tableColumnName The column name of site table to get the readable name from + * @param $value default value for the dropdown */ public function __construct( protected BaseModel|LegacyModel $model, diff --git a/src/Helpers/SitebossHelper.php b/src/Helpers/SitebossHelper.php index 37883a40..63658a49 100644 --- a/src/Helpers/SitebossHelper.php +++ b/src/Helpers/SitebossHelper.php @@ -15,8 +15,8 @@ class SitebossHelper * * Returns a value from the cms_config table. * - * @param mixed $code The internal code for the config value. - * @param mixed $failOnMissing Whether to throw an exception if the config value is missing. + * @param mixed $code The internal code for the config value. + * @param mixed $failOnMissing Whether to throw an exception if the config value is missing. * @return string|object|null The value of the config. */ public static function config(string $code, bool $failOnMissing = true): string|object|null diff --git a/src/Http/Controllers/Assets/AssetEditorController.php b/src/Http/Controllers/Assets/AssetEditorController.php index a0e920bb..88092d44 100644 --- a/src/Http/Controllers/Assets/AssetEditorController.php +++ b/src/Http/Controllers/Assets/AssetEditorController.php @@ -3,7 +3,11 @@ namespace NotFound\Framework\Http\Controllers\Assets; use NotFound\Framework\Http\Controllers\Controller; +use NotFound\Framework\Models\Editor\AbstractEditor; +use NotFound\Framework\Models\Editor\DefaultEditor; use NotFound\Framework\Models\Lang; +use NotFound\Framework\Models\Table; +use NotFound\Framework\Services\Assets\TableService; use NotFound\Layout\Elements\LayoutBar; use NotFound\Layout\Elements\LayoutBarButton; use NotFound\Layout\Elements\LayoutWidget; @@ -13,9 +17,9 @@ abstract class AssetEditorController extends Controller /** * Adds a language bar to the widget * - * @param LayoutWidget $widget Widget to add to - * @param string $url the url to go to. NOTE: adds the locale to the end - * @param Lang $currentLang Disables routing to the current lang + * @param LayoutWidget $widget Widget to add to + * @param string $url the url to go to. NOTE: adds the locale to the end + * @param Lang $currentLang Disables routing to the current lang */ protected function addLanguageBarToWidget(LayoutWidget $widget, string $url, Lang $currentLang): void { @@ -39,4 +43,19 @@ protected function addLanguageBarToWidget(LayoutWidget $widget, string $url, Lan $widget->addBar($bar); } + + protected function customEditor(Table $table, TableService $tableService): AbstractEditor + { + // This only works for models + if ($table->model !== null) { + + $editorClass = substr_replace($table->model, '\\Editor', strrpos($table->model, '\\'), 0).'Editor'; + + if (class_exists($editorClass)) { + return new $editorClass($tableService); + } + } + + return new DefaultEditor($tableService); + } } diff --git a/src/Http/Controllers/Assets/TableEditorController.php b/src/Http/Controllers/Assets/TableEditorController.php index 08178a05..5085470c 100644 --- a/src/Http/Controllers/Assets/TableEditorController.php +++ b/src/Http/Controllers/Assets/TableEditorController.php @@ -14,7 +14,6 @@ use NotFound\Framework\Services\Assets\TableService; use NotFound\Layout\Elements\LayoutBar; use NotFound\Layout\Elements\LayoutBarButton; -use NotFound\Layout\Elements\LayoutBreadcrumb; use NotFound\Layout\Elements\LayoutButton; use NotFound\Layout\Elements\LayoutForm; use NotFound\Layout\Elements\LayoutPage; @@ -37,9 +36,13 @@ public function index(Request $request, Table $table, int $recordId, string $lan $tableService = new TableService($table, $lang, $recordId === 0 ? null : $recordId); + $tableService->setRequestParameters($request->query()); + + $editor = $this->customEditor($table, $tableService); + $params = sprintf('?page=%d&sort=%s&asc=%s', $request->page ?? 1, $request->sort ?? '', $request->asc ?? ''); - $formUrl = sprintf('/table/%s/%s/%s/%s', $table->url, $recordId ?? 0, urlencode($langUrl), $params); + $formUrl = sprintf('/table/%s/%s/%s/%s', $table->url, $recordId ?? 0, urlencode($langUrl), $params.$editor->filterToParams()); $form = new LayoutForm($formUrl); @@ -53,13 +56,9 @@ public function index(Request $request, Table $table, int $recordId, string $lan $page = new LayoutPage(__('siteboss::ui.page')); $page->addTitle(new LayoutTitle($table->name)); + $page->addBreadCrumb($editor->getBreadCrumbsEdit()); - $breadcrumb = new LayoutBreadcrumb(); - $breadcrumb->addHome(); - $breadcrumb->addItem($table->name, '/table/'.$table->url.'/?'.$params); $upsertingText = $recordId === 0 ? __('siteboss::ui.new') : __('siteboss::ui.edit'); - $breadcrumb->addItem($upsertingText); //TODO: Add better title - $page->addBreadCrumb($breadcrumb); $saveButton = new LayoutButton(__('siteboss::ui.save')); @@ -110,6 +109,10 @@ public function update(FormDataRequest $request, Table $table, int $recordId, st $tableService = new TableService($table, $lang, $recordId); + $tableService->setRequestParameters($request->query()); + + $editor = $this->customEditor($table, $tableService); + if (! $tableService->validate($request)) { // TODO: better error abort(422, 'Error validating'); @@ -135,9 +138,14 @@ public function update(FormDataRequest $request, Table $table, int $recordId, st isset($request->siteboss_formOptions['send']) && $request->siteboss_formOptions['send'] === 'stay_on_page' ) { + // Stay on page if ($newTableRecord) { - $response->addAction(new Redirect('/table/'.$table->url.'/'.$id.'/')); + $url = '/table/'.$table->url.'/'.$id; + if ($params = $editor->filterToParams()) { + $url .= '?'.ltrim($params, '&'); + } + $response->addAction(new Redirect($url)); } else { $response->addAction(new Reload()); } @@ -145,7 +153,7 @@ public function update(FormDataRequest $request, Table $table, int $recordId, st // Redirect $params = sprintf('?page=%d&sort=%s&asc=%s', $request->page ?? 1, $request->sort ?? '', $request->asc ?? ''); - + $params .= $editor->filterToParams(); $response->addAction(new Redirect('/table/'.$table->url.'/?'.$params)); } diff --git a/src/Http/Controllers/Assets/TableOverviewController.php b/src/Http/Controllers/Assets/TableOverviewController.php index ec6d0f36..de5ebfb5 100644 --- a/src/Http/Controllers/Assets/TableOverviewController.php +++ b/src/Http/Controllers/Assets/TableOverviewController.php @@ -4,7 +4,6 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; -use NotFound\Framework\Http\Controllers\Controller; use NotFound\Framework\Models\Lang; use NotFound\Framework\Models\Table; use NotFound\Framework\Services\Assets\Components\AbstractComponent; @@ -12,7 +11,6 @@ use NotFound\Framework\Services\Assets\TableService; use NotFound\Layout\Elements\LayoutBar; use NotFound\Layout\Elements\LayoutBarButton; -use NotFound\Layout\Elements\LayoutBreadcrumb; use NotFound\Layout\Elements\LayoutPage; use NotFound\Layout\Elements\LayoutPager; use NotFound\Layout\Elements\LayoutSearchBox; @@ -24,14 +22,14 @@ use NotFound\Layout\LayoutResponse; use NotFound\Layout\Responses\Toast; -class TableOverviewController extends Controller +class TableOverviewController extends AssetEditorController { /** * This endpoint returns information about input type that is created data over tg_cms_table and tg_cms_tableitem * Input types are used on front-end especially Cms form builder * - * @param string $customer This is an value of tg_cms_table->url column. - * @return array ['headers' => [{'name' => 'name3','properties' => 'sourcename']], 'rows' => [ + * @param string $customer This is an value of tg_cms_table->url column. + * @return array ['headers' => [{'name' => 'name3','properties' => 'sourcename']], 'rows' => [ */ public function index(Request $request, Table $table) { @@ -44,8 +42,12 @@ public function index(Request $request, Table $table) $layoutTable = new LayoutTable(create: $table->allow_create, delete: $table->allow_delete, sort: $table->allow_sort); $layoutTable->setTotalItems($siteTableRowsPaginator->total()); + $tableService->setRequestParameters($request->query()); + + $editor = $this->customEditor($table, $tableService); + foreach ($siteTableRowsPaginator as $row) { - $link = sprintf('/table/%s/%d/?page=%d&sort=%s&asc=%s', $table->url, $row->id, $request->page ?? 1, $request->sort ?? '', $request->asc ?? ''); + $link = sprintf('/table/%s/%d/?page=%d&sort=%s&asc=%s', $table->url, $row->id, $request->page ?? 1, $request->sort ?? '', $request->asc ?? '').$editor->filterToParams(); $layoutRow = new LayoutTableRow($row->id, link: $link); foreach ($components as $component) { @@ -72,18 +74,23 @@ public function index(Request $request, Table $table) $page = new LayoutPage($table->name); $page->addTitle(new LayoutTitle($table->name)); - $breadcrumb = new LayoutBreadcrumb(); - $breadcrumb->addHome(); - $breadcrumb->addItem($table->name); - $page->addBreadCrumb($breadcrumb); + $page->addBreadCrumb($editor->getBreadCrumbs()); $bar = new LayoutBar(); + $bottomBar = new LayoutBar(); + $bottomBar->noBackground(); if ($table->allow_create) { $addNew = new LayoutBarButton('Nieuw'); $addNew->setIcon('plus'); - $addNew->setSpecialAction('addNew'); + $url = '/table/'.$table->url.'/0'; + if ($params = $editor->filterToParams()); + + $url .= '?'.ltrim($params, '&'); + + $addNew->setLink($url); $bar->addBarButton($addNew); + $bottomBar->addBarButton($addNew); } $pager = new LayoutPager(totalItems: $siteTableRowsPaginator->total(), itemsPerPage: request()->query('pitems') ?? $table->properties->itemsPerPage ?? 25); @@ -95,16 +102,6 @@ public function index(Request $request, Table $table) $widget->noPadding(); $widget->addBar($bar); $widget->addTable($layoutTable); - - $bottomBar = new LayoutBar(); - $bottomBar->noBackground(); - - if ($table->allow_create) { - $addNew = new LayoutBarButton('Nieuw'); - $addNew->setIcon('plus'); - $addNew->setSpecialAction('addNew'); - $bottomBar->addBarButton($addNew); - } $widget->addBar($bottomBar); if ($siteTableRowsPaginator->total() == 0) { @@ -146,7 +143,7 @@ public function updateField(Request $request, Table $table) * @param int $recordId * @param int $newPosition * @param int $oldPosition - * @return jsonResponse + * @return jsonResponse */ public function updatePosition(Request $request, Table $table) { diff --git a/src/Http/Controllers/ContentBlocks/ContentBlockController.php b/src/Http/Controllers/ContentBlocks/ContentBlockController.php index 5d476e91..7945116c 100644 --- a/src/Http/Controllers/ContentBlocks/ContentBlockController.php +++ b/src/Http/Controllers/ContentBlocks/ContentBlockController.php @@ -13,7 +13,7 @@ class ContentBlockController /** * Get contentBlock template items. * - * @param $csvTables cms_tables->table in csv format + * @param $csvTables cms_tables->table in csv format */ public function get(string $csvTables) { diff --git a/src/Http/Helpers.php b/src/Http/Helpers.php index e6092db8..b2d1d109 100644 --- a/src/Http/Helpers.php +++ b/src/Http/Helpers.php @@ -47,8 +47,8 @@ function db_table_items_change_order(string $tableName, int $recordId, int $repl if (! function_exists('make_directories')) { /** - * @param mixed $root The root folder for the path, we'll not go higher than this. - * @param mixed $dir The path from the root folder + * @param mixed $root The root folder for the path, we'll not go higher than this. + * @param mixed $dir The path from the root folder * @return bool true if the directory was created or already existed. */ function make_directories($root, $dir): bool diff --git a/src/Models/CmsUser.php b/src/Models/CmsUser.php index 84c93ca7..a789cf81 100644 --- a/src/Models/CmsUser.php +++ b/src/Models/CmsUser.php @@ -108,8 +108,8 @@ public function groups() * Example: "!admin || user" or "form-data && admin" or "admin" * check the database which groups exist * - * @param string $expression The expression to check - * @param bool $default if the rights are not set, returns this + * @param string $expression The expression to check + * @param bool $default if the rights are not set, returns this * @return bool user is authorized for the expression */ public function checkRights($expression, $default = true): bool @@ -169,7 +169,7 @@ private function expressionCallBack($matches): string * * Checks if the user has explicitly (not inherited) been given the role. * - * @param string $role The role to check + * @param string $role The role to check * @return array of roles */ public function explicityHasRole($role) @@ -204,7 +204,7 @@ public function hasRole($rolesToCheck) /** * Checks the database against the roles assigned to the user * - * @param string $role role to check + * @param string $role role to check */ public function hasLocalRole(string $role): bool { diff --git a/src/Models/Editor/AbstractEditor.php b/src/Models/Editor/AbstractEditor.php new file mode 100644 index 00000000..eaaa81ee --- /dev/null +++ b/src/Models/Editor/AbstractEditor.php @@ -0,0 +1,87 @@ +ts->getAssetModel(); + $breadcrumb = new LayoutBreadcrumb(); + $breadcrumb->addHome(); + $breadcrumb->addItem($table->name); + + return $breadcrumb; + } + + public function getBreadCrumbsEdit(): LayoutBreadCrumb + { + $table = $this->ts->getAssetModel(); + $breadcrumb = $this->getBreadCrumbs(); + end($breadcrumb->properties->items)->link = '/table/'.$table->url.'/?'.$this->filterToParams(); + $breadcrumb->addItem('edit'); + + return $breadcrumb; + } + + public function filters(): array + { + return $this->ts->getRequestParameters('filter') ?? []; + } + + public function filterToParams(): string + { + if (empty($this->filters())) { + return ''; + } + $filterParams = ''; + foreach ($this->filters() as $key => $value) { + $filterParams .= '&filter['.$key.']='.$value; + } + + return $filterParams; + } +} diff --git a/src/Models/Editor/DefaultEditor.php b/src/Models/Editor/DefaultEditor.php new file mode 100644 index 00000000..55cc2151 --- /dev/null +++ b/src/Models/Editor/DefaultEditor.php @@ -0,0 +1,7 @@ +attributes['table']; + return $this->attributes['table'] ?? with(new $this->attributes['model'])->getTable(); } /** diff --git a/src/Services/Assets/AbstractAssetService.php b/src/Services/Assets/AbstractAssetService.php index 5234f263..f343b4eb 100644 --- a/src/Services/Assets/AbstractAssetService.php +++ b/src/Services/Assets/AbstractAssetService.php @@ -13,6 +13,8 @@ abstract class AbstractAssetService { protected AssetModel $assetModel; + protected array $requestParameters; + protected Lang $lang; /** @@ -24,6 +26,24 @@ abstract public function getComponents(): Collection; abstract protected function getCacheKey(): string; + public function setRequestParameters(?array $requestParameters): void + { + $this->requestParameters = $requestParameters; + } + + public function getRequestParameters($key = null): string|array|null + { + if (! isset($this->requestParameters)) { + return null; + } + + if (isset($key)) { + return (array_key_exists($key, $this->requestParameters)) ? $this->requestParameters[$key] : []; + } + + return $this->requestParameters; + } + public function getAssetModel(): ?AssetModel { return $this->assetModel ?? null; @@ -37,7 +57,7 @@ public function getLang(): Lang /** * Loops through all the table items and return them with the appropriate Input Class */ - public function getFieldComponents(int $recordId = null): Collection + public function getFieldComponents(?int $recordId = null): Collection { $items = $this->assetModel->items()->where('enabled', 1)->orderBy('order')->get(); diff --git a/src/Services/Assets/Components/AbstractComponent.php b/src/Services/Assets/Components/AbstractComponent.php index 46e1941a..f019278a 100644 --- a/src/Services/Assets/Components/AbstractComponent.php +++ b/src/Services/Assets/Components/AbstractComponent.php @@ -321,7 +321,7 @@ public function asyncPutRequest() * Converts [][] to the DB prefix set in the config * Also accepts tablename without [][] * - * @param $tableName for example: '[][]user' or 'user' + * @param $tableName for example: '[][]user' or 'user' * @return string 'cc_user' */ protected function removeDatabasePrefix(string $tableName) diff --git a/src/Services/Assets/Components/ComponentFile.php b/src/Services/Assets/Components/ComponentFile.php index 418dc191..ee081e37 100644 --- a/src/Services/Assets/Components/ComponentFile.php +++ b/src/Services/Assets/Components/ComponentFile.php @@ -92,7 +92,7 @@ public function getTableOverviewContent(): LayoutTableColumn /** * returns the value saved to the database. * - * @return '{storage_path}/app/public/images/{asset-table}/{item-name}/' + * @return '{storage_path}/app/public/images/{asset-table}/{item-name}/' * @return void */ public function getCurrentValue(): object diff --git a/src/Services/Assets/Components/ComponentFilter.php b/src/Services/Assets/Components/ComponentFilter.php new file mode 100644 index 00000000..408fa964 --- /dev/null +++ b/src/Services/Assets/Components/ComponentFilter.php @@ -0,0 +1,39 @@ +assetItem->internal, $this->assetItem->name); + } + + public function validate($newValue): bool + { + // TODO: Implement validate() method. + return true; + } + + public function beforeSave() + { + if ($this->getCurrentValue()) { + $this->setNewValue($this->getCurrentValue()); + + return; + } + + $filter = $this->assetService->getRequestParameters('filter'); + + if (! isset($filter)) { + return; + } + + if (array_key_exists($this->assetItem->internal, $filter)) { + $this->setNewValue($filter[$this->assetItem->internal]); + } + } +} diff --git a/src/Services/Assets/Components/ComponentImage.php b/src/Services/Assets/Components/ComponentImage.php index 111ddd1b..aa35cebb 100644 --- a/src/Services/Assets/Components/ComponentImage.php +++ b/src/Services/Assets/Components/ComponentImage.php @@ -121,7 +121,7 @@ public function getDisplayValue() /** * returns the url for the first image, or an empty object if no image is available. * - * @return '{storage_path}/app/public/images/{asset-table}/{item-name}/' + * @return '{storage_path}/app/public/images/{asset-table}/{item-name}/' * @return void */ public function getCurrentValue(): object diff --git a/src/Services/Assets/GlobalPageService.php b/src/Services/Assets/GlobalPageService.php index 1cfa8a38..dc1bdd51 100644 --- a/src/Services/Assets/GlobalPageService.php +++ b/src/Services/Assets/GlobalPageService.php @@ -40,7 +40,7 @@ protected function getCacheKey(): string /** * Loops through all the table items and return them with the appropriate Input Class */ - public function getFieldComponents(int $recordId = null): Collection + public function getFieldComponents(?int $recordId = null): Collection { $templateItems = TemplateItem::where('enabled', 1) ->where('global', 1) diff --git a/src/Services/Assets/TableQueryService.php b/src/Services/Assets/TableQueryService.php index 0c417121..c9eb19a6 100644 --- a/src/Services/Assets/TableQueryService.php +++ b/src/Services/Assets/TableQueryService.php @@ -25,6 +25,8 @@ public function getSiteTableRows() { $siteTableRowsQuery = StatusColumn::wherePublished(DB::table($this->table->getSiteTableName()), $this->table->getSiteTableName()); + $siteTableRowsQuery = $this->setFilter($siteTableRowsQuery); + $siteTableRowsQuery = $this->setOrdering($siteTableRowsQuery); $siteTableRowsQuery = $this->setSearch($siteTableRowsQuery); @@ -75,6 +77,19 @@ private function setSearch(Builder $query): Builder return $query; } + private function setFilter(Builder $query) + { + if (request()->query('filter')) { + foreach (request()->query('filter') as $key => $value) { + if ($this->table->items()->where('type', 'Filter')->where('internal', $key)->first()) { + $query->where($key, '=', $value); + } + } + } + + return $query; + } + public function setRecordPerPage() { $amount = request()->query('pitems') ?? $this->table->properties->itemsPerPage ?? 25; diff --git a/src/Services/Editor/Fields/Filter.php b/src/Services/Editor/Fields/Filter.php new file mode 100644 index 00000000..feaccdc0 --- /dev/null +++ b/src/Services/Editor/Fields/Filter.php @@ -0,0 +1,26 @@ +setValue(true); // } else { $checkboxField->setValue(false); - // } + // } } else { $checkboxField->setValue($value ?? false); } diff --git a/src/Services/Editor/Properties.php b/src/Services/Editor/Properties.php index d6540dd8..b8476fcd 100644 --- a/src/Services/Editor/Properties.php +++ b/src/Services/Editor/Properties.php @@ -17,7 +17,7 @@ abstract class Properties /** * __construct * - * @param mixed $properties Properties object from database + * @param mixed $properties Properties object from database * * This method will fill the properties arrays with the properties of the field * it will alto store the current values in the values object diff --git a/src/Services/Forms/Fields/AbstractType.php b/src/Services/Forms/Fields/AbstractType.php index ac230934..d2f8ecac 100644 --- a/src/Services/Forms/Fields/AbstractType.php +++ b/src/Services/Forms/Fields/AbstractType.php @@ -25,7 +25,7 @@ public function __construct($type, $fieldProperties, $fieldId) /** * An protected function so that the value can't be set from anywhere. * - * @param $value The value that needs to be set + * @param $value The value that needs to be set */ protected function setValue($value): void { @@ -123,8 +123,8 @@ public function createHeadersForDataViewer(&$headerArray, $outputFilter) * * NOTE: If you make more columns, be sure to also override 'createHeadersForDataViewer'. * - * @param array $tableRow array that will fill the table for CSV export etc - * @param string $outputFilter every output is different, filter it + * @param array $tableRow array that will fill the table for CSV export etc + * @param string $outputFilter every output is different, filter it */ public function fillTableForDataViewer(&$tableRow, $outputFilter) { diff --git a/src/Services/Forms/FormValidator.php b/src/Services/Forms/FormValidator.php index 79f13ac9..1a141bb9 100644 --- a/src/Services/Forms/FormValidator.php +++ b/src/Services/Forms/FormValidator.php @@ -26,8 +26,8 @@ class FormValidator private ?\StdClass $hasValueObject = null; /** - * @param string $databaseForm The form from the backend - * TODO: This isn't used. Use laravel locale instead + * @param string $databaseForm The form from the backend + * TODO: This isn't used. Use laravel locale instead * @param mixed $langurl */ public function __construct( diff --git a/src/Traits/Exportable.php b/src/Traits/Exportable.php index 5034645c..d1ebcc17 100644 --- a/src/Traits/Exportable.php +++ b/src/Traits/Exportable.php @@ -39,9 +39,10 @@ public function exportToObject(): object $exportItem->id = $this->id; } $exportItem->siteboss_asset = (object) [ - 'version' => '1.1.0', + 'version' => '1.2.0', 'type' => 'table', ]; + $exportItem->model = $this->model; $exportItem->comments = $this->comments; $exportItem->rights = $this->rights; $exportItem->url = $this->url;