Admin_TranslationController::translationsAction PHP Метод

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

public translationsAction ( )
    public function translationsAction()
    {
        $admin = $this->getParam("admin");
        if ($admin) {
            $class = "\\Pimcore\\Model\\Translation\\Admin";
            $this->checkPermission("translations_admin");
        } else {
            $class = "\\Pimcore\\Model\\Translation\\Website";
            $this->checkPermission("translations");
        }
        $tableName = call_user_func($class . "\\Dao::getTableName");
        // clear translation cache
        Translation\Website::clearDependentCache();
        if ($this->getParam("data")) {
            $data = \Zend_Json::decode($this->getParam("data"));
            if ($this->getParam("xaction") == "destroy") {
                $data = \Zend_Json::decode($this->getParam("data"));
                if (\Pimcore\Tool\Admin::isExtJS6()) {
                    $t = $class::getByKey($data["key"]);
                } else {
                    $t = $class::getByKey($data);
                }
                $t->delete();
                $this->_helper->json(["success" => true, "data" => []]);
            } elseif ($this->getParam("xaction") == "update") {
                $t = $class::getByKey($data["key"]);
                foreach ($data as $key => $value) {
                    if ($key != "key") {
                        $t->addTranslation($key, $value);
                    }
                }
                if ($data["key"]) {
                    $t->setKey($data["key"]);
                }
                $t->setModificationDate(time());
                $t->save();
                $return = array_merge(["key" => $t->getKey(), "creationDate" => $t->getCreationDate(), "modificationDate" => $t->getModificationDate()], $t->getTranslations());
                $this->_helper->json(["data" => $return, "success" => true]);
            } elseif ($this->getParam("xaction") == "create") {
                try {
                    $t = $class::getByKey($data["key"]);
                } catch (\Exception $e) {
                    $t = new $class();
                    $t->setKey($data["key"]);
                    $t->setCreationDate(time());
                    $t->setModificationDate(time());
                    foreach (Tool::getValidLanguages() as $lang) {
                        $t->addTranslation($lang, "");
                    }
                    $t->save();
                }
                $return = array_merge(["key" => $t->getKey(), "creationDate" => $t->getCreationDate(), "modificationDate" => $t->getModificationDate()], $t->getTranslations());
                $this->_helper->json(["data" => $return, "success" => true]);
            }
        } else {
            // get list of types
            if ($admin) {
                $list = new Translation\Admin\Listing();
            } else {
                $list = new Translation\Website\Listing();
            }
            $validLanguages = $this->getUser()->getAllowedLanguagesForViewingWebsiteTranslations();
            $list->setOrder("asc");
            $list->setOrderKey($tableName . ".key", false);
            $sortingSettings = \Pimcore\Admin\Helper\QueryParams::extractSortingSettings($this->getAllParams());
            $joins = [];
            if ($sortingSettings['orderKey']) {
                if (in_array($sortingSettings['orderKey'], $validLanguages)) {
                    $joins[] = ["language" => $sortingSettings['orderKey']];
                    $list->setOrderKey($sortingSettings['orderKey']);
                } else {
                    $list->setOrderKey($tableName . "." . $sortingSettings['orderKey'], false);
                }
            }
            if ($sortingSettings['order']) {
                $list->setOrder($sortingSettings['order']);
            }
            $list->setLimit($this->getParam("limit"));
            $list->setOffset($this->getParam("start"));
            $condition = $this->getGridFilterCondition($tableName);
            $filters = $this->getGridFilterCondition($tableName, true);
            if ($filters) {
                $joins = array_merge($joins, $filters["joins"]);
            }
            if ($condition) {
                $list->setCondition($condition);
            }
            $this->extendTranslationQuery($joins, $list, $tableName, $filters);
            $list->load();
            $translations = [];
            foreach ($list->getTranslations() as $t) {
                $translations[] = array_merge($t->getTranslations(), ["key" => $t->getKey(), "creationDate" => $t->getCreationDate(), "modificationDate" => $t->getModificationDate()]);
            }
            $this->_helper->json(["data" => $translations, "success" => true, "total" => $list->getTotalCount()]);
        }
    }