| | <?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); |
| | } |
| | } |
| |
|