Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit 56e7f88

Browse files
authored
Merge pull request #1 from yogstation13/alexkar598-patch-1
Changes /group/users endpoint to seperate groups
2 parents c09b1ee + c42e79d commit 56e7f88

File tree

2 files changed

+42
-46
lines changed

2 files changed

+42
-46
lines changed

Api/Controller/GroupUsers.php

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,72 +11,68 @@
1111
class GroupUsers extends AbstractController
1212
{
1313
/**
14-
* @api-desc Generates a new linking key for a external account.
14+
* @api-desc Gets users for a group
1515
*
1616
* @api-in <req> str $groups Comma delimited group id's
17-
* @api-in str $account_type Type of linked account to find, use account type "forums" for forums usernames. Defaults to "byond".
18-
* @api-in bool $skip_missing If enabled, skips accounts without a linked account otherwise use forums username instead. Defaults to true.
19-
* @api-in bool $verbose Return full user object, if enabled ignores account_type parameter. Defaults to false.
17+
* @api-in str $account_type optional account type, defaults to byond
2018
*
21-
* @api-out str $key the linking key generated.
22-
* @api-out str $url the url the end user needs to access to link.
2319
*/
2420

2521
public function actionGet(ParameterBag $params)
2622
{
2723
$this->assertSuperUserKey();
2824
$this->assertApiScope('linking');
2925

26+
$group_ids = $this->filter('groups', 'str');
3027
$account_type = $this->filter('account_type', 'str');
3128
$account_type = empty($account_type) ? 'byond' : $account_type;
32-
33-
$skip_missing = $this->filter('skip_missing', 'bool');
34-
$verbose = $this->filter('verbose', 'bool');
35-
36-
$finder = \XF::finder('XF:User');
37-
$secondary_group_column = $finder->columnSqlName('secondary_group_ids');
38-
39-
$group_ids = $this->filter('groups', 'str');
4029

4130
if (empty($group_ids)) {
4231
return $this->error(\XF::phrase('yg_atleast_one_group'));
4332
}
4433

4534
$group_ids = explode(',', $this->filter('groups', 'str'));
46-
47-
$whereOr = [
48-
['user_group_id', '=', $group_ids]
49-
];
50-
51-
foreach ($group_ids as $group) {
52-
$whereOr[] = $finder->expression('FIND_IN_SET(' . $finder->quote($group) . ', ' . $secondary_group_column . ')');
53-
}
54-
55-
$users = $finder->whereOr($whereOr)->fetch();
56-
57-
if(!$verbose) {
35+
$group_priorities = [];
36+
$response = [];
37+
38+
foreach($group_ids as $group_id) {
39+
$groupfinder = \XF::finder('XF:UserGroup');
40+
$userfinder = \XF::finder('XF:User')->isValidUser();
41+
42+
$group = $groupfinder->where("user_group_id", $group_id)->fetchOne();
43+
if(!$group) {
44+
return $this->error(\XF::phrase('yg_invalid_group'));
45+
}
46+
$group_obj = [
47+
"user_group_id" => $group->user_group_id,
48+
"name" => $group->title,
49+
"priority" => $group->display_style_priority
50+
];
51+
52+
$query = $userfinder->where($userfinder->expression('FIND_IN_SET(' . $userfinder->quote($group_id) . ", " . $userfinder->columnSqlName("secondary_group_ids") . ")"));
53+
$users = $query->fetch();
5854
$new_users = [];
59-
60-
foreach ($users as $user) {
61-
$found = false;
62-
63-
foreach ($user->LinkedAccounts as $linked_account) {
64-
if($linked_account->account_type == $account_type) {
65-
$new_users[] = $linked_account->account_id;
66-
$found = true;
67-
}
68-
}
69-
70-
if (!$found && !$skip_missing) {
71-
$new_users[] = $user->username;
55+
foreach($users as $user) {
56+
foreach($user->LinkedAccounts as $link) {
57+
if($link->account_type !== $account_type) continue;
58+
$new_users[] = $link->account_id;
7259
}
7360
}
74-
75-
$users = $new_users;
61+
$group_obj["users"] = $new_users;
62+
$response[] = $group_obj;
7663
}
64+
65+
usort($response, function ($item1, $item2) {
66+
return $item2["priority"] <=> $item1["priority"];
67+
});
68+
69+
return $this->apiSuccess([
70+
"groups" => $response
71+
]);
72+
73+
7774

78-
return $this->apiSuccess(["users" => $users, "query" => $finder->getQuery()]);
7975
}
8076

8177

82-
}
78+
}

addon.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
"legacy_addon_id": "",
33
"title": "Yogstation Permissions",
44
"description": "",
5-
"version_id": 20210118,
6-
"version_string": "20210118",
5+
"version_id": 20210313,
6+
"version_string": "20210313",
77
"dev": "",
88
"dev_url": "",
99
"faq_url": "",
1010
"support_url": "",
1111
"extra_urls": [],
1212
"require": [],
1313
"icon": ""
14-
}
14+
}

0 commit comments

Comments
 (0)