public function save()
{
if (!$this->getKey()) {
throw new \Exception("A object-brick needs a key to be saved!");
}
$definitionFile = $this->getDefinitionFile();
$newClassDefinitions = [];
$classDefinitionsToDelete = [];
foreach ($this->classDefinitions as $cl) {
if (!$cl['deleted']) {
$newClassDefinitions[] = $cl;
} else {
$classDefinitionsToDelete[] = $cl;
}
}
$this->classDefinitions = $newClassDefinitions;
$infoDocBlock = $this->getInfoDocBlock();
$this->cleanupOldFiles($definitionFile);
$clone = clone $this;
$clone->setDao(null);
unset($clone->oldClassDefinitions);
unset($clone->fieldDefinitions);
$exportedClass = var_export($clone, true);
$data = '<?php ';
$data .= "\n\n";
$data .= $infoDocBlock;
$data .= "\n\n";
$data .= "\nreturn " . $exportedClass . ";\n";
\Pimcore\File::put($definitionFile, $data);
$extendClass = "Object\\Objectbrick\\Data\\AbstractData";
if ($this->getParentClass()) {
$extendClass = $this->getParentClass();
$extendClass = "\\" . ltrim($extendClass, "\\");
}
// create class
$cd = '<?php ';
$cd .= "\n\n";
$cd .= $infoDocBlock;
$cd .= "\n\n";
$cd .= "namespace Pimcore\\Model\\Object\\Objectbrick\\Data;";
$cd .= "\n\n";
$cd .= "use Pimcore\\Model\\Object;";
$cd .= "\n\n";
$cd .= "class " . ucfirst($this->getKey()) . " extends " . $extendClass . " {";
$cd .= "\n\n";
$cd .= 'public $type = "' . $this->getKey() . "\";\n";
if (is_array($this->getFieldDefinitions()) && count($this->getFieldDefinitions())) {
foreach ($this->getFieldDefinitions() as $key => $def) {
$cd .= "public \$" . $key . ";\n";
}
}
$cd .= "\n\n";
if (is_array($this->getFieldDefinitions()) && count($this->getFieldDefinitions())) {
foreach ($this->getFieldDefinitions() as $key => $def) {
/**
* @var $def Object\ClassDefinition\Data
*/
$cd .= $def->getGetterCodeObjectbrick($this);
$cd .= $def->getSetterCodeObjectbrick($this);
}
}
$cd .= "}\n";
$cd .= "\n";
File::put($this->getPhpClassFile(), $cd);
$this->createContainerClasses();
$this->updateDatabase();
}