. * */ namespace Friendica\Model\Contact; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; /** * This class provides information about contact circles based on the "group_member" table. */ class Circle { /** * Returns a list of contacts belonging in a circle * * @param int $gid * @return array * @throws \Exception */ public static function getById(int $gid): array { $return = []; if (intval($gid)) { $stmt = DBA::p('SELECT `circle_member`.`contact-id`, `contact`.* FROM `contact` INNER JOIN `group_member` AS `circle_member` ON `contact`.`id` = `circle_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, DI::userSession()->getLocalUserId() ); if (DBA::isResult($stmt)) { $return = DBA::toArray($stmt); } } return $return; } /** * Returns uncircled contact count or list for user * * Returns either the total number of uncircled contacts for the given user * id or a paginated list of uncircled contacts. * * @param int $uid uid * @return array * @throws \Exception */ public static function listUncircled(int $uid) { return Contact::selectToArray([], ["`uid` = ? AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `failed` AND `id` NOT IN (SELECT DISTINCT(`contact-id`) FROM `group_member` AS `circle_member` INNER JOIN `group` AS `circle` ON `circle`.`id` = `circle_member`.`gid` WHERE `circle`.`uid` = ? AND `contact-id` = `contact`.`id`)", $uid, $uid]); } /** * Remove a contact from all circles * * @param integer $contact_id * * @return boolean Success */ public static function removeContact(int $contact_id) { return DBA::delete('group_member', ['contact-id' => $contact_id]); } }