Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 /**
  * @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);
 }
Пример #5
0
 /**
  * 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;
 }
Пример #6
0
 /**
  * @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;
 }
Пример #7
0
 /**
  * @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;
 }
Пример #8
0
 /**
  * @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;
 }
Пример #9
0
 /**
  * @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();
 }
Пример #11
0
 /**
  * @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;
 }
Пример #12
0
 /**
  * @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;
 }
Пример #13
0
 /**
  * @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;
 }
Пример #14
0
 /**
  * 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']);
 }
Пример #15
0
 /**
  * @return string
  */
 public function getExtensionName()
 {
     return ExtensionNamingUtility::getExtensionName($this->packageName);
 }