/**
  * 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));
 }
Пример #2
0
 /**
  * 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());
     }
 }
Пример #3
0
 /**
  * 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);
 }
Пример #5
0
 /**
  * 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());
     }
 }
Пример #6
0
 /**
  * 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());
     }
 }
Пример #7
0
 /**
  * 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()));
 }
Пример #9
0
 /**
  * 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);
 }
Пример #10
0
 /**
  * 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()));
 }
Пример #12
0
 /**
  * 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());
 }