2020-08-04 14:22:19 -04:00
|
|
|
<?php
|
|
|
|
/**
|
2021-03-29 02:40:20 -04:00
|
|
|
* @copyright Copyright (C) 2010-2021, the Friendica project
|
2020-08-04 14:22:19 -04:00
|
|
|
*
|
|
|
|
* @license GNU AGPL version 3 or any later version
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Friendica\Model\Contact;
|
|
|
|
|
|
|
|
use Friendica\Database\DBA;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class provides information about contact groups based on the "group_member" table.
|
|
|
|
*/
|
|
|
|
class Group
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Returns a list of contacts belonging in a group
|
|
|
|
*
|
|
|
|
* @param int $gid
|
|
|
|
* @return array
|
|
|
|
* @throws \Exception
|
|
|
|
*/
|
|
|
|
public static function getById(int $gid)
|
|
|
|
{
|
|
|
|
$return = [];
|
|
|
|
|
|
|
|
if (intval($gid)) {
|
|
|
|
$stmt = DBA::p('SELECT `group_member`.`contact-id`, `contact`.*
|
|
|
|
FROM `contact`
|
|
|
|
INNER JOIN `group_member`
|
|
|
|
ON `contact`.`id` = `group_member`.`contact-id`
|
|
|
|
WHERE `gid` = ?
|
|
|
|
AND `contact`.`uid` = ?
|
|
|
|
AND NOT `contact`.`self`
|
|
|
|
AND NOT `contact`.`deleted`
|
|
|
|
AND NOT `contact`.`blocked`
|
|
|
|
AND NOT `contact`.`pending`
|
|
|
|
ORDER BY `contact`.`name` ASC',
|
|
|
|
$gid,
|
|
|
|
local_user()
|
|
|
|
);
|
|
|
|
|
|
|
|
if (DBA::isResult($stmt)) {
|
|
|
|
$return = DBA::toArray($stmt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns ungrouped contact count or list for user
|
|
|
|
*
|
|
|
|
* Returns either the total number of ungrouped contacts for the given user
|
|
|
|
* id or a paginated list of ungrouped contacts.
|
|
|
|
*
|
|
|
|
* @param int $uid uid
|
|
|
|
* @return array
|
|
|
|
* @throws \Exception
|
|
|
|
*/
|
2020-08-04 23:36:37 -04:00
|
|
|
public static function listUngrouped(int $uid)
|
2020-08-04 14:22:19 -04:00
|
|
|
{
|
|
|
|
return q("SELECT *
|
|
|
|
FROM `contact`
|
|
|
|
WHERE `uid` = %d
|
|
|
|
AND NOT `self`
|
|
|
|
AND NOT `deleted`
|
|
|
|
AND NOT `blocked`
|
|
|
|
AND NOT `pending`
|
2020-10-07 16:06:15 -04:00
|
|
|
AND NOT `failed`
|
2020-08-04 14:22:19 -04:00
|
|
|
AND `id` NOT IN (
|
|
|
|
SELECT DISTINCT(`contact-id`)
|
|
|
|
FROM `group_member`
|
|
|
|
INNER JOIN `group` ON `group`.`id` = `group_member`.`gid`
|
|
|
|
WHERE `group`.`uid` = %d
|
|
|
|
)", intval($uid), intval($uid));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove a contact from all groups
|
|
|
|
*
|
|
|
|
* @param integer $contact_id
|
|
|
|
*
|
|
|
|
* @return boolean Success
|
|
|
|
*/
|
|
|
|
public static function removeContact(int $contact_id)
|
|
|
|
{
|
|
|
|
return DBA::delete('group_member', ['contact-id' => $contact_id]);
|
|
|
|
}
|
|
|
|
}
|