Esempio n. 1
0
 public function connect(Application $app)
 {
     $app['controller.prod.tools'] = $this;
     $controllers = $app['controllers_factory'];
     $app['firewall']->addMandatoryAuthentication($controllers);
     $controllers->before(function (Request $request) use($app) {
         $app['firewall']->requireRight('doctools');
     });
     $controllers->get('/', function (Application $app, Request $request) {
         $records = RecordsRequest::fromRequest($app, $request, false);
         $metadatas = false;
         $record = null;
         if (count($records) == 1) {
             $record = $records->first();
             if (!$record->is_grouping()) {
                 try {
                     $metadatas = $app['exiftool.reader']->files($record->get_subdef('document')->get_pathfile())->first()->getMetadatas();
                 } catch (PHPExiftoolException $e) {
                 } catch (\Exception_Media_SubdefNotFound $e) {
                 }
             }
         }
         $var = ['records' => $records, 'record' => $record, 'metadatas' => $metadatas];
         return $app['twig']->render('prod/actions/Tools/index.html.twig', $var);
     });
     $controllers->post('/rotate/', function (Application $app, Request $request) {
         $return = ['success' => true, 'errorMessage' => ''];
         $records = RecordsRequest::fromRequest($app, $request, false);
         $rotation = in_array($request->request->get('rotation'), ['-90', '90', '180']) ? $request->request->get('rotation', 90) : 90;
         foreach ($records as $record) {
             foreach ($record->get_subdefs() as $name => $subdef) {
                 if ($name == 'document') {
                     continue;
                 }
                 try {
                     $subdef->rotate($rotation, $app['media-alchemyst'], $app['mediavorus']);
                 } catch (\Exception $e) {
                 }
             }
         }
         return $app->json($return);
     })->bind('prod_tools_rotate');
     $controllers->post('/image/', function (Application $app, Request $request) {
         $return = ['success' => true];
         $selection = RecordsRequest::fromRequest($app, $request, false, ['canmodifrecord']);
         foreach ($selection as $record) {
             $substituted = false;
             foreach ($record->get_subdefs() as $subdef) {
                 if ($subdef->is_substituted()) {
                     $substituted = true;
                     break;
                 }
             }
             if (!$substituted || $request->request->get('ForceThumbSubstit') == '1') {
                 $record->rebuild_subdefs();
             }
         }
         return $app->json($return);
     })->bind('prod_tools_image');
     $controllers->post('/hddoc/', function (Application $app, Request $request) {
         $success = false;
         $message = $app->trans('An error occured');
         if ($file = $request->files->get('newHD')) {
             if ($file->isValid()) {
                 $fileName = $file->getClientOriginalName();
                 try {
                     $tempoDir = tempnam(sys_get_temp_dir(), 'substit');
                     unlink($tempoDir);
                     mkdir($tempoDir);
                     $tempoFile = $tempoDir . DIRECTORY_SEPARATOR . $fileName;
                     if (false === rename($file->getPathname(), $tempoFile)) {
                         throw new RuntimeException('Error while renaming file');
                     }
                     $record = new \record_adapter($app, $request->get('sbas_id'), $request->get('record_id'));
                     $media = $app['mediavorus']->guess($tempoFile);
                     $app['subdef.substituer']->substitute($record, 'document', $media);
                     $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_SUBSTITUTE, 'HD', '');
                     if ((int) $request->request->get('ccfilename') === 1) {
                         $record->set_original_name($fileName);
                         $app['phraseanet.SE']->updateRecord($record);
                     }
                     unlink($tempoFile);
                     rmdir($tempoDir);
                     $success = true;
                     $message = $app->trans('Document has been successfully substitued');
                 } catch (\Exception $e) {
                     $message = $app->trans('file is not valid');
                 }
             } else {
                 $message = $app->trans('file is not valid');
             }
         } else {
             $app->abort(400, 'Missing file parameter');
         }
         return $app['twig']->render('prod/actions/Tools/iframeUpload.html.twig', ['success' => $success, 'message' => $message]);
     })->bind('prod_tools_hd_substitution');
     $controllers->post('/chgthumb/', function (Application $app, Request $request) {
         $success = false;
         $message = $app->trans('An error occured');
         if ($file = $request->files->get('newThumb')) {
             if ($file->isValid()) {
                 try {
                     $fileName = $file->getClientOriginalName();
                     $tempoDir = tempnam(sys_get_temp_dir(), 'substit');
                     unlink($tempoDir);
                     mkdir($tempoDir);
                     $tempoFile = $tempoDir . DIRECTORY_SEPARATOR . $fileName;
                     if (false === rename($file->getPathname(), $tempoFile)) {
                         throw new RuntimeException('Error while renaming file');
                     }
                     $record = new \record_adapter($app, $request->get('sbas_id'), $request->get('record_id'));
                     $media = $app['mediavorus']->guess($tempoFile);
                     $app['subdef.substituer']->substitute($record, 'thumbnail', $media);
                     $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_SUBSTITUTE, 'thumbnail', '');
                     unlink($tempoFile);
                     rmdir($tempoDir);
                     $success = true;
                     $message = $app->trans('Thumbnail has been successfully substitued');
                 } catch (\Exception $e) {
                     $message = $app->trans('file is not valid');
                 }
             } else {
                 $message = $app->trans('file is not valid');
             }
         } else {
             $app->abort(400, 'Missing file parameter');
         }
         return $app['twig']->render('prod/actions/Tools/iframeUpload.html.twig', ['success' => $success, 'message' => $message]);
     })->bind('prod_tools_thumbnail_substitution');
     $controllers->post('/thumb-extractor/confirm-box/', function (Application $app, Request $request) {
         $return = ['error' => false, 'datas' => ''];
         $template = 'prod/actions/Tools/confirm.html.twig';
         try {
             $record = new \record_adapter($app, $request->request->get('sbas_id'), $request->request->get('record_id'));
             $var = ['video_title' => $record->get_title(), 'image' => $request->request->get('image', '')];
             $return['datas'] = $app['twig']->render($template, $var);
         } catch (\Exception $e) {
             $return['datas'] = $app->trans('an error occured');
             $return['error'] = true;
         }
         return $app->json($return);
     });
     $controllers->post('/thumb-extractor/apply/', function (Application $app, Request $request) {
         $return = ['success' => false, 'message' => ''];
         try {
             $record = new \record_adapter($app, $request->request->get('sbas_id'), $request->request->get('record_id'));
             $dataUri = DataURI\Parser::parse($request->request->get('image', ''));
             $path = $app['root.path'] . '/tmp';
             $name = sprintf('extractor_thumb_%s', $record->get_serialize_key());
             $fileName = sprintf('%s/%s.png', $path, $name);
             file_put_contents($fileName, $dataUri->getData());
             $media = $app['mediavorus']->guess($fileName);
             $app['subdef.substituer']->substitute($record, 'thumbnail', $media);
             $app['phraseanet.logger']($record->get_databox())->log($record, \Session_Logger::EVENT_SUBSTITUTE, 'thumbnail', '');
             unset($media);
             $app['filesystem']->remove($fileName);
             $return['success'] = true;
         } catch (\Exception $e) {
             $return['message'] = $e->getMessage();
         }
         return $app->json($return);
     });
     return $controllers;
 }
