diff --git a/include/api.php b/include/api.php index 06d3607ab1..3373ffe48d 100644 --- a/include/api.php +++ b/include/api.php @@ -1795,74 +1795,6 @@ function api_lists_create($type) api_register_func('api/lists/create', 'api_lists_create', true); -/** - * Update the specified group with the posted array of contacts. - * - * @param string $type Return type (atom, rss, xml, json) - * - * @return array|string - * @throws BadRequestException - * @throws ForbiddenException - * @throws ImagickException - * @throws InternalServerErrorException - * @throws UnauthorizedException - */ -function api_friendica_group_update($type) -{ - BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); - $uid = BaseApi::getCurrentUserID(); - - // params - $gid = $_REQUEST['gid'] ?? 0; - $name = $_REQUEST['name'] ?? ''; - $json = json_decode($_POST['json'], true); - $users = $json['user']; - - // error if no name specified - if ($name == "") { - throw new BadRequestException('group name not specified'); - } - - // error if no gid specified - if ($gid == "") { - throw new BadRequestException('gid not specified'); - } - - // remove members - $members = Contact\Group::getById($gid); - foreach ($members as $member) { - $cid = $member['id']; - foreach ($users as $user) { - $found = ($user['cid'] == $cid ? true : false); - } - if (!isset($found) || !$found) { - $gid = Group::getIdByName($uid, $name); - Group::removeMember($gid, $cid); - } - } - - // add members - $erroraddinguser = false; - $errorusers = []; - foreach ($users as $user) { - $cid = $user['cid']; - - if (DBA::exists('contact', ['id' => $cid, 'uid' => $uid])) { - Group::addMember($gid, $cid); - } else { - $erroraddinguser = true; - $errorusers[] = $cid; - } - } - - // return success message incl. missing users in array - $status = ($erroraddinguser ? "missing user" : "ok"); - $success = ['success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers]; - return DI::apiResponse()->formatData("group_update", $type, ['result' => $success]); -} - -api_register_func('api/friendica/group_update', 'api_friendica_group_update', true); - /** * Update information about a group. * diff --git a/src/Module/Api/Friendica/Group/Update.php b/src/Module/Api/Friendica/Group/Update.php new file mode 100644 index 0000000000..c8d353e2b8 --- /dev/null +++ b/src/Module/Api/Friendica/Group/Update.php @@ -0,0 +1,89 @@ +. + * + */ + +namespace Friendica\Module\Api\Friendica\Group; + +use Friendica\Database\DBA; +use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Model\Group; +use Friendica\Module\BaseApi; +use Friendica\Network\HTTPException\BadRequestException; + +/** + * API endpoint: /api/friendica/group_update + */ +class Update extends BaseApi +{ + protected function rawContent(array $request = []) + { + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + $uid = BaseApi::getCurrentUserID(); + + // params + $gid = $request['gid'] ?? 0; + $name = $request['name'] ?? ''; + $json = json_decode($_POST['json'], true); + $users = $json['user']; + + // error if no name specified + if (!$name) { + throw new BadRequestException('group name not specified'); + } + + // error if no gid specified + if (!$gid) { + throw new BadRequestException('gid not specified'); + } + + // remove members + $members = Contact\Group::getById($gid); + foreach ($members as $member) { + $cid = $member['id']; + foreach ($users as $user) { + $found = $user['cid'] == $cid; + } + if (!isset($found) || !$found) { + $gid = Group::getIdByName($uid, $name); + Group::removeMember($gid, $cid); + } + } + + // add members + $erroraddinguser = false; + $errorusers = []; + foreach ($users as $user) { + $cid = $user['cid']; + + if (DBA::exists('contact', ['id' => $cid, 'uid' => $uid])) { + Group::addMember($gid, $cid); + } else { + $erroraddinguser = true; + $errorusers[] = $cid; + } + } + + // return success message incl. missing users in array + $status = ($erroraddinguser ? 'missing user' : 'ok'); + $success = ['success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers]; + DI::apiResponse()->exit('group_update', ['$result' => $success], $parameters['extension'] ?? null); + } +} diff --git a/static/routes.config.php b/static/routes.config.php index af3e995b85..c0d327b5c8 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -82,7 +82,7 @@ $apiRoutes = [ '/group_show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], '/group_create[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], '/group_delete[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Group\Delete::class, [ R::POST]], - '/group_update[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], + '/group_update[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Group\Update::class, [ R::POST]], '/profile/show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Profile\Show::class, [R::GET ]], '/photoalbum/delete[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Photoalbum\Delete::class, [ R::POST]], '/photoalbum/update[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Photoalbum\Update::class, [ R::POST]],