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
* @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);
}
/**
* @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]);
}
/**
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);
}
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);
}