summaryrefslogtreecommitdiff
path: root/plugins/Group_assign/Model/MultiselectModel.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Group_assign/Model/MultiselectModel.php')
-rw-r--r--plugins/Group_assign/Model/MultiselectModel.php143
1 files changed, 143 insertions, 0 deletions
diff --git a/plugins/Group_assign/Model/MultiselectModel.php b/plugins/Group_assign/Model/MultiselectModel.php
new file mode 100644
index 00000000..36f1a9d1
--- /dev/null
+++ b/plugins/Group_assign/Model/MultiselectModel.php
@@ -0,0 +1,143 @@
+<?php
+
+namespace Kanboard\Plugin\Group_assign\Model;
+
+use Kanboard\Plugin\Group_assign\Model\MultiselectMemberModel;
+use Kanboard\Core\Base;
+
+/**
+ * Multiselect Model
+ *
+ * @package Kanboard\Plugin\Group_assign
+ * @author Craig Crosby
+ */
+class MultiselectModel extends Base
+{
+ /**
+ * SQL table name
+ *
+ * @var string
+ */
+ const TABLE = 'multiselect';
+
+ /**
+ * Get query to fetch all groups
+ *
+ * @access public
+ * @return \PicoDb\Table
+ */
+ public function getQuery()
+ {
+ return $this->db->table(self::TABLE)
+ ->columns('id', 'external_id')
+ ->subquery('SELECT COUNT(*) FROM '.MultiselectMemberModel::TABLE.' WHERE group_id='.self::TABLE.'.id', 'nb_users');
+ }
+
+ /**
+ * Get a specific group by id
+ *
+ * @access public
+ * @param integer $group_id
+ * @return array
+ */
+ public function getById($group_id)
+ {
+ return $this->db->table(self::TABLE)->eq('id', $group_id)->findOne();
+ }
+
+ /**
+ * Get a specific group by externalID
+ *
+ * @access public
+ * @param string $external_id
+ * @return array
+ */
+ public function getByExternalId($external_id)
+ {
+ return $this->db->table(self::TABLE)->eq('external_id', $external_id)->findOne();
+ }
+
+ /**
+ * Get specific groups by externalIDs
+ *
+ * @access public
+ * @param string[] $external_ids
+ * @return array
+ */
+ public function getByExternalIds(array $external_ids)
+ {
+ if (empty($external_ids)) {
+ return [];
+ }
+
+ return $this->db->table(self::TABLE)->in('external_id', $external_ids)->findAll();
+ }
+
+ /**
+ * Get all groups
+ *
+ * @access public
+ * @return array
+ */
+ public function getAll()
+ {
+ return $this->getQuery()->asc('id')->findAll();
+ }
+
+ /**
+ * Remove a group
+ *
+ * @access public
+ * @param integer $group_id
+ * @return boolean
+ */
+ public function remove($group_id)
+ {
+ return $this->db->table(self::TABLE)->eq('id', $group_id)->remove();
+ }
+
+ /**
+ * Create a new group
+ *
+ * @access public
+ * @param string $external_id
+ * @return integer|boolean
+ */
+ public function create($external_id = '')
+ {
+ return $this->db->table(self::TABLE)->persist(array(
+ 'external_id' => $external_id,
+ ));
+ }
+
+ /**
+ * Update existing group
+ *
+ * @access public
+ * @param array $values
+ * @return boolean
+ */
+ public function update(array $values)
+ {
+ return $this->db->table(self::TABLE)->eq('id', $values['id'])->update($values);
+ }
+
+ /**
+ * Get groupId from externalGroupId and create the group if not found
+ *
+ * @access public
+ * @param string $name
+ * @param string $external_id
+ * @return bool|integer
+ */
+ public function getOrCreateExternalGroupId($name, $external_id)
+ {
+ $group_id = $this->db->table(self::TABLE)->eq('external_id', $external_id)->findOneColumn('id');
+
+ if (empty($group_id)) {
+ $group_id = $this->create($external_id);
+ }
+
+ return $group_id;
+ }
+}