11<?php namespace Gitlab \Api ;
22
3+ use Symfony \Component \OptionsResolver \Options ;
4+
35class Groups extends AbstractApi
46{
57 /**
@@ -17,36 +19,7 @@ class Groups extends AbstractApi
1719 */
1820 public function all (array $ parameters = [])
1921 {
20- $ resolver = $ this ->createOptionsResolver ();
21- $ booleanNormalizer = function ($ value ) {
22- return $ value ? 'true ' : 'false ' ;
23- };
24-
25- $ resolver ->setDefined ('skip_groups ' )
26- ->setAllowedTypes ('skip_groups ' , 'array ' )
27- ->setAllowedValues ('skip_groups ' , function (array $ value ) {
28- return count ($ value ) == count (array_filter ($ value , 'is_int ' ));
29- })
30- ;
31- $ resolver ->setDefined ('all_available ' )
32- ->setAllowedTypes ('all_available ' , 'bool ' )
33- ->setNormalizer ('all_available ' , $ booleanNormalizer )
34- ;
35- $ resolver ->setDefined ('search ' );
36- $ resolver ->setDefined ('order_by ' )
37- ->setAllowedValues ('order_by ' , ['name ' , 'path ' ])
38- ;
39- $ resolver ->setDefined ('sort ' )
40- ->setAllowedValues ('sort ' , ['asc ' , 'desc ' ])
41- ;
42- $ resolver ->setDefined ('statistics ' )
43- ->setAllowedTypes ('statistics ' , 'bool ' )
44- ->setNormalizer ('statistics ' , $ booleanNormalizer )
45- ;
46- $ resolver ->setDefined ('owned ' )
47- ->setAllowedTypes ('owned ' , 'bool ' )
48- ->setNormalizer ('owned ' , $ booleanNormalizer )
49- ;
22+ $ resolver = $ this ->getGroupSearchResolver ();
5023
5124 return $ this ->get ('groups ' , $ resolver ->resolve ($ parameters ));
5225 }
@@ -65,16 +38,26 @@ public function show($id)
6538 * @param string $path
6639 * @param string $description
6740 * @param string $visibility
41+ * @param bool $lfs_enabled
42+ * @param bool $request_access_enabled
43+ * @param int $parent_id
44+ * @param int $shared_runners_minutes_limit
6845 * @return mixed
6946 */
70- public function create ($ name , $ path , $ description = null , $ visibility = 'private ' )
47+ public function create ($ name , $ path , $ description = null , $ visibility = 'private ' , $ lfs_enabled = null , $ request_access_enabled = null , $ parent_id = null , $ shared_runners_minutes_limit = null )
7148 {
72- return $ this -> post ( ' groups ' , array (
49+ $ params = array (
7350 'name ' => $ name ,
7451 'path ' => $ path ,
7552 'description ' => $ description ,
7653 'visibility ' => $ visibility ,
77- ));
54+ 'lfs_enabled ' => $ lfs_enabled ,
55+ 'request_access_enabled ' => $ request_access_enabled ,
56+ 'parent_id ' => $ parent_id ,
57+ 'shared_runners_minutes_limit ' => $ shared_runners_minutes_limit ,
58+ );
59+
60+ return $ this ->post ('groups ' , array_filter ($ params , 'strlen ' ));
7861 }
7962
8063 /**
@@ -180,7 +163,7 @@ public function removeMember($group_id, $user_id)
180163 public function projects ($ id , array $ parameters = [])
181164 {
182165 $ resolver = $ this ->createOptionsResolver ();
183- $ booleanNormalizer = function ($ value ) {
166+ $ booleanNormalizer = function (Options $ resolver , $ value ) {
184167 return $ value ? 'true ' : 'false ' ;
185168 };
186169
@@ -213,4 +196,61 @@ public function projects($id, array $parameters = [])
213196
214197 return $ this ->get ('groups/ ' .$ this ->encodePath ($ id ).'/projects ' , $ resolver ->resolve ($ parameters ));
215198 }
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+ }
216256}
0 commit comments