Esempio n. 2
0
 /**
  * @param $record
  * @param $subDefName
  * @param $subDefDataUri
  * @throws \DataURI\Exception\InvalidDataException
  */
 private function substituteMedia($record, $subDefName, $subDefDataUri)
 {
     $dataUri = Parser::parse($subDefDataUri);
     $name = sprintf('extractor_thumb_%s', $record->get_serialize_key());
     $fileName = sprintf('%s/%s.png', sys_get_temp_dir(), $name);
     file_put_contents($fileName, $dataUri->getData());
     $media = $this->app->getMediaFromUri($fileName);
     $this->getSubDefinitionSubstituer()->substitute($record, $subDefName, $media);
     $this->getDataboxLogger($record->get_databox())->log($record, \Session_Logger::EVENT_SUBSTITUTE, $subDefName, '');
     unset($media);
     $this->getFilesystem()->remove($fileName);
 }
Esempio n. 3
0
 /**
  * Upload processus
  *
  * @param Application $app     The Silex application
  * @param Request     $request The current request
  *
  * parameters   : 'bas_id'        int     (mandatory) :   The id of the destination collection
  *                'status'        array   (optional)  :   The status to set to new uploaded files
  *                'attributes'    array   (optional)  :   Attributes id's to attach to the uploaded files
  *                'forceBehavior' int     (optional)  :   Force upload behavior
  *                      - 0 Force record
  *                      - 1 Force lazaret
  *
  * @return Response
  */
 public function upload(Application $app, Request $request)
 {
     $datas = ['success' => false, 'code' => null, 'message' => '', 'element' => '', 'reasons' => [], 'id' => ''];
     if (null === $request->files->get('files')) {
         throw new BadRequestHttpException('Missing file parameter');
     }
     if (count($request->files->get('files')) > 1) {
         throw new BadRequestHttpException('Upload is limited to 1 file per request');
     }
     $base_id = $request->request->get('base_id');
     if (!$base_id) {
         throw new BadRequestHttpException('Missing base_id parameter');
     }
     if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_base($base_id, 'canaddrecord')) {
         throw new AccessDeniedHttpException('User is not allowed to add record on this collection');
     }
     $file = current($request->files->get('files'));
     if (!$file->isValid()) {
         throw new BadRequestHttpException('Uploaded file is invalid');
     }
     try {
         // Add file extension, so mediavorus can guess file type for octet-stream file
         $uploadedFilename = $file->getRealPath();
         $renamedFilename = $file->getRealPath() . '.' . pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
         $app['filesystem']->rename($uploadedFilename, $renamedFilename);
         $media = $app['mediavorus']->guess($renamedFilename);
         $collection = \collection::get_from_base_id($app, $base_id);
         $lazaretSession = new LazaretSession();
         $lazaretSession->setUser($app['authentication']->getUser());
         $app['EM']->persist($lazaretSession);
         $packageFile = new File($app, $media, $collection, $file->getClientOriginalName());
         $postStatus = $request->request->get('status');
         if (isset($postStatus[$collection->get_base_id()]) && is_array($postStatus[$collection->get_base_id()])) {
             $postStatus = $postStatus[$collection->get_base_id()];
             $status = '';
             foreach (range(0, 31) as $i) {
                 $status .= isset($postStatus[$i]) ? $postStatus[$i] ? '1' : '0' : '0';
             }
             $packageFile->addAttribute(new Status($app, strrev($status)));
         }
         $forceBehavior = $request->request->get('forceAction');
         $reasons = [];
         $elementCreated = null;
         $callback = function ($element, $visa, $code) use($app, &$reasons, &$elementCreated) {
             foreach ($visa->getResponses() as $response) {
                 if (!$response->isOk()) {
                     $reasons[] = $response->getMessage($app['translator']);
                 }
             }
             $elementCreated = $element;
         };
         $code = $app['border-manager']->process($lazaretSession, $packageFile, $callback, $forceBehavior);
         $app['filesystem']->rename($renamedFilename, $uploadedFilename);
         if (!!$forceBehavior) {
             $reasons = [];
         }
         if ($elementCreated instanceof \record_adapter) {
             $id = $elementCreated->get_serialize_key();
             $element = 'record';
             $message = $app->trans('The record was successfully created');
             $app['phraseanet.SE']->addRecord($elementCreated);
             // try to create thumbnail from data URI
             if ('' !== ($b64Image = $request->request->get('b64_image', ''))) {
                 try {
                     $dataUri = Parser::parse($b64Image);
                     $fileName = $app['temporary-filesystem']->createTemporaryFile('base_64_thumb', null, "png");
                     file_put_contents($fileName, $dataUri->getData());
                     $media = $app['mediavorus']->guess($fileName);
                     $app['subdef.substituer']->substitute($elementCreated, 'thumbnail', $media);
                     $app['phraseanet.logger']($elementCreated->get_databox())->log($elementCreated, \Session_Logger::EVENT_SUBSTITUTE, 'thumbnail', '');
                     unset($media);
                     $app['temporary-filesystem']->clean('base_64_thumb');
                 } catch (DataUriException $e) {
                 }
             }
         } else {
             $app['dispatcher']->dispatch(PhraseaEvents::LAZARET_CREATE, new LazaretEvent($elementCreated));
             $id = $elementCreated->getId();
             $element = 'lazaret';
             $message = $app->trans('The file was moved to the quarantine');
         }
         $datas = ['success' => true, 'code' => $code, 'message' => $message, 'element' => $element, 'reasons' => $reasons, 'id' => $id];
     } catch (\Exception $e) {
         $datas['message'] = $app->trans('Unable to add file to Phraseanet');
     }
     $response = $app->json($datas);
     // IE 7 and 8 does not correctly handle json response in file API
     // lets send them an html content-type header
     $response->headers->set('Content-type', 'text/html');
     return $response;
 }
Esempio n. 4
0
 public function testGetIconURI()
 {
     Parser::parse($this->getProvider()->getIconURI());
 }