Admin_TranslationController::xliffImportElementAction PHP Метод

xliffImportElementAction() публичный Метод

    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]);
    }