22
33namespace PowerLink ;
44
5+ use PowerLink \QuerySyntax \OrderBy ;
6+ use PowerLink \QuerySyntax \Where ;
7+
58/**
69 * Class defining a query request in PowerLink with methods to set
710 * query settings
811 */
912class Query
1013{
14+ /**
15+ * SQL query for selecting ites
16+ * @var string
17+ */
18+ protected $ query = '' ;
19+
1120 /**
1221 * Object Type
1322 * @var string
@@ -16,37 +25,120 @@ class Query
1625
1726 /**
1827 * Number of items returned per page
19- * @var string
28+ * @var int
2029 */
21- protected $ page_size ;
30+ protected $ page_size = 50 ;
2231
2332 /**
2433 * Number of requested page
25- * @var string
34+ * @var int
2635 */
27- protected $ page_number ;
36+ protected $ page_number = 1 ;
2837
2938 /**
3039 * Array of requested fields
31- * @var array
40+ * @var array|null
3241 */
33- protected $ fields ;
42+ protected $ fields = null ;
3443
3544 /**
36- * SQL query for selecting ites
37- * @var string
45+ * Order By object
46+ * @var OrderBy
3847 */
39- protected $ query ;
48+ protected $ order_by ;
4049
4150 /**
42- * Name of field to sort by
43- * @var string
51+ * Set object type
52+ * @param int $object_type Object Type
4453 */
45- protected $ sort_by ;
54+ public function setObjectType (int $ object_type )
55+ {
56+ $ this ->object_type = $ object_type ;
57+ }
4658
4759 /**
48- * Name of field to sort by
49- * @var ASC|DESC
60+ * Set object type
61+ * @param string $field Field name
62+ * @param OrderBy::ASC|OrderBy::DESC|string $sort_by Field name
5063 */
51- protected $ sort_type ;
64+ public function setOrderBy (string $ field , string $ sort_by )
65+ {
66+ $ this ->order_by = new OrderBy ($ field , $ sort_by );
67+ }
68+
69+ /**
70+ * Set fields to request
71+ * @param array|string $field Field name
72+ * @throws \InvalidArgumentException Exception if you specified fields in wrong format
73+ */
74+ public function setFields ($ fields )
75+ {
76+ if (is_array ($ fields )) {
77+ if (empty ($ fields )) {
78+ throw new \InvalidArgumentException ('You cannot specify empty field names ' );
79+ }
80+ $ this ->fields = $ fields ;
81+ } elseif (is_string ($ fields ) && $ fields === '* ' ) {
82+ $ this ->fields = null ;
83+ } else {
84+ throw new \InvalidArgumentException ('You can specify fields by passing an array of field names ' );
85+ }
86+ }
87+
88+ /**
89+ * Set page size
90+ * @param int $page_size Page size
91+ */
92+ public function setPageSize (int $ page_size )
93+ {
94+ if (is_int ($ page_size )) {
95+ throw new \InvalidArgumentException ('Page number should be integer ' );
96+ }
97+
98+ $ this ->page_size = $ page_size ;
99+ }
100+
101+ /**
102+ * Set page number
103+ * @param int $page_number Page number
104+ */
105+ public function setPageOffset (int $ page_number )
106+ {
107+ if (is_int ($ page_number )) {
108+ throw new \InvalidArgumentException ('Page number should be integer ' );
109+ }
110+
111+ $ this ->page_number = $ page_number ;
112+ }
113+
114+ /**
115+ * Set query
116+ * @param int $query Query
117+ */
118+ public function setQuery (array $ query )
119+ {
120+ $ queryBuilder = new Where ($ query );
121+ $ this ->query = $ queryBuilder ->getQuery ();
122+ }
123+
124+ public function getParams ()
125+ {
126+ $ params = array (
127+ 'objecttype ' => $ this ->object_type ,
128+ 'fields ' => is_array ($ this ->fields ) ? implode (', ' , $ this ->fields ) : '* ' ,
129+ 'page_number ' => $ this ->page_number ,
130+ 'page_size ' => $ this ->page_size ,
131+ );
132+
133+ if ($ this ->order_by instanceof OrderBy) {
134+ $ params ['sort_by ' ] = $ this ->order_by ->getField ();
135+ $ params ['sort_type ' ] = $ this ->order_by ->getDirection ();
136+ }
137+
138+ if (!empty ($ this ->query )) {
139+ $ params ['query ' ] = $ this ->query ;
140+ }
141+
142+ return $ params ;
143+ }
52144}
0 commit comments