From 0a92c3191e854bb2bb3dbf1770b89f1b8980b39d Mon Sep 17 00:00:00 2001 From: Philipp Dieter Date: Thu, 3 Dec 2020 03:47:28 +0100 Subject: [PATCH] [TASK] Add api utility and extension_builder css --- Classes/Utility/ApiUtility.php | 193 +++++++++++++++++++ Classes/ViewHelpers/HeaderDataViewHelper.php | 10 +- Resources/Public/Css/backend/dev/visual.css | 14 ++ 3 files changed, 212 insertions(+), 5 deletions(-) create mode 100644 Classes/Utility/ApiUtility.php diff --git a/Classes/Utility/ApiUtility.php b/Classes/Utility/ApiUtility.php new file mode 100644 index 0000000..8d4d5fd --- /dev/null +++ b/Classes/Utility/ApiUtility.php @@ -0,0 +1,193 @@ +objectManager = GeneralUtility::makeInstance( + ObjectManager::class + ); + $this->imageService = $this->objectManager->get( + imageService::class + ); + if (1 == 0) { + $rows = $queryResult->toArray(); + } else { + $rows = $queryResult; + } + $result = []; + foreach ($rows as $row) { + $rowClass = (new \ReflectionClass($row))->getShortName(); + $methods = get_class_methods($row); + $rowResult = []; + // Prevent endless recursion? + //@todo: improve, dont rely on classes + if ($rootRowClass == $rowClass) { + $rowResult['uid'] = $row->getUid(); + $result[] = $rowResult; + continue; + } + + $propertieResults = []; + foreach ($methods as $method) { + if (substr($method, 0, 3) === 'get') { + $methodResult = call_user_func([$row, $method]); + $attributeName = lcfirst(substr($method, 3)); + $propertieResults[$attributeName] = $methodResult; + } + } + foreach ((array)$additionalAttributes as $attribute => $value) { + if ( + !array_key_exists($attribute, $propertieResults) + && $row->$attribute + ) { + $propertieResults[$attribute] + = $row->$attribute; + } + } + foreach ($propertieResults as $attributeName => $methodResult) { + if (gettype($methodResult) == 'string' + || gettype($methodResult) == 'integer' + || gettype($methodResult) == 'boolean' + ) { + $rowResult[$attributeName] = $methodResult; + } + if (array_key_exists($rowClass, $mapping) + && array_key_exists($attributeName, $mapping[$rowClass]) + ) { + $mappingFunction = $mapping[$rowClass][$attributeName]; + $rowResult[$attributeName] = $mappingFunction( + $methodResult, + $row + ); + } + if (gettype($methodResult) == 'object' + && get_class($methodResult) == 'DateTime' + ) { + $rowResult[$attributeName] = $methodResult->format('c'); + } + if (gettype($methodResult) == 'object' + && get_class($methodResult) + == 'TYPO3\CMS\Extbase\Persistence\ObjectStorage' + ) { + if ($rootRowClass == null) { + $nextLevelClass = $rowClass; + } else { + $nextLevelClass = $rootRowClass; + } + $rowResult[$attributeName] = self::queryResultToArray( + $methodResult, + $additionalAttributes[$attributeName], + $mapping, + $nextLevelClass + ); + } + //@todo: build unversal solution without fixed class name + if (gettype($methodResult) == 'object' + && get_class($methodResult) + == 'Glanzstueck\FesCustomerportal\Domain\Model' + . '\FrontendUser' + ) { + if ($rootRowClass == null) { + $nextLevelClass = $rowClass; + } else { + $nextLevelClass = $rootRowClass; + } + $rowResult[$attributeName] = self::queryResultToArray( + [$methodResult], + $additionalAttributes[$attributeName], + $mapping, + $nextLevelClass + )[0]; + } + if (gettype($methodResult) == 'object' + && get_class($methodResult) + == 'TYPO3\CMS\Extbase\Persistence\Generic' + . '\LazyObjectStorage' + ) { + $rowResult[$attributeName] = []; + foreach ($methodResult as $object) { + $publicUrl = $object->getOriginalResource() + ->getPublicUrl(); + $absoluteUrl = $requestHost + . '/' + . $publicUrl; + $imagePreview = $this->imageService->getImage( + $publicUrl, + null, + 0 + ); + $processingInstructionsPreview = array( + //'width' => '1024c', + //'height' => '768c', + //'minWidth' => $minWidth, + //'minHeight' => $minHeight, + 'maxWidth' => '1024', + 'maxHeight' => '768', + //'crop' => $crop, + ); + $processedImagePreview = $this->imageService + ->applyProcessingInstructions( + $imagePreview, + $processingInstructionsPreview + ); + $publicUrlPreview = $this->imageService + ->getImageUri( + $processedImagePreview + ); + $absoluteUrlPreview = $requestHost + . '/' + . $publicUrlPreview; + $rowResult[$attributeName][] = [ + 'uid' => $object->getUid(), + 'publicUrl' => $publicUrl, + 'absoluteUrl' => $absoluteUrl, + 'publicUrlPreview' => $publicUrlPreview, + 'absoluteUrlPreview' => $absoluteUrlPreview, + ]; + } + } + } + $result[] = $rowResult; + } + return $result; + } +} diff --git a/Classes/ViewHelpers/HeaderDataViewHelper.php b/Classes/ViewHelpers/HeaderDataViewHelper.php index 431436f..0308b55 100644 --- a/Classes/ViewHelpers/HeaderDataViewHelper.php +++ b/Classes/ViewHelpers/HeaderDataViewHelper.php @@ -25,12 +25,12 @@ class HeaderDataViewHelper extends AbstractViewHelper } switch ($type){ case 'tracking': - if(GeneralUtility::getApplicationContext()->isProduction()){ + //if(GeneralUtility::getApplicationContext()->isProduction()){ $GLOBALS['TSFE']->additionalHeaderData[] = $data; - } else { - $GLOBALS['TSFE']->additionalHeaderData[] - = ''; - } + //} else { + // $GLOBALS['TSFE']->additionalHeaderData[] + // = ''; + //} break; case 'title': $GLOBALS['TSFE']->additionalHeaderData[] diff --git a/Resources/Public/Css/backend/dev/visual.css b/Resources/Public/Css/backend/dev/visual.css index 4ef5186..421c5c3 100644 --- a/Resources/Public/Css/backend/dev/visual.css +++ b/Resources/Public/Css/backend/dev/visual.css @@ -12,3 +12,17 @@ #151515 ) } + +.yui-layout-unit-left .inputEx-ListField-childContainer div div, +#left div.inputEx-Field { + width: 100%; +} + +#propertiesForm div.inputEx-Group .inputEx-StringField-wrapper input[type="text"], +#propertiesForm div.inputEx-Group .inputEx-StringField-wrapper textarea { + width: calc(100% - 10px); +} + +#propertiesForm div.inputEx-Group .inputEx-StringField-wrapper textarea { + height: 150px; +}