summaryrefslogtreecommitdiff
path: root/app/Helper
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-09-11 18:32:47 -0400
committerFrederic Guillot <fred@kanboard.net>2016-09-11 18:32:47 -0400
commitc84df535b6bdc7260144872fc4e0c241a5a5ad61 (patch)
treed0e1dfe683fc338298f64e67e69cbbb26455e08c /app/Helper
parentd8f6d8568396816a6bfaca1e01211384e803cf91 (diff)
Improve column restrictions
Diffstat (limited to 'app/Helper')
-rw-r--r--app/Helper/ProjectRoleHelper.php55
1 files changed, 41 insertions, 14 deletions
diff --git a/app/Helper/ProjectRoleHelper.php b/app/Helper/ProjectRoleHelper.php
index 34905b52..99fa82bc 100644
--- a/app/Helper/ProjectRoleHelper.php
+++ b/app/Helper/ProjectRoleHelper.php
@@ -26,25 +26,45 @@ class ProjectRoleHelper extends Base
}
/**
- * Return true if the task can be moved by the connected user
+ * Return true if the task can be moved by the logged user
*
* @param array $task
* @return bool
*/
- public function isDraggable(array $task)
+ public function isDraggable(array &$task)
{
if ($task['is_active'] == 1 && $this->helper->user->hasProjectAccess('BoardViewController', 'save', $task['project_id'])) {
- $role = $this->getProjectUserRole($task['project_id']);
+ return $this->isSortableColumn($task['project_id'], $task['column_id'], 'src_column_id');
+ }
+
+ return false;
+ }
+
+ /**
+ * Return true is the column is sortable
+ *
+ * @param int $project_id
+ * @param int $column_id
+ * @param string $field
+ * @return bool
+ */
+ public function isSortableColumn($project_id, $column_id, $field)
+ {
+ $role = $this->getProjectUserRole($project_id);
+
+ if ($this->role->isCustomProjectRole($role)) {
+ $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($project_id, $role);
- if ($this->role->isCustomProjectRole($role)) {
- $srcColumnIds = $this->columnMoveRestrictionCacheDecorator->getAllSrcColumns($task['project_id'], $role);
- return isset($srcColumnIds[$task['column_id']]);
+ foreach ($sortableColumns as $column) {
+ if ($column[$field] == $column_id) {
+ return true;
+ }
}
- return true;
+ return empty($sortableColumns);
}
- return false;
+ return true;
}
/**
@@ -60,12 +80,19 @@ class ProjectRoleHelper extends Base
$role = $this->getProjectUserRole($project_id);
if ($this->role->isCustomProjectRole($role)) {
- return $this->columnMoveRestrictionModel->isAllowed(
- $project_id,
- $role,
- $src_column_id,
- $dst_column_id
- );
+ if ($src_column_id == $dst_column_id) {
+ return true;
+ }
+
+ $sortableColumns = $this->columnMoveRestrictionCacheDecorator->getSortableColumns($project_id, $role);
+
+ foreach ($sortableColumns as $column) {
+ if ($column['src_column_id'] == $src_column_id && $column['dst_column_id'] == $dst_column_id) {
+ return true;
+ }
+ }
+
+ return empty($sortableColumns);
}
return true;