diff --git a/Engine/Modules/AdminBackend/Plugins/Controller/Backend/PluginController.php b/Engine/Modules/AdminBackend/Plugins/Controller/Backend/PluginController.php index e218fbbaa..63d021aa2 100644 --- a/Engine/Modules/AdminBackend/Plugins/Controller/Backend/PluginController.php +++ b/Engine/Modules/AdminBackend/Plugins/Controller/Backend/PluginController.php @@ -591,8 +591,8 @@ protected function appendTwigFlashDetailMessage(TwigFlash $twigFlash, string $me } /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); // Refactor after Boot-Refactoring $pluginBootstrapClass = $data['name'] . '\\Bootstrap'; diff --git a/Engine/Modules/CRUD/Controller/Backend/BaseCrudController.php b/Engine/Modules/CRUD/Controller/Backend/BaseCrudController.php index 7bde110d1..af38402d3 100644 --- a/Engine/Modules/CRUD/Controller/Backend/BaseCrudController.php +++ b/Engine/Modules/CRUD/Controller/Backend/BaseCrudController.php @@ -30,7 +30,8 @@ * * @package Oforge\Engine\Modules\CRUD\Controller\Backend */ -class BaseCrudController extends SecureBackendController { +class BaseCrudController extends SecureBackendController +{ /** @var string $model */ protected $model = null; /** @@ -75,6 +76,7 @@ class BaseCrudController extends SecureBackendController { * 'max" => ..., // If type = string|text. (Optional) * 'step" => ..., // If type = string|text. (Optional) * 'size' => ..., // If type = select. (Optional) + * 'queryAutoFill' => true, // Auto fill/select value on create by query parameter (Optional) * ], * 'renderer' => [ // Configuration for renderer * 'alignment' => 'left|center|right', // If type = int|float|currency then default = right otherwise left. (Optional) @@ -193,7 +195,8 @@ class BaseCrudController extends SecureBackendController { * * @throws ServiceNotFoundException */ - public function __construct() { + public function __construct() + { if (is_null($this->model) || is_null($this->modelProperties)) { echo 'Properties "$model" and "$modelProperties" must be override!'; die(); @@ -222,7 +225,8 @@ public function __construct() { * @throws ORMException * @EndpointAction() */ - public function indexAction(Request $request, Response $response) { + public function indexAction(Request $request, Response $response) + { $queryParams = $request->getQueryParams(); $postData = $request->getParsedBody(); if ($request->isPost() && !empty($postData)) { @@ -245,7 +249,7 @@ public function indexAction(Request $request, Response $response) { $postData = Oforge()->View()->Flash()->getData($this->moduleModelName); Oforge()->View()->Flash()->clearData($this->moduleModelName); } - if (!empty($entities)) { + if ( !empty($entities)) { foreach ($entities as $index => $entity) { $entity = $this->prepareItemDataArray($entity, 'index'); if (isset($postData[$index])) { @@ -271,20 +275,22 @@ public function indexAction(Request $request, Response $response) { } unset($filter); - Oforge()->View()->assign([ - 'crud' => [ - 'context' => 'index', - 'properties' => $properties, - 'model' => $this->moduleModelName, - 'actions' => $this->crudActions, - 'hasEditors' => $hasEditors, - 'hasRowActions' => $hasRowActions, - 'items' => $entities, - 'pagination' => $pagination, - 'queryKeys' => $this->indexReservedQueryKeys, - 'filter' => $filters, - ], - ]); + Oforge()->View()->assign( + [ + 'crud' => [ + 'context' => 'index', + 'properties' => $properties, + 'model' => $this->moduleModelName, + 'actions' => $this->crudActions, + 'hasEditors' => $hasEditors, + 'hasRowActions' => $hasRowActions, + 'items' => $entities, + 'pagination' => $pagination, + 'queryKeys' => $this->indexReservedQueryKeys, + 'filter' => $filters, + ], + ] + ); return $response; } @@ -296,7 +302,8 @@ public function indexAction(Request $request, Response $response) { * @return Response * @EndpointAction() */ - public function createAction(Request $request, Response $response) { + public function createAction(Request $request, Response $response) + { $postData = $request->getParsedBody(); if ($request->isPost() && !empty($postData)) { try { @@ -304,38 +311,53 @@ public function createAction(Request $request, Response $response) { $this->handleFileUploads($data, 'create'); $data = $this->convertData($data, 'create'); $this->crudService->create($this->model, $data); - Oforge()->View()->Flash()->addMessage('success', I18N::translate('backend_crud_msg_create_success', [ - 'en' => 'Entity successfully created.', - 'de' => 'Das Element wurde erfolgreich erstellt.', - ])); + Oforge()->View()->Flash()->addMessage( + 'success', + I18N::translate( + 'backend_crud_msg_create_success', + [ + 'en' => 'Entity successfully created.', + 'de' => 'Das Element wurde erfolgreich erstellt.', + ] + ) + ); return $this->redirect($response, 'index'); } catch (Exception $exception) { - Oforge()->View()->Flash()->addExceptionMessage('error', I18N::translate('backend_crud_msg_create_failed', [ - 'en' => 'Entity creation failed.', - 'de' => 'Erstellung des Elements fehlgeschlagen.', - ]), $exception); + Oforge()->View()->Flash()->addExceptionMessage( + 'error', + I18N::translate( + 'backend_crud_msg_create_failed', + [ + 'en' => 'Entity creation failed.', + 'de' => 'Erstellung des Elements fehlgeschlagen.', + ] + ), + $exception + ); Oforge()->View()->Flash()->setData($this->moduleModelName, $data); return $this->redirect($response, 'create'); } } - $entity = $this->prepareItemDataArray(null, 'create'); + $entity = $this->prepareItemDataArray(null, 'create', $request->getQueryParams()); if (Oforge()->View()->Flash()->hasData($this->moduleModelName)) { $postData = Oforge()->View()->Flash()->getData($this->moduleModelName); $entity = ArrayHelper::mergeRecursive($entity, $postData); Oforge()->View()->Flash()->clearData($this->moduleModelName); } [$properties, $hasEditors] = $this->filterPropertiesFor('create'); - Oforge()->View()->assign([ - 'crud' => [ - 'context' => 'create', - 'properties' => $properties, - 'model' => $this->moduleModelName, - 'actions' => $this->crudActions, - 'item' => $entity, - ], - ]); + Oforge()->View()->assign( + [ + 'crud' => [ + 'context' => 'create', + 'properties' => $properties, + 'model' => $this->moduleModelName, + 'actions' => $this->crudActions, + 'item' => $entity, + ], + ] + ); return $response; } @@ -348,19 +370,22 @@ public function createAction(Request $request, Response $response) { * @return Response * @EndpointAction(path="/view/{id}") */ - public function viewAction(Request $request, Response $response, array $args) { + public function viewAction(Request $request, Response $response, array $args) + { $entity = $this->crudService->getById($this->model, $args['id']); $entity = $this->prepareItemDataArray($entity, 'view'); [$properties, $hasEditors] = $this->filterPropertiesFor('view'); - Oforge()->View()->assign([ - 'crud' => [ - 'context' => 'view', - 'properties' => $properties, - 'model' => $this->moduleModelName, - 'actions' => $this->crudActions, - 'item' => $entity, - ], - ]); + Oforge()->View()->assign( + [ + 'crud' => [ + 'context' => 'view', + 'properties' => $properties, + 'model' => $this->moduleModelName, + 'actions' => $this->crudActions, + 'item' => $entity, + ], + ] + ); return $response; } @@ -373,7 +398,8 @@ public function viewAction(Request $request, Response $response, array $args) { * @return Response * @EndpointAction(path="/update/{id}") */ - public function updateAction(Request $request, Response $response, array $args) { + public function updateAction(Request $request, Response $response, array $args) + { $postData = $request->getParsedBody(); if ($request->isPost() && !empty($postData)) { try { @@ -381,15 +407,28 @@ public function updateAction(Request $request, Response $response, array $args) $this->handleFileUploads($data, 'update'); $data = $this->convertData($data, 'update'); $this->crudService->update($this->model, $data); - Oforge()->View()->Flash()->addMessage('success', I18N::translate('backend_crud_msg_update_success', [ - 'en' => 'Entity successfully updated.', - 'de' => 'Element erfolgreich aktualisiert.', - ])); + Oforge()->View()->Flash()->addMessage( + 'success', + I18N::translate( + 'backend_crud_msg_update_success', + [ + 'en' => 'Entity successfully updated.', + 'de' => 'Element erfolgreich aktualisiert.', + ] + ) + ); } catch (Exception $exception) { - Oforge()->View()->Flash()->addExceptionMessage('error', I18N::translate('backend_crud_msg_update_failed', [ - 'en' => 'Entity update failed.', - 'de' => 'Aktualisieren des Elements fehlgeschlagen.', - ]), $exception); + Oforge()->View()->Flash()->addExceptionMessage( + 'error', + I18N::translate( + 'backend_crud_msg_update_failed', + [ + 'en' => 'Entity update failed.', + 'de' => 'Aktualisieren des Elements fehlgeschlagen.', + ] + ), + $exception + ); Oforge()->View()->Flash()->setData($this->moduleModelName, $data); } @@ -403,15 +442,17 @@ public function updateAction(Request $request, Response $response, array $args) Oforge()->View()->Flash()->clearData($this->moduleModelName); } [$properties, $hasEditors] = $this->filterPropertiesFor('update'); - Oforge()->View()->assign([ - 'crud' => [ - 'context' => 'update', - 'properties' => $properties, - 'model' => $this->moduleModelName, - 'actions' => $this->crudActions, - 'item' => $entity, - ], - ]); + Oforge()->View()->assign( + [ + 'crud' => [ + 'context' => 'update', + 'properties' => $properties, + 'model' => $this->moduleModelName, + 'actions' => $this->crudActions, + 'item' => $entity, + ], + ] + ); return $response; } @@ -424,7 +465,8 @@ public function updateAction(Request $request, Response $response, array $args) * @return Response * @EndpointAction(path="/delete/{id}") */ - public function deleteAction(Request $request, Response $response, array $args) { + public function deleteAction(Request $request, Response $response, array $args) + { $postData = $request->getParsedBody(); if ($request->isPost() && !empty($postData)) { $return = $this->handleDeleteAction($response, $args['id']); @@ -435,21 +477,24 @@ public function deleteAction(Request $request, Response $response, array $args) $entity = $this->crudService->getById($this->model, $args['id']); $entity = $this->prepareItemDataArray($entity, 'delete'); [$properties, $hasEditors] = $this->filterPropertiesFor('delete'); - Oforge()->View()->assign([ - 'crud' => [ - 'context' => 'delete', - 'properties' => $properties, - 'model' => $this->moduleModelName, - 'actions' => $this->crudActions, - 'item' => $entity, - ], - ]); + Oforge()->View()->assign( + [ + 'crud' => [ + 'context' => 'delete', + 'properties' => $properties, + 'model' => $this->moduleModelName, + 'actions' => $this->crudActions, + 'item' => $entity, + ], + ] + ); return $response; } /** @inheritdoc */ - public function initPermissions() { + public function initPermissions() + { $actions = ['index', 'create', 'view', 'update', 'delete',]; $crudActions = $this->crudActions; $crudPermissions = $this->crudPermissions; @@ -467,9 +512,10 @@ public function initPermissions() { * @param array $filter * @param string $propertyName */ - protected function processSelectListCallable(array &$filter, string $propertyName) { + protected function processSelectListCallable(array &$filter, string $propertyName) + { if (isset($filter['list']) && is_string($filter['list']) && method_exists($this, $filter['list'])) { - if (!isset($this->filterSelectData[$propertyName])) { + if ( !isset($this->filterSelectData[$propertyName])) { $this->filterSelectData[$propertyName] = $this->{$filter['list']}();; } $filter['list'] = $this->filterSelectData[$propertyName]; @@ -485,20 +531,36 @@ protected function processSelectListCallable(array &$filter, string $propertyNam * @return array * @throws Exception */ - protected function convertData(array $data, string $crudAction) : array { + protected function convertData(array $data, string $crudAction) : array + { return $data; } /** * Prepare Item data for view, e.G. DateTime to string or custom column data. * - * @param AbstractModel $entity + * @param AbstractModel|null $entity * @param string $crudAction + * @param array $queryParams Usage for create action * * @return array */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - return isset($entity) ? $entity->toArray() : []; + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array + { + $data = isset($entity) ? $entity->toArray() : []; + if ($crudAction === 'create') { + [$properties, $hasEditors] = $this->filterPropertiesFor('create'); + foreach ($properties as $property) { + $name = $property['name']; + if (isset($queryParams[$name]) && ArrayHelper::get($property['editor'] ?? [], 'queryAutoFill', true)) { + $data[$name] = $queryParams[$name]; + } elseif (isset($property['editor']['default'])) { + $data[$name] = $property['editor']['default']; + } + } + } + + return $data; } /** @@ -507,20 +569,34 @@ protected function prepareItemDataArray(?AbstractModel $entity, string $crudActi * * @return Response */ - protected function handleDeleteAction(Response $response, string $entityID) { + protected function handleDeleteAction(Response $response, string $entityID) + { try { $this->crudService->delete($this->model, $entityID); - Oforge()->View()->Flash()->addMessage('success', I18N::translate('backend_crud_msg_delete_success', [ - 'en' => 'Entity successfully delete.', - 'de' => 'Element erfolgreich gelöscht.', - ])); + Oforge()->View()->Flash()->addMessage( + 'success', + I18N::translate( + 'backend_crud_msg_delete_success', + [ + 'en' => 'Entity successfully delete.', + 'de' => 'Element erfolgreich gelöscht.', + ] + ) + ); return $this->redirect($response, 'index'); } catch (Exception $exception) { - Oforge()->View()->Flash()->addExceptionMessage('error', I18N::translate('backend_crud_msg_delete_failed', [ - 'en' => 'Entity deletion failed.', - 'de' => 'Löschen des Elements fehlgeschlagen.', - ]), $exception); + Oforge()->View()->Flash()->addExceptionMessage( + 'error', + I18N::translate( + 'backend_crud_msg_delete_failed', + [ + 'en' => 'Entity deletion failed.', + 'de' => 'Löschen des Elements fehlgeschlagen.', + ] + ), + $exception + ); return $this->redirect($response, 'delete', ['id' => $entityID]); } @@ -531,7 +607,8 @@ protected function handleDeleteAction(Response $response, string $entityID) { * * @param array $postData */ - protected function handleIndexUpdate(array $postData) { + protected function handleIndexUpdate(array $postData) + { $list = $postData['data']; $this->handleFileUploads($list, 'index'); try { @@ -540,15 +617,28 @@ protected function handleIndexUpdate(array $postData) { } $postData['data'] = $list; $this->crudService->update($this->model, $postData); - Oforge()->View()->Flash()->addMessage('success', I18N::translate('backend_crud_msg_bulk_update_success', [ - 'en' => 'Entities successfully bulk updated.', - 'de' => 'Alle Elemente wurden erfolgreich aktualisiert.', - ])); + Oforge()->View()->Flash()->addMessage( + 'success', + I18N::translate( + 'backend_crud_msg_bulk_update_success', + [ + 'en' => 'Entities successfully bulk updated.', + 'de' => 'Alle Elemente wurden erfolgreich aktualisiert.', + ] + ) + ); } catch (Exception $exception) { - Oforge()->View()->Flash()->addExceptionMessage('error', I18N::translate('backend_crud_msg_bulk_update_failed', [ - 'en' => 'Entities bulk update failed.', - 'de' => 'Aktualisierung der Elemente fehlgeschlagen.', - ]), $exception); + Oforge()->View()->Flash()->addExceptionMessage( + 'error', + I18N::translate( + 'backend_crud_msg_bulk_update_failed', + [ + 'en' => 'Entities bulk update failed.', + 'de' => 'Aktualisierung der Elemente fehlgeschlagen.', + ] + ), + $exception + ); Oforge()->View()->Flash()->setData($this->moduleModelName, $postData['data']); } } @@ -560,7 +650,8 @@ protected function handleIndexUpdate(array $postData) { * * @return array */ - protected function filterPropertiesFor(string $crudAction) : array { + protected function filterPropertiesFor(string $crudAction) : array + { $hasEditors = false; $properties = []; if (isset($this->modelProperties)) { @@ -574,7 +665,7 @@ protected function filterPropertiesFor(string $crudAction) : array { $this->processSelectListCallable($property, $property['name']); $propertyName = $property['name']; - $properties[$propertyName] = $this->modifyPropertyConfig($property); + $properties[$propertyName] = $this->modifyPropertyConfig($property, $crudAction); } } } @@ -586,10 +677,12 @@ protected function filterPropertiesFor(string $crudAction) : array { * Modifying of property config at runtime, e.g. for adding options by configs. * * @param array $config + * @param string $crudAction * * @return array */ - protected function modifyPropertyConfig(array $config) { + protected function modifyPropertyConfig(array $config, string $crudAction) + { return $config; } @@ -603,7 +696,8 @@ protected function modifyPropertyConfig(array $config) { * * @return Response */ - protected function redirect(Response $response, string $crudAction, array $urlParams = [], array $queryParams = []) { + protected function redirect(Response $response, string $crudAction, array $urlParams = [], array $queryParams = []) + { $routeName = Oforge()->View()->get('meta')['route']['parentName']; if ($crudAction !== 'index') { $routeName .= '_' . $crudAction; @@ -619,7 +713,8 @@ protected function redirect(Response $response, string $crudAction, array $urlPa * * @return array|callable */ - protected function evaluateIndexFilter(array $queryParams) { + protected function evaluateIndexFilter(array $queryParams) + { $queryKeys = $this->indexReservedQueryKeys; $queryKeyPage = $queryKeys['page']; $queryKeyEntitiesPerPage = $queryKeys['entitiesPerPage']; @@ -629,7 +724,7 @@ protected function evaluateIndexFilter(array $queryParams) { $customFilterQueryValues = []; $filters = []; - if (!empty($this->indexFilter)) { + if ( !empty($this->indexFilter)) { foreach ($this->indexFilter as $propertyName => $filterConfig) { $propertyNameValue = null; if (isset($queryParams[$propertyName]) && $queryParams[$propertyName] !== '') { @@ -694,7 +789,8 @@ protected function evaluateIndexFilter(array $queryParams) { * * @return array */ - protected function evaluateIndexOrder(array &$queryParams) : ?array { + protected function evaluateIndexOrder(array &$queryParams) : ?array + { $queryKeys = $this->indexReservedQueryKeys; $queryKeyOrderBy = $queryKeys['orderBy']; $queryKeyOrder = $queryKeys['order']; @@ -712,7 +808,7 @@ protected function evaluateIndexOrder(array &$queryParams) : ?array { $orderBy = [ $propertyName => $order, ]; - } elseif (!empty($this->indexOrderBy)) { + } elseif ( !empty($this->indexOrderBy)) { $orderBy = []; foreach ($this->indexOrderBy as $propertyName => $order) { if ($order !== CrudGroupByOrder::ASC && $order !== CrudGroupByOrder::DESC) { @@ -720,7 +816,7 @@ protected function evaluateIndexOrder(array &$queryParams) : ?array { } $orderBy[$propertyName] = $order; } - if (!empty($tmpOrderBy)) { + if ( !empty($tmpOrderBy)) { $orderBy = $tmpOrderBy; } } @@ -733,7 +829,8 @@ protected function evaluateIndexOrder(array &$queryParams) : ?array { * @param array|null $postData * @param string $crudAction */ - protected function handleFileUploads(?array &$postData, string $crudAction) { + protected function handleFileUploads(?array &$postData, string $crudAction) + { if (empty($postData) || empty($this->modelProperties) || !isset($_FILES['data'])) { return; } @@ -741,12 +838,12 @@ protected function handleFileUploads(?array &$postData, string $crudAction) { $filesMeta = $_FILES['data']; foreach ($this->modelProperties as $property) { - if (!isset($property['type']) || !in_array($property['type'], [CrudDataTypes::IMAGE])) { + if ( !isset($property['type']) || !in_array($property['type'], [CrudDataTypes::IMAGE])) { continue; } $propertyName = $property['name']; if ($isSingle) { - if (!isset($postData[$propertyName]['action'])) { + if ( !isset($postData[$propertyName]['action'])) { continue; } $fileData = [ @@ -756,19 +853,22 @@ protected function handleFileUploads(?array &$postData, string $crudAction) { // 'mediaID' => $postData[$propertyName]['mediaID'], ]; if (isset($filesMeta['name'][$propertyName])) { - $fileData = array_merge($fileData, [ - 'name' => $filesMeta['name'][$propertyName], - 'tmp_name' => $filesMeta['tmp_name'][$propertyName], - 'type' => $filesMeta['type'][$propertyName], - 'error' => $filesMeta['error'][$propertyName], - 'size' => $filesMeta['size'][$propertyName], - ]); + $fileData = array_merge( + $fileData, + [ + 'name' => $filesMeta['name'][$propertyName], + 'tmp_name' => $filesMeta['tmp_name'][$propertyName], + 'type' => $filesMeta['type'][$propertyName], + 'error' => $filesMeta['error'][$propertyName], + 'size' => $filesMeta['size'][$propertyName], + ] + ); } unset($postData[$propertyName]); $this->handleFileUpload($postData, $propertyName, $fileData); } else { foreach ($postData as $entityID => &$data) { - if (!isset($data[$propertyName]['action'])) { + if ( !isset($data[$propertyName]['action'])) { continue; } $fileData = [ @@ -778,13 +878,16 @@ protected function handleFileUploads(?array &$postData, string $crudAction) { // 'mediaID' => $data[$propertyName]['mediaID'], ]; if (isset($filesMeta['name'][$entityID][$propertyName])) { - $fileData = array_merge($fileData, [ - 'name' => $filesMeta['name'][$entityID][$propertyName], - 'tmp_name' => $filesMeta['tmp_name'][$entityID][$propertyName], - 'type' => $filesMeta['type'][$entityID][$propertyName], - 'error' => $filesMeta['error'][$entityID][$propertyName], - 'size' => $filesMeta['size'][$entityID][$propertyName], - ]); + $fileData = array_merge( + $fileData, + [ + 'name' => $filesMeta['name'][$entityID][$propertyName], + 'tmp_name' => $filesMeta['tmp_name'][$entityID][$propertyName], + 'type' => $filesMeta['type'][$entityID][$propertyName], + 'error' => $filesMeta['error'][$entityID][$propertyName], + 'size' => $filesMeta['size'][$entityID][$propertyName], + ] + ); } unset($data[$propertyName]); $this->handleFileUpload($data, $propertyName, $fileData); @@ -801,7 +904,8 @@ protected function handleFileUploads(?array &$postData, string $crudAction) { * @param string $propertyName * @param array $fileData */ - protected function handleFileUpload(array &$entityData, string $propertyName, array $fileData) { + protected function handleFileUpload(array &$entityData, string $propertyName, array $fileData) + { /** * @var MediaService $mediaService * @var Media|null $media @@ -810,7 +914,7 @@ protected function handleFileUpload(array &$entityData, string $propertyName, ar //TODO delete orphan media? $entityData[$propertyName] = null; } elseif ($fileData['action'] === 'upload') { - if (!empty($fileData['new_name'])) { + if ( !empty($fileData['new_name'])) { $oldName = $fileData['name']; $fileExtension = substr($oldName, strrpos($oldName, '.')); $fileData['name'] = $fileData['new_name'] . $fileExtension; @@ -821,16 +925,28 @@ protected function handleFileUpload(array &$entityData, string $propertyName, ar if (isset($media)) { $entityData[$propertyName] = $media->getId(); } else { - Oforge()->View()->Flash()->addMessage('error', I18N::translate('backend_crud_image_upload_failed', [ - 'en' => 'Image upload failed.', - 'de' => 'Hochladen des Bilds fehlgeschlagen.', - ])); + Oforge()->View()->Flash()->addMessage( + 'error', + I18N::translate( + 'backend_crud_image_upload_failed', + [ + 'en' => 'Image upload failed.', + 'de' => 'Hochladen des Bilds fehlgeschlagen.', + ] + ) + ); } } catch (Exception $exception) { - Oforge()->View()->Flash()->addMessage('error', I18N::translate('backend_crud_image_upload_failed', [ - 'en' => 'Image upload failed.', - 'de' => 'Hochladen des Bilds fehlgeschlagen.', - ])); + Oforge()->View()->Flash()->addMessage( + 'error', + I18N::translate( + 'backend_crud_image_upload_failed', + [ + 'en' => 'Image upload failed.', + 'de' => 'Hochladen des Bilds fehlgeschlagen.', + ] + ) + ); Oforge()->Logger()->logException($exception); } } elseif ($fileData['action'] === 'chooser') { @@ -841,19 +957,31 @@ protected function handleFileUpload(array &$entityData, string $propertyName, ar if (isset($media)) { $entityData[$propertyName] = $media->getId(); } else { - Oforge()->View()->Flash()->addMessage('error', sprintf(# - I18N::translate('backend_crud_media_not_found', [ - 'en' => 'Media entity with ID "%s" not found.', - 'de' => 'Medienelement mit ID "%s" nicht gefunden.', - ]),# - $mediaID# - )); + Oforge()->View()->Flash()->addMessage( + 'error', + sprintf(# + I18N::translate( + 'backend_crud_media_not_found', + [ + 'en' => 'Media entity with ID "%s" not found.', + 'de' => 'Medienelement mit ID "%s" nicht gefunden.', + ] + ),# + $mediaID# + ) + ); } } catch (Exception $exception) { - Oforge()->View()->Flash()->addMessage('error', I18N::translate('backend_crud_image_replace_failed', [ - 'en' => 'Image replace failed.', - 'de' => 'Bildersetzung fehlgeschlagen.', - ])); + Oforge()->View()->Flash()->addMessage( + 'error', + I18N::translate( + 'backend_crud_image_replace_failed', + [ + 'en' => 'Image replace failed.', + 'de' => 'Bildersetzung fehlgeschlagen.', + ] + ) + ); Oforge()->Logger()->logException($exception); } } @@ -868,7 +996,8 @@ protected function handleFileUpload(array &$entityData, string $propertyName, ar * @throws NonUniqueResultException * @throws ORMException */ - protected function prepareIndexPaginationData(array $queryParams) : array { + protected function prepareIndexPaginationData(array $queryParams) : array + { $queryKeys = $this->indexReservedQueryKeys;; $queryKeyPage = $queryKeys['page']; $queryKeyEntitiesPerPage = $queryKeys['entitiesPerPage']; diff --git a/Engine/Modules/Core/Helper/ArrayHelper.php b/Engine/Modules/Core/Helper/ArrayHelper.php index 6dd4d45c2..57fe42fb5 100644 --- a/Engine/Modules/Core/Helper/ArrayHelper.php +++ b/Engine/Modules/Core/Helper/ArrayHelper.php @@ -49,7 +49,7 @@ public static function issetNotEmpty(array $array, $key) : bool { * @return mixed */ public static function get(array $array, $key, $defaultValue = null) { - return isset($array[$key]) ? $array[$key] : $defaultValue; + return $array[$key] ?? $defaultValue; } /** diff --git a/Engine/Modules/I18n/Controller/Backend/I18n/LanguageController.php b/Engine/Modules/I18n/Controller/Backend/I18n/LanguageController.php index 248691dc1..4e63d33b5 100644 --- a/Engine/Modules/I18n/Controller/Backend/I18n/LanguageController.php +++ b/Engine/Modules/I18n/Controller/Backend/I18n/LanguageController.php @@ -122,8 +122,8 @@ class LanguageController extends BaseCrudController { ]; /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); if (!isset($this->filterSelectData['snippets'])) { $this->snippets = []; try { diff --git a/Engine/Modules/UserManagement/Controller/Backend/UserManagementController.php b/Engine/Modules/UserManagement/Controller/Backend/UserManagementController.php index 51e07444c..0fd5f7e7a 100644 --- a/Engine/Modules/UserManagement/Controller/Backend/UserManagementController.php +++ b/Engine/Modules/UserManagement/Controller/Backend/UserManagementController.php @@ -289,8 +289,8 @@ protected function convertData(array $data, string $crudAction) : array { } /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); $data['password'] = ''; diff --git a/Plugins/Blog/Controller/Backend/CategoryController.php b/Plugins/Blog/Controller/Backend/CategoryController.php index c2ecb46b2..a81e4b60c 100644 --- a/Plugins/Blog/Controller/Backend/CategoryController.php +++ b/Plugins/Blog/Controller/Backend/CategoryController.php @@ -296,8 +296,8 @@ protected function modifyPropertyConfig(array $config) { } /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); if (!empty($data) && $crudAction !== 'create') { if (!isset($this->filterSelectData['postsOfCategory'])) { try { diff --git a/Plugins/Blog/Controller/Backend/CommentController.php b/Plugins/Blog/Controller/Backend/CommentController.php index 90048d744..a5795a4f5 100644 --- a/Plugins/Blog/Controller/Backend/CommentController.php +++ b/Plugins/Blog/Controller/Backend/CommentController.php @@ -210,7 +210,7 @@ public function __construct() { } /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { if (!isset($entity)) { return []; } diff --git a/Plugins/Blog/Controller/Backend/PostController.php b/Plugins/Blog/Controller/Backend/PostController.php index 75cd2e502..41bf14f8b 100644 --- a/Plugins/Blog/Controller/Backend/PostController.php +++ b/Plugins/Blog/Controller/Backend/PostController.php @@ -429,8 +429,8 @@ protected function modifyPropertyConfig(array $config) { } /** @inheritDoc */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); if (!empty($data) && $crudAction !== 'create') { if (!isset($this->filterSelectData['commentsPerPost'])) { try { diff --git a/Plugins/Insertion/Controller/Backend/BackendInsertionSeoContentController.php b/Plugins/Insertion/Controller/Backend/BackendInsertionSeoContentController.php index 3f2d96673..d08edb9bd 100644 --- a/Plugins/Insertion/Controller/Backend/BackendInsertionSeoContentController.php +++ b/Plugins/Insertion/Controller/Backend/BackendInsertionSeoContentController.php @@ -90,8 +90,8 @@ protected function getSeoTargetUrls() { * * @return array */ - protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction) : array { - $data = parent::prepareItemDataArray($entity, $crudAction); + protected function prepareItemDataArray(?AbstractModel $entity, string $crudAction, array $queryParams = []) : array { + $data = parent::prepareItemDataArray($entity, $crudAction, $queryParams); if (isset($data['seoTargetUrl']['id'])) { $data['seoTargetUrl'] = $data['seoTargetUrl']['id']; } diff --git a/Themes/Base/Backend/CRUD/Components/Editor/Color.twig b/Themes/Base/Backend/CRUD/Components/Editor/Color.twig index 6bed85e87..1b670af07 100644 --- a/Themes/Base/Backend/CRUD/Components/Editor/Color.twig +++ b/Themes/Base/Backend/CRUD/Components/Editor/Color.twig @@ -8,7 +8,7 @@ } } %}
+ data-color="{{ item[crudProperty.name]|default('#000') }}">
diff --git a/Themes/Base/Backend/CRUD/Components/Editor/Components/SelectOption.twig b/Themes/Base/Backend/CRUD/Components/Editor/Components/SelectOption.twig index 341f7b46a..7c1e9b136 100644 --- a/Themes/Base/Backend/CRUD/Components/Editor/Components/SelectOption.twig +++ b/Themes/Base/Backend/CRUD/Components/Editor/Components/SelectOption.twig @@ -1,15 +1,7 @@ {% if crudProperty.multiple %} - {% if crud.context == 'create' %} - {% set selected = value in meta.route.query[crudProperty.name]|default(crudProperty.editor.default)|default('') %} - {% else %} - {% set selected = value in item[crudProperty.name]|default('') %} - {% endif %} + {% set selected = value in item[crudProperty.name]|default('') %} {% else %} - {% if crud.context == 'create' %} - {% set selected = select_compare(meta.route.query[crudProperty.name]|default(crudProperty.editor.default)|default(''), value) %} - {% else %} - {% set selected = select_compare(item[crudProperty.name]|default(''), value) %} - {% endif %} + {% set selected = select_compare(item[crudProperty.name]|default(''), value) %} {% endif %}