]> git.mxchange.org Git - friendica.git/commitdiff
Add backward compatibility with user contacts in Module\Group
authorHypolite Petovan <hypolite@mrpetovan.com>
Fri, 26 Nov 2021 14:48:37 +0000 (09:48 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Fri, 26 Nov 2021 14:48:37 +0000 (09:48 -0500)
src/Model/Group.php
src/Module/Group.php

index 8e7f807cfeb8cdc4f92c4f7d23f1f04bd584fb10..f6700a4566ffcc4ddc1ea61e5a18ad127ba3a18f 100644 (file)
@@ -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
@@ -259,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);
        }
 
        /**
@@ -284,15 +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]);
+               // @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::delete('group_member', ['gid' => $gid, 'contact-id' => $cid]);
        }
 
        /**
index 30ca0805a08acaf09c64c12f1f6ab10de82a201f..39eb896d402ed5f004a08630a00ec0b7e842ecae 100644 (file)
@@ -93,7 +93,17 @@ class Group extends BaseModule
                                        throw new \Exception(DI::l10n()->t('Unknown group.'), 404);
                                }
 
-                               $contact = DBA::selectFirst('contact', ['deleted'], ['id' => $contact_id, 'uid' => local_user()]);
+                               // @TODO Backward compatibility with user contacts, remove by version 2022.03
+                               $cdata = Model\Contact::getPublicAndUserContactID($contact_id, local_user());
+                               if (empty($cdata['public'])) {
+                                       throw new \Exception(DI::l10n()->t('Contact not found.'), 404);
+                               }
+
+                               if (empty($cdata['user'])) {
+                                       throw new \Exception(DI::l10n()->t('Invalid contact.'), 404);
+                               }
+
+                               $contact = Model\Contact::getById($cdata['user'], ['deleted']);
                                if (!DBA::isResult($contact)) {
                                        throw new \Exception(DI::l10n()->t('Contact not found.'), 404);
                                }
@@ -104,14 +114,14 @@ class Group extends BaseModule
 
                                switch($this->parameters['command']) {
                                        case 'add':
-                                               if (!Model\Group::addMember($group_id, $contact_id)) {
+                                               if (!Model\Group::addMember($group_id, $cdata['user'])) {
                                                        throw new \Exception(DI::l10n()->t('Unable to add the contact to the group.'), 500);
                                                }
 
                                                $message = DI::l10n()->t('Contact successfully added to group.');
                                                break;
                                        case 'remove':
-                                               if (!Model\Group::removeMember($group_id, $contact_id)) {
+                                               if (!Model\Group::removeMember($group_id, $cdata['user'])) {
                                                        throw new \Exception(DI::l10n()->t('Unable to remove the contact from the group.'), 500);
                                                }