Skip to content

Commit a271c6f

Browse files
[11.8] Add parameters to SystemHooks::create() (GitLabPHP#685)
* Add parameters for `SystemHooks::create`. * Tabs to spaces * Do not permit passing url * Update SystemHooks.php Co-authored-by: Graham Campbell <[email protected]>
1 parent 3615e71 commit a271c6f

File tree

1 file changed

+57
-5
lines changed

1 file changed

+57
-5
lines changed

src/Api/SystemHooks.php

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414

1515
namespace Gitlab\Api;
1616

17+
use Symfony\Component\OptionsResolver\Options;
18+
use Symfony\Component\OptionsResolver\OptionsResolver;
19+
1720
class 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

Comments
 (0)