diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-05-28 19:48:22 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-05-28 19:48:22 -0400 |
commit | 14713b0ec7ed93ca45578da069ad4e19a7d8addf (patch) | |
tree | 79972d53f6091a1ddb17f64a6a05a5523f5d5168 /app/Model/CategoryModel.php | |
parent | 936376ffe74c583d3cb819e98f53a85137fdf8bc (diff) |
Rename all models
Diffstat (limited to 'app/Model/CategoryModel.php')
-rw-r--r-- | app/Model/CategoryModel.php | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/app/Model/CategoryModel.php b/app/Model/CategoryModel.php new file mode 100644 index 00000000..62fb5611 --- /dev/null +++ b/app/Model/CategoryModel.php @@ -0,0 +1,218 @@ +<?php + +namespace Kanboard\Model; + +use Kanboard\Core\Base; + +/** + * Category model + * + * @package Kanboard\Model + * @author Frederic Guillot + */ +class CategoryModel extends Base +{ + /** + * SQL table name + * + * @var string + */ + const TABLE = 'project_has_categories'; + + /** + * Return true if a category exists for a given project + * + * @access public + * @param integer $category_id Category id + * @return boolean + */ + public function exists($category_id) + { + return $this->db->table(self::TABLE)->eq('id', $category_id)->exists(); + } + + /** + * Get a category by the id + * + * @access public + * @param integer $category_id Category id + * @return array + */ + public function getById($category_id) + { + return $this->db->table(self::TABLE)->eq('id', $category_id)->findOne(); + } + + /** + * Get the category name by the id + * + * @access public + * @param integer $category_id Category id + * @return string + */ + public function getNameById($category_id) + { + return $this->db->table(self::TABLE)->eq('id', $category_id)->findOneColumn('name') ?: ''; + } + + /** + * Get a category id by the category name and project id + * + * @access public + * @param integer $project_id Project id + * @param string $category_name Category name + * @return integer + */ + 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'); + } + + /** + * Return the list of all categories + * + * @access public + * @param integer $project_id Project id + * @param bool $prepend_none If true, prepend to the list the value 'None' + * @param bool $prepend_all If true, prepend to the list the value 'All' + * @return array + */ + 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; + } + + /** + * Return all categories for a given project + * + * @access public + * @param integer $project_id Project id + * @return array + */ + public function getAll($project_id) + { + return $this->db->table(self::TABLE) + ->eq('project_id', $project_id) + ->asc('name') + ->findAll(); + } + + /** + * Create default categories during project creation (transaction already started in Project::create()) + * + * @access public + * @param integer $project_id + * @return boolean + */ + public function createDefaultCategories($project_id) + { + $results = array(); + $categories = explode(',', $this->configModel->get('project_categories')); + + foreach ($categories as $category) { + $category = trim($category); + + if (! empty($category)) { + $results[] = $this->db->table(self::TABLE)->insert(array( + 'project_id' => $project_id, + 'name' => $category, + )); + } + } + + return in_array(false, $results, true); + } + + /** + * Create a category (run inside a transaction) + * + * @access public + * @param array $values Form values + * @return bool|integer + */ + public function create(array $values) + { + return $this->db->table(self::TABLE)->persist($values); + } + + /** + * Update a category + * + * @access public + * @param array $values Form values + * @return bool + */ + public function update(array $values) + { + return $this->db->table(self::TABLE)->eq('id', $values['id'])->save($values); + } + + /** + * Remove a category + * + * @access public + * @param integer $category_id Category id + * @return bool + */ + 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; + } + + /** + * Duplicate categories from a project to another one, must be executed inside a transaction + * + * @author Antonio Rabelo + * @param integer $src_project_id Source project id + * @param integer $dst_project_id Destination project id + * @return boolean + */ + public function duplicate($src_project_id, $dst_project_id) + { + $categories = $this->db + ->table(self::TABLE) + ->columns('name', 'description') + ->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; + } +} |