public function gridGetColumnConfigAction()
{
if ($this->getParam("id")) {
$class = Object\ClassDefinition::getById($this->getParam("id"));
} elseif ($this->getParam("name")) {
$class = Object\ClassDefinition::getByName($this->getParam("name"));
}
$gridType = "search";
if ($this->getParam("gridtype")) {
$gridType = $this->getParam("gridtype");
}
$objectId = $this->getParam("objectId");
if ($objectId) {
$fields = Object\Service::getCustomGridFieldDefinitions($class->getId(), $objectId);
}
if (!$fields) {
$fields = $class->getFieldDefinitions();
}
$types = [];
if ($this->getParam("types")) {
$types = explode(",", $this->getParam("types"));
}
// grid config
$gridConfig = [];
if ($objectId) {
$searchType = $this->getParam("searchType");
$postfix = $searchType && $searchType != "folder" ? "_" . $this->getParam("searchType") : "";
$configFiles["configFileClassUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . "_" . $class->getId() . $postfix . "-user_" . $this->getUser()->getId() . ".psf";
$configFiles["configFileUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . $postfix . "-user_" . $this->getUser()->getId() . ".psf";
foreach ($configFiles as $configFile) {
if (is_file($configFile)) {
$gridConfig = Tool\Serialize::unserialize(file_get_contents($configFile));
if (is_array($gridConfig) && array_key_exists("classId", $gridConfig)) {
if ($gridConfig["classId"] == $class->getId()) {
break;
} else {
$gridConfig = [];
}
} else {
break;
}
}
}
}
$localizedFields = [];
$objectbrickFields = [];
foreach ($fields as $key => $field) {
if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
$localizedFields[] = $field;
} elseif ($field instanceof Object\ClassDefinition\Data\Objectbricks) {
$objectbrickFields[] = $field;
}
}
$availableFields = [];
$systemColumns = ["id", "fullpath", "published", "creationDate", "modificationDate", "filename", "classname"];
if (empty($gridConfig)) {
$count = 0;
if (!$this->getParam("no_system_columns")) {
$vis = $class->getPropertyVisibility();
foreach ($systemColumns as $sc) {
$key = $sc;
if ($key == "fullpath") {
$key = "path";
}
if (empty($types) && ($vis[$gridType][$key] || $gridType == "all")) {
$availableFields[] = ["key" => $sc, "type" => "system", "label" => $sc, "position" => $count];
$count++;
}
}
}
$includeBricks = !$this->getParam("no_brick_columns");
foreach ($fields as $key => $field) {
if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
foreach ($field->getFieldDefinitions() as $fd) {
if (empty($types) || in_array($fd->getFieldType(), $types)) {
$fieldConfig = $this->getFieldGridConfig($fd, $gridType, $count);
if (!empty($fieldConfig)) {
$availableFields[] = $fieldConfig;
$count++;
}
}
}
} elseif ($field instanceof Object\ClassDefinition\Data\Objectbricks && $includeBricks) {
if (in_array($field->getFieldType(), $types)) {
$fieldConfig = $this->getFieldGridConfig($field, $gridType, $count);
if (!empty($fieldConfig)) {
$availableFields[] = $fieldConfig;
$count++;
}
} else {
$allowedTypes = $field->getAllowedTypes();
if (!empty($allowedTypes)) {
foreach ($allowedTypes as $t) {
$brickClass = Object\Objectbrick\Definition::getByKey($t);
$brickFields = $brickClass->getFieldDefinitions();
if (!empty($brickFields)) {
foreach ($brickFields as $bf) {
$fieldConfig = $this->getFieldGridConfig($bf, $gridType, $count, false, $t . "~");
if (!empty($fieldConfig)) {
$availableFields[] = $fieldConfig;
$count++;
}
}
}
}
}
}
} else {
if (empty($types) || in_array($field->getFieldType(), $types)) {
$fieldConfig = $this->getFieldGridConfig($field, $gridType, $count, !empty($types));
if (!empty($fieldConfig)) {
$availableFields[] = $fieldConfig;
$count++;
}
}
}
}
} else {
$savedColumns = $gridConfig['columns'];
foreach ($savedColumns as $key => $sc) {
if (!$sc['hidden']) {
if (in_array($key, $systemColumns)) {
$colConfig = ["key" => $key, "type" => "system", "label" => $key, "position" => $sc['position']];
if (isset($sc['width'])) {
$colConfig['width'] = $sc['width'];
}
$availableFields[] = $colConfig;
} else {
$keyParts = explode("~", $key);
if (substr($key, 0, 1) == "~") {
// not needed for now
$type = $keyParts[1];
// $field = $keyParts[2];
$groupAndKeyId = explode("-", $keyParts[3]);
$keyId = $groupAndKeyId[1];
if ($type == "classificationstore") {
$keyDef = Object\Classificationstore\KeyConfig::getById($keyId);
if ($keyDef) {
$keyFieldDef = json_decode($keyDef->getDefinition(), true);
if ($keyFieldDef) {
$keyFieldDef = \Pimcore\Model\Object\Classificationstore\Service::getFieldDefinitionFromJson($keyFieldDef, $keyDef->getType());
$fieldConfig = $this->getFieldGridConfig($keyFieldDef, $gridType, $sc['position'], true);
if ($fieldConfig) {
$fieldConfig["key"] = $key;
$fieldConfig["label"] = "#" . $keyFieldDef->getTitle();
$availableFields[] = $fieldConfig;
}
}
}
}
} elseif (count($keyParts) > 1) {
$brick = $keyParts[0];
$key = $keyParts[1];
$brickClass = Object\Objectbrick\Definition::getByKey($brick);
$fd = $brickClass->getFieldDefinition($key);
if (!empty($fd)) {
$fieldConfig = $this->getFieldGridConfig($fd, $gridType, $sc['position'], true, $brick . "~");
if (!empty($fieldConfig)) {
if (isset($sc['width'])) {
$fieldConfig['width'] = $sc['width'];
}
$availableFields[] = $fieldConfig;
}
}
} else {
$fd = $class->getFieldDefinition($key);
//if not found, look for localized fields
if (empty($fd)) {
foreach ($localizedFields as $lf) {
$fd = $lf->getFieldDefinition($key);
if (!empty($fd)) {
break;
}
}
}
if (!empty($fd)) {
$fieldConfig = $this->getFieldGridConfig($fd, $gridType, $sc['position'], true);
if (!empty($fieldConfig)) {
if (isset($sc['width'])) {
$fieldConfig['width'] = $sc['width'];
}
$availableFields[] = $fieldConfig;
}
}
}
}
}
}
}
usort($availableFields, function ($a, $b) {
if ($a["position"] == $b["position"]) {
return 0;
}
return $a["position"] < $b["position"] ? -1 : 1;
});
$config = \Pimcore\Config::getSystemConfig();
$frontendLanguages = Tool\Admin::reorderWebsiteLanguages(\Pimcore\Tool\Admin::getCurrentUser(), $config->general->validLanguages);
if ($frontendLanguages) {
$language = explode(',', $frontendLanguages)[0];
} else {
$language = $this->getLanguage();
}
if (!Tool::isValidLanguage($language)) {
$validLanguages = Tool::getValidLanguages();
$language = $validLanguages[0];
}
if (!empty($gridConfig) && !empty($gridConfig['language'])) {
$language = $gridConfig['language'];
}
$this->_helper->json(["sortinfo" => isset($gridConfig['sortinfo']) ? $gridConfig['sortinfo'] : false, "language" => $language, "availableFields" => $availableFields, "onlyDirectChildren" => isset($gridConfig['onlyDirectChildren']) ? $gridConfig['onlyDirectChildren'] : false, "pageSize" => isset($gridConfig['pageSize']) ? $gridConfig['pageSize'] : false]);
}