|  | 
| 2 | 2 | 
 | 
| 3 | 3 | use Buzz\Client\ClientInterface; | 
| 4 | 4 | use Buzz\Listener\ListenerInterface; | 
|  | 5 | +use Buzz\Message\Form\FormUpload; | 
| 5 | 6 | 
 | 
| 6 | 7 | use Gitlab\Exception\ErrorException; | 
| 7 | 8 | use Gitlab\Exception\RuntimeException; | 
| 8 | 9 | use Gitlab\HttpClient\Listener\ErrorListener; | 
| 9 | 10 | use Gitlab\HttpClient\Message\Request; | 
| 10 | 11 | use Gitlab\HttpClient\Message\Response; | 
|  | 12 | +use Gitlab\HttpClient\Message\FormRequest; | 
| 11 | 13 | 
 | 
| 12 | 14 | /** | 
| 13 | 15 |  * Performs requests on Gitlab API. API documentation should be self-explanatory. | 
| @@ -112,9 +114,9 @@ public function get($path, array $parameters = array(), array $headers = array() | 
| 112 | 114 |     /** | 
| 113 | 115 |      * {@inheritDoc} | 
| 114 | 116 |      */ | 
| 115 |  | -    public function post($path, array $parameters = array(), array $headers = array()) | 
|  | 117 | +    public function post($path, array $parameters = array(), array $headers = array(), array $files = array()) | 
| 116 | 118 |     { | 
| 117 |  | -        return $this->request($path, $parameters, 'POST', $headers); | 
|  | 119 | +        return $this->request($path, $parameters, 'POST', $headers, $files); | 
| 118 | 120 |     } | 
| 119 | 121 | 
 | 
| 120 | 122 |     /** | 
| @@ -144,13 +146,11 @@ public function put($path, array $parameters = array(), array $headers = array() | 
| 144 | 146 |     /** | 
| 145 | 147 |      * {@inheritDoc} | 
| 146 | 148 |      */ | 
| 147 |  | -    public function request($path, array $parameters = array(), $httpMethod = 'GET', array $headers = array()) | 
|  | 149 | +    public function request($path, array $parameters = array(), $httpMethod = 'GET', array $headers = array(), array $files = array()) | 
| 148 | 150 |     { | 
| 149 | 151 |         $path = trim($this->baseUrl.$path, '/'); | 
| 150 | 152 | 
 | 
| 151 |  | -        $request = $this->createRequest($httpMethod, $path); | 
| 152 |  | -        $request->addHeaders($headers); | 
| 153 |  | -        $request->setContent(http_build_query($parameters)); | 
|  | 153 | +        $request = $this->createRequest($httpMethod, $path, $parameters, $headers, $files); | 
| 154 | 154 | 
 | 
| 155 | 155 |         $hasListeners = 0 < count($this->listeners); | 
| 156 | 156 |         if ($hasListeners) { | 
| @@ -200,13 +200,31 @@ public function getLastResponse() | 
| 200 | 200 |     /** | 
| 201 | 201 |      * @param string $httpMethod | 
| 202 | 202 |      * @param string $url | 
| 203 |  | -     * @return Request | 
|  | 203 | +     * @param array $parameters | 
|  | 204 | +     * @param array $headers | 
|  | 205 | +     * @param array $files | 
|  | 206 | +     * | 
|  | 207 | +     * @return FormRequest|Request | 
| 204 | 208 |      */ | 
| 205 |  | -    private function createRequest($httpMethod, $url) | 
|  | 209 | +    private function createRequest($httpMethod, $url, array $parameters, array $headers, array $files) | 
| 206 | 210 |     { | 
| 207 |  | -        $request = new Request($httpMethod); | 
|  | 211 | +        if (empty($files)) { | 
|  | 212 | +            $request = new Request($httpMethod); | 
|  | 213 | +            $request->setContent(http_build_query($parameters)); | 
|  | 214 | +        } else { | 
|  | 215 | +            $request = new FormRequest($httpMethod); | 
|  | 216 | +            foreach ($parameters as $name => $value) { | 
|  | 217 | +                $request->setField($name, $value); | 
|  | 218 | +            } | 
|  | 219 | + | 
|  | 220 | +            foreach ($files as $name => $file) { | 
|  | 221 | +                $upload = new FormUpload($file); | 
|  | 222 | +                $request->setField($name, $upload); | 
|  | 223 | +            } | 
|  | 224 | +        } | 
| 208 | 225 |         $request->setHeaders($this->headers); | 
| 209 | 226 |         $request->fromUrl($url); | 
|  | 227 | +        $request->addHeaders($headers); | 
| 210 | 228 | 
 | 
| 211 | 229 |         return $request; | 
| 212 | 230 |     } | 
|  | 
0 commit comments