|
<?php |
|
|
|
namespace Kanboard\Model; |
|
|
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryModel extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
const TABLE = 'project_has_categories'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function exists($category_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $category_id)->exists(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getById($category_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $category_id)->findOne(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getNameById($category_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $category_id)->findOneColumn('name') ?: ''; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getProjectId($category_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $category_id)->findOneColumn('project_id') ?: 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getIdByName($project_id, $category_name) |
|
{ |
|
return (int) $this->db->table(self::TABLE) |
|
->eq('project_id', $project_id) |
|
->eq('name', $category_name) |
|
->findOneColumn('id'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getList($project_id, $prepend_none = true, $prepend_all = false) |
|
{ |
|
$listing = $this->db->hashtable(self::TABLE) |
|
->eq('project_id', $project_id) |
|
->asc('name') |
|
->getAll('id', 'name'); |
|
|
|
$prepend = array(); |
|
|
|
if ($prepend_all) { |
|
$prepend[-1] = t('All categories'); |
|
} |
|
|
|
if ($prepend_none) { |
|
$prepend[0] = t('No category'); |
|
} |
|
|
|
return $prepend + $listing; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAll($project_id) |
|
{ |
|
return $this->db->table(self::TABLE) |
|
->eq('project_id', $project_id) |
|
->asc('name') |
|
->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function createDefaultCategories($project_id) |
|
{ |
|
$results = array(); |
|
$categories = array_unique(explode_csv_field($this->configModel->get('project_categories'))); |
|
|
|
foreach ($categories as $category) { |
|
$results[] = $this->db->table(self::TABLE)->insert(array( |
|
'project_id' => $project_id, |
|
'name' => $category, |
|
)); |
|
} |
|
|
|
return in_array(false, $results, true); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function create(array $values) |
|
{ |
|
return $this->db->table(self::TABLE)->persist($values); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function update(array $values) |
|
{ |
|
$updates = $values; |
|
unset($updates['id']); |
|
return $this->db->table(self::TABLE)->eq('id', $values['id'])->save($updates); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function remove($category_id) |
|
{ |
|
$this->db->startTransaction(); |
|
|
|
$this->db->table(TaskModel::TABLE)->eq('category_id', $category_id)->update(array('category_id' => 0)); |
|
|
|
if (! $this->db->table(self::TABLE)->eq('id', $category_id)->remove()) { |
|
$this->db->cancelTransaction(); |
|
return false; |
|
} |
|
|
|
$this->db->closeTransaction(); |
|
|
|
return true; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function duplicate($src_project_id, $dst_project_id) |
|
{ |
|
$categories = $this->db |
|
->table(self::TABLE) |
|
->columns('name', 'description', 'color_id') |
|
->eq('project_id', $src_project_id) |
|
->asc('name') |
|
->findAll(); |
|
|
|
foreach ($categories as $category) { |
|
$category['project_id'] = $dst_project_id; |
|
|
|
if (! $this->db->table(self::TABLE)->save($category)) { |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
|