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