1414
1515namespace  Gitlab \Api ;
1616
17+ use  Symfony \Component \OptionsResolver \Options ;
18+ use  Symfony \Component \OptionsResolver \OptionsResolver ;
19+ 
1720class  SystemHooks extends  AbstractApi
1821{
1922    /** 
@@ -25,15 +28,26 @@ public function all()
2528    }
2629
2730    /** 
28-      * @param string $url 
31+      * @param string                    $url 
32+      * @param array<string,string|bool> $parameters { 
33+      * 
34+      *     @var string  $token                      secret token to validate received payloads 
35+      *     @var bool    $push_events                when true, the hook fires on push events 
36+      *     @var bool    $tag_push_events            when true, the hook fires on new tags being pushed 
37+      *     @var bool    $merge_requests_events      trigger hook on merge requests events 
38+      *     @var bool    $repository_update_events   trigger hook on repository update events 
39+      *     @var bool    $enable_ssl_verification    do SSL verification when triggering the hook 
40+      * } 
2941     * 
3042     * @return mixed 
3143     */ 
32-     public  function  create (string  $ url )
44+     public  function  create (string  $ url,  array   $ parameters  = [] )
3345    {
34-         return  $ this  ->post ('hooks ' , [
35-             'url '  => $ url ,
36-         ]);
46+         $ parameters  = $ this  ->createOptionsResolver ()->resolve ($ parameters );
47+ 
48+         $ parameters ['url ' ] = $ url ;
49+ 
50+         return  $ this  ->post ('hooks ' , $ parameters );
3751    }
3852
3953    /** 
@@ -55,4 +69,42 @@ public function remove(int $id)
5569    {
5670        return  $ this  ->delete ('hooks/ ' .self ::encodePath ($ id ));
5771    }
72+ 
73+     protected  function  createOptionsResolver (): OptionsResolver 
74+     {
75+         $ resolver  = new  OptionsResolver ();
76+ 
77+         $ resolver ->setDefined ('token ' );
78+ 
79+         $ booleanNormalizer  = function  (Options   $ resolver , $ value ): string  {
80+             return  $ value  ? 'true '  : 'false ' ;
81+         };
82+ 
83+         $ resolver ->setDefined ('push_events ' )
84+                  ->setAllowedTypes ('push_events ' , 'bool ' )
85+                  ->setNormalizer ('push_events ' , $ booleanNormalizer )
86+         ;
87+ 
88+         $ resolver ->setDefined ('tag_push_events ' )
89+                  ->setAllowedTypes ('tag_push_events ' , 'bool ' )
90+                  ->setNormalizer ('tag_push_events ' , $ booleanNormalizer )
91+         ;
92+ 
93+         $ resolver ->setDefined ('merge_requests_events ' )
94+                  ->setAllowedTypes ('merge_requests_events ' , 'bool ' )
95+                  ->setNormalizer ('merge_requests_events ' , $ booleanNormalizer )
96+         ;
97+ 
98+         $ resolver ->setDefined ('repository_update_events ' )
99+                  ->setAllowedTypes ('repository_update_events ' , 'bool ' )
100+                  ->setNormalizer ('repository_update_events ' , $ booleanNormalizer )
101+         ;
102+ 
103+         $ resolver ->setDefined ('enable_ssl_verification ' )
104+                  ->setAllowedTypes ('enable_ssl_verification ' , 'bool ' )
105+                  ->setNormalizer ('enable_ssl_verification ' , $ booleanNormalizer )
106+         ;
107+ 
108+         return  $ resolver ;
109+     }
58110}
0 commit comments