public function enrichLayoutDefinition($object) { $groupCollectionMapping = $this->recursiveGetActiveGroupCollectionMapping($object); $this->activeGroupDefinitions = []; $activeGroupIds = $this->recursiveGetActiveGroupsIds($object); if (!$activeGroupIds) { return; } $filteredGroupIds = []; foreach ($activeGroupIds as $groupId => $enabled) { if ($enabled) { $filteredGroupIds[] = $groupId; } } $condition = "ID in (" . implode(',', $filteredGroupIds) . ")"; $groupList = new Object\Classificationstore\GroupConfig\Listing(); $groupList->setCondition($condition); $groupList->setOrder(["ASC", "ASC"]); $groupList = $groupList->load(); /** @var $group Object\Classificationstore\GroupConfig */ foreach ($groupList as $group) { $keyList = []; $relation = new Object\Classificationstore\KeyGroupRelation\Listing(); $relation->setCondition("groupId = " . $relation->quote($group->getId())); $relation->setOrderKey(["sorter", "id"]); $relation->setOrder(["ASC", "ASC"]); $relation = $relation->load(); /** @var $key Object\Classificationstore\KeyGroupRelation */ foreach ($relation as $key) { $definition = \Pimcore\Model\Object\Classificationstore\Service::getFieldDefinitionFromKeyConfig($key); if (method_exists($definition, "__wakeup")) { $definition->__wakeup(); } if ($definition) { $definition->setMandatory($definition->getMandatory() || $key->isMandatory()); } $keyList[] = ["name" => $key->getName(), "id" => $key->getKeyId(), "description" => $key->getDescription(), "definition" => $definition]; } $this->activeGroupDefinitions[$group->getId()] = ["name" => $group->getName(), "id" => $group->getId(), "description" => $group->getDescription(), "keys" => $keyList]; } if ($groupCollectionMapping) { $collectionIds = array_values($groupCollectionMapping); $relation = new Object\Classificationstore\CollectionGroupRelation\Listing(); $condition = "colId IN (" . implode(",", $collectionIds) . ")"; $relation->setCondition($condition); $relation = $relation->load(); $sorting = []; /** @var $item Object\Classificationstore\CollectionGroupRelation */ foreach ($relation as $item) { $sorting[$item->getGroupId()] = $item->getSorter(); } usort($this->activeGroupDefinitions, function ($a, $b) use($sorting) { $s1 = $sorting[$a["id"]] ? $sorting[$a["id"]] : 0; $s2 = $sorting[$b["id"]] ? $sorting[$b["id"]] : 0; if ($s1 < $s2) { return 1; } elseif ($s2 > $s1) { return -1; } else { return 0; } }); } }
public function collectionRelationsAction() { if ($this->getParam("data")) { $dataParam = $this->getParam("data"); $data = \Zend_Json::decode($dataParam); $colId = $data["colId"]; $groupId = $data["groupId"]; $sorter = $data["sorter"]; $config = new Classificationstore\CollectionGroupRelation(); $config->setGroupId($groupId); $config->setColId($colId); $config->setSorter($sorter); $config->save(); $data["id"] = $config->getColId() . "-" . $config->getGroupId(); $this->_helper->json(array("success" => true, "data" => $data)); } else { $mapping = array("groupName" => "name", "groupDescription" => "description"); $start = 0; $limit = 15; $orderKey = "sorter"; $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\CollectionGroupRelation\Listing(); if ($limit > 0) { $list->setLimit($limit); } $list->setOffset($start); $list->setOrder($order); $list->setOrderKey($orderKey); if ($this->getParam("filter")) { $db = Db::get(); $condition = ""; $filterString = $this->getParam("filter"); $filters = json_decode($filterString); $count = 0; foreach ($filters as $f) { if ($count > 0) { $condition .= " AND "; } $count++; $fieldname = $mapping[$f->field]; $condition .= $db->getQuoteIdentifierSymbol() . $fieldname . $db->getQuoteIdentifierSymbol() . " LIKE " . $db->quote("%" . $f->value . "%"); } } $colId = $this->getParam("colId"); if ($condition) { $condition = "( " . $condition . " ) AND"; } $condition .= " colId = " . $list->quote($colId); $list->setCondition($condition); $listItems = $list->load(); $rootElement = array(); $data = array(); foreach ($listItems as $config) { $item = array("colId" => $config->getColId(), "groupId" => $config->getGroupId(), "groupName" => $config->getName(), "groupDescription" => $config->getDescription(), "id" => $config->getColId() . "-" . $config->getGroupId(), "sorter" => $config->getSorter()); $data[] = $item; } $rootElement["data"] = $data; $rootElement["success"] = true; $rootElement["total"] = $list->getTotalCount(); return $this->_helper->json($rootElement); } }