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