|
19 | 19 |
|
20 | 20 | class Groups extends AbstractApi |
21 | 21 | { |
| 22 | + /** |
| 23 | + * @var string |
| 24 | + */ |
| 25 | + public const STATE_ALL = 'all'; |
| 26 | + |
| 27 | + /** |
| 28 | + * @var string |
| 29 | + */ |
| 30 | + public const STATE_MERGED = 'merged'; |
| 31 | + |
| 32 | + /** |
| 33 | + * @var string |
| 34 | + */ |
| 35 | + public const STATE_OPENED = 'opened'; |
| 36 | + |
| 37 | + /** |
| 38 | + * @var string |
| 39 | + */ |
| 40 | + public const STATE_CLOSED = 'closed'; |
| 41 | + |
| 42 | + /** |
| 43 | + * @var string |
| 44 | + */ |
| 45 | + public const STATE_LOCKED = 'locked'; |
| 46 | + |
22 | 47 | /** |
23 | 48 | * @param array $parameters { |
24 | 49 | * |
@@ -491,6 +516,108 @@ public function removeVariable($group_id, string $key) |
491 | 516 | return $this->delete('groups/'.self::encodePath($group_id).'/variables/'.self::encodePath($key)); |
492 | 517 | } |
493 | 518 |
|
| 519 | + /** |
| 520 | + * @param int|string $group_id |
| 521 | + * @param array $parameters { |
| 522 | + * |
| 523 | + * @var int[] $iids return the request having the given iid |
| 524 | + * @var string $state return all merge requests or just those that are opened, closed, or |
| 525 | + * merged |
| 526 | + * @var string $scope Return merge requests for the given scope: created-by-me, |
| 527 | + * assigned-to-me or all (default is created-by-me) |
| 528 | + * @var string $order_by return requests ordered by created_at or updated_at fields (default is created_at) |
| 529 | + * @var string $sort return requests sorted in asc or desc order (default is desc) |
| 530 | + * @var string $milestone return merge requests for a specific milestone |
| 531 | + * @var string $view if simple, returns the iid, URL, title, description, and basic state of merge request |
| 532 | + * @var string $labels return merge requests matching a comma separated list of labels |
| 533 | + * @var \DateTimeInterface $created_after return merge requests created after the given time (inclusive) |
| 534 | + * @var \DateTimeInterface $created_before return merge requests created before the given time (inclusive) |
| 535 | + * } |
| 536 | + * |
| 537 | + * @return mixed |
| 538 | + */ |
| 539 | + public function mergeRequests($group_id, array $parameters = []) |
| 540 | + { |
| 541 | + $resolver = $this->createOptionsResolver(); |
| 542 | + $datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string { |
| 543 | + return $value->format('c'); |
| 544 | + }; |
| 545 | + $resolver->setDefined('state') |
| 546 | + ->setAllowedValues('state', [self::STATE_ALL, self::STATE_MERGED, self::STATE_OPENED, self::STATE_CLOSED]) |
| 547 | + ; |
| 548 | + $resolver->setDefined('order_by') |
| 549 | + ->setAllowedValues('order_by', ['created_at', 'updated_at']) |
| 550 | + ; |
| 551 | + $resolver->setDefined('sort') |
| 552 | + ->setAllowedValues('sort', ['asc', 'desc']) |
| 553 | + ; |
| 554 | + $resolver->setDefined('milestone'); |
| 555 | + $resolver->setDefined('view') |
| 556 | + ->setAllowedValues('view', ['simple']) |
| 557 | + ; |
| 558 | + $resolver->setDefined('labels'); |
| 559 | + $resolver->setDefined('with_labels_details') |
| 560 | + ->setAllowedTypes('with_labels_details', 'bool') |
| 561 | + ; |
| 562 | + |
| 563 | + $resolver->setDefined('created_after') |
| 564 | + ->setAllowedTypes('created_after', \DateTimeInterface::class) |
| 565 | + ->setNormalizer('created_after', $datetimeNormalizer) |
| 566 | + ; |
| 567 | + $resolver->setDefined('created_before') |
| 568 | + ->setAllowedTypes('created_before', \DateTimeInterface::class) |
| 569 | + ->setNormalizer('created_before', $datetimeNormalizer) |
| 570 | + ; |
| 571 | + |
| 572 | + $resolver->setDefined('updated_after') |
| 573 | + ->setAllowedTypes('updated_after', \DateTimeInterface::class) |
| 574 | + ->setNormalizer('updated_after', $datetimeNormalizer) |
| 575 | + ; |
| 576 | + $resolver->setDefined('updated_before') |
| 577 | + ->setAllowedTypes('updated_before', \DateTimeInterface::class) |
| 578 | + ->setNormalizer('updated_before', $datetimeNormalizer) |
| 579 | + ; |
| 580 | + |
| 581 | + $resolver->setDefined('scope') |
| 582 | + ->setAllowedValues('scope', ['created_by_me', 'assigned_to_me', 'all']) |
| 583 | + ; |
| 584 | + $resolver->setDefined('author_id') |
| 585 | + ->setAllowedTypes('author_id', 'integer'); |
| 586 | + $resolver->setDefined('author_username'); |
| 587 | + |
| 588 | + $resolver->setDefined('assignee_id') |
| 589 | + ->setAllowedTypes('assignee_id', 'integer'); |
| 590 | + |
| 591 | + $resolver->setDefined('approver_ids') |
| 592 | + ->setAllowedTypes('approver_ids', 'array') |
| 593 | + ->setAllowedValues('approver_ids', function (array $value) { |
| 594 | + return \count($value) === \count(\array_filter($value, 'is_int')); |
| 595 | + }) |
| 596 | + ; |
| 597 | + $resolver->setDefined('non_archived') |
| 598 | + ->setAllowedTypes('non_archived', 'bool') |
| 599 | + ; |
| 600 | + $resolver->setDefined('reviewer_id') |
| 601 | + ->setAllowedTypes('reviewer_id', 'integer'); |
| 602 | + $resolver->setDefined('reviewer_username'); |
| 603 | + $resolver->setDefined('my_reaction_emoji'); |
| 604 | + |
| 605 | + $resolver->setDefined('search'); |
| 606 | + $resolver->setDefined('source_branch'); |
| 607 | + $resolver->setDefined('target_branch'); |
| 608 | + $resolver->setDefined('with_merge_status_recheck') |
| 609 | + ->setAllowedTypes('with_merge_status_recheck', 'bool') |
| 610 | + ; |
| 611 | + $resolver->setDefined('approved_by_ids') |
| 612 | + ->setAllowedTypes('approved_by_ids', 'array') |
| 613 | + ->setAllowedValues('approved_by_ids', function (array $value) { |
| 614 | + return \count($value) === \count(\array_filter($value, 'is_int')); |
| 615 | + }) |
| 616 | + ; |
| 617 | + |
| 618 | + return $this->get('groups/'.self::encodePath($group_id).'/merge_requests', $resolver->resolve($parameters)); |
| 619 | + } |
| 620 | + |
494 | 621 | /** |
495 | 622 | * @param int|string $group_id |
496 | 623 | * @param array $parameters { |
|
0 commit comments