public static loadAllFields ( Pimcore\Model\Element\ElementInterface $element ) : Pimcore\Model\Element\ElementInterface | ||
$element | Pimcore\Model\Element\ElementInterface | |
return | Pimcore\Model\Element\ElementInterface |
/** * @param Element\ElementInterface $element */ public function loadChilds(Element\ElementInterface $element) { $this->amount++; Element\Service::loadAllFields($element); // for all $element->getProperties(); if (method_exists($element, "getScheduledTasks")) { $element->getScheduledTasks(); } $element->_fulldump = true; if (method_exists($element, "getChilds")) { if ($element instanceof Object\AbstractObject) { // because we also want variants $childs = $element->getChilds(array(Object::OBJECT_TYPE_FOLDER, Object::OBJECT_TYPE_VARIANT, Object::OBJECT_TYPE_OBJECT)); } else { $childs = $element->getChilds(); } foreach ($childs as $child) { $this->loadChilds($child); } } }
/** * @return void */ public function save() { // check if versioning is disabled for this process if (self::$disabled) { return; } if (!$this->date) { $this->setDate(time()); } $data = $this->getData(); // if necessary convert the data to save it to filesystem if (is_object($data) or is_array($data)) { // this is because of lazy loaded element inside documents and objects (eg: multihref, objects, fieldcollections, ...) if ($data instanceof Element\ElementInterface) { Element\Service::loadAllFields($data); } $this->setSerialized(true); $data->_fulldump = true; $dataString = Serialize::serialize($data); // revert all changed made by __sleep() if (method_exists($data, "__wakeup")) { $data->__wakeup(); } unset($data->_fulldump); } else { $dataString = $data; } $this->id = $this->getDao()->save(); // check if directory exists $saveDir = dirname($this->getFilePath()); if (!is_dir($saveDir)) { File::mkdir($saveDir); } // save data to filesystem if (!is_writable(dirname($this->getFilePath())) || is_file($this->getFilePath()) && !is_writable($this->getFilePath())) { throw new \Exception("Cannot save version for element " . $this->getCid() . " with type " . $this->getCtype() . " because the file " . $this->getFilePath() . " is not writeable."); } else { File::put($this->getFilePath(), $dataString); // assets are kina special because they can contain massive amount of binary data which isn't serialized, we append it to the data file if ($data instanceof Asset && $data->getType() != "folder") { // append binary data to version file $handle = fopen($this->getBinaryFilePath(), "w+"); $src = $data->getStream(); stream_copy_to_stream($src, $handle); fclose($handle); } } }
/** * @param Element\ElementInterface $element */ public function loadChilds(Element\ElementInterface $element) { $this->amount++; Element\Service::loadAllFields($element); // for all $element->getProperties(); if (method_exists($element, "getScheduledTasks")) { $element->getScheduledTasks(); } $element->_fulldump = true; // we need to add the tag of each item to the cache cleared stack, so that the item doesn't gets into the cache // with the property _fulldump set, because this would cause major issues in wakeUp() \Pimcore\Cache::addClearedTag($element->getCacheTag()); if (method_exists($element, "getChilds")) { if ($element instanceof Object\AbstractObject) { // because we also want variants $childs = $element->getChilds(array(Object::OBJECT_TYPE_FOLDER, Object::OBJECT_TYPE_VARIANT, Object::OBJECT_TYPE_OBJECT)); } else { $childs = $element->getChilds(); } foreach ($childs as $child) { $this->loadChilds($child); } } }