@@ -19,36 +19,7 @@ class Groups extends AbstractApi
1919 */
2020 public function all (array $ parameters = [])
2121 {
22- $ resolver = $ this ->createOptionsResolver ();
23- $ booleanNormalizer = function (Options $ resolver , $ value ) {
24- return $ value ? 'true ' : 'false ' ;
25- };
26-
27- $ resolver ->setDefined ('skip_groups ' )
28- ->setAllowedTypes ('skip_groups ' , 'array ' )
29- ->setAllowedValues ('skip_groups ' , function (array $ value ) {
30- return count ($ value ) == count (array_filter ($ value , 'is_int ' ));
31- })
32- ;
33- $ resolver ->setDefined ('all_available ' )
34- ->setAllowedTypes ('all_available ' , 'bool ' )
35- ->setNormalizer ('all_available ' , $ booleanNormalizer )
36- ;
37- $ resolver ->setDefined ('search ' );
38- $ resolver ->setDefined ('order_by ' )
39- ->setAllowedValues ('order_by ' , ['name ' , 'path ' ])
40- ;
41- $ resolver ->setDefined ('sort ' )
42- ->setAllowedValues ('sort ' , ['asc ' , 'desc ' ])
43- ;
44- $ resolver ->setDefined ('statistics ' )
45- ->setAllowedTypes ('statistics ' , 'bool ' )
46- ->setNormalizer ('statistics ' , $ booleanNormalizer )
47- ;
48- $ resolver ->setDefined ('owned ' )
49- ->setAllowedTypes ('owned ' , 'bool ' )
50- ->setNormalizer ('owned ' , $ booleanNormalizer )
51- ;
22+ $ resolver = $ this ->getGroupSearchResolver ();
5223
5324 return $ this ->get ('groups ' , $ resolver ->resolve ($ parameters ));
5425 }
@@ -225,4 +196,61 @@ public function projects($id, array $parameters = [])
225196
226197 return $ this ->get ('groups/ ' .$ this ->encodePath ($ id ).'/projects ' , $ resolver ->resolve ($ parameters ));
227198 }
199+
200+ /**
201+ * @param int $groupId
202+ * @param array $parameters (
203+ *
204+ * @var int[] $skip_groups Skip the group IDs passes.
205+ * @var bool $all_available Show all the groups you have access to.
206+ * @var string $search Return list of authorized groups matching the search criteria.
207+ * @var string $order_by Order groups by name or path. Default is name.
208+ * @var string $sort Order groups in asc or desc order. Default is asc.
209+ * @var bool $statistics Include group statistics (admins only).
210+ * @var bool $owned Limit by groups owned by the current user.
211+ * )
212+ * @return mixed
213+ */
214+ public function subgroups ($ groupId , array $ parameters = [])
215+ {
216+ $ resolver = $ this ->getGroupSearchResolver ();
217+
218+ return $ this ->get ('groups/ ' .$ this ->encodePath ($ groupId ).'/subgroups ' , $ resolver ->resolve ($ parameters ));
219+ }
220+
221+ private function getGroupSearchResolver ()
222+ {
223+ $ resolver = $ this ->createOptionsResolver ();
224+ $ booleanNormalizer = function (Options $ resolver , $ value ) {
225+ return $ value ? 'true ' : 'false ' ;
226+ };
227+
228+ $ resolver ->setDefined ('skip_groups ' )
229+ ->setAllowedTypes ('skip_groups ' , 'array ' )
230+ ->setAllowedValues ('skip_groups ' , function (array $ value ) {
231+ return count ($ value ) == count (array_filter ($ value , 'is_int ' ));
232+ })
233+ ;
234+ $ resolver ->setDefined ('all_available ' )
235+ ->setAllowedTypes ('all_available ' , 'bool ' )
236+ ->setNormalizer ('all_available ' , $ booleanNormalizer )
237+ ;
238+ $ resolver ->setDefined ('search ' );
239+ $ resolver ->setDefined ('order_by ' )
240+ ->setAllowedValues ('order_by ' , ['name ' , 'path ' ])
241+ ;
242+ $ resolver ->setDefined ('sort ' )
243+ ->setAllowedValues ('sort ' , ['asc ' , 'desc ' ])
244+ ;
245+ $ resolver ->setDefined ('statistics ' )
246+ ->setAllowedTypes ('statistics ' , 'bool ' )
247+ ->setNormalizer ('statistics ' , $ booleanNormalizer )
248+ ;
249+ $ resolver ->setDefined ('owned ' )
250+ ->setAllowedTypes ('owned ' , 'bool ' )
251+ ->setNormalizer ('owned ' , $ booleanNormalizer )
252+ ;
253+
254+ return $ resolver ;
255+ }
228256}
0 commit comments