| <?php |
|
|
| namespace Kanboard\Model; |
|
|
| use Kanboard\Core\Base; |
| use Kanboard\Core\Security\Role; |
| use Kanboard\Filter\ProjectGroupRoleProjectFilter; |
| use Kanboard\Filter\ProjectGroupRoleUsernameFilter; |
| use Kanboard\Filter\ProjectUserRoleProjectFilter; |
| use Kanboard\Filter\ProjectUserRoleUsernameFilter; |
|
|
| |
| |
| |
| |
| |
| |
| class ProjectPermissionModel extends Base |
| { |
| |
| |
| |
| |
| |
| |
| |
| |
| public function getQueryByRole(array $project_ids, $role) |
| { |
| if (empty($project_ids)) { |
| $project_ids = array(-1); |
| } |
|
|
| return $this |
| ->db |
| ->table(ProjectUserRoleModel::TABLE) |
| ->join(UserModel::TABLE, 'id', 'user_id') |
| ->join(ProjectModel::TABLE, 'id', 'project_id') |
| ->eq(ProjectUserRoleModel::TABLE.'.role', $role) |
| ->eq(ProjectModel::TABLE.'.is_private', 0) |
| ->in(ProjectModel::TABLE.'.id', $project_ids) |
| ->columns( |
| UserModel::TABLE.'.id', |
| UserModel::TABLE.'.username', |
| UserModel::TABLE.'.name', |
| ProjectModel::TABLE.'.name AS project_name', |
| ProjectModel::TABLE.'.id' |
| ); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function findUsernames($project_id, $input) |
| { |
| $userMembers = $this->projectUserRoleQuery |
| ->withFilter(new ProjectUserRoleProjectFilter($project_id)) |
| ->withFilter(new ProjectUserRoleUsernameFilter($input)) |
| ->getQuery() |
| ->columns( |
| UserModel::TABLE.'.id', |
| UserModel::TABLE.'.username', |
| UserModel::TABLE.'.name', |
| UserModel::TABLE.'.email', |
| UserModel::TABLE.'.avatar_path' |
| ) |
| ->findAll(); |
|
|
| $groupMembers = $this->projectGroupRoleQuery |
| ->withFilter(new ProjectGroupRoleProjectFilter($project_id)) |
| ->withFilter(new ProjectGroupRoleUsernameFilter($input)) |
| ->getQuery() |
| ->columns( |
| UserModel::TABLE.'.id', |
| UserModel::TABLE.'.username', |
| UserModel::TABLE.'.name', |
| UserModel::TABLE.'.email', |
| UserModel::TABLE.'.avatar_path' |
| ) |
| ->findAll(); |
|
|
| $userMembers = array_column_index_unique($userMembers, 'username'); |
| $groupMembers = array_column_index_unique($groupMembers, 'username'); |
| $members = array_merge($userMembers, $groupMembers); |
|
|
| ksort($members); |
|
|
| return $members; |
| } |
|
|
| public function getMembers($project_id) |
| { |
| $userMembers = $this->projectUserRoleModel->getUsers($project_id); |
| $groupMembers = $this->projectGroupRoleModel->getUsers($project_id); |
|
|
| $userMembers = array_column_index_unique($userMembers, 'username'); |
| $groupMembers = array_column_index_unique($groupMembers, 'username'); |
| return array_merge($userMembers, $groupMembers); |
| } |
|
|
| public function getMembersWithEmail($project_id) |
| { |
| $members = $this->getMembers($project_id); |
| return array_filter($members, function (array $user) { |
| return ! empty($user['email']); |
| }); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function isUserAllowed($project_id, $user_id) |
| { |
| if ($this->userSession->isAdmin()) { |
| return true; |
| } |
|
|
| return $this->userModel->isActive($user_id) && |
| $this->isMember($project_id, $user_id); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function isAssignable($project_id, $user_id) |
| { |
| if ($this->userModel->isActive($user_id)) { |
| $role = $this->projectUserRoleModel->getUserRole($project_id, $user_id); |
|
|
| return ! empty($role) && $role !== Role::PROJECT_VIEWER; |
| } |
|
|
| return false; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function isMember($project_id, $user_id) |
| { |
| return ! empty($this->projectUserRoleModel->getUserRole($project_id, $user_id)); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function getActiveProjectIds($user_id) |
| { |
| return array_keys($this->projectUserRoleModel->getActiveProjectsByUser($user_id)); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function getProjectIds($user_id) |
| { |
| return array_keys($this->projectUserRoleModel->getProjectsByUser($user_id)); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function duplicate($project_src_id, $project_dst_id) |
| { |
| return $this->projectUserRoleModel->duplicate($project_src_id, $project_dst_id) && |
| $this->projectGroupRoleModel->duplicate($project_src_id, $project_dst_id); |
| } |
| } |
|
|