/** * 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)); }
/** * 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())); }
/** * 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')); } }
/** * 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())); } } }
/** * 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); }
/** * 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; }