raspisms/models/Group.php

123 lines
3.4 KiB
PHP
Raw Normal View History

2019-10-29 14:57:13 +01:00
<?php
/*
2019-11-10 17:48:54 +01:00
* This file is part of RaspiSMS.
*
2019-11-10 17:48:54 +01:00
* (c) Pierre-Lin Bonnemaison <plebwebsas@gmail.com>
*
2019-11-10 17:48:54 +01:00
* This source file is subject to the GPL-3.0 license that is bundled
* with this source code in the file LICENSE.
*/
namespace models;
class Group extends StandardModel
2019-10-29 14:57:13 +01:00
{
/**
* Return a list of groups for a user.
* Add a column nb_contacts
*
* @param int $id_user : user id
* @param ?int $limit : Number of entry to return or null
* @param ?int $offset : Number of entry to ignore or null
*
* @return array
*/
public function list_for_user(int $id_user, $limit, $offset)
{
$query = '
SELECT g.*, COUNT(gc.id) as nb_contact
FROM `group` as g
LEFT JOIN group_contact as gc
ON g.id = gc.id_group
WHERE id_user = :id_user
GROUP BY g.id
';
if ($limit !== null)
{
$limit = (int) $limit;
$query .= ' LIMIT ' . $limit;
if ($offset !== null)
{
$offset = (int) $offset;
$query .= ' OFFSET ' . $offset;
}
}
$params = [
'id_user' => $id_user,
];
return $this->_run_query($query, $params);
}
2019-10-29 14:57:13 +01:00
/**
2020-01-17 18:19:25 +01:00
* Return a group by his name for a user.
*
* @param int $id_user : User id
* @param string $name : Group name
*
* @return array
2019-10-29 14:57:13 +01:00
*/
2020-01-17 18:19:25 +01:00
public function get_by_name_for_user(int $id_user, string $name)
2019-10-29 14:57:13 +01:00
{
return $this->_select_one($this->get_table_name(), ['id_user' => $id_user, 'name' => $name]);
2019-10-29 14:57:13 +01:00
}
/**
2020-01-17 18:19:25 +01:00
* Delete relations between group and contacts for a group.
*
* @param int $id_group : Group id
2020-01-17 18:19:25 +01:00
*
* @return int : Number of deleted rows
2019-10-29 14:57:13 +01:00
*/
2020-01-17 18:19:25 +01:00
public function delete_group_contact_relations(int $id_group)
2019-10-29 14:57:13 +01:00
{
return $this->_delete('group_contact', ['id_group' => $id_group]);
2019-10-29 14:57:13 +01:00
}
2019-10-29 14:57:13 +01:00
/**
2020-01-17 18:19:25 +01:00
* Insert a relation between a group and a contact.
*
* @param int $id_group : Group id
* @param int $id_contact : Contact id
2020-01-17 18:19:25 +01:00
*
* @return mixed (bool|int) : False on error, new row id else
2019-10-29 14:57:13 +01:00
*/
2020-01-17 18:19:25 +01:00
public function insert_group_contact_relation(int $id_group, int $id_contact)
2019-10-29 14:57:13 +01:00
{
$success = (bool) $this->_insert('group_contact', ['id_group' => $id_group, 'id_contact' => $id_contact]);
2020-01-17 18:19:25 +01:00
return $success ? $this->_last_id() : false;
}
2019-10-29 14:57:13 +01:00
/**
2020-01-17 18:19:25 +01:00
* Get groups contacts.
*
* @param int $id_group : Group id
2020-01-17 18:19:25 +01:00
*
* @return array : Contacts of the group
*/
2020-01-17 18:19:25 +01:00
public function get_contacts(int $id_group)
2019-10-29 14:57:13 +01:00
{
$query = '
2019-10-29 14:57:13 +01:00
SELECT *
2019-11-10 00:39:34 +01:00
FROM `contact`
WHERE id IN (SELECT id_contact FROM `group_contact` WHERE id_group = :id_group)
';
2019-10-29 14:57:13 +01:00
$params = ['id_group' => $id_group];
2019-10-29 14:57:13 +01:00
return $this->_run_query($query, $params);
2019-10-29 14:57:13 +01:00
}
2020-01-17 18:19:25 +01:00
/**
* Return table name.
*/
protected function get_table_name(): string
{
return 'group';
}
2019-10-29 14:57:13 +01:00
}