From f427ab7cd677a03f3c26e233b420bce7b6d693a8 Mon Sep 17 00:00:00 2001 From: Philipp Dieter Date: Fri, 5 Nov 2021 13:14:54 +0100 Subject: [PATCH] [TASK] Move some functions to traits for reuse --- Classes/Controller/AbstractEIDController.php | 38 ++++++++- Classes/Controller/ActionController.php | 62 +------------- Classes/Traits/FormatResultTrait.php | 85 ++++++++++++++++++++ Classes/Traits/ValidationTrait.php | 61 ++++++++++++++ 4 files changed, 182 insertions(+), 64 deletions(-) create mode 100644 Classes/Traits/FormatResultTrait.php diff --git a/Classes/Controller/AbstractEIDController.php b/Classes/Controller/AbstractEIDController.php index e874211..1a97709 100644 --- a/Classes/Controller/AbstractEIDController.php +++ b/Classes/Controller/AbstractEIDController.php @@ -12,6 +12,8 @@ namespace Cjel\TemplatesAide\Controller; * ***/ +use Cjel\TemplatesAide\Traits\ValidationTrait; +use Cjel\TemplatesAide\Traits\FormatResultTrait; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Cache\CacheManager; @@ -21,10 +23,10 @@ use TYPO3\CMS\Core\Log\LogManager; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\Object\ObjectManager; -use TYPO3\CMS\Frontend\Plugin\AbstractPlugin; -use TYPO3\CMS\Frontend\Utility\EidUtility; use TYPO3\CMS\Extbase\Reflection\ClassSchema; use TYPO3\CMS\Extbase\Reflection\ReflectionService; +use TYPO3\CMS\Frontend\Plugin\AbstractPlugin; +use TYPO3\CMS\Frontend\Utility\EidUtility; /** * AbstractEIDController @@ -32,6 +34,18 @@ use TYPO3\CMS\Extbase\Reflection\ReflectionService; class AbstractEIDController { + /** + * ValidationTrait + */ + use ValidationTrait { + validateAgainstSchema as traitValidateAgainstSchema; + } + + /** + * FormatResultTrait + */ + use FormatResultTrait; + /** * @var BackendConfigurationManager */ @@ -99,11 +113,13 @@ class AbstractEIDController $this->apiUtility = $this->objectManager->get( \Cjel\TemplatesAide\Utility\ApiUtility::class ); - $this->configurationManager->setConfiguration(array()); $frameworkConfiguration = $this->configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, $this->getExtensionKey() ); + $this->configurationManager->setConfiguration( + $frameworkConfiguration + ); $this->settings = $frameworkConfiguration; $this->storagePids = explode( ',', @@ -241,4 +257,20 @@ class AbstractEIDController } } + /** + * return function + * + * @param array $result + * @return void + */ + protected function returnFunction( + $result = [] + ) { + $result = $this->formatResult($result); + unset($result['cid']); + unset($result['componentMode']); + unset($result['isValid']); + return $result; + } + } diff --git a/Classes/Controller/ActionController.php b/Classes/Controller/ActionController.php index 918e378..dae6c4a 100644 --- a/Classes/Controller/ActionController.php +++ b/Classes/Controller/ActionController.php @@ -3,7 +3,7 @@ namespace Cjel\TemplatesAide\Controller; /*** * - * This file is part of the "Templates Aide" Extension for TYPO3 CMS. + / This file is part of the "Templates Aide" Extension for TYPO3 CMS. * * For the full copyright and license information, please read the * LICENSE.txt file that was distributed with this source code. @@ -415,31 +415,6 @@ class ActionController extends BaseController return false; } - /** - * shortcut to get translation - * - * @return void - */ - protected function getTranslation($key, $arguments = null) - { - $translation = LocalizationUtility::translate( - $key, - $this->getExtensionKey(), - $arguments - ); - if ($translation) { - return $translation; - } - $translation = LocalizationUtility::translate( - $key, - 'site_templates', - $arguments - ); - if ($translation) { - return $translation; - } - return null; - } /** * @@ -454,41 +429,6 @@ class ActionController extends BaseController strtolower($reflection->getShortName()); } - /** - * gets error label based on field and keyword, uses predefined extensionkey - */ - protected function getErrorLabel($field, $keyword) { - $path = 'error.' . $field . '.' . $keyword; - $errorLabel = $this->getTranslation($path); - if ($errorLabel == null) { - return $path; - } - return $errorLabel; - } - - /** - * function to add validation error manually in the controller - */ - protected function addValidationError( - $field, $keyword, $overwrite = false - ) { - $this->isValid = false; - $this->responseStatus = [400 => 'validationError']; - if (!array_key_exists($field, $this->errors) - || $overwrite == true - ) { - $this->errors[$field] = [ - 'keyword' => $keyword, - ]; - $this->errorLabels[$field] = $this->getErrorLabel( - $field, - $keyword - ); - } - } - - - /** * legacy function to prevent beaking old code * diff --git a/Classes/Traits/FormatResultTrait.php b/Classes/Traits/FormatResultTrait.php new file mode 100644 index 0000000..74dc30a --- /dev/null +++ b/Classes/Traits/FormatResultTrait.php @@ -0,0 +1,85 @@ + + * + ***/ + +/** + * ValidationTrait + */ +trait FormatResultTrait +{ + + /** + * + */ + public function formatResult() + { + if ($result == null) { + $result = []; + } + if (!empty($this->errors)) { + $result = array_merge( + $result, + ['errors' => $this->errors] + ); + } + if (!empty($this->errorLabels)) { + $result = array_merge( + $result, + ['errorLabels' => $this->errorLabels] + ); + } + if (is_array($this->responseStatus)) { + $result = array_merge( + $result, + ['errorType' => reset($this->responseStatus)] + ); + } + if ($this->pageType) { + if (is_array($this->responseStatus)) { + $this->response->setStatus( + array_key_first($this->responseStatus) + ); + } else { + $this->response->setStatus($this->responseStatus); + } + if ($this->pageType == $this->ajaxPageType) { + if ($this->environmentService->isEnvironmentInBackendMode()) { + header('Content-Type: application/json'); + } else { + $GLOBALS['TSFE']->setContentType('application/json'); + } + } + unset($result['data']); + if ($this->redirect) { + $result['redirect'] = $this->redirect; + } + if ($this->reload) { + $result['reload'] = true; + } + return json_encode($result); + } + $result = array_merge( + $result, + ['cid' => $this->contentObjectUid], + ['isValid' => $this->isValid], + ['componentMode' => $this->componentMode] + ); + if (!empty($this->ajaxEnv)) { + $result = array_merge( + $result, + ['ajaxEnv' => $this->ajaxEnv] + ); + } + return $result; + } +} diff --git a/Classes/Traits/ValidationTrait.php b/Classes/Traits/ValidationTrait.php index c001e5f..6b4a75a 100644 --- a/Classes/Traits/ValidationTrait.php +++ b/Classes/Traits/ValidationTrait.php @@ -16,6 +16,7 @@ use \Opis\JsonSchema\{ Validator, ValidationResult, ValidationError, Schema }; use Cjel\TemplatesAide\Utility\ArrayUtility; +use TYPO3\CMS\Extbase\Utility\LocalizationUtility; /** * ValidationTrait @@ -96,4 +97,64 @@ trait ValidationTrait return $validationResult; } + /** + * function to add validation error manually in the controller + */ + protected function addValidationError( + $field, $keyword, $overwrite = false + ) { + $this->isValid = false; + $this->responseStatus = [400 => 'validationError']; + if (!array_key_exists($field, $this->errors) + || $overwrite == true + ) { + $this->errors[$field] = [ + 'keyword' => $keyword, + ]; + $this->errorLabels[$field] = $this->getErrorLabel( + $field, + $keyword + ); + } + } + + /** + * gets error label based on field and keyword, uses predefined extensionkey + */ + protected function getErrorLabel($field, $keyword) { + $path = 'error.' . $field . '.' . $keyword; + $errorLabel = $this->getTranslation($path); + if ($errorLabel == null) { + return $path; + } + return $errorLabel; + } + + /** + * shortcut to get translation + * + * @return void + */ + protected function getTranslation($key, $arguments = null) + { + $translation = LocalizationUtility::translate( + $key, + $this->getExtensionKey(), + $arguments + ); + if ($translation) { + return $translation; + } + $translation = LocalizationUtility::translate( + $key, + 'site_templates', + $arguments + ); + if ($translation) { + return $translation; + } + return null; + } + + }