diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..d72178db --- /dev/null +++ b/.editorconfig @@ -0,0 +1,94 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +# CSS-Files +[*.css] +indent_style = tab +indent_size = 4 + +# HTML-Files +[*.html] +indent_style = tab +indent_size = 2 + +# TMPL-Files +[*.tmpl] +indent_style = tab +indent_size = 4 + +# SCSS-Files +[*.scss] +indent_style = space +indent_size = 4 + +# TS/JS-Files +[*.ts] +indent_style = space +indent_size = 2 +[*.js] +indent_style = space +indent_size = 2 + +# JSON-Files +[*.json] +indent_style = tab +indent_size = 4 + +# PHP-Files +[*.php] +indent_style = space +indent_size = 4 + +# ReST-Files +[*.rst] +indent_style = space +indent_size = 3 + +# MD-Files +[*.md] +indent_style = space +indent_size = 4 + +# YAML-Files +[{*.yaml,*.yml}] +indent_style = space +indent_size = 2 + +# package.json +# .travis.yml +# bower.json +[{package.json,.travis.yml,bower.json}] +indent_style = space +indent_size = 2 + +# TypoScript +[*.typoscript] +indent_style = space +indent_size = 2 +[*.tsconfig] +indent_style = space +indent_size = 2 + +# XLF-Files +[*.xlf] +indent_style = tab +indent_size = 4 + +# SQL-Files +[*.sql] +indent_style = tab +indent_size = 2 + +# .htaccess +[{_.htaccess,.htaccess}] +indent_style = tab +indent_size = 4 diff --git a/Classes/Controller/VoteController.php b/Classes/Controller/VoteController.php index 4986ca0a..ba898be4 100644 --- a/Classes/Controller/VoteController.php +++ b/Classes/Controller/VoteController.php @@ -88,7 +88,7 @@ class VoteController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController /** * @param \Thucke\ThRating\Service\AccessControlService $accessControllService */ - public function injectAccessControlService(\Thucke\ThRating\Service\AccessControlService $accessControllService) + public function injectAccessControlService(\Thucke\ThRating\Service\AccessControlService $accessControllService): void { $this->accessControllService = $accessControllService; } @@ -101,7 +101,7 @@ public function injectAccessControlService(\Thucke\ThRating\Service\AccessContro /** * @param \Thucke\ThRating\Service\RichSnippetService $richSnippetService */ - public function injectRichSnippetService(\Thucke\ThRating\Service\RichSnippetService $richSnippetService) + public function injectRichSnippetService(\Thucke\ThRating\Service\RichSnippetService $richSnippetService): void { $this->richSnippetService = $richSnippetService; } @@ -114,7 +114,7 @@ public function injectRichSnippetService(\Thucke\ThRating\Service\RichSnippetSer /** * @param \Thucke\ThRating\Service\CookieService $cookieService */ - public function injectCookieService(\Thucke\ThRating\Service\CookieService $cookieService) + public function injectCookieService(\Thucke\ThRating\Service\CookieService $cookieService): void { $this->cookieService = $cookieService; } @@ -127,7 +127,7 @@ public function injectCookieService(\Thucke\ThRating\Service\CookieService $cook /** * @param \Thucke\ThRating\Domain\Repository\VoteRepository $voteRepository */ - public function injectVoteRepository(\Thucke\ThRating\Domain\Repository\VoteRepository $voteRepository) + public function injectVoteRepository(\Thucke\ThRating\Domain\Repository\VoteRepository $voteRepository): void { $this->voteRepository = $voteRepository; } @@ -141,7 +141,7 @@ public function injectVoteRepository(\Thucke\ThRating\Domain\Repository\VoteRepo * @param \Thucke\ThRating\Domain\Validator\VoteValidator $voteValidator * @return void */ - public function injectVoteValidator(\Thucke\ThRating\Domain\Validator\VoteValidator $voteValidator) + public function injectVoteValidator(\Thucke\ThRating\Domain\Validator\VoteValidator $voteValidator): void { $this->voteValidator = $voteValidator; } @@ -155,7 +155,7 @@ public function injectVoteValidator(\Thucke\ThRating\Domain\Validator\VoteValida * @param \Thucke\ThRating\Domain\Validator\RatingValidator $ratingValidator * @return void */ - public function injectRatingValidator(\Thucke\ThRating\Domain\Validator\RatingValidator $ratingValidator) + public function injectRatingValidator(\Thucke\ThRating\Domain\Validator\RatingValidator $ratingValidator): void { $this->ratingValidator = $ratingValidator; } @@ -169,7 +169,7 @@ public function injectRatingValidator(\Thucke\ThRating\Domain\Validator\RatingVa * @param \Thucke\ThRating\Domain\Repository\RatingobjectRepository $ratingobjectRepository * @return void */ - public function injectRatingobjectRepository(\Thucke\ThRating\Domain\Repository\RatingobjectRepository $ratingobjectRepository) + public function injectRatingobjectRepository(\Thucke\ThRating\Domain\Repository\RatingobjectRepository $ratingobjectRepository): void { $this->ratingobjectRepository = $ratingobjectRepository; } @@ -183,7 +183,7 @@ public function injectRatingobjectRepository(\Thucke\ThRating\Domain\Repository\ * @param \Thucke\ThRating\Domain\Repository\StepconfRepository $stepconfRepository * @return void */ - public function injectStepconfRepository(\Thucke\ThRating\Domain\Repository\StepconfRepository $stepconfRepository) + public function injectStepconfRepository(\Thucke\ThRating\Domain\Repository\StepconfRepository $stepconfRepository): void { $this->stepconfRepository = $stepconfRepository; } @@ -197,7 +197,7 @@ public function injectStepconfRepository(\Thucke\ThRating\Domain\Repository\Step * @param \Thucke\ThRating\Domain\Validator\StepconfValidator $stepconfValidator * @return void */ - public function injectStepconfValidator(\Thucke\ThRating\Domain\Validator\StepconfValidator $stepconfValidator) + public function injectStepconfValidator(\Thucke\ThRating\Domain\Validator\StepconfValidator $stepconfValidator): void { $this->stepconfValidator = $stepconfValidator; } @@ -211,17 +211,18 @@ public function injectStepconfValidator(\Thucke\ThRating\Domain\Validator\Stepco * @param \Thucke\ThRating\Service\ExtensionHelperService $extensionHelperService * @return void */ - public function injectExtensionHelperService(\Thucke\ThRating\Service\ExtensionHelperService $extensionHelperService) + public function injectExtensionHelperService(\Thucke\ThRating\Service\ExtensionHelperService $extensionHelperService): void { $this->extensionHelperService = $extensionHelperService; } /** * Lifecycle-Event - * wird nach der Initialisierung des Objekts und nach dem Aufl�sen der Dependencies aufgerufen. + * wird nach der Initialisierung des Objekts und nach dem Auflösen der Dependencies aufgerufen. * */ - public function initializeObject() { + public function initializeObject(): void + { } /** @@ -233,7 +234,7 @@ public function initializeObject() { * @throws \Thucke\ThRating\Exception\InvalidStoragePageException */ /** @noinspection PhpMissingParentCallCommonInspection */ - protected function initializeAction() + protected function initializeAction(): void { //instantiate the logger $this->logger = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class) @@ -248,6 +249,7 @@ protected function initializeAction() /** @var array $frameworkConfiguration */ $frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK); + if ($this->request->hasArgument(self::AJAX_REFERENCE_ID)) { //switch to JSON respone on AJAX request $this->request->setFormat('json'); @@ -366,11 +368,11 @@ public function createAction(\Thucke\ThRating\Domain\Model\Vote $vote) if (!$this->voteValidator->isObjSet($matchVote) || $this->voteValidator->validate($matchVote)->hasErrors() || $vote->isAnonymous()) { $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'New vote could be added', ['errorCode' => 1404934012]); $vote->getRating()->addVote($vote); - if ($vote->isAnonymous() && !$vote->hasAnonymousVote($this->prefixId) && $this->cookieProtection) { + if ($this->cookieProtection && $vote->isAnonymous() && !$vote->hasAnonymousVote($this->prefixId)) { $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Anonymous rating; preparing cookie potection', ['errorCode' => 1404934021]); $anonymousRating['ratingtime'] = time(); $anonymousRating['voteUid'] = $vote->getUid(); - $lifeTime = time() + 60 * 60 * 24 * $this->cookieLifetime; + $lifeTime = (new \DateTime('NOW'))->add(DateInterval::createFromDateString($this->cookieLifetime.' days')); //set cookie to prevent multiple anonymous ratings $this->cookieService->setVoteCookie($this->prefixId . '_AnonymousRating_' . $vote->getRating()->getUid(), json_encode($anonymousRating), $lifeTime); } @@ -466,13 +468,6 @@ public function ratinglinksAction(\Thucke\ThRating\Domain\Model\Vote $vote = NUL $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Entry ratinglinksAction', []); $this->settings['ratingConfigurations']['default'] = $this->settings['defaultRatingConfiguration']['ratinglinks']; $this->graphicActionHelper($vote); - /*if ( $this->settings['fluid']['templates']['ratinglinks']['likesMode'] ) { - \TYPO3\CMS\Core\Utility\GeneralUtility::deprecationLog( - get_class($this).': Setting "fluid.templates.ratinglinks.likesMode" is deprecated' . - ' Use the specific action "mark" as a replacement. Will be removed two versions after 0.10.2 - at least in version 1.0.' - ); - $this->view->assign('actionMethodName','markAction'); - }*/ $this->initSignalSlotDispatcher('afterRatinglinkAction'); $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Exit ratinglinksAction', []); } @@ -606,7 +601,7 @@ public function graphicActionHelper(\Thucke\ThRating\Domain\Model\Vote $vote = N * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotException * @throws \TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException */ - protected function initSignalSlotDispatcher($slotName) + protected function initSignalSlotDispatcher($slotName): void { $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Entry initSignalSlotDispatcher', ['slotName' => $slotName]); if ($this->request->hasArgument('signalSlotHandlerContent')) { @@ -691,7 +686,7 @@ protected function initVoting(\Thucke\ThRating\Domain\Model\Vote $vote = NULL) * * @return void */ - protected function initSettings() + protected function initSettings():void { $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Entry initSettings', []); @@ -753,6 +748,8 @@ protected function initSettings() $frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK); $frameworkConfiguration['settings'] = $this->settings; + //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($frameworkConfiguration,' initSettings.settings '); + $this->setFrameworkConfiguration($frameworkConfiguration); $this->logger->log(\TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Exit initSettings', []); @@ -765,7 +762,7 @@ protected function initSettings() * * @return void */ - protected function setAjaxSelections(\Thucke\ThRating\Domain\Model\Vote $vote) + protected function setAjaxSelections(\Thucke\ThRating\Domain\Model\Vote $vote): void { if ($vote->getVoter() instanceof \Thucke\ThRating\Domain\Model\Voter && empty($this->settings['displayOnly'])) { //cleanup settings to reduce data size in POST form @@ -794,7 +791,7 @@ protected function setAjaxSelections(\Thucke\ThRating\Domain\Model\Vote $vote) * @return void * @throws \Thucke\ThRating\Exception\InvalidAggregateRatingSchemaTypeException */ - protected function fillSummaryView() + protected function fillSummaryView(): void { $this->view->assign('settings', $this->settings); $this->view->assign('ajaxRef', $this->ajaxSelections['ajaxRef']); @@ -855,14 +852,14 @@ protected function getErrorFlashMessage() * @throws \Thucke\ThRating\Exception\FeUserStoragePageException if plugin.tx_felogin_pi1.storagePid has not been set * @return void */ - protected function setStoragePids() + protected function setStoragePids(): void { + /** @var array $frameworkConfiguration */ $frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); $feUserStoragePid = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $frameworkConfiguration['plugin.']['tx_felogin_pi1.']['storagePid'], true); $frameworkConfiguration = $frameworkConfiguration['plugin.']['tx_thrating.']; $storagePids = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $frameworkConfiguration['storagePid'], true); - if (empty($storagePids[0])) { throw new \Thucke\ThRating\Exception\InvalidStoragePageException(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('flash.vote.general.invalidStoragePid', 'ThRating'), 1403203519); } @@ -870,9 +867,11 @@ protected function setStoragePids() if (empty($feUserStoragePid[0])) { throw new \Thucke\ThRating\Exception\FeUserStoragePageException(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('flash.pluginConfiguration.missing.feUserStoragePid', 'ThRating'), 1403190539); } - array_push($storagePids, $feUserStoragePid[0]); + $storagePids[] = $feUserStoragePid[0]; $frameworkConfiguration['persistence.']['storagePid'] = implode(',', $storagePids); + //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($frameworkConfiguration,' setStoragePids.$frameworkConfiguration'); $this->setFrameworkConfiguration($frameworkConfiguration); + //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK),' setStoragePids Final'); } /** @@ -891,7 +890,7 @@ protected function getRandomId() * @param array $frameworkConfiguration * @return void */ - protected function setFrameworkConfiguration(array $frameworkConfiguration) + protected function setFrameworkConfiguration(array $frameworkConfiguration): void { $this->configurationManager->setConfiguration($frameworkConfiguration); $this->cookieLifetime = abs((int)$this->settings['cookieLifetime']); @@ -901,6 +900,7 @@ protected function setFrameworkConfiguration(array $frameworkConfiguration) } else { $this->cookieProtection = true; } + //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK),' setFrameworkConfiguration '); } @@ -913,7 +913,7 @@ protected function setFrameworkConfiguration(array $frameworkConfiguration) * @param array $additionalInfo * @return void */ - private function logFlashMessage(string $messageText, string $messageTitle, string $severity, array $additionalInfo) + private function logFlashMessage(string $messageText, string $messageTitle, string $severity, array $additionalInfo): void { $additionalInfo = ['messageTitle' => $messageTitle] + $additionalInfo; $severity = strtoupper($severity); diff --git a/Classes/Service/LoggingService.php b/Classes/Service/LoggingService.php index 36a3cbe2..4511c974 100644 --- a/Classes/Service/LoggingService.php +++ b/Classes/Service/LoggingService.php @@ -1,5 +1,6 @@ configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS,'thRating','pi1'); If ( is_array($settings['logging']) ){ foreach ($settings['logging'] as $logLevel => $logConfig) { - $levelUppercase = strtoupper($logLevel); - If ( !empty($logConfig['file']) ) { - $writerConfiguration[constant('\TYPO3\CMS\Core\Log\LogLevel::'.$levelUppercase)]['TYPO3\\CMS\\Core\\Log\\Writer\\FileWriter'] = + + /** @var string $levelUppercase */ + $levelUppercase = strtoupper($logLevel); + + If ( !empty($logConfig['file']) ) { + $writerConfiguration[constant('\TYPO3\CMS\Core\Log\LogLevel::'.$levelUppercase)][\TYPO3\CMS\Core\Log\Writer\FileWriter::class] = ['logFile' => $logConfig['file']]; } If ( !empty($logConfig['database']) ) { - $writerConfiguration[constant('\TYPO3\CMS\Core\Log\LogLevel::'.$levelUppercase)]['TYPO3\\CMS\\Core\\Log\\Writer\\Database'] = + $writerConfiguration[constant('\TYPO3\CMS\Core\Log\LogLevel::'.$levelUppercase)][\TYPO3\CMS\Core\Log\Writer\DatabaseWriter::class] = ['table' => $logConfig['table']]; } } } - $GLOBALS['TYPO3_CONF_VARS']['LOG']['Thucke']['ThRating']['writerConfiguration'] = $writerConfiguration; - $logger = $this->objectManager->get('TYPO3\\CMS\\Core\\Log\\LogManager')->getLogger( $name ); - return $logger; + if (!empty($writerConfiguration)) { + /** @noinspection UnsupportedStringOffsetOperationsInspection */ + $GLOBALS['TYPO3_CONF_VARS']['LOG']['Thucke']['ThRating']['writerConfiguration'] = $writerConfiguration; + } + return $this->objectManager->get(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger( $name ); } } diff --git a/Classes/ViewHelpers/RatingViewHelper.php b/Classes/ViewHelpers/RatingViewHelper.php index 3c7ecc2a..850f0b1f 100644 --- a/Classes/ViewHelpers/RatingViewHelper.php +++ b/Classes/ViewHelpers/RatingViewHelper.php @@ -1,9 +1,18 @@ + * (c) 2019 Thomas Hucke * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is @@ -26,50 +35,56 @@ /** * The Rating Viewhelper * - * @version $Id:$ - * @license http://opensource.org/licenses/gpl-license.php GNU Public License, version 2 + * Renders the rating view based upon plugin.tx_thrating + * Only the argument ratedobjectuid is required. + * Others could be used to configure the output + * + * = Example = + * + * + * + * + * + * rendered rating + * + * */ -class RatingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { +class RatingViewHelper extends AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Disable escaping of this node's output + * + * @var bool + */ + protected $escapeOutput = false; + + /** + * @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController contains a backup of the current $GLOBALS['TSFE'] if used in BE mode + */ + protected static $tsfeBackup; /** * @var \TYPO3\CMS\Core\Log\Logger $logger */ protected $logger; - /** - * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface - */ - protected $configurationManager; + /** * @var array */ protected $typoScriptSetup; - /** - * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager - * @return void - */ - public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager) - { - $this->configurationManager = $configurationManager; - $this->typoScriptSetup = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); - } /** * @var \Thucke\ThRating\Service\ExtensionHelperService */ protected $extensionHelperService; - /** - * @param \Thucke\ThRating\Service\ExtensionHelperService $extensionHelperService - * @return void - */ - public function injectExtensionHelperService( \Thucke\ThRating\Service\ExtensionHelperService $extensionHelperService ) { - $this->extensionHelperService = $extensionHelperService; - } /** * */ - public function initializeArguments() + public function initializeArguments(): void { $this->registerArgument('action', 'string', 'The rating action'); $this->registerArgument('ratetable', 'string', 'The rating tablename'); @@ -81,92 +96,158 @@ public function initializeArguments() /** - * Renders the rating object + * Renders the ratingView * - * @return string the content of the rendered TypoScript object - * @author Thomas Hucke - * @throws Exception + * @param array $arguments + * @param \Closure $renderChildrenClosure + * @param RenderingContextInterface $renderingContext + * @return mixed + * @throws \TYPO3\CMS\Fluid\Core\ViewHelper\Exception */ - public function render() { - $ratedobjectuid = $this->arguments['ratedobjectuid']; - $action = $this->arguments['action']; - $ratingobject = $this->arguments['ratingobject']; - $ratetable = $this->arguments['ratetable']; - $ratefield = $this->arguments['ratefield']; - $display = $this->arguments['display']; - + public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) + { $typoscriptObjectPath = 'plugin.tx_thrating'; - //instantiate the logger - $this->logger = $this->extensionHelperService->getLogger(__CLASS__); - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, - 'Entry point', - [ - 'Viewhelper parameters' => [ - 'action' => $action, - 'ratingobject' => $ratingobject, - 'ratetable' => $ratetable, - 'ratefield' => $ratefield, - 'ratedobjectuid' => $ratedobjectuid, - 'display' => $display,], - 'typoscript' => $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT),]); - - $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class); - $contentObject = $objectManager->get(\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class); - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'ContentObject to initialize', - [ - 'contentObject type' => get_class($contentObject), - 'data config' => $contentObject->data]); - $contentObject->start($contentObject->data); - - $pathSegments = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode('.', $typoscriptObjectPath); - $lastSegment = array_pop($pathSegments); - $setup = $this->typoScriptSetup; - foreach ($pathSegments as $segment) { - if (!array_key_exists($segment . '.', $setup)) { - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, - 'TypoScript object path does not exist', - [ - 'Typoscript object path' => htmlspecialchars($typoscriptObjectPath), - 'Setup' => $setup, - 'errorCode' => 1253191023]); - //TODO check if typed exception is better - throw new Exception('TypoScript object path "' . htmlspecialchars($typoscriptObjectPath) . '" does not exist', 1253191023); - } - $setup = $setup[$segment . '.']; - } - - if (!empty($action)) { - $setup[$lastSegment . '.']['action'] = $action; - $setup[$lastSegment . '.']['switchableControllerActions.']['Vote.']['1'] = $action; - } - if (!empty($ratingobject)) { - $setup[$lastSegment . '.']['settings.']['ratingobject'] = $ratingobject; - } elseif ( !empty($ratetable) && !empty($ratefield)) { - $setup[$lastSegment . '.']['settings.']['ratetable'] = $ratetable; - $setup[$lastSegment . '.']['settings.']['ratefield'] = $ratefield; - } else { - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, 'ratingobject not specified or ratetable/ratfield not set', ['errorCode' => 1399727698]); - throw new Exception('ratingobject not specified or ratetable/ratfield not set', 1399727698); - } - if (!empty($ratedobjectuid)) { - $setup[$lastSegment . '.']['settings.']['ratedobjectuid'] = $ratedobjectuid; - } else { - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, 'ratedobjectuid not set', ['errorCode' => 1304624408]); - throw new Exception('ratedobjectuid not set', 1304624408); - } - if (!empty($display)) { - $setup[$lastSegment . '.']['settings.']['display'] = $display; - } - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Single contentObject to get', - [ - 'contentObject type' => $setup[$lastSegment], - 'cOjb config' => $setup[$lastSegment . '.']]); - - $content = $contentObject->cObjGetSingle($setup[$lastSegment], $setup[$lastSegment . '.']); - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::INFO, 'Generated content', ['content' => $content]); - - $this->logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Exit point', []); - return $content; - } - + $ratedobjectuid = $arguments['ratedobjectuid']; + $action = $arguments['action']; + $ratingobject = $arguments['ratingobject']; + $ratetable = $arguments['ratetable']; + $ratefield = $arguments['ratefield']; + $display = $arguments['display']; + $extensionHelperService = static::getExtensionHelperService(); + $contentObjectRenderer = static::getContentObjectRenderer(); + + //instantiate the logger + $logger = $extensionHelperService->getLogger(__CLASS__); + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, + 'Entry point', + [ + 'Viewhelper parameters' => [ + 'action' => $action, + 'ratingobject' => $ratingobject, + 'ratetable' => $ratetable, + 'ratefield' => $ratefield, + 'ratedobjectuid' => $ratedobjectuid, + 'display' => $display,], + 'typoscript' => static::getConfigurationManager()->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT), + ] + ); + + if (TYPO3_MODE === 'BE') { + static::simulateFrontendEnvironment(); + } + $contentObjectRenderer->start(null); + + $pathSegments = GeneralUtility::trimExplode('.', $typoscriptObjectPath); + $lastSegment = array_pop($pathSegments); + $setup = static::getConfigurationManager()->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); + foreach ($pathSegments as $segment) { + if (!array_key_exists($segment . '.', $setup)) { + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, + 'TypoScript object path does not exist', + [ + 'Typoscript object path' => htmlspecialchars($typoscriptObjectPath), + 'Setup' => $setup, + 'errorCode' => 1253191023]); + + throw new \TYPO3\CMS\Fluid\Core\ViewHelper\Exception( + 'TypoScript object path "' . $typoscriptObjectPath . '" does not exist', + 1549388144 + ); + } + $setup = $setup[$segment . '.']; + } + + if (!isset($setup[$lastSegment])) { + throw new \TYPO3\CMS\Fluid\Core\ViewHelper\Exception( + 'No Content Object definition found at TypoScript object path "' . $typoscriptObjectPath . '"', + 1549388123 + ); + } + + if (!empty($action)) { + $setup[$lastSegment . '.']['action'] = $action; + $setup[$lastSegment . '.']['switchableControllerActions.']['Vote.']['1'] = $action; + } + if (!empty($ratingobject)) { + $setup[$lastSegment . '.']['settings.']['ratingobject'] = $ratingobject; + } elseif ( !empty($ratetable) && !empty($ratefield)) { + $setup[$lastSegment . '.']['settings.']['ratetable'] = $ratetable; + $setup[$lastSegment . '.']['settings.']['ratefield'] = $ratefield; + } else { + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, 'ratingobject not specified or ratetable/ratfield not set', ['errorCode' => 1399727698]); + throw new Exception('ratingobject not specified or ratetable/ratfield not set', 1399727698); + } + if (!empty($ratedobjectuid)) { + $setup[$lastSegment . '.']['settings.']['ratedobjectuid'] = $ratedobjectuid; + } else { + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::CRITICAL, 'ratedobjectuid not set', ['errorCode' => 1304624408]); + throw new Exception('ratedobjectuid not set', 1304624408); + } + if (!empty($display)) { + $setup[$lastSegment . '.']['settings.']['display'] = $display; + } + + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Single contentObjectRenderer to get', + [ + 'contentObjectRenderer type' => $setup[$lastSegment], + 'cOjb config' => $setup[$lastSegment . '.']]); + + $content = $contentObjectRenderer->cObjGetSingle($setup[$lastSegment], $setup[$lastSegment . '.'] ?? []); + if (TYPO3_MODE === 'BE') { + static::resetFrontendEnvironment(); + } + + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::INFO, 'Generated content', ['content' => $content]); + $logger->log( \TYPO3\CMS\Core\Log\LogLevel::DEBUG, 'Exit point'); + return $content; + } + + /** + * @return ExtensionHelperService + */ + protected static function getExtensionHelperService(): ExtensionHelperService + { + return GeneralUtility::makeInstance(ObjectManager::class)->get(ExtensionHelperService::class); + } + + /** + * @return ConfigurationManagerInterface + */ + protected static function getConfigurationManager(): ConfigurationManagerInterface + { + return GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class); + } + + /** + * @return ContentObjectRenderer + */ + protected static function getContentObjectRenderer() + { + return GeneralUtility::makeInstance( + ContentObjectRenderer::class, + $GLOBALS['TSFE'] ?? GeneralUtility::makeInstance(TypoScriptFrontendController::class, null, 0, 0) + ); + } + + /** + * Sets the $TSFE->cObjectDepthCounter in Backend mode + * This somewhat hacky work around is currently needed because the cObjGetSingle() function of \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer relies on this setting + */ + protected static function simulateFrontendEnvironment(): void + { + static::$tsfeBackup = $GLOBALS['TSFE'] ?? null; + $GLOBALS['TSFE'] = new \stdClass(); + $GLOBALS['TSFE']->cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); + $GLOBALS['TSFE']->cObjectDepthCounter = 100; + } + + /** + * Resets $GLOBALS['TSFE'] if it was previously changed by simulateFrontendEnvironment() + * + * @see simulateFrontendEnvironment() + */ + protected static function resetFrontendEnvironment(): void + { + $GLOBALS['TSFE'] = static::$tsfeBackup; + } } diff --git a/Configuration/TCA/Overrides/sys_template.php b/Configuration/TCA/Overrides/sys_template.php index 3184e385..311e9284 100644 --- a/Configuration/TCA/Overrides/sys_template.php +++ b/Configuration/TCA/Overrides/sys_template.php @@ -1,4 +1,6 @@ 'Rating AX', 'description' => 'Highly flexible AJAX rating based on extbase/fluid/jquery. Allows multiple ratings within one page. Could be used as a cObj by other extensions or included in every FLUID template using the viewhelper. Each ratingstep could be configured having a name - international localization included.', 'category' => 'misc', - 'version' => '1.7.0', + 'version' => '1.7.1', 'state' => 'stable', 'uploadfolder' => false, 'createDirs' => '', @@ -30,4 +30,5 @@ 'autoload' => [ 'psr-4' => [ 'Thucke\\ThRating\\' => 'Classes']], - '_md5_values_when_last_written' => 'a:133:{s:11:"changes.txt";s:4:"149f";s:16:"ext_autoload.php";s:4:"ad1e";s:12:"ext_icon.gif";s:4:"de07";s:17:"ext_localconf.php";s:4:"0766";s:14:"ext_tables.php";s:4:"cfaa";s:14:"ext_tables.sql";s:4:"c36b";s:24:"ext_typoscript_setup.txt";s:4:"c7d1";s:37:"Classes/Controller/VoteController.php";s:4:"50a6";s:31:"Classes/Domain/Model/Rating.php";s:4:"1665";s:37:"Classes/Domain/Model/Ratingobject.php";s:4:"79bf";s:33:"Classes/Domain/Model/Stepconf.php";s:4:"1af2";s:33:"Classes/Domain/Model/Stepname.php";s:4:"22ca";s:32:"Classes/Domain/Model/Syslang.php";s:4:"6705";s:29:"Classes/Domain/Model/Vote.php";s:4:"725d";s:30:"Classes/Domain/Model/Voter.php";s:4:"c408";s:52:"Classes/Domain/Repository/RatingobjectRepository.php";s:4:"2685";s:46:"Classes/Domain/Repository/RatingRepository.php";s:4:"faae";s:48:"Classes/Domain/Repository/StepconfRepository.php";s:4:"890b";s:48:"Classes/Domain/Repository/StepnameRepository.php";s:4:"ec54";s:47:"Classes/Domain/Repository/SyslangRepository.php";s:4:"3449";s:44:"Classes/Domain/Repository/VoteRepository.php";s:4:"5afc";s:45:"Classes/Domain/Repository/VoterRepository.php";s:4:"54f7";s:50:"Classes/Domain/Validator/RatingobjectValidator.php";s:4:"dbd8";s:44:"Classes/Domain/Validator/RatingValidator.php";s:4:"56c4";s:46:"Classes/Domain/Validator/StepconfValidator.php";s:4:"2bd0";s:46:"Classes/Domain/Validator/StepnameValidator.php";s:4:"e01e";s:42:"Classes/Domain/Validator/VoteValidator.php";s:4:"4cb8";s:40:"Classes/Service/AccessControlService.php";s:4:"4b3a";s:35:"Classes/Service/AccessException.php";s:4:"cdf7";s:33:"Classes/Service/CookieService.php";s:4:"4782";s:40:"Classes/Service/ExtensionHelperService.php";s:4:"16cf";s:52:"Classes/Utility/BE.tx_thrating_unlinkDynCss_eval.php";s:4:"5ab9";s:46:"Classes/Utility/ExtensionManagementUtility.php";s:4:"b030";s:43:"Classes/Utility/TCALabelUserFuncUtility.php";s:4:"acbc";s:40:"Classes/ViewHelpers/RatingViewHelper.php";s:4:"83b1";s:40:"Classes/ViewHelpers/SelectViewHelper.php";s:4:"4a75";s:40:"Configuration/Flexforms/flexform_pi1.xml";s:4:"60ed";s:53:"Configuration/TCA/tx_thrating_domain_model_rating.php";s:4:"97ef";s:59:"Configuration/TCA/tx_thrating_domain_model_ratingobject.php";s:4:"4862";s:55:"Configuration/TCA/tx_thrating_domain_model_stepconf.php";s:4:"4482";s:55:"Configuration/TCA/tx_thrating_domain_model_stepname.php";s:4:"021e";s:51:"Configuration/TCA/tx_thrating_domain_model_vote.php";s:4:"da46";s:38:"Configuration/TypoScript/constants.txt";s:4:"6297";s:34:"Configuration/TypoScript/setup.txt";s:4:"c439";s:38:"Documentation/Manual/defaultLayout.gif";s:4:"08bb";s:38:"Documentation/Manual/defaultLayout.odp";s:4:"960a";s:31:"Documentation/Manual/manual.txt";s:4:"f3d3";s:38:"Documentation/Model/Umlet/en/Model.uxf";s:4:"3a6c";s:40:"Resources/Private/Language/locallang.xlf";s:4:"4e54";s:44:"Resources/Private/Layouts/DefaultLayout.html";s:4:"779f";s:41:"Resources/Private/Partials/infoBlock.html";s:4:"d531";s:47:"Resources/Private/Partials/ratinglinkBlock.html";s:4:"b6fe";s:43:"Resources/Private/Partials/usersRating.html";s:4:"a13e";s:47:"Resources/Private/Templates/singletonInput.html";s:4:"878d";s:43:"Resources/Private/Templates/Vote/Index.html";s:4:"eccc";s:41:"Resources/Private/Templates/Vote/New.html";s:4:"3469";s:49:"Resources/Private/Templates/Vote/Ratinglinks.html";s:4:"2c3f";s:42:"Resources/Private/Templates/Vote/Show.html";s:4:"ac9e";s:47:"Resources/Private/Templates/Vote/Singleton.html";s:4:"54b9";s:37:"Resources/Public/Css/facesbarTilt.gif";s:4:"daea";s:35:"Resources/Public/Css/rating_bar.png";s:4:"1057";s:31:"Resources/Public/Css/smiley.gif";s:4:"48cb";s:30:"Resources/Public/Css/stars.gif";s:4:"9cdb";s:34:"Resources/Public/Css/starsTilt.gif";s:4:"9d77";s:31:"Resources/Public/Css/styles.css";s:4:"eb14";s:44:"Resources/Public/Css/Graphics/rating_bar.svg";s:4:"5ea9";s:50:"Resources/Public/Css/Graphics/rating_bar_plain.svg";s:4:"5713";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-2.png";s:4:"fe91";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-3.png";s:4:"2a69";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-4.png";s:4:"083c";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new-5.png";s:4:"cf1a";s:91:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new-list-3.png";s:4:"6946";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new.png";s:4:"6fcf";s:87:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-silver.png";s:4:"ce0c";s:90:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar-2.png";s:4:"92e3";s:90:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar-3.png";s:4:"fb12";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar.png";s:4:"65aa";s:77:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/stars.xcf";s:4:"067d";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/starsTilt.xcf";s:4:"3849";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-angry.png";s:4:"31a4";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-cool.png";s:4:"7b81";s:85:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-devilish.png";s:4:"8931";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-embarrassed.png";s:4:"9fb2";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-laugh.png";s:4:"5487";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-monkey.png";s:4:"b3d1";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-plain-2.png";s:4:"4984";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-plain.png";s:4:"beb8";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-raspberry-2.png";s:4:"a692";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-sad-2.png";s:4:"f859";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-smile-3.png";s:4:"069e";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-smirk.png";s:4:"a663";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-uncertain.png";s:4:"28cd";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink-2.png";s:4:"3916";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink-3.png";s:4:"fa85";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink.png";s:4:"740e";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-worried.png";s:4:"952d";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/facesbarTilt.xcf";s:4:"27b4";s:123:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/pictograms-road_signs-10_downward_gradient_roadsign.png";s:4:"4805";s:78:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/smiley.xcf";s:4:"5d00";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/draw-line-2.png";s:4:"3a9e";s:104:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictogram-din-e011-meeting_point.png";s:4:"23e4";s:96:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictogram-din-f006-phone.png";s:4:"9ee2";s:98:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictograms-hazard_signs-29.png";s:4:"5676";s:97:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictographs-stairs_up_inv.png";s:4:"9855";s:110:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/road-sign-us-mutcd-w21-1a-construction.png";s:4:"fbe4";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-angry.svg";s:4:"2a3e";s:79:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-cool.svg";s:4:"c49a";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-devilish.svg";s:4:"fd03";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-embarrassed.svg";s:4:"adef";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-laugh.svg";s:4:"7486";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-monkey.svg";s:4:"ae2c";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-plain.svg";s:4:"e258";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-raspberry-2.svg";s:4:"941c";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-sad-2.svg";s:4:"22b5";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-smirk.svg";s:4:"2687";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-uncertain.svg";s:4:"de5f";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-wink-2.svg";s:4:"784e";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-worried.svg";s:4:"2226";s:121:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/pictograms-road_signs-10_downward_gradient_roadsign.svg";s:4:"ed96";s:58:"Resources/Public/Icons/tx_thrating_domain_model_rating.gif";s:4:"de07";s:64:"Resources/Public/Icons/tx_thrating_domain_model_ratingobject.gif";s:4:"2c15";s:60:"Resources/Public/Icons/tx_thrating_domain_model_stepconf.gif";s:4:"ab19";s:60:"Resources/Public/Icons/tx_thrating_domain_model_stepname.gif";s:4:"c85a";s:56:"Resources/Public/Icons/tx_thrating_domain_model_vote.gif";s:4:"fe33";s:30:"Resources/Public/Js/actions.js";s:4:"b47f";s:34:"Resources/Public/Js/jquery.form.js";s:4:"7a63";s:39:"Tests/Domain/Model/RatingobjectTest.php";s:4:"0cbe";s:33:"Tests/Domain/Model/RatingTest.php";s:4:"80bd";s:37:"Tests/Domain/Model/StepconfigTest.php";s:4:"90eb";s:31:"Tests/Domain/Model/VoteTest.php";s:4:"644b";s:53:"Tests/Domain/Repository/RatingobjectRepositoryTest.ph";s:4:"2d0e";s:14:"doc/manual.sxw";s:4:"441d";s:14:"doc/manual.txt";s:4:"f3d3";}',]; + '_md5_values_when_last_written' => 'a:133:{s:11:"changes.txt";s:4:"149f";s:16:"ext_autoload.php";s:4:"ad1e";s:12:"ext_icon.gif";s:4:"de07";s:17:"ext_localconf.php";s:4:"0766";s:14:"ext_tables.php";s:4:"cfaa";s:14:"ext_tables.sql";s:4:"c36b";s:24:"ext_typoscript_setup.txt";s:4:"c7d1";s:37:"Classes/Controller/VoteController.php";s:4:"50a6";s:31:"Classes/Domain/Model/Rating.php";s:4:"1665";s:37:"Classes/Domain/Model/Ratingobject.php";s:4:"79bf";s:33:"Classes/Domain/Model/Stepconf.php";s:4:"1af2";s:33:"Classes/Domain/Model/Stepname.php";s:4:"22ca";s:32:"Classes/Domain/Model/Syslang.php";s:4:"6705";s:29:"Classes/Domain/Model/Vote.php";s:4:"725d";s:30:"Classes/Domain/Model/Voter.php";s:4:"c408";s:52:"Classes/Domain/Repository/RatingobjectRepository.php";s:4:"2685";s:46:"Classes/Domain/Repository/RatingRepository.php";s:4:"faae";s:48:"Classes/Domain/Repository/StepconfRepository.php";s:4:"890b";s:48:"Classes/Domain/Repository/StepnameRepository.php";s:4:"ec54";s:47:"Classes/Domain/Repository/SyslangRepository.php";s:4:"3449";s:44:"Classes/Domain/Repository/VoteRepository.php";s:4:"5afc";s:45:"Classes/Domain/Repository/VoterRepository.php";s:4:"54f7";s:50:"Classes/Domain/Validator/RatingobjectValidator.php";s:4:"dbd8";s:44:"Classes/Domain/Validator/RatingValidator.php";s:4:"56c4";s:46:"Classes/Domain/Validator/StepconfValidator.php";s:4:"2bd0";s:46:"Classes/Domain/Validator/StepnameValidator.php";s:4:"e01e";s:42:"Classes/Domain/Validator/VoteValidator.php";s:4:"4cb8";s:40:"Classes/Service/AccessControlService.php";s:4:"4b3a";s:35:"Classes/Service/AccessException.php";s:4:"cdf7";s:33:"Classes/Service/CookieService.php";s:4:"4782";s:40:"Classes/Service/ExtensionHelperService.php";s:4:"16cf";s:52:"Classes/Utility/BE.tx_thrating_unlinkDynCss_eval.php";s:4:"5ab9";s:46:"Classes/Utility/ExtensionManagementUtility.php";s:4:"b030";s:43:"Classes/Utility/TCALabelUserFuncUtility.php";s:4:"acbc";s:40:"Classes/ViewHelpers/RatingViewHelper.php";s:4:"83b1";s:40:"Classes/ViewHelpers/SelectViewHelper.php";s:4:"4a75";s:40:"Configuration/Flexforms/flexform_pi1.xml";s:4:"60ed";s:53:"Configuration/TCA/tx_thrating_domain_model_rating.php";s:4:"97ef";s:59:"Configuration/TCA/tx_thrating_domain_model_ratingobject.php";s:4:"4862";s:55:"Configuration/TCA/tx_thrating_domain_model_stepconf.php";s:4:"4482";s:55:"Configuration/TCA/tx_thrating_domain_model_stepname.php";s:4:"021e";s:51:"Configuration/TCA/tx_thrating_domain_model_vote.php";s:4:"da46";s:38:"Configuration/TypoScript/constants.txt";s:4:"6297";s:34:"Configuration/TypoScript/setup.txt";s:4:"c439";s:38:"Documentation/Manual/defaultLayout.gif";s:4:"08bb";s:38:"Documentation/Manual/defaultLayout.odp";s:4:"960a";s:31:"Documentation/Manual/manual.txt";s:4:"f3d3";s:38:"Documentation/Model/Umlet/en/Model.uxf";s:4:"3a6c";s:40:"Resources/Private/Language/locallang.xlf";s:4:"4e54";s:44:"Resources/Private/Layouts/DefaultLayout.html";s:4:"779f";s:41:"Resources/Private/Partials/infoBlock.html";s:4:"d531";s:47:"Resources/Private/Partials/ratinglinkBlock.html";s:4:"b6fe";s:43:"Resources/Private/Partials/usersRating.html";s:4:"a13e";s:47:"Resources/Private/Templates/singletonInput.html";s:4:"878d";s:43:"Resources/Private/Templates/Vote/Index.html";s:4:"eccc";s:41:"Resources/Private/Templates/Vote/New.html";s:4:"3469";s:49:"Resources/Private/Templates/Vote/Ratinglinks.html";s:4:"2c3f";s:42:"Resources/Private/Templates/Vote/Show.html";s:4:"ac9e";s:47:"Resources/Private/Templates/Vote/Singleton.html";s:4:"54b9";s:37:"Resources/Public/Css/facesbarTilt.gif";s:4:"daea";s:35:"Resources/Public/Css/rating_bar.png";s:4:"1057";s:31:"Resources/Public/Css/smiley.gif";s:4:"48cb";s:30:"Resources/Public/Css/stars.gif";s:4:"9cdb";s:34:"Resources/Public/Css/starsTilt.gif";s:4:"9d77";s:31:"Resources/Public/Css/styles.css";s:4:"eb14";s:44:"Resources/Public/Css/Graphics/rating_bar.svg";s:4:"5ea9";s:50:"Resources/Public/Css/Graphics/rating_bar_plain.svg";s:4:"5713";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-2.png";s:4:"fe91";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-3.png";s:4:"2a69";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-4.png";s:4:"083c";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new-5.png";s:4:"cf1a";s:91:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new-list-3.png";s:4:"6946";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-new.png";s:4:"6fcf";s:87:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-silver.png";s:4:"ce0c";s:90:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar-2.png";s:4:"92e3";s:90:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar-3.png";s:4:"fb12";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/bookmark-toolbar.png";s:4:"65aa";s:77:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/stars.xcf";s:4:"067d";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/16x16/starsTilt.xcf";s:4:"3849";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-angry.png";s:4:"31a4";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-cool.png";s:4:"7b81";s:85:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-devilish.png";s:4:"8931";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-embarrassed.png";s:4:"9fb2";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-laugh.png";s:4:"5487";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-monkey.png";s:4:"b3d1";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-plain-2.png";s:4:"4984";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-plain.png";s:4:"beb8";s:88:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-raspberry-2.png";s:4:"a692";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-sad-2.png";s:4:"f859";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-smile-3.png";s:4:"069e";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-smirk.png";s:4:"a663";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-uncertain.png";s:4:"28cd";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink-2.png";s:4:"3916";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink-3.png";s:4:"fa85";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-wink.png";s:4:"740e";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/face-worried.png";s:4:"952d";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/facesbarTilt.xcf";s:4:"27b4";s:123:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/pictograms-road_signs-10_downward_gradient_roadsign.png";s:4:"4805";s:78:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/24x24/smiley.xcf";s:4:"5d00";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/draw-line-2.png";s:4:"3a9e";s:104:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictogram-din-e011-meeting_point.png";s:4:"23e4";s:96:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictogram-din-f006-phone.png";s:4:"9ee2";s:98:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictograms-hazard_signs-29.png";s:4:"5676";s:97:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/pictographs-stairs_up_inv.png";s:4:"9855";s:110:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/32x32/road-sign-us-mutcd-w21-1a-construction.png";s:4:"fbe4";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-angry.svg";s:4:"2a3e";s:79:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-cool.svg";s:4:"c49a";s:83:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-devilish.svg";s:4:"fd03";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-embarrassed.svg";s:4:"adef";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-laugh.svg";s:4:"7486";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-monkey.svg";s:4:"ae2c";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-plain.svg";s:4:"e258";s:86:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-raspberry-2.svg";s:4:"941c";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-sad-2.svg";s:4:"22b5";s:80:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-smirk.svg";s:4:"2687";s:84:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-uncertain.svg";s:4:"de5f";s:81:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-wink-2.svg";s:4:"784e";s:82:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/face-worried.svg";s:4:"2226";s:121:"Resources/Public/Css/Graphics/openiconlibrary.sourceforge.net/svg/pictograms-road_signs-10_downward_gradient_roadsign.svg";s:4:"ed96";s:58:"Resources/Public/Icons/tx_thrating_domain_model_rating.gif";s:4:"de07";s:64:"Resources/Public/Icons/tx_thrating_domain_model_ratingobject.gif";s:4:"2c15";s:60:"Resources/Public/Icons/tx_thrating_domain_model_stepconf.gif";s:4:"ab19";s:60:"Resources/Public/Icons/tx_thrating_domain_model_stepname.gif";s:4:"c85a";s:56:"Resources/Public/Icons/tx_thrating_domain_model_vote.gif";s:4:"fe33";s:30:"Resources/Public/Js/actions.js";s:4:"b47f";s:34:"Resources/Public/Js/jquery.form.js";s:4:"7a63";s:39:"Tests/Domain/Model/RatingobjectTest.php";s:4:"0cbe";s:33:"Tests/Domain/Model/RatingTest.php";s:4:"80bd";s:37:"Tests/Domain/Model/StepconfigTest.php";s:4:"90eb";s:31:"Tests/Domain/Model/VoteTest.php";s:4:"644b";s:53:"Tests/Domain/Repository/RatingobjectRepositoryTest.ph";s:4:"2d0e";s:14:"doc/manual.sxw";s:4:"441d";s:14:"doc/manual.txt";s:4:"f3d3";}', +]; diff --git a/ext_localconf.php b/ext_localconf.php index 8f38416e..c6cb8189 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -1,47 +1,44 @@ 'ratinglinks,polling,mark,index,show,create,new,singleton', // The first controller and its first action will be the default - ], [ // An array of non-cachable controller-action-combinations (they must already be enabled) - 'Vote' => 'new,create,ratinglinks,polling,mark',]); +(function () { + /** + * Configure the Plugin to call the + * right combination of Controller and Action according to + * the user input (default settings, FlexForm, URL etc.) + */ + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'Thucke.ThRating', // The extension name (in UpperCamelCase) or the extension key (in lower_underscore) + 'Pi1', // A unique name of the plugin in UpperCamelCase + [ // An array holding the controller-action-combinations that are accessible + 'Vote' => 'ratinglinks,polling,mark,index,show,create,new,singleton', // The first controller and its first action will be the default + ], [ // An array of non-cachable controller-action-combinations (they must already be enabled) + 'Vote' => 'new,create,ratinglinks,polling,mark',]); -// here we register "DynamicCssEvaluator" to remove the dynamic CSS file when values are modified in the BE -$TYPO3_CONF_VARS['SC_OPTIONS']['tce']['formevals'][Thucke\ThRating\Evaluation\DynamicCssEvaluator::class] = ''; -//add hook to remove the dynamic CSS file when cache is cleared -$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearCachePostProc'][] = 'Thucke\ThRating\Evaluation\DynamicCssEvaluator->clearCachePostProc'; + // here we register "DynamicCssEvaluator" to remove the dynamic CSS file when values are modified in the BE + $TYPO3_CONF_VARS['SC_OPTIONS']['tce']['formevals'][Thucke\ThRating\Evaluation\DynamicCssEvaluator::class] = ''; + //add hook to remove the dynamic CSS file when cache is cleared + $TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['clearCachePostProc'][] = 'Thucke\ThRating\Evaluation\DynamicCssEvaluator->clearCachePostProc'; -/** - * Base configuration of logging events. - * Each loglevel could be swichted off using typoscript setting - * - * $GLOBALS['TYPO3_CONF_VARS']['LOG']['Thucke']['ThRating']['writerConfiguration'] = array( - * \TYPO3\CMS\Core\Log\LogLevel::EMERGENCY => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::ALERT => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::CRITICAL => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::ERROR => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::WARNING => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::NOTICE => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::INFO => array( - * ), - * \TYPO3\CMS\Core\Log\LogLevel::DEBUG => array( - * ), - * ); */ + /** + * Base configuration of logging events. + * Each loglevel could be swichted off using typoscript setting + * + */ + /*$GLOBALS['TYPO3_CONF_VARS']['LOG']['Thucke']['ThRating']['writerConfiguration'] = array( + \TYPO3\CMS\Core\Log\LogLevel::EMERGENCY => array(), + \TYPO3\CMS\Core\Log\LogLevel::ALERT => array(), + \TYPO3\CMS\Core\Log\LogLevel::CRITICAL => array(), + \TYPO3\CMS\Core\Log\LogLevel::ERROR => array(), + \TYPO3\CMS\Core\Log\LogLevel::WARNING => array(), + \TYPO3\CMS\Core\Log\LogLevel::NOTICE => array(), + \TYPO3\CMS\Core\Log\LogLevel::INFO => array(), + \TYPO3\CMS\Core\Log\LogLevel::DEBUG => array(), + );*/ -// Example for using signals of this extension: -//$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher'); -//$signalSlotDispatcher->connect('Thucke\\ThRating\\Controller\\VoteController', 'afterRatinglinkAction', 'Thucke\\ThRating\\Controller\\VoteController', 'afterRatinglinkActionHandler',false); -//$signalSlotDispatcher->connect('Thucke\\ThRating\\Controller\\VoteController', 'afterCreateAction', 'Thucke\\ThRating\\Controller\\VoteController', 'afterCreateActionHandler',false); + // Example for using signals of this extension: + //$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher'); + //$signalSlotDispatcher->connect('Thucke\\ThRating\\Controller\\VoteController', 'afterRatinglinkAction', 'Thucke\\ThRating\\Controller\\VoteController', 'afterRatinglinkActionHandler',false); + //$signalSlotDispatcher->connect('Thucke\\ThRating\\Controller\\VoteController', 'afterCreateAction', 'Thucke\\ThRating\\Controller\\VoteController', 'afterCreateActionHandler',false); + +})();