From 45fd1bc972ed3ca1310e9ecaa2fccbe38dd77784 Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Mon, 23 Feb 2026 11:06:37 +0100 Subject: [PATCH] streamline filtering and improve readability --- .../Admin/TranslationController.php | 167 +++++++++++------- 1 file changed, 99 insertions(+), 68 deletions(-) diff --git a/src/Controller/Admin/TranslationController.php b/src/Controller/Admin/TranslationController.php index ab5ae15..edd6cf1 100644 --- a/src/Controller/Admin/TranslationController.php +++ b/src/Controller/Admin/TranslationController.php @@ -86,9 +86,9 @@ public function importAction(Request $request, LocaleServiceInterface $localeSer $result = [ 'success' => true, ]; + if ($merge) { $enrichedDelta = []; - foreach ($delta as $item) { $lg = $item['lg']; $currentLocale = $localeService->findLocale(); @@ -165,12 +165,17 @@ public function exportAction(Request $request): Response $list->setOrder('asc'); $list->setOrderKey($tableName . '.key', false); - $conditions = $this->getGridFilterCondition($request, $tableName, false, $admin); + $filterParameters = [ + 'filter' => $request->query->get('filter'), + 'searchString' => $request->query->get('searchString'), + ]; + + $conditions = $this->getGridFilterCondition($filterParameters, $tableName, false, $admin); if ($conditions !== []) { $list->setCondition($conditions['condition'], $conditions['params']); } - $filters = $this->getGridFilterCondition($request, $tableName, true, $admin); + $filters = $this->getGridFilterCondition($filterParameters, $tableName, true, $admin); if ($filters) { $joins = [...$joins, ...$filters['joins']]; @@ -303,12 +308,9 @@ public function addAdminTranslationKeysAction(Request $request): JsonResponse } } - return $this->adminJson(null); + return $this->adminJson(['success' => true]); } - /** - * @param Translator $translator - */ #[Route('/translations', name: 'opendxp_admin_translation_translations', methods: ['POST'])] public function translationsAction(Request $request, TranslatorInterface $translator): JsonResponse { @@ -333,7 +335,10 @@ public function translationsAction(Request $request, TranslatorInterface $transl $t->delete(); } - return $this->adminJson(['success' => true, 'data' => []]); + return $this->adminJson([ + 'success' => true, + 'data' => [] + ]); } if ($request->query->get('xaction') === 'update') { @@ -356,9 +361,16 @@ public function translationsAction(Request $request, TranslatorInterface $transl $t->setModificationDate(time()); $t->save(); - $return = ['key' => $t->getKey(), 'creationDate' => $t->getCreationDate(), 'modificationDate' => $t->getModificationDate(), 'type' => $t->getType(), ...$this->prefixTranslations($t->getTranslations())]; - - return $this->adminJson(['data' => $return, 'success' => true]); + return $this->adminJson([ + 'success' => true, + 'data' => [ + 'key' => $t->getKey(), + 'creationDate' => $t->getCreationDate(), + 'modificationDate' => $t->getModificationDate(), + 'type' => $t->getType(), + ...$this->prefixTranslations($t->getTranslations()) + ], + ]); } if ($request->query->get('xaction') === 'create') { @@ -380,78 +392,97 @@ public function translationsAction(Request $request, TranslatorInterface $transl foreach (Tool::getValidLanguages() as $lang) { $t->addTranslation($lang, ''); } - $t->save(); - $return = ['key' => $t->getKey(), 'creationDate' => $t->getCreationDate(), 'modificationDate' => $t->getModificationDate(), 'type' => $t->getType(), ...$this->prefixTranslations($t->getTranslations())]; + $t->save(); - return $this->adminJson(['data' => $return, 'success' => true]); + return $this->adminJson([ + 'success' => true, + 'data' => [ + 'key' => $t->getKey(), + 'creationDate' => $t->getCreationDate(), + 'modificationDate' => $t->getModificationDate(), + 'type' => $t->getType(), + ...$this->prefixTranslations($t->getTranslations()) + ], + ]); } - } else { - // get list of types - $list = new Translation\Listing(); - $list->setDomain($domain); - - $validLanguages = $admin ? Tool\Admin::getLanguages() : $this->getAdminUser()->getAllowedLanguagesForViewingWebsiteTranslations(); + } - $list->setOrder('asc'); - $list->setOrderKey($tableName . '.key', false); - $list->setLanguages($validLanguages); + // get list of types + $list = new Translation\Listing(); + $list->setDomain($domain); - $sortingSettings = \OpenDxp\Bundle\AdminBundle\Helper\QueryParams::extractSortingSettings( - [...$request->request->all(), ...$request->query->all()] - ); + $validLanguages = $admin ? Tool\Admin::getLanguages() : $this->getAdminUser()->getAllowedLanguagesForViewingWebsiteTranslations(); - $joins = []; - - if ($orderKey = $sortingSettings['orderKey']) { - if (in_array(trim($orderKey, '_'), $validLanguages)) { - $orderKey = trim($orderKey, '_'); - $joins[] = [ - 'language' => $orderKey, - ]; - $list->setOrderKey($orderKey); - } elseif ($list->isValidOrderKey($sortingSettings['orderKey'])) { - $list->setOrderKey($tableName . '.' . $sortingSettings['orderKey'], false); - } - } - if ($sortingSettings['order']) { - $list->setOrder($sortingSettings['order']); - } + $list->setOrder('asc'); + $list->setOrderKey($tableName . '.key', false); + $list->setLanguages($validLanguages); - $list->setLimit((int) $request->request->get('limit', 50)); - $list->setOffset((int) $request->request->get('start', 0)); + $sortingSettings = \OpenDxp\Bundle\AdminBundle\Helper\QueryParams::extractSortingSettings( + [...$request->request->all(), ...$request->query->all()] + ); - $conditions = $this->getGridFilterCondition($request, $tableName, false, $admin); - $filters = $this->getGridFilterCondition($request, $tableName, true, $admin); + $joins = []; - if ($filters) { - $joins = [...$joins, ...$filters['joins']]; + if ($orderKey = $sortingSettings['orderKey']) { + if (in_array(trim($orderKey, '_'), $validLanguages)) { + $orderKey = trim($orderKey, '_'); + $joins[] = [ + 'language' => $orderKey, + ]; + $list->setOrderKey($orderKey); + } elseif ($list->isValidOrderKey($sortingSettings['orderKey'])) { + $list->setOrderKey($tableName . '.' . $sortingSettings['orderKey'], false); } + } + if ($sortingSettings['order']) { + $list->setOrder($sortingSettings['order']); + } - if ($conditions !== []) { - $list->setCondition($conditions['condition'], $conditions['params']); - } + $list->setLimit((int) $request->request->get('limit', 50)); + $list->setOffset((int) $request->request->get('start', 0)); - $this->extendTranslationQuery($joins, $list, $tableName, $filters); + $filterParameters = [ + 'filter' => $request->request->get('filter'), + 'searchString' => $request->request->get('searchString'), + ]; - $list->load(); + $conditions = $this->getGridFilterCondition($filterParameters, $tableName, false, $admin); + $filters = $this->getGridFilterCondition($filterParameters, $tableName, true, $admin); - $translations = []; - $searchString = $request->request->get('searchString'); - foreach ($list->getTranslations() as $t) { - //Reload translation to get complete data, - //if translation fetched based on the text not key - if ($searchString && !strpos($searchString, (string) $t->getKey()) && !$t = Translation::getByKey($t->getKey(), $domain)) { - continue; - } + if ($filters) { + $joins = [...$joins, ...$filters['joins']]; + } - $translations[] = [...$this->prefixTranslations($t->getTranslations()), 'key' => $t->getKey(), 'creationDate' => $t->getCreationDate(), 'modificationDate' => $t->getModificationDate(), 'type' => $t->getType()]; + if ($conditions !== []) { + $list->setCondition($conditions['condition'], $conditions['params']); + } + + $this->extendTranslationQuery($joins, $list, $tableName, $filters); + + $translations = []; + $searchString = $request->request->get('searchString'); + foreach ($list->getTranslations() as $t) { + //Reload translation to get complete data, + //if translation fetched based on the text not key + if ($searchString && !strpos($searchString, (string) $t->getKey()) && !$t = Translation::getByKey($t->getKey(), $domain)) { + continue; } - return $this->adminJson(['data' => $translations, 'success' => true, 'total' => $list->getTotalCount()]); + $translations[] = [ + ...$this->prefixTranslations($t->getTranslations()), + 'key' => $t->getKey(), + 'creationDate' => $t->getCreationDate(), + 'modificationDate' => $t->getModificationDate(), + 'type' => $t->getType() + ]; } - return $this->adminJson(['success' => false]); + return $this->adminJson([ + 'success' => true, + 'data' => $translations, + 'total' => $list->getTotalCount() + ]); } protected function prefixTranslations(array $translations): array @@ -507,7 +538,7 @@ function (DoctrineQueryBuilder $select) use ( } } - protected function getGridFilterCondition(Request $request, string $tableName, bool $languageMode = false, bool $admin = false): array + protected function getGridFilterCondition(array $filterParameters, string $tableName, bool $languageMode = false, bool $admin = false): array { $placeHolderCount = 0; $joins = []; @@ -517,7 +548,7 @@ protected function getGridFilterCondition(Request $request, string $tableName, b $db = \OpenDxp\Db::get(); $conditionFilters = []; - $filterJson = $request->request->get('filter'); + $filterJson = $filterParameters['filter']; if ($filterJson) { $propertyField = 'property'; $operatorField = 'operator'; @@ -586,11 +617,11 @@ protected function getGridFilterCondition(Request $request, string $tableName, b } } - if ($request->request->get('searchString')) { + if (!empty($filterParameters['searchString'])) { $conditionFilters[] = [ 'condition' => '(lower(' . $tableName . '.key) LIKE :filterTerm OR lower(' . $tableName . '.text) LIKE :filterTerm)', 'field' => 'filterTerm', - 'value' => '%' . mb_strtolower($request->request->get('searchString')) . '%', + 'value' => '%' . mb_strtolower($filterParameters['searchString']) . '%', ]; }