public function redirectsAction()
{
if ($this->getParam("data")) {
$this->checkPermission("redirects");
if ($this->getParam("xaction") == "destroy") {
$data = \Zend_Json::decode($this->getParam("data"));
if (\Pimcore\Tool\Admin::isExtJS6()) {
$id = $data["id"];
} else {
$id = $data;
}
$redirect = Redirect::getById($id);
$redirect->delete();
$this->_helper->json(array("success" => true, "data" => array()));
} else {
if ($this->getParam("xaction") == "update") {
$data = \Zend_Json::decode($this->getParam("data"));
// save redirect
$redirect = Redirect::getById($data["id"]);
if ($data["target"]) {
if ($doc = Document::getByPath($data["target"])) {
$data["target"] = $doc->getId();
}
}
$redirect->setValues($data);
$redirect->save();
$redirectTarget = $redirect->getTarget();
if (is_numeric($redirectTarget)) {
if ($doc = Document::getById(intval($redirectTarget))) {
$redirect->setTarget($doc->getFullPath());
}
}
$this->_helper->json(array("data" => $redirect, "success" => true));
} else {
if ($this->getParam("xaction") == "create") {
$data = \Zend_Json::decode($this->getParam("data"));
unset($data["id"]);
// save route
$redirect = new Redirect();
if ($data["target"]) {
if ($doc = Document::getByPath($data["target"])) {
$data["target"] = $doc->getId();
}
}
$redirect->setValues($data);
$redirect->save();
$redirectTarget = $redirect->getTarget();
if (is_numeric($redirectTarget)) {
if ($doc = Document::getById(intval($redirectTarget))) {
$redirect->setTarget($doc->getFullPath());
}
}
$this->_helper->json(array("data" => $redirect, "success" => true));
}
}
}
} else {
// get list of routes
$list = new Redirect\Listing();
$list->setLimit($this->getParam("limit"));
$list->setOffset($this->getParam("start"));
$sortingSettings = \Pimcore\Admin\Helper\QueryParams::extractSortingSettings($this->getAllParams());
if ($sortingSettings['orderKey']) {
$list->setOrderKey($sortingSettings['orderKey']);
$list->setOrder($sortingSettings['order']);
}
if ($this->getParam("filter")) {
$list->setCondition("`source` LIKE " . $list->quote("%" . $this->getParam("filter") . "%") . " OR `target` LIKE " . $list->quote("%" . $this->getParam("filter") . "%"));
}
$list->load();
$redirects = array();
foreach ($list->getRedirects() as $redirect) {
if ($link = $redirect->getTarget()) {
if (is_numeric($link)) {
if ($doc = Document::getById(intval($link))) {
$redirect->setTarget($doc->getFullPath());
}
}
}
$redirects[] = $redirect;
}
$this->_helper->json(array("data" => $redirects, "success" => true, "total" => $list->getTotalCount()));
}
$this->_helper->json(false);
}