X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FGroup.php;h=17e0a18e2e49dd0c8019f2779dcb2b541898e5c8;hb=6dbbd081795fa1c8fe57db2248ac162efeeada88;hp=c38e78000b6a25247625d5afacee96ca3aee87ab;hpb=d6efc901946c91cf26a4436c4b58b1636e4bc9c9;p=friendica.git diff --git a/src/Model/Group.php b/src/Model/Group.php index c38e78000b..17e0a18e2e 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -1,6 +1,22 @@ . + * */ namespace Friendica\Model; @@ -9,8 +25,10 @@ use Friendica\BaseModule; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Network\HTTPException; /** * functions for interacting with the group database table @@ -73,7 +91,7 @@ class Group $group = DBA::selectFirst('group', ['deleted'], ['id' => $gid]); if (DBA::isResult($group) && $group['deleted']) { DBA::update('group', ['deleted' => 0], ['id' => $gid]); - notice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name.') . EOL); + notice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions may apply to this group and any future members. If this is not what you intended, please create another group with a different name.')); } return true; } @@ -117,6 +135,16 @@ class Group } DBA::close($stmt); + // Meta-groups + $contact = Contact::getById($cid, ['rel']); + if ($contact['rel'] == Contact::FOLLOWER || $contact['rel'] == Contact::FRIEND) { + $return[] = self::FOLLOWERS; + } + + if ($contact['rel'] == Contact::FRIEND) { + $return[] = self::MUTUALS; + } + return $return; } @@ -134,7 +162,7 @@ class Group public static function countUnseen() { $stmt = DBA::p("SELECT `group`.`id`, `group`.`name`, - (SELECT COUNT(*) FROM `item` FORCE INDEX (`uid_unseen_contactid`) + (SELECT COUNT(*) FROM `post-user` WHERE `uid` = ? AND `unseen` AND `contact-id` IN @@ -225,28 +253,6 @@ class Group return $return; } - /** - * Mark a group as deleted based on its name - * - * @param int $uid - * @param string $name - * @return bool - * @throws \Exception - * @deprecated Use Group::remove instead - * - */ - public static function removeByName($uid, $name) - { - $return = false; - if (!empty($uid) && !empty($name)) { - $gid = self::getIdByName($uid, $name); - - $return = self::remove($gid); - } - - return $return; - } - /** * Adds a contact to a group * @@ -255,21 +261,24 @@ class Group * @return boolean * @throws \Exception */ - public static function addMember($gid, $cid) + public static function addMember(int $gid, int $cid): bool { if (!$gid || !$cid) { return false; } - $row_exists = DBA::exists('group_member', ['gid' => $gid, 'contact-id' => $cid]); - if ($row_exists) { - // Row already existing, nothing to do - $return = true; - } else { - $return = DBA::insert('group_member', ['gid' => $gid, 'contact-id' => $cid]); + // @TODO Backward compatibility with user contacts, remove by version 2022.03 + $group = DBA::selectFirst('group', ['uid'], ['id' => $gid]); + if (empty($group)) { + throw new HTTPException\NotFoundException('Group not found.'); } - return $return; + $cdata = Contact::getPublicAndUserContactID($cid, $group['uid']); + if (empty($cdata['user'])) { + throw new HTTPException\NotFoundException('Invalid contact.'); + } + + return DBA::insert('group_member', ['gid' => $gid, 'contact-id' => $cdata['user']], Database::INSERT_IGNORE); } /** @@ -280,35 +289,24 @@ class Group * @return boolean * @throws \Exception */ - public static function removeMember($gid, $cid) + public static function removeMember(int $gid, int $cid): bool { if (!$gid || !$cid) { return false; } - $return = DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $cid]); - - return $return; - } - - /** - * Removes a contact from a group based on its name - * - * @param int $uid - * @param string $name - * @param int $cid - * @return boolean - * @throws \Exception - * @deprecated Use Group::removeMember instead - * - */ - public static function removeMemberByName($uid, $name, $cid) - { - $gid = self::getIdByName($uid, $name); + // @TODO Backward compatibility with user contacts, remove by version 2022.03 + $group = DBA::selectFirst('group', ['uid'], ['id' => $gid]); + if (empty($group)) { + throw new HTTPException\NotFoundException('Group not found.'); + } - $return = self::removeMember($gid, $cid); + $cdata = Contact::getPublicAndUserContactID($cid, $group['uid']); + if (empty($cdata['user'])) { + throw new HTTPException\NotFoundException('Invalid contact.'); + } - return $return; + return DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $cid]); } /** @@ -479,10 +477,17 @@ class Group $groupedit = null; } + if ($each == 'group') { + $count = DBA::count('group_member', ['gid' => $group['id']]); + $group_name = sprintf('%s (%d)', $group['name'], $count); + } else { + $group_name = $group['name']; + } + $display_groups[] = [ 'id' => $group['id'], 'cid' => $cid, - 'text' => $group['name'], + 'text' => $group_name, 'href' => $each . '/' . $group['id'], 'edit' => $groupedit, 'selected' => $selected,