Beispiel #1
0
 /**
  * @param FormBuilderInterface $builder
  * @param array                $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('name')->add('description')->add('countries')->add('tags', 'text', ['mapped' => false]);
     $tagManager = $this->tagManager;
     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
         if (!$event->getData() || !$event->getData()->getId()) {
             $event->getForm()->add('url', 'url')->add('type', 'text', ['mapped' => false, 'constraints' => [new Constraints\NotBlank(['groups' => ['new']]), new Constraints\Choice(['choices' => Platform::getAvailableTypes(), 'groups' => ['new'], 'message' => 'Неправильный тип площадки'])]]);
         }
     });
     $builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) use($tagManager) {
         /** @var Platform $platform */
         $platform = $event->getData();
         $form = $event->getForm();
         $formTags = $form['tags']->getData();
         if (!empty($formTags) && !is_string($formTags)) {
             $error = new FormError('неправильный формат тегов');
             $form['tags']->addError($error);
         } else {
             $tagNames = $tagManager->splitTagNames($form['tags']->getData());
             $tags = $tagManager->loadOrCreateTags($tagNames);
             $tagManager->replaceTags($tags, $platform);
         }
         if (!$platform->getId() && $platform->getUrl()) {
             // для новой площадки
             $url = new Url($platform->getUrl());
             $platform->setUrl(rtrim($url->format('hp'), '//'));
             if (in_array($url->getHostname(), ['vk.com', 'vkontakte.ru']) !== ($form['type']->getData() == 'vk')) {
                 $error = new FormError('Тип площадки не соответствует адресу');
                 $form['url']->addError($error);
             }
         }
     });
 }
Beispiel #2
0
 /**
  * Prepares the request authentication based on Url components (username:password)
  *
  * @param mixed $url
  */
 protected function prepareUserAuth($url)
 {
     if (!$url instanceof Url) {
         $url = new Url($url);
     }
     if ($url->getUser()) {
         $authListener = new BasicAuthListener($url->getUser(), $url->getPassword());
         $this->httpBrowser->setListener($authListener);
     }
 }
 public function preSend(RequestInterface $request)
 {
     $raw = $request->getContent();
     $url = new Url($this->apiBaseUrl . $request->getResource() . '.json');
     $request->setContent(json_encode($raw));
     $request->setHost($url->getHost());
     $request->setResource($url->getResource());
     $request->addHeader('Authorization: Bearer ' . $this->token);
     $request->addHeader('Accept: application/json');
     $request->addHeader('Content-Type: application/json');
 }
 public function uploadActivity($file)
 {
     $request = new FormRequest(FormRequest::METHOD_POST);
     // Set the request URL
     $url = new Url('https://connect.garmin.com/proxy/upload-service-1.1/json/upload/.fit');
     $url->applyToRequest($request);
     // Set the form fields
     $request->setField('responseContentType', 'text/html');
     $data = new FormUpload($file);
     $data->setContentType('image/x-fits');
     $request->setField('data', $data);
     $response = new Response();
     $this->browser->getClient()->send($request, $response);
     return json_decode($response->getContent(), true);
 }
Beispiel #5
0
 /**
  * Sends a form request.
  *
  * @param string $url     The URL to submit to
  * @param array  $fields  An array of fields
  * @param string $method  The request method to use
  * @param array  $headers An array of request headers
  *
  * @return Response The response object
  */
 public function submit($url, array $fields, $method = RequestInterface::METHOD_POST, $headers = array())
 {
     $request = $this->factory->createFormRequest();
     if (!$url instanceof Url) {
         $url = new Url($url);
     }
     $url->applyToRequest($request);
     $request->addHeaders($headers);
     $request->setMethod($method);
     $request->setFields($fields);
     return $this->send($request);
 }
Beispiel #6
0
 /**
  * Sends a request.
  *
  * @param string $url     The URL to call
  * @param string $method  The request method to use
  * @param array  $headers An array of request headers
  * @param string $content The request content
  * @param int $cacheLifetime serverside cache lifetime
  *
  * @return MessageInterface The response object
  */
 public function call($url, $method, $headers = array(), $content = '', $cacheLifetime = null)
 {
     if ($this->cacher == null) {
         return parent::call($url, $method, $headers, $content, $cacheLifetime);
     }
     $request = $this->factory->createRequest($method);
     if (!$url instanceof Url) {
         $url = new Url($url);
     }
     $url->applyToRequest($request);
     $request->addHeaders($headers);
     $request->setContent($content);
     $this->data = $this->cacher->retrieveCachedResponse($request);
     if (!$this->data) {
         $this->fromCache = false;
         $this->send($request);
         $this->data = array('request' => parent::getLastRequest(), 'response' => parent::getLastResponse());
         $this->cacher->cacheResponse($this->data['request'], $this->data['response'], $cacheLifetime);
     }
     return $this->data['response'];
 }
Beispiel #7
0
 /**
  * @inheritdoc
  */
 public function request(array $params)
 {
     try {
         $headers = array();
         $url = new Url($params['url']);
         // Buzz cannot handle gziped content yet <@:(
         //$headers[] = 'Accept-Encoding: gzip,deflate';
         if ($params['config']->isAuthenticationPossible() === true && $this->option['keys']['public'] !== null && $this->option['keys']['private'] !== null) {
             /**
              * Note: DATE_RFC1123 my not be RFC 1123 compliant, depending on your platform.
              * @link http://www.php.net/manual/de/function.gmdate.php#25031
              */
             $date = gmdate('D, d M Y H:i:s \\G\\M\\T');
             $path = $url->getPath();
             $headers[] = 'Date: ' . $date;
             $headers[] = 'Authorization: ' . $this->signRequest('GET', $date, $path);
         }
         if (isset($params['lastmodified'])) {
             $headers[] = 'If-Modified-Since: ' . $params['lastmodified'];
         }
         $response = $this->client->get($url, $headers);
         $body = $response->getContent();
         $headers = null;
         if ($this->option['responseheader']) {
             $headers = array();
             $temp = $response->getHeaders();
             foreach ($temp as $header) {
                 if (substr($header, 0, 5) === 'HTTP/') {
                     continue;
                 }
                 list($key, $value) = explode(': ', $header);
                 $headers[$key] = $value;
             }
             $this->lastResponseHeaders = $headers;
         }
     } catch (\Exception $e) {
         throw new ClientException('Client exception catched, use getPrevious().', 0, $e);
     }
     return $this->createResponse($params['config']->isJson(), $response->getStatusCode(), $body, $headers);
 }
 /**
  * A convenience method for populating the current request from a URL.
  *
  * @param Url|string $url An URL
  */
 public function fromUrl($url)
 {
     if (!$url instanceof Url) {
         $url = new Url($url);
     }
     $url->applyToRequest($this);
 }
 /**
  * @dataProvider providePattern
  */
 public function testFormat($input, $pattern, $expected)
 {
     $url = new Url($input);
     $this->assertEquals($expected, $url->format($pattern));
 }