public function gridGetColumnConfigAction()
{
if ($this->getParam("id")) {
$class = Object\ClassDefinition::getById($this->getParam("id"));
} else {
if ($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 = array();
if ($this->getParam("types")) {
$types = explode(",", $this->getParam("types"));
}
// grid config
$gridConfig = array();
if ($objectId) {
$configFiles["configFileClassUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . "_" . $class->getId() . "-user_" . $this->getUser()->getId() . ".psf";
$configFiles["configFileUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . "-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 = array();
}
} else {
break;
}
}
}
}
$localizedFields = array();
$objectbrickFields = array();
foreach ($fields as $key => $field) {
if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
$localizedFields[] = $field;
} else {
if ($field instanceof Object\ClassDefinition\Data\Objectbricks) {
$objectbrickFields[] = $field;
}
}
}
$availableFields = array();
$systemColumns = array("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[] = array("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++;
}
}
}
} else {
if ($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 = array("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];
// $keyid = $keyParts[3];
} else {
if (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(array("sortinfo" => $gridConfig['sortinfo'], "language" => $language, "availableFields" => $availableFields, "onlyDirectChildren" => $gridConfig['onlyDirectChildren'], "pageSize" => $gridConfig['pageSize']));
}