/**
  * Encode the values into a serialized array.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  */
 public function saveValues(EncodePropertyValueFromWidgetEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_attribute' || $event->getProperty() !== 'translatedtabletext_cols') {
         return;
     }
     $objMetaModel = $this->getMetaModelById($event->getModel()->getProperty('pid'));
     $varValue = $event->getValue();
     // Not translated, make it a plain string.
     if (!$objMetaModel->isTranslated()) {
         $event->setValue(serialize($varValue));
         return;
     }
     $arrLangValues = deserialize($varValue);
     $arrOutput = array();
     foreach ($arrLangValues as $varSubValue) {
         $strLangCode = $varSubValue['langcode'];
         unset($varSubValue['langcode']);
         if (count($varSubValue) > 1) {
             $arrOutput[$strLangCode] = $varSubValue;
         } else {
             $arrKeys = array_keys($varSubValue);
             $arrOutput[$strLangCode] = $varSubValue[$arrKeys[0]];
         }
     }
     $event->setValue(serialize($arrOutput));
 }
Exemplo n.º 2
0
 /**
  * Encode the title value.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  */
 public function encodeLegendTitleValue(EncodePropertyValueFromWidgetEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dcasetting' || $event->getProperty() !== 'legendtitle') {
         return;
     }
     $metaModel = $this->getMetaModelFromModel($event->getModel());
     $values = Helper::encodeLangArray($event->getValue(), $metaModel);
     $event->setValue($values);
 }
 /**
  * Retrieve the arguments for the callback.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event being emitted.
  *
  * @return array
  */
 public function getArgs($event)
 {
     return array($event->getValue(), new DcCompat($event->getEnvironment(), $event->getModel(), $event->getProperty()));
 }
Exemplo n.º 4
0
 /**
  * Translates an generated alias {@see getAttributeNames()} to the corresponding attribute id.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  */
 public function encodeAttributeIdValue(EncodePropertyValueFromWidgetEvent $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;
     }
     $value = substr($value, strlen($metaModel->getTableName() . '_'));
     $attribute = $metaModel->getAttribute($value);
     if ($attribute) {
         $event->setValue($attribute->get('id'));
     }
 }
Exemplo n.º 5
0
 /**
  * Encode the given value from a real language array into a serialized language array.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  *
  * @throws \RuntimeException When the column name is illegal or duplicate.
  */
 public function encodeColumnNameValue(EncodePropertyValueFromWidgetEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_attribute' || $event->getProperty() !== 'colname') {
         return;
     }
     $oldColumnName = $event->getModel()->getProperty($event->getProperty());
     $columnName = $event->getValue();
     $metaModel = $this->getMetaModelByModelPid($event->getModel());
     if (!$columnName || $oldColumnName !== $columnName) {
         TableManipulation::checkColumnDoesNotExist($metaModel->getTableName(), $columnName);
         $colNames = array_keys($metaModel->getAttributes());
         if (in_array($columnName, $colNames)) {
             throw new \RuntimeException(sprintf($event->getEnvironment()->getTranslator()->translate('columnExists', 'ERR'), $columnName, $metaModel->getTableName()));
         }
     }
 }
Exemplo n.º 6
0
 /**
  * Called by tl_metamodel.tableName onsave_callback.
  *
  * Prefixes the table name with mm_ if not provided by the user as such.
  * Checks if the table name is legal to the DB.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  *
  * @throws \RuntimeException When no table name has been given.
  */
 public function ensureTableNamePrefix(EncodePropertyValueFromWidgetEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel' || $event->getProperty() !== 'tableName') {
         return;
     }
     // See #49.
     $tableName = strtolower($event->getValue());
     if (!strlen($tableName)) {
         throw new \RuntimeException('Table name not given');
     }
     // Force mm_ prefix.
     if (substr($tableName, 0, 3) !== 'mm_') {
         $tableName = 'mm_' . $tableName;
     }
     $dataProvider = $event->getEnvironment()->getDataProvider('tl_metamodel');
     // New model, ensure the table does not exist.
     if (!$event->getModel()->getId()) {
         TableManipulation::checkTableDoesNotExist($tableName);
     } else {
         // Edited model, ensure the value is unique and then that the table does not exist.
         $oldVersion = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($event->getModel()->getId()));
         if ($oldVersion->getProperty('tableName') !== $event->getModel()->getProperty('tableName')) {
             TableManipulation::checkTableDoesNotExist($tableName);
         }
     }
     $event->setValue($tableName);
 }
Exemplo n.º 7
0
 /**
  * Translates an generated alias {@see getAttributeNames()} to the corresponding attribute id.
  *
  * @param EncodePropertyValueFromWidgetEvent $event The event.
  *
  * @return void
  */
 public function encodeAttributeIdValue(EncodePropertyValueFromWidgetEvent $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;
     }
     $value = substr($value, strlen($metaModel->getTableName() . '_'));
     $attribute = $metaModel->getAttribute($value);
     if ($attribute) {
         $event->setValue($attribute->get('id'));
     }
 }
 /**
  * Get the supported attribute or null.
  *
  * @param EncodePropertyValueFromWidgetEvent|DecodePropertyValueForWidgetEvent $event The subscribed event.
  *
  * @return Timestamp|null
  */
 private function getSupportedAttribute($event)
 {
     $model = $event->getModel();
     // Not a metamodel model.
     if (!$model instanceof Model) {
         return null;
     }
     $property = $event->getProperty();
     $attribute = $model->getItem()->getAttribute($property);
     if ($attribute instanceof Timestamp) {
         return $attribute;
     }
     return null;
 }