diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-06-23 20:26:19 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-06-23 20:26:19 -0400 |
commit | d560f84b374fa1b3345dc582eddd6bb7b9138674 (patch) | |
tree | a7d9a429ee3094d530c8ca5dea2bda6709c08b82 /app/Model/TagModel.php | |
parent | 95751f391f336faf82ee2402a559247aef668e72 (diff) |
Added models for tags
Diffstat (limited to 'app/Model/TagModel.php')
-rw-r--r-- | app/Model/TagModel.php | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/app/Model/TagModel.php b/app/Model/TagModel.php new file mode 100644 index 00000000..1be05a66 --- /dev/null +++ b/app/Model/TagModel.php @@ -0,0 +1,139 @@ +<?php + +namespace Kanboard\Model; + +use Kanboard\Core\Base; + +/** + * Class TagModel + * + * @package Kanboard\Model + * @author Frederic Guillot + */ +class TagModel extends Base +{ + /** + * SQL table name + * + * @var string + */ + const TABLE = 'tags'; + + /** + * Get all tags + * + * @access public + * @return array + */ + public function getAll() + { + return $this->db->table(self::TABLE)->asc('name')->findAll(); + } + + /** + * Get all tags by project + * + * @access public + * @param integer $project_id + * @return array + */ + public function getAllByProject($project_id) + { + return $this->db->table(self::TABLE)->eq('project_id', $project_id)->asc('name')->findAll(); + } + + /** + * Get one tag + * + * @access public + * @param integer $tag_id + * @return array|null + */ + public function getById($tag_id) + { + return $this->db->table(self::TABLE)->eq('id', $tag_id)->findOne(); + } + + /** + * Get tag id from tag name + * + * @access public + * @param int $project_id + * @param string $tag + * @return integer + */ + public function getIdByName($project_id, $tag) + { + return $this->db + ->table(self::TABLE) + ->beginOr() + ->eq('project_id', 0) + ->eq('project_id', $project_id) + ->closeOr() + ->ilike('name', $tag) + ->asc('project_id') + ->findOneColumn('id'); + } + + /** + * Return tag id and create a new tag if necessary + * + * @access public + * @param int $project_id + * @param string $tag + * @return bool|int + */ + public function findOrCreateTag($project_id, $tag) + { + $tag_id = $this->getIdByName($project_id, $tag); + + if (empty($tag_id)) { + $tag_id = $this->create($project_id, $tag); + } + + return $tag_id; + } + + /** + * Add a new tag + * + * @access public + * @param int $project_id + * @param string $tag + * @return bool|int + */ + public function create($project_id, $tag) + { + return $this->db->table(self::TABLE)->persist(array( + 'project_id' => $project_id, + 'name' => $tag, + )); + } + + /** + * Update a tag + * + * @access public + * @param integer $tag_id + * @param string $tag + * @return bool + */ + public function update($tag_id, $tag) + { + return $this->db->table(self::TABLE)->eq('id', $tag_id)->update(array( + 'name' => $tag, + )); + } + + /** + * Remove a tag + * + * @access public + * @param integer $tag_id + * @return bool + */ + public function remove($tag_id) + { + return $this->db->table(self::TABLE)->eq('id', $tag_id)->remove(); + } +} |