/** * Tells whether a user can assign a task to another user or company in a workspace. * * @param $user User to which to check permissions * @param $workspace * @param $assignee * @return boolean */ function can_assign_task(User $user, Project $workspace, $assignee) { if (!$assignee instanceof User && !$assignee instanceof Company) { return true; } if ($assignee instanceof Company) { $company = $assignee; } else { if ($assignee->getId() == $user->getId()) { return true; } // alow user to assign to himself $company = $assignee->getCompany(); } $is_owner = $company->getId() == Companies::getOwnerCompany()->getId(); $permissions = ProjectUsers::getByUserAndProject($workspace, $user); if ($permissions instanceof ProjectUser) { if ($is_owner) { if ($permissions->getCanAssignToOwners()) { return true; } } else { if ($permissions->getCanAssignToOther()) { return true; } } } $groups = GroupUsers::getGroupsByUser($user->getId()); if (is_array($groups) && count($groups) > 0) { //user belongs to at least one group foreach ($groups as $group) { $permissions = ProjectUsers::getByUserAndProject($workspace, $group); if ($permissions instanceof ProjectUser) { if ($is_owner) { if ($permissions->getCanAssignToOwners()) { return true; } } else { if ($permissions->getCanAssignToOther()) { return true; } } } } } return false; }
function removeFromWorkspace($workspace) { $pu = ProjectUsers::getByUserAndProject($workspace, $this); if ($pu instanceof ProjectUser) { $pu->delete(); } }