Merge remote-tracking branch 'upstream/develop' into display-permissions
This commit is contained in:
commit
d6725437b0
2 changed files with 84 additions and 2 deletions
|
@ -310,6 +310,68 @@ class Group
|
||||||
return DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $cid]);
|
return DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $cid]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds contacts to a group
|
||||||
|
*
|
||||||
|
* @param int $gid
|
||||||
|
* @param array $contacts
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function addMembers(int $gid, array $contacts)
|
||||||
|
{
|
||||||
|
if (!$gid || !$contacts) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @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.');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($contacts as $cid) {
|
||||||
|
$cdata = Contact::getPublicAndUserContactID($cid, $group['uid']);
|
||||||
|
if (empty($cdata['user'])) {
|
||||||
|
throw new HTTPException\NotFoundException('Invalid contact.');
|
||||||
|
}
|
||||||
|
|
||||||
|
DBA::insert('group_member', ['gid' => $gid, 'contact-id' => $cdata['user']], Database::INSERT_IGNORE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes contacts from a group
|
||||||
|
*
|
||||||
|
* @param int $gid
|
||||||
|
* @param array $contacts
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function removeMembers(int $gid, array $contacts)
|
||||||
|
{
|
||||||
|
if (!$gid || !$contacts) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @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.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$contactIds = [];
|
||||||
|
|
||||||
|
foreach ($contacts as $cid) {
|
||||||
|
$cdata = Contact::getPublicAndUserContactID($cid, $group['uid']);
|
||||||
|
if (empty($cdata['user'])) {
|
||||||
|
throw new HTTPException\NotFoundException('Invalid contact.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$contactIds[] = $cdata['user'];
|
||||||
|
}
|
||||||
|
|
||||||
|
DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $contactIds]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the combined list of contact ids from a group id list
|
* Returns the combined list of contact ids from a group id list
|
||||||
*
|
*
|
||||||
|
|
|
@ -36,12 +36,32 @@ class Accounts extends BaseApi
|
||||||
{
|
{
|
||||||
protected function delete(array $request = [])
|
protected function delete(array $request = [])
|
||||||
{
|
{
|
||||||
$this->response->unsupported(Router::DELETE, $request);
|
self::checkAllowedScope(self::SCOPE_WRITE);
|
||||||
|
|
||||||
|
$request = $this->getRequest([
|
||||||
|
'account_ids' => [], // Array of account IDs to remove from the list
|
||||||
|
], $request);
|
||||||
|
|
||||||
|
if (empty($request['account_ids']) || empty($this->parameters['id'])) {
|
||||||
|
DI::mstdnError()->UnprocessableEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Group::removeMembers($this->parameters['id'], $request['account_ids']);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function post(array $request = [])
|
protected function post(array $request = [])
|
||||||
{
|
{
|
||||||
$this->response->unsupported(Router::POST, $request);
|
self::checkAllowedScope(self::SCOPE_WRITE);
|
||||||
|
|
||||||
|
$request = $this->getRequest([
|
||||||
|
'account_ids' => [], // Array of account IDs to add to the list
|
||||||
|
], $request);
|
||||||
|
|
||||||
|
if (empty($request['account_ids']) || empty($this->parameters['id'])) {
|
||||||
|
DI::mstdnError()->UnprocessableEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Group::addMembers($this->parameters['id'], $request['account_ids']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue