public function xliffImportElementAction()
{
include_once "simple_html_dom.php";
$id = $this->getParam("id");
$step = $this->getParam("step");
$importFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/" . $id . ".xliff";
$xliff = simplexml_load_file($importFile, null, LIBXML_NOCDATA);
$file = $xliff->file[(int) $step];
$target = $file["target-language"];
// see https://en.wikipedia.org/wiki/IETF_language_tag
$target = str_replace("-", "_", $target);
if (!Tool::isValidLanguage($target)) {
$locale = new \Zend_Locale($target);
$target = $locale->getLanguage();
if (!Tool::isValidLanguage($target)) {
$this->_helper->json(["success" => false]);
}
}
list($type, $id) = explode("-", $file["original"]);
$element = Element\Service::getElementById($type, $id);
if ($element) {
foreach ($file->body->{"trans-unit"} as $transUnit) {
list($fieldType, $name) = explode("~-~", $transUnit["id"]);
$content = $transUnit->target->asXml();
$content = $this->unescapeXliff($content);
if ($element instanceof Document) {
if ($fieldType == "tag" && method_exists($element, "getElement")) {
$tag = $element->getElement($name);
if ($tag) {
$tag->setDataFromEditmode($content);
$tag->setInherited(false);
$element->setElement($tag->getName(), $tag);
}
}
if ($fieldType == "settings" && $element instanceof Document\Page) {
$setter = "set" . ucfirst($name);
if (method_exists($element, $setter)) {
$element->{$setter}($content);
}
}
} elseif ($element instanceof Object\Concrete) {
if ($fieldType == "localizedfield") {
$setter = "set" . ucfirst($name);
if (method_exists($element, $setter)) {
$element->{$setter}($content, $target);
}
}
}
if ($fieldType == "property") {
$property = $element->getProperty($name, true);
if ($property) {
$property->setData($content);
} else {
$element->setProperty($name, "text", $content);
}
}
}
try {
// allow to save objects although there are mandatory fields
if ($element instanceof Object\AbstractObject) {
$element->setOmitMandatoryCheck(true);
}
$element->save();
} catch (\Exception $e) {
throw new \Exception("Unable to save " . Element\Service::getElementType($element) . " with id " . $element->getId() . " because of the following reason: " . $e->getMessage());
}
} else {
Logger::error("Could not resolve element " . $file["original"]);
}
$this->_helper->json(["success" => true]);
}