/** * @param $parentId * @param $languageToAdd */ protected function addDocuments($parentId, $languageToAdd) { $list = new Listing(); $list->setCondition('parentId = ?', $parentId); $list = $list->load(); foreach ($list as $document) { // Create new document $targetParent = \Pimcore\Model\Document::getById(\Multilingual\Document::getDocumentIdInOtherLanguage($document->getParentId(), $languageToAdd)); /** @var Document_Page $target */ $target = clone $document; $target->id = null; $target->setParent($targetParent); // Only sync properties when it is allowed if (!$target->hasProperty('doNotSyncProperties') && !$document->hasProperty('doNotSyncProperties')) { $editableDocumentTypes = array('page', 'email', 'snippet'); if (in_array($document->getType(), $editableDocumentTypes)) { $target->setContentMasterDocument($document); } // Set the properties the same $sourceProperties = $document->getProperties(); /** @var string $key * @var Property $value */ foreach ($sourceProperties as $key => $value) { if (!$target->hasProperty($key)) { $propertyValue = $value->getData(); if ($value->getType() == 'document') { $propertyValue = \Multilingual\Document::getDocumentIdInOtherLanguage($value->getData()->getId(), $languageToAdd); } $target->setProperty($key, $value->getType(), $propertyValue, false, $value->getInheritable()); } } } $target->save(); // Add Link to other languages $t = new Keys(); $t->insert(array("document_id" => $target->getId(), "language" => $languageToAdd, "sourcePath" => $document->getFullPath())); // Check for children if (count($document->getChilds()) >= 1) { // Add the kids $this->addDocuments($document->getId(), $languageToAdd); } } }
/** * @param $e \Zend_EventManager_Event * @throws Exception * @throws \Zend_Exception */ public function createDocument($e) { // Check if this function is not in progress if (\Zend_Registry::isRegistered('Multilingual_add') && \Zend_Registry::get('Multilingual_add') == 1) { return; } // Lock this event-trigger \Zend_Registry::set('Multilingual_add', 1); /**@var Document $doc */ $doc = $e->getTarget(); // Get current language $sourceLanguage = $doc->getProperty('language'); $sourceParent = $doc->getParent(); $sourceHash = $doc->getFullPath(); // Add Link to other languages $t = new Keys(); $t->insert(array("document_id" => $doc->getId(), "language" => $sourceLanguage, "sourcePath" => $sourceHash)); // Create folders for each Language $languages = Tool::getValidLanguages(); foreach ($languages as $language) { if ($language != $sourceLanguage) { $targetParent = \Multilingual\Document::getDocumentInOtherLanguage($sourceParent, $language); if ($targetParent) { /** @var Document\Page $target */ $target = clone $doc; // Reset ID (so it will create a new document) $target->id = null; // Set new parent $target->setParent($targetParent); // Check if we can link a master document $editableDocumentTypes = array('page', 'email', 'snippet'); if (in_array($doc->getType(), $editableDocumentTypes)) { $target->setContentMasterDocument($doc); } // Save the new document $target->save(); // Add Link to other languages $t = new Keys(); $t->insert(array("document_id" => $target->getId(), "language" => $language, "sourcePath" => $sourceHash)); } } } // Unlock this event-trigger \Zend_Registry::set('Multilingual_add', 0); }