public function getPermissions($type, $user, $quote = true)
{
$parentIds = $this->collectParentIds();
$userIds = $user->getRoles();
$userIds[] = $user->getId();
try {
if ($type && $quote) {
$queryType = "`" . $type . "`";
} else {
$queryType = "*";
}
$commaSeparated = in_array($type, ["lView", "lEdit", "layouts"]);
if ($commaSeparated) {
$allPermissions = $this->db->fetchAll("SELECT " . $queryType . ",cid,cpath FROM users_workspaces_object WHERE cid IN (" . implode(",", $parentIds) . ") AND userId IN (" . implode(",", $userIds) . ") ORDER BY LENGTH(cpath) DESC");
if (!$allPermissions) {
return null;
} elseif (count($allPermissions) == 1) {
return $allPermissions[0];
} else {
$firstPermission = $allPermissions[0];
$firstPermissionCid = $firstPermission["cid"];
$mergedPermissions = [];
foreach ($allPermissions as $permission) {
$cid = $permission["cid"];
if ($cid != $firstPermissionCid) {
break;
}
$permissionValues = $permission[$type];
if (!$permissionValues) {
$firstPermission[$type] = null;
return $firstPermission;
}
$permissionValues = explode(",", $permissionValues);
foreach ($permissionValues as $permissionValue) {
$mergedPermissions[$permissionValue] = $permissionValue;
}
}
$firstPermission[$type] = implode(',', $mergedPermissions);
return $firstPermission;
}
} else {
$permissions = $this->db->fetchRow("SELECT " . $queryType . " FROM users_workspaces_object WHERE cid IN (" . implode(",", $parentIds) . ") AND userId IN (" . implode(",", $userIds) . ") ORDER BY LENGTH(cpath) DESC LIMIT 1");
return $permissions;
}
} catch (\Exception $e) {
Logger::warn("Unable to get permission " . $type . " for object " . $this->model->getId());
}
}