/** * @param Concrete $object * @return array */ public static function getValidLayouts(Concrete $object) { $user = AdminTool::getCurrentUser(); $resultList = array(); $isMasterAllowed = $user->getAdmin(); $permissionSet = $object->getPermissions("layouts", $user); $layoutPermissions = self::getLayoutPermissions($object->getClassId(), $permissionSet); if (!$layoutPermissions || isset($layoutPermissions[0])) { $isMasterAllowed = true; } if ($user->getAdmin()) { $superLayout = new ClassDefinition\CustomLayout(); $superLayout->setId(-1); $superLayout->setName("Master (Admin Mode)"); $resultList[-1] = $superLayout; } if ($isMasterAllowed) { $master = new ClassDefinition\CustomLayout(); $master->setId(0); $master->setName("Master"); $resultList[0] = $master; } $classId = $object->getClassId(); $list = new ClassDefinition\CustomLayout\Listing(); $list->setOrderKey("name"); $condition = "classId = " . $list->quote($classId); if (count($layoutPermissions) && !$isMasterAllowed) { $layoutIds = array_values($layoutPermissions); $condition .= " AND id IN (" . implode(",", $layoutIds) . ")"; } $list->setCondition($condition); $list = $list->load(); if (!count($resultList) && !count($list) || count($resultList) == 1 && !count($list)) { return array(); } foreach ($list as $customLayout) { $resultList[$customLayout->getId()] = $customLayout; } return $resultList; }