/** * Decode the values into a real table array. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function loadValues(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_attribute' || $event->getProperty() !== 'translatedtabletext_cols') { return; } $objMetaModel = $this->getMetaModelById($event->getModel()->getProperty('pid')); $arrLanguages = $objMetaModel->getAvailableLanguages(); // Check model and input for the cols and get the max value. $intModelCols = $event->getModel()->getProperty('tabletext_quantity_cols'); $intInputCols = $event->getEnvironment()->getInputProvider()->getValue('tabletext_quantity_cols'); $intCols = max(intval($intModelCols), intval($intInputCols)); $varValue = $event->getValue(); // Kick unused lines. foreach ((array) $varValue as $strLanguage => $arrRows) { if (count($arrRows) > $intCols) { $varValue[$strLanguage] = array_slice($varValue[$strLanguage], 0, $intCols); } } $arrLangValues = deserialize($varValue); if (!$objMetaModel->isTranslated()) { // If we have an array, return the first value and exit, if not an array, return the value itself. if (is_array($arrLangValues)) { $event->setValue($arrLangValues[key($arrLangValues)]); } else { $event->setValue($arrLangValues); } return; } $arrOutput = array(); // Sort like in MetaModel definition. if ($arrLanguages) { foreach ($arrLanguages as $strLangCode) { if (is_array($arrLangValues)) { $varSubValue = $arrLangValues[$strLangCode]; } else { $varSubValue = $arrLangValues; } if (is_array($varSubValue)) { $arrOutput[] = array('langcode' => $strLangCode, 'rowLabels' => $varSubValue); } else { $arrOutput[] = array('langcode' => $strLangCode, 'value' => $varSubValue); } } } $event->setValue(serialize($arrOutput)); }
/** * Translates an attribute id to a generated alias. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeAttrValue(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dca_sortgroup' || $event->getProperty() !== 'rendergroupattr' && $event->getProperty() !== 'rendersortattr') { return; } $metaModel = self::getMetaModel($event->getEnvironment()); $value = $event->getValue(); if (!($metaModel && $value)) { return; } $attribute = $metaModel->getAttributeById($value); if ($attribute) { $event->setValue($metaModel->getTableName() . '_' . $attribute->getColName()); } }
/** * Decode the title value. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeLegendTitleValue(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dcasetting' || $event->getProperty() !== 'legendtitle') { return; } $metaModel = $this->getMetaModelFromModel($event->getModel()); $values = Helper::decodeLangArray($event->getValue(), $metaModel); $event->setValue($values); }
/** * Update the value in the event. * * @param DecodePropertyValueForWidgetEvent $event The event being emitted. * * @param mixed $value The decoded value. * * @return void */ public function update($event, $value) { $event->setValue($value); }
/** * Translates an value to a generated alias to allow numeric values. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeValueValue(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dcasetting_condition' || $event->getProperty() !== 'value') { return; } if (is_array($event->getValue())) { $values = array(); foreach ($event->getValue() as $value) { $values[] = 'value_' . $value; } // Cut off the 'value_' prefix. $event->setValue($values); } else { $event->setValue('value_' . $event->getValue()); } }
/** * Translates an attribute id to a generated alias {@see getAttributeNames()}. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeAttributeIdValue(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_filtersetting' || $event->getProperty() !== 'attr_id') { return; } $model = $event->getModel(); $metaModel = $this->getMetaModel($model); $value = $event->getValue(); if (!($metaModel && $value)) { return; } $attribute = $metaModel->getAttributeById($value); if ($attribute) { $event->setValue($metaModel->getTableName() . '_' . $attribute->getColName()); } }
/** * Decode the given value from a serialized language array into the real language array. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ protected function decodeValue(DecodePropertyValueForWidgetEvent $event) { $metaModel = $this->getMetaModelByModelPid($event->getModel()); $values = Helper::decodeLangArray($event->getValue(), $metaModel); $event->setValue($values); }
/** * Make email lowercase. * * @param DecodePropertyValueForWidgetEvent $event */ public function decodeEmail(DecodePropertyValueForWidgetEvent $event) { if ($event->getModel()->getProviderName() != 'orm_avisota_recipient' || $event->getProperty() != 'email') { return; } $event->setValue(strtolower($event->getValue())); }
/** * Decode a language array. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function fixLangArray(DecodePropertyValueForWidgetEvent $event) { $langValues = (array) $event->getValue(); $output = array(); foreach ($langValues as $langCode => $subValue) { if (is_array($subValue)) { $output[] = array_merge($subValue, array('langcode' => $langCode)); } } $event->setValue($output); }
/** * Translates the values of the jumpTo entries into the real array. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeJumpToValue(DecodePropertyValueForWidgetEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_rendersettings' || $event->getProperty() !== 'jumpTo') { return; } $propInfo = $event->getEnvironment()->getDataDefinition()->getPropertiesDefinition()->getProperty($event->getProperty()); $value = deserialize($event->getValue(), true); if (!$value) { return; } $extra = $propInfo->getExtra(); $newValues = array(); $arrLanguages = $extra['columnFields']['langcode']['options']; foreach (array_keys($arrLanguages) as $key) { $newValue = ''; $intFilter = 0; if ($value) { foreach ($value as $arr) { if (!is_array($arr)) { break; } // Set the new value and exit the loop. if (array_search($key, $arr) !== false) { $newValue = '{{link_url::' . $arr['value'] . '}}'; $intFilter = $arr['filter']; break; } } } // Build the new array. $newValues[] = array('langcode' => $key, 'value' => $newValue, 'filter' => $intFilter); } $event->setValue($newValues); }
/** * Convert uuid to file source to see the right source in the rich text editor. * After convert this back to the original source. * * @param DecodePropertyValueForWidgetEvent $event The event to handle. * * @return void */ public function convertUuidToFileSource(DecodePropertyValueForWidgetEvent $event) { $environment = $event->getEnvironment(); $dataDefinition = $environment->getDataDefinition(); $propertiesDefinition = $dataDefinition->getPropertiesDefinition(); $property = $propertiesDefinition->getProperty($event->getProperty()); if (!array_key_exists('rte', $property->getExtra()) || strpos($property->getExtra()['rte'], 'tiny') !== 0) { return; } $event->setValue(StringUtil::insertTagToSrc($event->getValue())); }
/** * Translates an attribute id to a generated alias {@see getAttributeNames()}. * * @param DecodePropertyValueForWidgetEvent $event The event. * * @return void */ public function decodeAttributeIdValue(DecodePropertyValueForWidgetEvent $event) { $isAllowed = $this->isAllowedContext($event->getEnvironment()->getDataDefinition(), $event->getProperty(), $event->getModel()); if (!$isAllowed) { return; } $model = $event->getModel(); $metaModel = $this->getMetaModel($model); $value = $event->getValue(); if (!($metaModel && $value)) { return; } $attribute = $metaModel->getAttributeById($value); if ($attribute) { $event->setValue($metaModel->getTableName() . '_' . $attribute->getColName()); } }
/** * The subscriber creates the timestamp from the widget value. * * @param string $format The given date format. * @param string $value The given date example * * @dataProvider dataProvider * @test */ public function it_creates_timestamp_from_widget_value($format, $value) { $dateTime = \DateTime::createFromFormat($format, $value); $timestamp = $dateTime->getTimestamp(); $attribute = $this->mockAttribute($format); $attribute->expects($this->any())->method('widgetToValue')->will($this->returnValue($timestamp)); $model = $this->mockModelWithAttribute($attribute); $event = new DecodePropertyValueForWidgetEvent($this->mockEnvironment(), $model); $event->setProperty('date'); $event->setValue($timestamp); $this->eventDispatcher->expects($this->atLeastOnce())->method('dispatch')->with($this->anything(), $this->callback(function (ParseDateEvent $event) use($value) { $event->setResult($value); return true; })); $this->backendSubscriber->handleDecodePropertyValueForWidgetEvent($event); $this->assertEquals($value, $event->getValue()); }