Allow task limits to be applied per-swimlane

This commit is contained in:
Andre Nathan
2020-01-31 19:42:06 -03:00
committed by Frédéric Guillot
parent 0a6f614571
commit e59ab08af3
15 changed files with 110 additions and 16 deletions

View File

@@ -3,6 +3,7 @@
namespace Kanboard\Formatter;
use Kanboard\Core\Filter\FormatterInterface;
use Kanboard\Model\ProjectModel;
use Kanboard\Model\SwimlaneModel;
use Kanboard\Model\TaskModel;
@@ -43,8 +44,16 @@ class BoardFormatter extends BaseFormatter implements FormatterInterface
*/
public function format()
{
$project = $this->projectModel->getById($this->projectId);
$swimlanes = $this->swimlaneModel->getAllByStatus($this->projectId, SwimlaneModel::ACTIVE);
$columns = $this->columnModel->getAllWithTaskCount($this->projectId);
if ($project['per_swimlane_task_limits']) {
$columns = array();
foreach ($swimlanes as $swimlane) {
$columns = array_merge($columns, $this->columnModel->getAllWithPerSwimlaneTaskCount($this->projectId, $swimlane['id']));
}
} else {
$columns = $this->columnModel->getAllWithTaskCount($this->projectId);
}
if (empty($swimlanes) || empty($columns)) {
return array();

View File

@@ -78,13 +78,16 @@ class BoardSwimlaneFormatter extends BaseFormatter implements FormatterInterface
public function format()
{
$nb_swimlanes = count($this->swimlanes);
$nb_columns = count($this->columns);
foreach ($this->swimlanes as &$swimlane) {
$columns = array_values(array_filter($this->columns, function($column) use ($swimlane) {
return !array_key_exists('swimlane_id', $column) || $column['swimlane_id'] == $swimlane['id'];
}));
$nb_columns = count($columns);
$swimlane['id'] = (int) $swimlane['id'];
$swimlane['columns'] = $this->boardColumnFormatter
->withSwimlaneId($swimlane['id'])
->withColumns($this->columns)
->withColumns($columns)
->withTasks($this->tasks)
->withTags($this->tags)
->format();
@@ -95,14 +98,12 @@ class BoardSwimlaneFormatter extends BaseFormatter implements FormatterInterface
$swimlane['score'] = array_column_sum($swimlane['columns'], 'score');
$this->calculateStatsByColumnAcrossSwimlanes($swimlane['columns']);
}
foreach ($this->swimlanes as &$swimlane) {
foreach ($swimlane['columns'] as $columnIndex => &$column) {
$column['column_nb_tasks'] = $this->swimlanes[0]['columns'][$columnIndex]['column_nb_tasks'];
$column['column_nb_score'] = $this->swimlanes[0]['columns'][$columnIndex]['column_score'];
// add number of open tasks to each column, ignoring the current filter
$column['column_nb_open_tasks'] = $this->columns[array_search($column['id'], array_column($this->columns, 'id'))]['nb_open_tasks'];
$column['column_nb_open_tasks'] = $columns[array_search($column['id'], array_column($columns, 'id'))]['nb_open_tasks'];
}
}