public static function setVariantSupport($strTableName, $blnVariantSupport)
{
if ($blnVariantSupport) {
if (self::getDB()->tableExists($strTableName, null, true) && !self::getDB()->fieldExists('varbase', $strTableName, true)) {
self::createColumn($strTableName, 'varbase', 'char(1) NOT NULL default \'\'', true);
self::createColumn($strTableName, 'vargroup', 'int(11) NOT NULL default 0', true);
// If there is pre-existing data in the table, we need to provide a separate 'vargroup' value to all of
// them, we can do this safely by setting all vargroups to the id of the base item.
self::getDB()->execute(sprintf('UPDATE %s SET vargroup=id, varbase=1', $strTableName));
}
} else {
if (self::getDB()->tableExists($strTableName, null, true) && self::getDB()->fieldExists('varbase', $strTableName, true)) {
self::dropColumn($strTableName, 'varbase', true);
self::dropColumn($strTableName, 'vargroup', true);
}
}
}
/** * Handle the update of a MetaModel and all attached data. * * @param PostPersistModelEvent $event The event. * * @return void */ public function handleUpdate(PostPersistModelEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel') { return; } $old = $event->getOriginalModel(); $new = $event->getModel(); $oldTable = $old ? $old->getProperty('tableName') : null; $newTable = $new->getProperty('tableName'); // Table name changed? if ($oldTable !== $newTable) { if ($oldTable && $this->getDatabase()->tableExists($oldTable, null, true)) { TableManipulation::renameTable($oldTable, $newTable); // TODO: notify attributes that the MetaModel has changed its table name. } else { TableManipulation::createTable($newTable); } } TableManipulation::setVariantSupport($newTable, $new->getProperty('varsupport')); }