Example #1
0
 /**
  * Parse a data URI and return a DataUri\Data
  * 
  * @param string $dataUri A data URI
  * @return \DataUri\Data
  * @throws InvalidArgumentException
  * @throws InvalidData
  */
 public static function parse($dataUri, $len = Data::TAGLEN, $strict = false)
 {
     $dataParams = $matches = array();
     if (!preg_match(self::DATA_URI_REGEXP, $dataUri, $matches)) {
         throw new \InvalidArgumentException('Could not parse the URL scheme');
     }
     $base64 = false;
     $mimeType = $matches[1];
     $params = $matches[2];
     $rawData = $matches[3];
     if ("" !== $params) {
         foreach (explode(';', $params) as $param) {
             if (strstr($param, '=')) {
                 $param = explode('=', $param);
                 $dataParams[array_shift($param)] = array_pop($param);
             } elseif ($param === Data::BASE_64) {
                 $base64 = true;
             }
         }
     }
     if ($base64 && !($rawData = base64_decode($rawData, $strict))) {
         throw new InvalidData('base64 encoding failed');
     }
     if (!$base64) {
         $rawData = rawurldecode($rawData);
     }
     $dataURI = new Data($rawData, $mimeType, $dataParams, $strict, $len);
     $dataURI->setBinaryData($base64);
     return $dataURI;
 }
Example #2
0
 /**
  * Transform a DataURI\Data object to its URI representation and take 
  * the following form :
  * 
  * data:[<mediatype>][;base64],<data>
  * 
  * @param Data $dataURI
  * @return string 
  */
 public static function dump(Data $dataURI)
 {
     $parameters = '';
     if (0 !== count($params = $dataURI->getParameters())) {
         foreach ($params as $paramName => $paramValue) {
             $parameters .= sprintf(';%s=%s', $paramName, $paramValue);
         }
     }
     $base64 = $dataURI->isBinaryData() ? sprintf(';%s', Data::BASE_64) : '';
     $data = $dataURI->isBinaryData() ? base64_encode($dataURI->getData()) : rawurlencode($dataURI->getData());
     return sprintf('data:%s%s%s,%s', $dataURI->getMimeType(), $parameters, $base64, $data);
 }
Example #3
0
 /**
  * @covers Alchemy\Phrasea\Controller\Prod\Upload::upload
  * @covers Alchemy\Phrasea\Controller\Prod\Upload::getJsonResponse
  */
 public function testUpload()
 {
     self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\\Phrasea\\Notification\\Deliverer')->disableOriginalConstructor()->getMock();
     $data = DataURI\Data::buildFromFile(__DIR__ . '/../../../../../files/cestlafete.jpg');
     $params = ['base_id' => self::$DI['collection']->get_base_id(), 'b64_image' => DataURI\Dumper::dump($data)];
     $files = ['files' => [new UploadedFile($this->tmpFile, 'KIKOO.JPG')]];
     self::$DI['client']->request('POST', '/prod/upload/', $params, $files, ['HTTP_Accept' => 'application/json']);
     $response = self::$DI['client']->getResponse();
     $this->checkJsonResponse($response);
     $datas = json_decode($response->getContent(), true);
     $this->assertTrue($datas['success']);
     if ($datas['element'] == 'record') {
         $id = explode('_', $datas['id']);
         $record = new \record_adapter(self::$DI['app'], $id[0], $id[1]);
         $this->assertTrue($record->get_thumbnail()->is_physically_present());
     }
 }
Example #4
0
 /**
  * @covers Alchemy\Phrasea\Controller\Prod\Upload::upload
  * @covers Alchemy\Phrasea\Controller\Prod\Upload::getJsonResponse
  */
 public function testUpload()
 {
     self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\\Phrasea\\Notification\\Deliverer')->disableOriginalConstructor()->getMock();
     $data = DataURI\Data::buildFromFile(__DIR__ . '/../../../../../files/cestlafete.jpg');
     $params = ['base_id' => self::$DI['collection']->get_base_id(), 'b64_image' => DataURI\Dumper::dump($data)];
     $files = ['files' => [new UploadedFile($this->tmpFile, 'KIKOO.JPG')]];
     /** @var Client $client */
     $client = self::$DI['client'];
     $client->request('POST', '/prod/upload/', $params, $files, ['HTTP_Accept' => 'application/json']);
     $response = $client->getResponse();
     $this->checkJsonResponse($response);
     $datas = json_decode($response->getContent(), true);
     $this->assertTrue($datas['success']);
     $this->assertArrayHasKey('element', $datas);
     // Below is useless test as currently a lazaret intance is returned
     if ('record' == $datas['element']) {
         $id = explode('_', $datas['id']);
         $record = new \record_adapter(self::$DI['app'], $id[0], $id[1]);
         $this->assertTrue($record->get_thumbnail()->is_physically_present());
         $fields = $record->get_caption()->get_fields(['FileName']);
         $field = array_pop($fields);
         $this->assertEquals('KIKOO.JPG', $field->get_serialized_values());
     }
 }