public function relationsAction()
{
if ($this->getParam("data")) {
$dataParam = $this->getParam("data");
$data = \Zend_Json::decode($dataParam);
$keyId = $data["keyId"];
$groupId = $data["groupId"];
$sorter = $data["sorter"];
$mandatory = $data["mandatory"];
$config = new Classificationstore\KeyGroupRelation();
$config->setGroupId($groupId);
$config->setKeyId($keyId);
$config->setSorter($sorter);
$config->setMandatory($mandatory);
$config->save();
$data["id"] = $config->getGroupId() . "-" . $config->getKeyId();
$this->_helper->json(["success" => true, "data" => $data]);
} else {
$mapping = ["keyName" => "name", "keyDescription" => "description"];
$start = 0;
$limit = 15;
$orderKey = "name";
$order = "ASC";
if ($this->getParam("dir")) {
$order = $this->getParam("dir");
}
$sortingSettings = \Pimcore\Admin\Helper\QueryParams::extractSortingSettings($this->getAllParams());
if ($sortingSettings['orderKey'] && $sortingSettings['order']) {
$orderKey = $sortingSettings['orderKey'];
$order = $sortingSettings['order'];
}
if ($this->getParam("overrideSort") == "true") {
$orderKey = "id";
$order = "DESC";
}
if ($this->getParam("limit")) {
$limit = $this->getParam("limit");
}
if ($this->getParam("start")) {
$start = $this->getParam("start");
}
$list = new Classificationstore\KeyGroupRelation\Listing();
if ($limit > 0) {
$list->setLimit($limit);
}
$list->setOffset($start);
$list->setOrder($order);
$list->setOrderKey($orderKey);
if ($this->getParam("filter")) {
$db = Db::get();
$conditionParts = [];
$filterString = $this->getParam("filter");
$filters = json_decode($filterString);
$count = 0;
foreach ($filters as $f) {
$count++;
$fieldname = $mapping[$f->field];
$conditionParts[] = $db->getQuoteIdentifierSymbol() . $fieldname . $db->getQuoteIdentifierSymbol() . " LIKE " . $db->quote("%" . $f->value . "%");
}
}
if (!$this->getParam("relationIds")) {
$groupId = $this->getParam("groupId");
$conditionParts[] = " groupId = " . $list->quote($groupId);
}
$relationIds = $this->getParam("relationIds");
if ($relationIds) {
$relationIds = json_decode($relationIds, true);
$relationParts = [];
foreach ($relationIds as $relationId) {
$keyId = $relationId["keyId"];
$groupId = $relationId["groupId"];
$relationParts[] = "(keyId = " . $keyId . " and groupId = " . $groupId . ")";
}
$conditionParts[] = "(" . implode(" OR ", $relationParts) . ")";
}
$condition = implode(" AND ", $conditionParts);
$list->setCondition($condition);
$listItems = $list->load();
$rootElement = [];
$data = [];
/** @var $config Classificationstore\KeyGroupRelation */
foreach ($listItems as $config) {
$type = $config->getType();
$definition = json_decode($config->getDefinition());
$definition = \Pimcore\Model\Object\Classificationstore\Service::getFieldDefinitionFromJson($definition, $type);
$item = ["keyId" => $config->getKeyId(), "groupId" => $config->getGroupId(), "keyName" => $config->getName(), "keyDescription" => $config->getDescription(), "id" => $config->getGroupId() . "-" . $config->getKeyId(), "sorter" => $config->getSorter(), "layout" => $definition, "mandatory" => $config->isMandatory()];
$data[] = $item;
}
$rootElement["data"] = $data;
$rootElement["success"] = true;
$rootElement["total"] = $list->getTotalCount();
return $this->_helper->json($rootElement);
}
}