diff --git a/Classes/Controller/ActionController.php b/Classes/Controller/ActionController.php index dae6c4a..ff4b7c1 100644 --- a/Classes/Controller/ActionController.php +++ b/Classes/Controller/ActionController.php @@ -547,17 +547,32 @@ class ActionController extends BaseController if ($object == null) { $object = $this->arguments->getArgumentNames()[0]; } + $pluginArguments = []; + foreach ($this->arguments as $argument) { + if (in_array($argument->getName(), ['step', 'submit', $object])) { + continue; + } + if (method_exists($argument->getValue(), 'getUid')) { + $pluginArguments[$argument->getName()] + = $argument->getValue()->getUid(); + } else { + $pluginArguments[$argument->getName()] = $argument->getValue(); + } + } + $arguments = []; + $arguments['cid'] = $this->contentObjectUid; + $arguments['type'] = $this->ajaxPageType; $uri = $this->getControllerContext() ->getUriBuilder() ->reset() ->setCreateAbsoluteUri(true) ->setAddQueryString(true) ->setTargetPageType($this->ajaxPageType) - ->setArguments([ - 'cid' => $this->contentObjectUid, - 'type' => $this->ajaxPageType, - ]) - ->uriFor($this->request->getControllerActionName()); + ->setArguments($arguments) + ->uriFor( + $this->request->getControllerActionName(), + $pluginArguments + ); $this->ajaxEnv = [ 'uri' => $uri, 'object' => $object, diff --git a/Classes/Property/TypeConverter/Double2Converter.php b/Classes/Property/TypeConverter/Double2Converter.php index 06ad658..30fe00b 100644 --- a/Classes/Property/TypeConverter/Double2Converter.php +++ b/Classes/Property/TypeConverter/Double2Converter.php @@ -41,7 +41,7 @@ class Double2Converter extends AbstractTypeConverter * @return bool * @internal only to be used within Extbase, not part of TYPO3 Core API. */ - public function canConvertFrom($source, $targetType) + public function canConvertFrom($source, $targetType): bool { return is_string($source) ||is_integer($source); } diff --git a/Classes/Traits/DependencyInjectionTrait.php b/Classes/Traits/DependencyInjectionTrait.php index d2ccc13..039f1c3 100644 --- a/Classes/Traits/DependencyInjectionTrait.php +++ b/Classes/Traits/DependencyInjectionTrait.php @@ -111,6 +111,11 @@ trait DependencyInjectionTrait get_class($this) ); foreach ($classInfo->getInjectMethods() as $method => $className) { + if (version_compare(TYPO3_branch, '10.0', '>=')) { + $className = $className + ->getFirstParameter() + ->getDependency(); + } $class = $this->objectManager->get( $className ); diff --git a/Classes/Utility/ArrayUtility.php b/Classes/Utility/ArrayUtility.php index f43c961..26fd0da 100644 --- a/Classes/Utility/ArrayUtility.php +++ b/Classes/Utility/ArrayUtility.php @@ -21,6 +21,9 @@ class ArrayUtility * function arrayTobject */ public static function toObject($array) { + if ($array === []) { + return (object)$array; + } if (is_array($array)) { if (self::isAssoc($array)) { return (object) array_map([__CLASS__, __METHOD__], $array); @@ -50,7 +53,6 @@ class ArrayUtility return $array; } - /** * */ diff --git a/Classes/Utility/MailUtility.php b/Classes/Utility/MailUtility.php index db456d2..3564ba6 100644 --- a/Classes/Utility/MailUtility.php +++ b/Classes/Utility/MailUtility.php @@ -214,6 +214,17 @@ class MailUtility }, $htmlRow['data'] ); + $htmlRow['data'] = preg_replace_callback( + '/\*.*\*/mU', + function($matches) { + foreach ($matches as $match) { + return '' + . substr($match, 1, -1) + . ''; + } + }, + $htmlRow['data'] + ); $textRow = $row; $textRow['data'] = preg_replace_callback( '/\[.*\]/mU', @@ -222,6 +233,11 @@ class MailUtility return preg_replace_callback( '/\[(\S*)\s(.*)\]/mU', function($matchesInner) { + if ( + $matchesInner[2] == $matchesInner[1] + ) { + return $matchesInner[1]; + } return $matchesInner[2] . ': ' . $matchesInner[1]; @@ -314,8 +330,13 @@ class MailUtility $htmlBody ); } - $mail->setBody($textBody); - $mail->addPart($htmlBody, 'text/html'); + if (version_compare(TYPO3_branch, '10.0', '>=')) { + $mail->html($htmlBody); + $mail->text($textBody); + } else { + $mail->setBody($textBody); + $mail->addPart($htmlBody, 'text/html'); + } $recipients = explode( ',', $target diff --git a/Classes/Utility/ObjectUtility.php b/Classes/Utility/ObjectUtility.php index 52551ac..0e809a2 100644 --- a/Classes/Utility/ObjectUtility.php +++ b/Classes/Utility/ObjectUtility.php @@ -92,6 +92,13 @@ class ObjectUtility ) { $value = StringUtility::checkAndfixUtf8($value); $object->_setProperty($property, $value); + } elseif ( + get_class($methodType) == 'ReflectionNamedType' + && + substr($property, -3) != 'Uid' + ) { + $value = StringUtility::checkAndfixUtf8($value); + $object->_setProperty($property, $value); } elseif ( substr($property, -3) === 'Uid' ) { diff --git a/Classes/Utility/SiteConfigUtility.php b/Classes/Utility/SiteConfigUtility.php index 1a1041a..ab88031 100644 --- a/Classes/Utility/SiteConfigUtility.php +++ b/Classes/Utility/SiteConfigUtility.php @@ -58,4 +58,38 @@ class SiteConfigUtility } return $current; } + + /** + * Gets extension config by typoscript path + * + * @var string $path + * @return string + */ + public static function getFromExtensionByPath( + $extensionName, + $path + ) { + $pathParts = explode('.', $path); + $objectManager = GeneralUtility::makeInstance( + ObjectManager::class + ); + $configurationManager = $objectManager->get( + ConfigurationManagerInterface::class + ); + $typoscript = $configurationManager->getConfiguration( + ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, + $extensionName + ); + $current = &$typoscript; + foreach ($pathParts as $key) { + if ( + !is_array($current) + || !array_key_exists($key, $current) + ) { + return null; + } + $current = &$current[$key]; + } + return $current; + } } diff --git a/Classes/Utility/StringUtility.php b/Classes/Utility/StringUtility.php index f157e59..da68f50 100644 --- a/Classes/Utility/StringUtility.php +++ b/Classes/Utility/StringUtility.php @@ -71,4 +71,20 @@ class StringUtility } return $string; } + + public static function removeCHashIfOnlyParameter($uri) { + $parsedUri = parse_url($uri); + parse_str($parsedUri['query'], $parsedQuery); + if ( + count($parsedQuery) == 1 + && array_key_exists('cHash', $parsedQuery) + ) { + unset($parsedQuery['cHash']); + } + $updatedQuery = http_build_query($parsedQuery); + return $parsedUri['scheme'] . '://' + . $parsedUri['host'] + . $parsedUri['path'] + . ($updatedQuery ? '?' . $updatedQuery : ''); + } } diff --git a/Classes/Utility/TcaUtility.php b/Classes/Utility/TcaUtility.php index af4f59a..13c6782 100644 --- a/Classes/Utility/TcaUtility.php +++ b/Classes/Utility/TcaUtility.php @@ -14,6 +14,8 @@ namespace Cjel\TemplatesAide\Utility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Localization\LanguageService; /** * @@ -88,23 +90,35 @@ class TcaUtility */ public static function getTranslation($key, $extensionKey) { - if ($extensionKey) { + if (version_compare(TYPO3_branch, '10.0', '>=')) { + if (!$extensionKey) { + $extensionKey = 'site_templates'; + } + return implode([ + 'LLL:EXT:', + $extensionKey, + '/Resources/Private/Language/locallang_db.xlf:', + $key + ]); + } else { + if ($extensionKey) { + $translation = LocalizationUtility::translate( + $key, + $extensionKey + ); + if ($translation) { + return $translation; + } + } $translation = LocalizationUtility::translate( $key, - $extensionKey + 'site_templates' ); if ($translation) { return $translation; } + return null; } - $translation = LocalizationUtility::translate( - $key, - 'site_templates' - ); - if ($translation) { - return $translation; - } - return null; } /** diff --git a/Resources/Private/PageTSConfig/default.tsconfig b/Resources/Private/PageTSConfig/default.tsconfig index 31b6307..9b5a8b0 100644 --- a/Resources/Private/PageTSConfig/default.tsconfig +++ b/Resources/Private/PageTSConfig/default.tsconfig @@ -1,5 +1,22 @@ - -[applicationContext = Development] -TCAdefaults.pages.hidden = 0 +TCEMAIN { + table { + tt_content { + disablePrependAtCopy = 1 + } + } +} +[applicationContext == 'Development'] +TCAdefaults { + pages { + hidden = 0 + } +} +TCEMAIN { + table { + tt_content { + disableHideAtCopy = 1 + } + } +} [end] diff --git a/Resources/Private/Partials/Mails/DefaultHtml.html b/Resources/Private/Partials/Mails/DefaultHtml.html index 464f7c9..3d1956c 100644 --- a/Resources/Private/Partials/Mails/DefaultHtml.html +++ b/Resources/Private/Partials/Mails/DefaultHtml.html @@ -105,11 +105,11 @@ -
+
@@ -163,7 +163,7 @@
-
+