diff options
Diffstat (limited to 'app/Model')
-rw-r--r-- | app/Model/ColumnMoveRestrictionModel.php | 92 | ||||
-rw-r--r-- | app/Model/ProjectRoleModel.php | 82 |
2 files changed, 174 insertions, 0 deletions
diff --git a/app/Model/ColumnMoveRestrictionModel.php b/app/Model/ColumnMoveRestrictionModel.php new file mode 100644 index 00000000..fa44edd1 --- /dev/null +++ b/app/Model/ColumnMoveRestrictionModel.php @@ -0,0 +1,92 @@ +<?php + +namespace Kanboard\Model; + +use Kanboard\Core\Base; + +/** + * Class ColumnMoveRestrictionModel + * + * @package Kanboard\Model + * @author Frederic Guillot + */ +class ColumnMoveRestrictionModel extends Base +{ + const TABLE = 'column_has_move_restrictions'; + + /** + * Check if the custom project role is allowed to move a task + * + * @param int $project_id + * @param string $role + * @param int $src_column_id + * @param int $dst_column_id + * @return int + */ + public function isAllowed($project_id, $role, $src_column_id, $dst_column_id) + { + return ! $this->db->table(self::TABLE) + ->left(ProjectRoleModel::TABLE, 'pr', 'role_id', self::TABLE, 'role_id') + ->eq(self::TABLE.'.project_id', $project_id) + ->eq(self::TABLE.'.src_column_id', $src_column_id) + ->eq(self::TABLE.'.dst_column_id', $dst_column_id) + ->eq('pr.role', $role) + ->exists(); + } + + /** + * Get all project column restrictions + * + * @param int $project_id + * @return array + */ + public function getAll($project_id) + { + return $this->db->table(self::TABLE) + ->columns( + 'restriction_id', + 'src_column_id', + 'dst_column_id', + 'pr.role', + 'sc.title as src_column_title', + 'dc.title as dst_column_title' + ) + ->left(ColumnModel::TABLE, 'sc', 'id', self::TABLE, 'src_column_id') + ->left(ColumnModel::TABLE, 'dc', 'id', self::TABLE, 'dst_column_id') + ->left(ProjectRoleModel::TABLE, 'pr', 'role_id', self::TABLE, 'role_id') + ->eq(self::TABLE.'.project_id', $project_id) + ->findAll(); + } + + /** + * Create a new column restriction + * + * @param int $project_id + * @param int $role_id + * @param int $src_column_id + * @param int $dst_column_id + * @return bool|int + */ + public function create($project_id, $role_id, $src_column_id, $dst_column_id) + { + return $this->db + ->table(self::TABLE) + ->persist(array( + 'project_id' => $project_id, + 'role_id' => $role_id, + 'src_column_id' => $src_column_id, + 'dst_column_id' => $dst_column_id, + )); + } + + /** + * Remove a permission + * + * @param int $restriction_id + * @return bool + */ + public function remove($restriction_id) + { + return $this->db->table(self::TABLE)->eq('restriction_id', $restriction_id)->remove(); + } +} diff --git a/app/Model/ProjectRoleModel.php b/app/Model/ProjectRoleModel.php new file mode 100644 index 00000000..93fe1dcc --- /dev/null +++ b/app/Model/ProjectRoleModel.php @@ -0,0 +1,82 @@ +<?php + +namespace Kanboard\Model; + +use Kanboard\Core\Base; + +/** + * Class ProjectRoleModel + * + * @package Kanboard\Model + * @author Frederic Guillot + */ +class ProjectRoleModel extends Base +{ + const TABLE = 'project_has_roles'; + + /** + * Get all project roles + * + * @param int $project_id + * @return array + */ + public function getAll($project_id) + { + return $this->db->table(self::TABLE) + ->eq('project_id', $project_id) + ->asc('role') + ->findAll(); + } + + /** + * Create a new project role + * + * @param int $project_id + * @param string $role + * @return bool|int + */ + public function create($project_id, $role) + { + return $this->db + ->table(self::TABLE) + ->persist(array( + 'project_id' => $project_id, + 'role' => $role, + )); + } + + /** + * Update a project role + * + * @param int $role_id + * @param int $project_id + * @param string $role + * @return bool + */ + public function update($role_id, $project_id, $role) + { + return $this->db + ->table(self::TABLE) + ->eq('role_id', $role_id) + ->eq('project_id', $project_id) + ->update(array( + 'role' => $role, + )); + } + + /** + * Remove a project role + * + * @param int $project_id + * @param int $role_id + * @return bool + */ + public function remove($project_id, $role_id) + { + return $this->db + ->table(self::TABLE) + ->eq('project_id', $project_id) + ->eq('role_id', $role_id) + ->remove(); + } +} |