@@ -101,4 +101,102 @@ protected function httpPUT(string $url, array $params = null, $body = null, arra
101101 return $ this ->http ->request ($ url , $ params , 'PUT ' , $ body , $ headers );
102102 }
103103
104+ /**
105+ * @param $params
106+ *
107+ * @return array
108+ */
109+ protected function checkParams ($ params ){
110+
111+ if (is_array ($ params )){
112+
113+ foreach ($ params as $ key => $ value ){
114+
115+ if (is_bool ($ value )){
116+ $ params [$ key ] = (string )(int )$ value ;
117+ }
118+ elseif (is_null ($ value ) || empty ($ value )){
119+ unset($ params [$ key ]);
120+ }
121+
122+ }
123+
124+ }
125+
126+ return $ params ;
127+ }
128+
129+ /**
130+ * @param $data
131+ *
132+ * @return array|string
133+ */
134+ protected function rawurlencode ($ data ){
135+
136+ if (is_array ($ data )){
137+ return array_map ([$ this , 'rawurlencode ' ], $ data );
138+ }
139+ elseif (is_scalar ($ data )){
140+ return rawurlencode ($ data );
141+ }
142+
143+ return $ data ;
144+ }
145+
146+ /**
147+ * from https://github.com/abraham/twitteroauth/blob/master/src/Util.php
148+ *
149+ * @param array $params
150+ * @param bool $urlencode
151+ * @param string $delimiter
152+ * @param string $enclosure
153+ *
154+ * @return string
155+ */
156+ public function buildHttpQuery (array $ params , bool $ urlencode = null , string $ delimiter = null , string $ enclosure = null ):string {
157+
158+ if (empty ($ params )) {
159+ return '' ;
160+ }
161+
162+ // urlencode both keys and values
163+ if ($ urlencode ?? true ){
164+ $ params = array_combine (
165+ $ this ->rawurlencode (array_keys ($ params )),
166+ $ this ->rawurlencode (array_values ($ params ))
167+ );
168+ }
169+
170+ // Parameters are sorted by name, using lexicographical byte value ordering.
171+ // Ref: Spec: 9.1.1 (1)
172+ uksort ($ params , 'strcmp ' );
173+
174+ $ pairs = [];
175+ $ enclosure = $ enclosure ?? '' ;
176+
177+ foreach ($ params as $ parameter => $ value ){
178+
179+ if (is_array ($ value )) {
180+ // If two or more parameters share the same name, they are sorted by their value
181+ // Ref: Spec: 9.1.1 (1)
182+ // June 12th, 2010 - changed to sort because of issue 164 by hidetaka
183+ sort ($ value , SORT_STRING );
184+
185+ foreach ($ value as $ duplicateValue ) {
186+ $ pairs [] = $ parameter .'= ' .$ enclosure .$ duplicateValue .$ enclosure ;
187+ }
188+
189+ }
190+ else {
191+ $ pairs [] = $ parameter .'= ' .$ enclosure .$ value .$ enclosure ;
192+ }
193+
194+ }
195+
196+ // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
197+ // Each name-value pair is separated by an '&' character (ASCII code 38)
198+ return implode ($ delimiter ?? '& ' , $ pairs );
199+ }
200+
201+
104202}
0 commit comments