From 1d44e544cfcde5f3e754af7af392b34eeb8fa0da Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 4 Aug 2020 18:22:19 +0000 Subject: [PATCH] New class for group related contact actions --- include/api.php | 4 +- src/Model/Contact.php | 74 ------------------------- src/Model/Contact/Group.php | 104 ++++++++++++++++++++++++++++++++++++ src/Module/Group.php | 6 +-- 4 files changed, 109 insertions(+), 79 deletions(-) create mode 100644 src/Model/Contact/Group.php diff --git a/include/api.php b/include/api.php index 86cda0b1bb..869ece0d7c 100644 --- a/include/api.php +++ b/include/api.php @@ -5271,7 +5271,7 @@ function api_friendica_group_show($type) // loop through all groups and retrieve all members for adding data in the user array $grps = []; foreach ($r as $rr) { - $members = Contact::getByGroupId($rr['id']); + $members = Contact\Group::getById($rr['id']); $users = []; if ($type == "xml") { @@ -5596,7 +5596,7 @@ function api_friendica_group_update($type) } // remove members - $members = Contact::getByGroupId($gid); + $members = Contact\Group::getById($gid); foreach ($members as $member) { $cid = $member['id']; foreach ($users as $user) { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 08cde31eeb..97cf605f16 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -537,41 +537,6 @@ class Contact } } - /** - * Returns a list of contacts belonging in a group - * - * @param int $gid - * @return array - * @throws \Exception - */ - public static function getByGroupId($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; - } - /** * Creates the self-contact for the provided user id * @@ -1029,33 +994,6 @@ class Contact return $menucondensed; } - /** - * 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 - */ - public static function getUngroupedList($uid) - { - return q("SELECT * - FROM `contact` - WHERE `uid` = %d - AND NOT `self` - AND NOT `deleted` - AND NOT `blocked` - AND NOT `pending` - 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)); - } - /** * Have a look at all contact tables for a given profile url. * This function works as a replacement for probing the contact. @@ -2684,18 +2622,6 @@ class Contact return $redirect; } - /** - * Remove a contact from all groups - * - * @param integer $contact_id - * - * @return boolean Success - */ - public static function removeFromGroups($contact_id) - { - return DBA::delete('group_member', ['contact-id' => $contact_id]); - } - /** * Is the contact a forum? * diff --git a/src/Model/Contact/Group.php b/src/Model/Contact/Group.php new file mode 100644 index 0000000000..bb05d3cc3f --- /dev/null +++ b/src/Model/Contact/Group.php @@ -0,0 +1,104 @@ +. + * + */ + +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 + */ + public static function getUngrouped(int $uid) + { + return q("SELECT * + FROM `contact` + WHERE `uid` = %d + AND NOT `self` + AND NOT `deleted` + AND NOT `blocked` + AND NOT `pending` + 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]); + } +} diff --git a/src/Module/Group.php b/src/Module/Group.php index d5f1fc8ef8..b7fffd4f11 100644 --- a/src/Module/Group.php +++ b/src/Module/Group.php @@ -239,7 +239,7 @@ class Group extends BaseModule DI::baseUrl()->redirect('contact'); } - $members = Model\Contact::getByGroupId($group['id']); + $members = Model\Contact\Group::getById($group['id']); $preselected = []; if (count($members)) { @@ -255,7 +255,7 @@ class Group extends BaseModule Model\Group::addMember($group['id'], $change); } - $members = Model\Contact::getByGroupId($group['id']); + $members = Model\Contact\Group::getById($group['id']); $preselected = []; if (count($members)) { foreach ($members as $member) { @@ -316,7 +316,7 @@ class Group extends BaseModule } if ($nogroup) { - $contacts = Model\Contact::getUngroupedList(local_user()); + $contacts = Model\Contact\Group::getUngrouped(local_user()); } else { $contacts_stmt = DBA::select('contact', [], ['uid' => local_user(), 'pending' => false, 'blocked' => false, 'self' => false],