@@ -4,22 +4,46 @@ class Issues extends AbstractApi
4
4
{
5
5
/**
6
6
* @param int $project_id
7
- * @param int $page
8
- * @param int $per_page
9
- * @param array $params
7
+ * @param array $parameters (
8
+ *
9
+ * @var string $state Return all issues or just those that are opened or closed.
10
+ * @var string $labels Comma-separated list of label names, issues must have all labels to be returned.
11
+ * No+Label lists all issues with no labels.
12
+ * @var string $milestone The milestone title.
13
+ * @var int[] $iids Return only the issues having the given iid.
14
+ * @var string $order_by Return requests ordered by created_at or updated_at fields. Default is created_at.
15
+ * @var string $sort Return requests sorted in asc or desc order. Default is desc.
16
+ * @var string $search Search issues against their title and description.
17
+ * )
18
+ *
10
19
* @return mixed
11
20
*/
12
- public function all ($ project_id = null , $ page = 1 , $ per_page = self :: PER_PAGE , array $ params = array () )
21
+ public function all ($ project_id = null , array $ parameters = [] )
13
22
{
14
- $ path = $ project_id === null ? 'issues ' : $ this ->getProjectPath ($ project_id , 'issues ' );
23
+ $ resolver = $ this ->createOptionsResolver ();
24
+
25
+ $ resolver ->setDefined ('state ' )
26
+ ->setAllowedValues ('state ' , ['opened ' , 'closed ' ])
27
+ ;
28
+ $ resolver ->setDefined ('labels ' );
29
+ $ resolver ->setDefined ('milestone ' );
30
+ $ resolver ->setDefined ('iids ' )
31
+ ->setAllowedTypes ('iids ' , 'array ' )
32
+ ->setAllowedValues ('iids ' , function (array $ value ) {
33
+ return count ($ value ) == count (array_filter ($ value , 'is_int ' ));
34
+ })
35
+ ;
36
+ $ resolver ->setDefined ('order_by ' )
37
+ ->setAllowedValues ('order_by ' , ['created_at ' , 'updated_at ' ])
38
+ ;
39
+ $ resolver ->setDefined ('sort ' )
40
+ ->setAllowedValues ('sort ' , ['asc ' , 'desc ' ])
41
+ ;
42
+ $ resolver ->setDefined ('search ' );
15
43
16
- $ params = array_intersect_key ($ params , array ('labels ' => '' , 'state ' => '' , 'sort ' => '' , 'order_by ' => '' , 'milestone ' => '' ));
17
- $ params = array_merge (array (
18
- 'page ' => $ page ,
19
- 'per_page ' => $ per_page
20
- ), $ params );
44
+ $ path = $ project_id === null ? 'issues ' : $ this ->getProjectPath ($ project_id , 'issues ' );
21
45
22
- return $ this ->get ($ path , $ params );
46
+ return $ this ->get ($ path , $ resolver -> resolve ( $ parameters ) );
23
47
}
24
48
25
49
/**
0 commit comments