/**
* @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;
}