]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Group.php
Use rawContent for Special Options to avoid a protected options() method
[friendica.git] / src / Model / Group.php
index 5376b817fc6ccef33bd74089cdbfd028bcae148e..17e0a18e2e49dd0c8019f2779dcb2b541898e5c8 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -25,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
@@ -160,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
@@ -251,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
         *
@@ -281,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);
        }
 
        /**
@@ -306,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]);
        }
 
        /**
@@ -505,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,