/** * @param array $typoScript * @param string $globalThemeName * @param array $expected * * @test * @dataProvider propertiesAreUpdatedFromTypoScriptDataProvider */ public function propertiesAreUpdatedFromTypoScript(array $typoScript, $globalThemeName, array $expected) { $this->typoScriptRepositoryProphecy->getModelConfigurationByScope('FORM', 'themeName')->willReturn($globalThemeName); $this->subject->setTypoScript($typoScript); $this->assertEquals($expected['prefix'], $this->subject->getPrefix()); $this->assertEquals($expected['contentElementRendering'], $this->subject->getContentElementRendering()); }
/** * Render TypoScript values * There are different variants. It is possible that the TypoScript * which we want to render looks like this: * * array( * 'message' => 'TEXT', * 'message.' => array( * 'value' => 'blah' * ) * ) * * or in "short syntax" (the wizard writes some syntax partly) * * array( * 'message.' => array( * 'value' => 'blah' * ) * ) * * or it is simply a string. * * Furthermore we have 2 modes: * - contentelement rendering is allowed * - or contentelement rendering is not allowed * * This method will take care of all scenarios and provide some * fallbacks. * Call this method always in the following way: * * renderItem( * $typoscript['itemToRender.'], * $typoscript['itemToRender'], * $optionalDefaultMessage * ) * * You dont have to handle if is $typoscript['itemToRender.'] is * set or not. This function determines this. * This allows us to get the value of a TypoScript construct * without knowing about "short syntax", only a string, a cObject, * if cObject rendering is allowed and so on. * * If contentelement rendering is allowed: * If $type and $configuration are set * render as an cObject. * * If $type is set but $configuration is empty * only return the value of $type. * * If $type is empty and $configuration is an array ("short syntax") * render the $configuration as content type TEXT. * * If $type is empty and $configuration is a string * render the value of $configuration like * 10 = TEXT 10.value = $configuration. * * If $type is empty and $configuration is empty * return the $defaultMessage. * * If contentelement rendering is not allowed: * If $type is set but $configuration is empty * only return the value of $type. * * If $type is set and $configuration['value'] isset * return the value of $configuration['value']. * * If $type is set and $configuration['value'] is not set * return the value of $defaultMessage. * * If $type is empty and $configuration['value'] isset * return the value of $configuration['value']. * * If $type is empty and $configuration['value'] is not set * return the value of $defaultMessage. * * @param mixed $configuration a string or a TypoScript array * @param NULL|string $type cObject type or simply a string value * @param string $defaultMessage * @return string */ public function renderItem($configuration, $type = null, $defaultMessage = '') { if ($this->configuration->getContentElementRendering()) { $renderedMessage = null; if ($type !== null) { if (is_array($configuration)) { /* Direct cObject rendering */ $value = $configuration; } else { /* got only a string, no rendering required */ $renderedMessage = $type; } } else { if ($configuration !== null) { /* Render the "short syntax" * The wizard write things like label.value * The previous version of EXT:form interpreted this * as a TEXT content object, so we do the same * */ $type = 'TEXT'; if (is_array($configuration)) { $value = $configuration; } else { $value['value'] = $configuration; } } else { /* return the default message * If $type === NULL and $configuration === NULL * return the default message (if set). * */ $renderedMessage = $defaultMessage; } } if ($renderedMessage === null) { $renderedMessage = $GLOBALS['TSFE']->cObj->cObjGetSingle($type, $value); } } else { if ($type !== null) { if ($configuration !== null) { /* the wizard write things like label.value = some text * so we need the handle that, even content object rendering * is not allowed. * */ if (isset($configuration['value'])) { $renderedMessage = $configuration['value']; } else { $renderedMessage = $defaultMessage; } } else { // string, no rendering required $renderedMessage = $type; } } else { $renderedMessage = $defaultMessage; if (is_array($configuration) && isset($configuration['value'])) { $renderedMessage = $configuration['value']; } } } return $renderedMessage; }