qbus-agentur /
qbtools
| 1 | <?php |
||||||
| 2 | namespace Qbus\Qbtools\ViewHelpers; |
||||||
| 3 | |||||||
| 4 | use TYPO3\CMS\Core\Utility\GeneralUtility; |
||||||
| 5 | use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; |
||||||
| 6 | use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; |
||||||
| 7 | use TYPO3\CMS\Extbase\Object\ObjectManager; |
||||||
| 8 | use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; |
||||||
| 9 | use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; |
||||||
| 10 | use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; |
||||||
| 11 | |||||||
| 12 | /*************************************************************** |
||||||
| 13 | * Copyright notice |
||||||
| 14 | * |
||||||
| 15 | * (c) 2011 Christian Kuhn <[email protected]> |
||||||
| 16 | * 2013 Axel Wüstemann <[email protected]>, Qbus Werbeagentur GmbH |
||||||
| 17 | * 2015 Benjamin Franzke <[email protected]>, Qbus Werbeagentur GmbH |
||||||
| 18 | * |
||||||
| 19 | * All rights reserved |
||||||
| 20 | * |
||||||
| 21 | * This script is part of the TYPO3 project. The TYPO3 project is |
||||||
| 22 | * free software; you can redistribute it and/or modify |
||||||
| 23 | * it under the terms of the GNU General Public License as published by |
||||||
| 24 | * the Free Software Foundation; either version 3 of the License, or |
||||||
| 25 | * (at your option) any later version. |
||||||
| 26 | * |
||||||
| 27 | * The GNU General Public License can be found at |
||||||
| 28 | * http://www.gnu.org/copyleft/gpl.html. |
||||||
| 29 | * |
||||||
| 30 | * This script is distributed in the hope that it will be useful, |
||||||
| 31 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
| 32 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
| 33 | * GNU General Public License for more details. |
||||||
| 34 | * |
||||||
| 35 | * This copyright notice MUST APPEAR in all copies of the script! |
||||||
| 36 | ***************************************************************/ |
||||||
| 37 | |||||||
| 38 | /** |
||||||
| 39 | * Renders a partial from another extension in own namespace. |
||||||
| 40 | * based on http://pastebin.com/5NEAmqQs (c) Christian Kuhn <[email protected]> 2011 |
||||||
| 41 | * |
||||||
| 42 | * <q:renderExternal |
||||||
| 43 | * partial="Device/ProductImage" |
||||||
| 44 | * extensionName="EnetOtherExtension" |
||||||
| 45 | * arguments="{ |
||||||
| 46 | * product: entry.device.product, |
||||||
| 47 | * clearing: entry.device.clearing, |
||||||
| 48 | * maxWidth: 30, |
||||||
| 49 | * maxHeight: 30 |
||||||
| 50 | * }" |
||||||
| 51 | * /> |
||||||
| 52 | * |
||||||
| 53 | * @author Christian Kuhn <[email protected]> |
||||||
| 54 | * @TODO: Implement sections |
||||||
| 55 | */ |
||||||
| 56 | class RenderExternalViewHelper extends AbstractViewHelper |
||||||
| 57 | { |
||||||
| 58 | use CompileWithRenderStatic; |
||||||
| 59 | |||||||
| 60 | /** |
||||||
| 61 | * @var bool |
||||||
| 62 | */ |
||||||
| 63 | protected $escapeOutput = false; |
||||||
| 64 | |||||||
| 65 | /** |
||||||
| 66 | * Initialize arguments |
||||||
| 67 | */ |
||||||
| 68 | public function initializeArguments() |
||||||
| 69 | { |
||||||
| 70 | $this->registerArgument('extensionName', 'string', 'Render partial of this extension', true); |
||||||
| 71 | $this->registerArgument('partial', 'string', 'The partial to render', false, null); |
||||||
| 72 | $this->registerArgument('arguments', 'array', 'Arguments to pass to the partial', false, []); |
||||||
| 73 | $this->registerArgument('pluginName', 'string', 'The pluginName of the plugin context to emulate', false, ''); |
||||||
| 74 | } |
||||||
| 75 | |||||||
| 76 | /** |
||||||
| 77 | * @param array $arguments |
||||||
| 78 | * @param \Closure $renderChildrenClosure |
||||||
| 79 | * @param RenderingContextInterface $renderingContext |
||||||
| 80 | * @return string |
||||||
| 81 | */ |
||||||
| 82 | public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext): string |
||||||
| 83 | { |
||||||
| 84 | $extensionName = $arguments['extensionName']; |
||||||
| 85 | $partial = $arguments['partial']; |
||||||
| 86 | $args = $arguments['arguments']; |
||||||
| 87 | $pluginName = $arguments['pluginName']; |
||||||
| 88 | |||||||
| 89 | // Overload arguments with own extension local settings (to pass own settings to external partial) |
||||||
| 90 | $args = self::loadSettingsIntoArguments($args, $renderingContext); |
||||||
| 91 | |||||||
| 92 | $ctxModified = false; |
||||||
| 93 | $backupExtensionName = ''; |
||||||
| 94 | $backupPluginName = ''; |
||||||
| 95 | |||||||
| 96 | if ($pluginName) { |
||||||
| 97 | $objectManager = GeneralUtility::makeInstance(ObjectManager::class); |
||||||
| 98 | $configurationManager = $objectManager->get(ConfigurationManagerInterface::class); |
||||||
| 99 | $settings = $configurationManager->getConfiguration( |
||||||
| 100 | ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, |
||||||
| 101 | str_replace('_', '', $extensionName), |
||||||
| 102 | $pluginName |
||||||
| 103 | ); |
||||||
| 104 | $args['settings'] = $settings; |
||||||
| 105 | |||||||
| 106 | $req = $renderingContext->getControllerContext()->getRequest(); |
||||||
|
0 ignored issues
–
show
|
|||||||
| 107 | |||||||
| 108 | $backupPluginName = $req->getPluginName(); |
||||||
| 109 | $backupExtensionName = $req->getControllerExtensionName(); |
||||||
| 110 | |||||||
| 111 | $req->setPluginName($pluginName); |
||||||
| 112 | $req->setControllerExtensionName(str_replace('_', '', $extensionName)); |
||||||
| 113 | |||||||
| 114 | $ctxModified = true; |
||||||
| 115 | } |
||||||
| 116 | |||||||
| 117 | $view = $renderingContext->getViewHelperVariableContainer()->getView(); |
||||||
| 118 | |||||||
| 119 | $oldPartialRootPaths = $view->getPartialRootPaths(); |
||||||
|
0 ignored issues
–
show
The method
getPartialRootPaths() does not exist on TYPO3Fluid\Fluid\View\ViewInterface. It seems like you code against a sub-type of TYPO3Fluid\Fluid\View\ViewInterface such as TYPO3\CMS\Fluid\View\AbstractTemplateView.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 120 | $newPartialRootPaths = array( |
||||||
| 121 | ExtensionManagementUtility::extPath($extensionName) . 'Resources/Private/Partials' |
||||||
| 122 | ); |
||||||
| 123 | $view->setPartialRootPaths($newPartialRootPaths); |
||||||
|
0 ignored issues
–
show
The method
setPartialRootPaths() does not exist on TYPO3Fluid\Fluid\View\ViewInterface. It seems like you code against a sub-type of TYPO3Fluid\Fluid\View\ViewInterface such as TYPO3\CMS\Fluid\View\AbstractTemplateView.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 124 | $content = $view->renderPartial($partial, null, $args); |
||||||
| 125 | $view->setPartialRootPaths($oldPartialRootPaths); |
||||||
| 126 | |||||||
| 127 | if ($ctxModified) { |
||||||
| 128 | $req = $renderingContext->getControllerContext()->getRequest(); |
||||||
| 129 | $req->setPluginName($backupPluginName); |
||||||
| 130 | $req->setControllerExtensionName($backupExtensionName); |
||||||
| 131 | } |
||||||
| 132 | |||||||
| 133 | return $content; |
||||||
| 134 | } |
||||||
| 135 | |||||||
| 136 | /** |
||||||
| 137 | * If $arguments['settings'] is not set, it is loaded from the TemplateVariableContainer (if it is available there). |
||||||
| 138 | * |
||||||
| 139 | * @param array $arguments |
||||||
| 140 | * @param RenderingContextInterface $renderingContext |
||||||
| 141 | * @return array |
||||||
| 142 | */ |
||||||
| 143 | protected static function loadSettingsIntoArguments($arguments, RenderingContextInterface $renderingContext) |
||||||
| 144 | { |
||||||
| 145 | if (!isset($arguments['settings']) && $renderingContext->getVariableProvider()->exists('settings')) { |
||||||
| 146 | $arguments['settings'] = $renderingContext->getVariableProvider()->get('settings'); |
||||||
| 147 | } |
||||||
| 148 | |||||||
| 149 | return $arguments; |
||||||
| 150 | } |
||||||
| 151 | } |
||||||
| 152 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.