|
<?php |
|
|
|
namespace Kanboard\Model; |
|
|
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ColumnModel extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
const TABLE = 'columns'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getById($column_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $column_id)->findOne(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getProjectId($column_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $column_id)->findOneColumn('project_id'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getFirstColumnId($project_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('project_id', $project_id)->asc('position')->findOneColumn('id'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getLastColumnId($project_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('project_id', $project_id)->desc('position')->findOneColumn('id'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getLastColumnPosition($project_id) |
|
{ |
|
return (int) $this->db |
|
->table(self::TABLE) |
|
->eq('project_id', $project_id) |
|
->desc('position') |
|
->findOneColumn('position'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getColumnIdByTitle($project_id, $title) |
|
{ |
|
return (int) $this->db->table(self::TABLE)->eq('project_id', $project_id)->eq('title', $title)->findOneColumn('id'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getColumnTitleById($column_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $column_id)->findOneColumn('title'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAll($project_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('project_id', $project_id)->asc('position')->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAllWithTaskCount($project_id) |
|
{ |
|
return $this->db->table(self::TABLE) |
|
->columns('id', 'title', 'position', 'task_limit', 'description', 'hide_in_dashboard', 'project_id') |
|
->subquery("SELECT COUNT(*) FROM ".TaskModel::TABLE." WHERE column_id=".self::TABLE.".id AND is_active='1'", 'nb_open_tasks') |
|
->subquery("SELECT COUNT(*) FROM ".TaskModel::TABLE." WHERE column_id=".self::TABLE.".id AND is_active='0'", 'nb_closed_tasks') |
|
->eq('project_id', $project_id) |
|
->asc('position') |
|
->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAllWithPerSwimlaneTaskCount($project_id, $swimlane_id) |
|
{ |
|
return $this->db->table(self::TABLE) |
|
->columns('id', 'title', 'position', 'task_limit', 'description', 'hide_in_dashboard', 'project_id', $swimlane_id.' AS swimlane_id') |
|
->subquery("SELECT COUNT(*) FROM ".TaskModel::TABLE." WHERE column_id=".self::TABLE.".id AND swimlane_id=".$swimlane_id." AND is_active='1'", 'nb_open_tasks') |
|
->subquery("SELECT COUNT(*) FROM ".TaskModel::TABLE." WHERE column_id=".self::TABLE.".id AND swimlane_id=".$swimlane_id." AND is_active='0'", 'nb_closed_tasks') |
|
->eq('project_id', $project_id) |
|
->asc('position') |
|
->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getList($project_id, $prepend = false) |
|
{ |
|
$listing = $this->db->hashtable(self::TABLE)->eq('project_id', $project_id)->asc('position')->getAll('id', 'title'); |
|
return $prepend ? array(-1 => t('All columns')) + $listing : $listing; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function create($project_id, $title, $task_limit = 0, $description = '', $hide_in_dashboard = 0) |
|
{ |
|
$values = array( |
|
'project_id' => $project_id, |
|
'title' => $title, |
|
'task_limit' => intval($task_limit), |
|
'position' => $this->getLastColumnPosition($project_id) + 1, |
|
'hide_in_dashboard' => $hide_in_dashboard, |
|
'description' => $description, |
|
); |
|
|
|
return $this->db->table(self::TABLE)->persist($values); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function update($column_id, $title, $task_limit = 0, $description = '', $hide_in_dashboard = 0) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $column_id)->update(array( |
|
'title' => $title, |
|
'task_limit' => intval($task_limit), |
|
'hide_in_dashboard' => $hide_in_dashboard, |
|
'description' => $description, |
|
)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function remove($column_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $column_id)->remove(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function changePosition($project_id, $column_id, $position) |
|
{ |
|
if ($position < 1 || $position > $this->db->table(self::TABLE)->eq('project_id', $project_id)->count()) { |
|
return false; |
|
} |
|
|
|
$column_ids = $this->db->table(self::TABLE)->eq('project_id', $project_id)->neq('id', $column_id)->asc('position')->findAllByColumn('id'); |
|
$offset = 1; |
|
$results = array(); |
|
|
|
foreach ($column_ids as $current_column_id) { |
|
if ($offset == $position) { |
|
$offset++; |
|
} |
|
|
|
$results[] = $this->db->table(self::TABLE)->eq('id', $current_column_id)->update(array('position' => $offset)); |
|
$offset++; |
|
} |
|
|
|
$results[] = $this->db->table(self::TABLE)->eq('id', $column_id)->update(array('position' => $position)); |
|
|
|
return !in_array(false, $results, true); |
|
} |
|
} |
|
|