/** * Adds a translation in language $newLanguageCode for object * * @param string $newLanguageCode * @param mixed $translationData array( attribute identifier => attribute value ) * @return void */ public function addTranslation($newLanguageCode, $translationData) { // Make sure to refresh the objects data. $this->refresh(); $this->object->cleanupInternalDrafts(); $version = $this->object->createNewVersionIn($newLanguageCode); $version->setAttribute('status', eZContentObjectVersion::STATUS_INTERNAL_DRAFT); $version->store(); $newVersion = $this->object->version($version->attribute('version')); $newVersionAttributes = $newVersion->contentObjectAttributes($newLanguageCode); $versionDataMap = self::createDataMap($newVersionAttributes); // Start updating new version $version->setAttribute('modified', time()); $version->setAttribute('status', eZContentObjectVersion::STATUS_DRAFT); $db = eZDB::instance(); $db->begin(); $version->store(); // @TODO: Add generic datatype support here foreach ($translationData as $attr => $value) { if ($versionDataMap[$attr]->attribute('data_type_string') == "ezxmltext") { $value = $this->processXmlTextData($value, $versionDataMap[$attr]); } $versionDataMap[$attr]->setAttribute('data_text', $value); $versionDataMap[$attr]->store(); } $db->commit(); //Update the content object name $db->begin(); $this->object->setName($this->class->contentObjectName($this->object, $version->attribute('version'), $newLanguageCode), $version->attribute('version'), $newLanguageCode); $db->commit(); // Finally publish object self::publishContentObject($this->object, $version); }