/** * Stub: Get the package name of the controller associated with $row * * @param array $row * @return string */ public function getControllerPackageNameFromRecord(array $row) { $extensionKey = $this->getControllerExtensionKeyFromRecord($row); $extensionName = ExtensionNamingUtility::getExtensionName($extensionKey); $vendor = ExtensionNamingUtility::getVendorName($extensionKey); return NULL !== $vendor ? $vendor . '.' . $extensionName : $extensionName; }
/** * @return void * @throws \RuntimeException */ protected function initializeSettings() { $row = $this->getRecord(); $extensionKey = $this->provider->getExtensionKey($row); $extensionName = ExtensionNamingUtility::getExtensionName($extensionKey); $pluginName = $this->request->getPluginName(); $this->settings = (array) $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, $extensionName, $pluginName); $this->data = $this->provider->getFlexFormValues($row); $this->setup = $this->provider->getTemplatePaths($row); }
/** * Renders a Fluid Page Layout file selector * * @param array $parameters * @param mixed $pObj * @return string */ public function renderField(&$parameters, &$pObj) { $name = $parameters['itemFormElName']; $value = $parameters['itemFormElValue']; $availableTemplates = $this->pageService->getAvailablePageTemplateFiles(); if (FALSE === strpos($name, 'tx_fed_controller_action_sub')) { $onChange = 'onclick="if (confirm(TBE_EDITOR.labels.onChangeAlert) && TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };"'; } $selector = '<div>'; $typoScript = $this->configurationManager->getTypoScriptSetup(); $hideInheritFieldSiteRoot = (bool) (TRUE === isset($typoScript['plugin.']['tx_fluidpages.']['siteRootInheritance']) ? 1 > $typoScript['plugin.']['tx_fluidpages.']['siteRootInheritance'] : FALSE); $pageIsSiteRoot = (bool) $parameters['row']['is_siteroot']; $forceDisplayInheritSiteRoot = (bool) ('tx_fed_page_controller_action_sub' === $parameters['field']); $forceHideInherit = (bool) (0 === intval($parameters['row']['pid'])); if (FALSE === $pageIsSiteRoot || TRUE === $forceDisplayInheritSiteRoot || FALSE === $hideInheritFieldSiteRoot) { if (FALSE === $forceHideInherit) { $emptyLabel = LocalizationUtility::translate('pages.tx_fed_page_controller_action.default', 'Fluidpages'); $selected = TRUE === empty($value) ? ' checked="checked" ' : NULL; $selector .= '<label>'; $selector .= '<input type="radio" name="' . $name . '" ' . $onChange . '" value="" ' . $selected . '/> ' . $emptyLabel . LF; $selector .= '</label>' . LF; } } foreach ($availableTemplates as $extension => $group) { $extensionKey = ExtensionNamingUtility::getExtensionKey($extension); if (FALSE === ExtensionManagementUtility::isLoaded($extensionKey)) { $groupTitle = ucfirst($extension); } else { $emConfigFile = ExtensionManagementUtility::extPath($extensionKey, 'ext_emconf.php'); require $emConfigFile; $groupTitle = $EM_CONF['']['title']; } $packageLabel = LocalizationUtility::translate('pages.tx_fed_page_package', 'Fluidpages'); $selector .= '<h4 style="clear: both; margin-top: 1em;">' . $packageLabel . ': ' . $groupTitle . '</h4>' . LF; foreach ($group as $template) { try { $paths = $this->configurationService->getPageConfiguration($extension); $extensionName = ExtensionNamingUtility::getExtensionName($extension); $templatePathAndFilename = $this->pageService->expandPathsAndTemplateFileToTemplatePathAndFilename($paths, $template); if (FALSE === file_exists($templatePathAndFilename)) { $this->configurationService->message('Missing template file: ' . $templatePathAndFilename, GeneralUtility::SYSLOG_SEVERITY_WARNING); continue; } $form = $this->configurationService->getFormFromTemplateFile($templatePathAndFilename, 'Configuration', 'form', $paths, $extensionName); if (FALSE === $form instanceof Form) { $this->configurationService->message('Template file ' . $templatePathAndFilename . ' contains an unparsable Form definition', GeneralUtility::SYSLOG_SEVERITY_FATAL); continue; } if (FALSE === $form->getEnabled()) { continue; } $thumbnail = $form->getIcon(); $label = $form->getLabel(); $translatedLabel = LocalizationUtility::translate($label, $extensionName); if (NULL !== $translatedLabel) { $label = $translatedLabel; } $optionValue = $extension . '->' . $template; $selected = $optionValue == $value ? ' checked="checked"' : ''; $option = '<label style="padding: 0.5em; border: 1px solid #CCC; display: inline-block; vertical-align: bottom; margin: 0 1em 1em 0; cursor: pointer; ' . ($selected ? 'background-color: #DDD;' : '') . '">'; $option .= '<img src="' . $thumbnail . '" alt="' . $label . '" style="margin: 0.5em 0 0.5em 0; max-width: 196px; max-height: 128px;"/><br />'; $option .= '<input type="radio" value="' . $optionValue . '"' . $selected . ' name="' . $name . '" ' . $onChange . ' /> ' . $label; $option .= '</label>'; $selector .= $option . LF; } catch (\Exception $error) { $this->configurationService->debug($error); } } } $selector .= '</div>' . LF; unset($pObj); return $selector; }
/** * @test */ public function testGetExtensionNameWithVendorName() { $result = ExtensionNamingUtility::getExtensionName('FT3.FooExt'); $this->assertSame('FooExt', $result); }
/** * Reads a list of allowed actions for $extensionName's plugin $pluginName * * @return array */ protected function getActionsForExtensionNameAndPluginName() { $extensionName = $this->getControllerExtensionName(); $extensionName = ExtensionNamingUtility::getExtensionName($extensionName); $pluginName = $this->getPluginName(); $actions = (array) $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['plugins'][$pluginName]['controllers']; foreach ($actions as $controllerName => $definitions) { $actions[$controllerName] = $definitions['actions']; } return $actions; }
/** * @param array $row * @return Grid */ public function getGrid(array $row) { if (NULL !== $this->grid) { return $this->grid; } $templatePathAndFilename = $this->getTemplatePathAndFilename($row); $section = $this->getConfigurationSectionName($row); $gridName = 'grid'; $paths = $this->getTemplatePaths($row); $extensionKey = $this->getExtensionKey($row); $extensionName = ExtensionNamingUtility::getExtensionName($extensionKey); $fieldName = $this->getFieldName($row); $variables = $this->configurationService->convertFlexFormContentToArray($row[$fieldName]); $variables['record'] = $row; $grid = $this->configurationService->getGridFromTemplateFile($templatePathAndFilename, $section, $gridName, $paths, $extensionName, $variables); return $grid; }
/** * @param string $extensionKey * @param string $controllerName * @return boolean|string */ private static function buildControllerClassNameFromExtensionKeyAndControllerType($extensionKey, $controllerName) { if (TRUE === ExtensionNamingUtility::hasVendorName($extensionKey)) { list($vendorName, $extensionName) = ExtensionNamingUtility::getVendorNameAndExtensionName($extensionKey); $potentialClassName = $vendorName . '\\' . $extensionName . '\\Controller\\' . $controllerName . 'Controller'; } else { $extensionName = ExtensionNamingUtility::getExtensionName($extensionKey); $potentialClassName = $extensionName . '\\Controller\\' . $controllerName . 'Controller'; if (FALSE === class_exists($potentialClassName)) { $potentialClassName = 'Tx_' . $extensionName . '_Controller_' . $controllerName . 'Controller'; } } return $potentialClassName; }
/** * @param ViewContext $viewContext * @return ExposedTemplateView */ public function getPreparedExposedTemplateView(ViewContext $viewContext) { $vendorName = $viewContext->getVendorName(); $extensionKey = $viewContext->getExtensionKey(); $qualifiedExtensionName = $viewContext->getExtensionName(); $controllerName = $viewContext->getControllerName(); $variables = $viewContext->getVariables(); if (NULL === $qualifiedExtensionName || FALSE === ExtensionManagementUtility::isLoaded($extensionKey)) { // Note here: a default value of the argument would not be adequate; outside callers could still pass NULL. $qualifiedExtensionName = 'Flux'; } $extensionName = ExtensionNamingUtility::getExtensionName($qualifiedExtensionName); /** @var $context ControllerContext */ $context = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext'); $request = $viewContext->getRequest(); /** @var $response Response */ $response = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Response'); /** @var $uriBuilder UriBuilder */ $uriBuilder = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder'); $uriBuilder->setRequest($request); $context->setUriBuilder($uriBuilder); $context->setRequest($request); $context->setResponse($response); /** @var $renderingContext RenderingContext */ $renderingContext = $this->objectManager->get(FluxPackageFactory::getPackageWithFallback($qualifiedExtensionName)->getImplementation(FluxPackage::IMPLEMENTATION_RENDERINGCONTEXT)); $renderingContext->setControllerContext($context); /** @var $exposedView ExposedTemplateView */ $exposedView = $this->objectManager->get(FluxPackageFactory::getPackageWithFallback($qualifiedExtensionName)->getImplementation(FluxPackage::IMPLEMENTATION_VIEW)); $exposedView->setRenderingContext($renderingContext); $exposedView->setControllerContext($context); $exposedView->assignMultiple($variables); $exposedView->setTemplatePaths($viewContext->getTemplatePaths()); $exposedView->setTemplatePathAndFilename($viewContext->getTemplatePathAndFilename()); return $exposedView; }
/** * @param array $row * @param Column $column * @param integer $colPosFluxContent * @param PageLayoutView $dblist * @param integer $target * @param string $id * @param string $content * @return string */ protected function parseGridColumnTemplate(array $row, Column $column, $colPosFluxContent, $dblist, $target, $id, $content) { $label = $column->getLabel(); if (strpos($label, 'LLL:') === 0) { $label = LocalizationUtility::translate($label, ExtensionNamingUtility::getExtensionName($column->getExtensionName())); if (empty($label)) { $label = $column->getLabel(); } } // this variable defines if this drop-area gets activated on drag action // of a ce with the same data-language_uid $templateClassJsSortableLanguageId = $row['sys_language_uid']; // this variable defines which drop-areas will be activated // with a drag action of this element $templateDataLanguageUid = $row['sys_language_uid']; // but for language mode all (uid -1): if ((int) $row['sys_language_uid'] === -1) { /** @var \TYPO3\CMS\Backend\Controller\PageLayoutController $pageLayoutController */ $pageLayoutController = $GLOBALS['SOBE']; $isColumnView = (int) $pageLayoutController->MOD_SETTINGS['function'] === 1; $isLanguagesView = (int) $pageLayoutController->MOD_SETTINGS['function'] === 2; if ($isColumnView) { $templateClassJsSortableLanguageId = $pageLayoutController->current_sys_language; $templateDataLanguageUid = $pageLayoutController->current_sys_language; } elseif ($isLanguagesView) { // If this is a language-all (uid -1) grid-element in languages-view // we use language-uid 0 for this elements drop-areas. // This can be done because a ce with language-uid -1 in languages view // is in TYPO3 7.6.4 only displayed in the default-language-column (maybe a bug atm.?). // Additionally there is no access to the information which // language column is currently rendered from here! // ($lP in typo3/cms/typo3/sysext/backend/Classes/View/PageLayoutView.php L485) $templateClassJsSortableLanguageId = 0; $templateDataLanguageUid = 0; } } return sprintf($this->templates['gridColumn'], $column->getColspan(), $column->getRowspan(), $column->getStyle(), $colPosFluxContent, $templateClassJsSortableLanguageId, $templateDataLanguageUid, $label, $target, $id, $this->drawNewIcon($row, $column) . $this->drawPasteIcon($row, $column) . $this->drawPasteIcon($row, $column, TRUE), $content); }
/** * @param string $extensionName * @param string $controllerName * @param string $actionName * @param string $pluginSignature * @return string */ protected function performSubRendering($extensionName, $controllerName, $actionName, $pluginSignature) { $shouldRelay = $this->hasSubControllerActionOnForeignController($extensionName, $controllerName, $actionName); if (TRUE === $shouldRelay) { $foreignControllerClass = ResolveUtility::resolveFluxControllerClassNameByExtensionKeyAndAction($extensionName, $actionName, $controllerName); $extensionName = ExtensionNamingUtility::getExtensionName($extensionName); return $this->callSubControllerAction($extensionName, $foreignControllerClass, $actionName, $pluginSignature); } return $this->view->render(); }
/** * @param string $qualifiedExtensionName * @param string $controllerName * @param array $paths * @param array $variables * @return ExposedTemplateView */ public function getPreparedExposedTemplateView($qualifiedExtensionName = NULL, $controllerName = NULL, $paths = array(), $variables = array()) { $qualifiedExtensionName = GeneralUtility::camelCaseToLowerCaseUnderscored($qualifiedExtensionName); $extensionKey = ExtensionNamingUtility::getExtensionKey($qualifiedExtensionName); $vendorName = ExtensionNamingUtility::getVendorName($qualifiedExtensionName); if (NULL === $qualifiedExtensionName || FALSE === ExtensionManagementUtility::isLoaded($extensionKey)) { // Note here: a default value of the argument would not be adequate; outside callers could still pass NULL. $qualifiedExtensionName = 'Flux'; } $extensionName = ExtensionNamingUtility::getExtensionName($qualifiedExtensionName); if (NULL === $controllerName) { $controllerName = 'Flux'; } /** @var $context ControllerContext */ $context = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext'); /** @var $request Request */ $request = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Request'); /** @var $response Responsee */ $response = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Response'); $request->setControllerExtensionName($extensionName); $request->setControllerName($controllerName); $request->setControllerVendorName($vendorName); $request->setDispatched(TRUE); /** @var $uriBuilder UriBuilder */ $uriBuilder = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder'); $uriBuilder->setRequest($request); $context->setUriBuilder($uriBuilder); $context->setRequest($request); $context->setResponse($response); /** @var $exposedView ExposedTemplateView */ $exposedView = $this->objectManager->get('FluidTYPO3\\Flux\\View\\ExposedTemplateView'); $exposedView->setControllerContext($context); if (0 < count($variables)) { $exposedView->assignMultiple($variables); } if (TRUE === isset($paths['layoutRootPath']) && FALSE === empty($paths['layoutRootPath'])) { $exposedView->setLayoutRootPath($paths['layoutRootPath']); } if (TRUE === isset($paths['partialRootPath']) && FALSE === empty($paths['partialRootPath'])) { $exposedView->setPartialRootPath($paths['partialRootPath']); } if (TRUE === isset($paths['templateRootPath']) && FALSE === empty($paths['templateRootPath'])) { $exposedView->setTemplateRootPath($paths['templateRootPath']); } return $exposedView; }
/** * @param ViewContext $viewContext * @return ExposedTemplateView */ public function getPreparedExposedTemplateView(ViewContext $viewContext) { $vendorName = $viewContext->getVendorName(); $extensionKey = $viewContext->getExtensionKey(); $qualifiedExtensionName = $viewContext->getExtensionName(); $controllerName = $viewContext->getControllerName(); $variables = $viewContext->getVariables(); if (NULL === $qualifiedExtensionName || FALSE === ExtensionManagementUtility::isLoaded($extensionKey)) { // Note here: a default value of the argument would not be adequate; outside callers could still pass NULL. $qualifiedExtensionName = 'Flux'; } $extensionName = ExtensionNamingUtility::getExtensionName($qualifiedExtensionName); if (NULL === $controllerName) { $controllerName = 'Flux'; } /** @var $context ControllerContext */ $context = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext'); /** @var $request Request */ $request = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Request'); /** @var $response Response */ $response = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Response'); $request->setControllerExtensionName($extensionName); $request->setControllerName($controllerName); $request->setControllerVendorName($vendorName); $request->setFormat($viewContext->getFormat()); $request->setDispatched(TRUE); /** @var $uriBuilder UriBuilder */ $uriBuilder = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder'); $uriBuilder->setRequest($request); $context->setUriBuilder($uriBuilder); $context->setRequest($request); $context->setResponse($response); /** @var $renderingContext RenderingContext */ $renderingContext = $this->objectManager->get('TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContext'); $renderingContext->setControllerContext($context); /** @var $exposedView ExposedTemplateView */ $exposedView = $this->objectManager->get('FluidTYPO3\\Flux\\View\\ExposedTemplateView'); $exposedView->setRenderingContext($renderingContext); $exposedView->assignMultiple($variables); $exposedView->setTemplatePaths($viewContext->getTemplatePaths()); $exposedView->setTemplatePathAndFilename($viewContext->getTemplatePathAndFilename()); return $exposedView; }
/** * @param string $extensionName * @param string $controllerName * @param string $actionName * @return boolean */ protected function hasSubControllerActionOnForeignController($extensionName, $controllerName, $actionName) { $potentialControllerClassName = $this->configurationService->getResolver()->resolveFluxControllerClassNameByExtensionKeyAndAction($extensionName, $actionName, $controllerName); $isForeign = ExtensionNamingUtility::getExtensionName($extensionName) !== ExtensionNamingUtility::getExtensionName($this->extensionName); $isValidController = class_exists($potentialControllerClassName); return TRUE === $isForeign && TRUE === $isValidController; }
/** * Must always return the ExtensionName format of the * extension key, excluding the vendor name. * * @return string */ public function getExtensionName() { return ExtensionNamingUtility::getExtensionName($this->manifest['package']); }
/** * @return string */ public function getExtensionName() { return ExtensionNamingUtility::getExtensionName($this->packageName); }