Example #1
0
 /**
  *
  * @param Application      $app
  * @param record_adapter $record
  * @param databox          $databox
  *
  * @return caption_record
  */
 public function __construct(Application $app, \record_adapter $record, databox $databox)
 {
     $this->app = $app;
     $this->sbas_id = $record->get_sbas_id();
     $this->record = $record;
     $this->databox = $databox;
 }
Example #2
0
 private function generateSubdefPathname(\record_adapter $record, \databox_subdef $subdef, $oldVersion = null)
 {
     if ($oldVersion) {
         $pathdest = \p4string::addEndSlash(pathinfo($oldVersion, PATHINFO_DIRNAME));
     } else {
         $pathdest = \databox::dispatch($this->filesystem, $subdef->get_path());
     }
     return $pathdest . $record->get_record_id() . '_' . $subdef->get_name() . '.' . $this->getExtensionFromSpec($subdef->getSpecs());
 }
 public function replaceMetadata($metadataCollection, \record_adapter $record)
 {
     $metadatas = [];
     $tagnameToFieldnameMapping = [];
     $arrayStructure = iterator_to_array($record->get_databox()->get_meta_structure());
     array_walk($arrayStructure, function ($databoxField) use(&$tagnameToFieldnameMapping) {
         $tagname = $databoxField->get_tag()->getTagname();
         $tagnameToFieldnameMapping[$tagname][] = $databoxField->get_name();
     });
     array_walk($metadataCollection, function (Metadata $metadata) use(&$metadatas, $tagnameToFieldnameMapping) {
         $tagname = $metadata->getTag()->getTagname();
         if (!isset($tagnameToFieldnameMapping[$tagname])) {
             return;
         }
         foreach ($tagnameToFieldnameMapping[$tagname] as $fieldname) {
             if (!isset($metadatas[$fieldname])) {
                 $metadatas[$fieldname] = [];
             }
             $metadatas[$fieldname] = array_merge($metadatas[$fieldname], $metadata->getValue()->asArray());
         }
     });
     $metas = [];
     array_walk($arrayStructure, function (\databox_field $field) use(&$metas, $metadatas, $record) {
         $fieldname = $field->get_name();
         if (!isset($metadatas[$fieldname])) {
             return;
         }
         $values = $metadatas[$fieldname];
         if ($record->get_caption()->has_field($fieldname)) {
             foreach ($record->get_caption()->get_field($fieldname)->get_values() as $value) {
                 $value->delete();
             }
         }
         if ($field->is_multi()) {
             $tmpValues = [];
             foreach ($values as $value) {
                 $tmpValues = array_merge($tmpValues, \caption_field::get_multi_values($value, $field->get_separator()));
             }
             $values = array_unique($tmpValues);
             foreach ($values as $value) {
                 if (trim($value) === '') {
                     continue;
                 }
                 $metas[] = ['meta_struct_id' => $field->get_id(), 'meta_id' => null, 'value' => $value];
             }
         } else {
             $value = array_pop($values);
             if (trim($value) === '') {
                 return;
             }
             $metas[] = ['meta_struct_id' => $field->get_id(), 'meta_id' => null, 'value' => $value];
         }
     });
     if (count($metas) > 0) {
         $record->set_metadatas($metas, true);
     }
 }
 private function logView(\record_adapter $record, Request $request)
 {
     try {
         $logger = $this->getDataboxLogger($record->get_databox());
         $log_id = $logger->get_id();
         $record->log_view($log_id, $request->headers->get('referer', 'NO REFERRER'), $this->app['phraseanet.configuration']['main']['key']);
     } catch (\Exception $e) {
         // Ignore exception
     }
 }
Example #5
0
 public function displayTechnicalDatas(Application $app, $sbas_id, $record_id)
 {
     $record = new \record_adapter($app, $sbas_id, $record_id);
     try {
         $document = $record->get_subdef('document');
     } catch (\Exception $e) {
         $document = null;
     }
     return $app['twig']->render('prod/Tooltip/TechnicalDatas.html.twig', ['record' => $record, 'document' => $document]);
 }
Example #6
0
 public function log(record_adapter $record, $action, $final, $comment)
 {
     $sql = 'INSERT INTO log_docs
       (id, log_id, date, record_id, action, final, comment)
       VALUES (null, :log_id, NOW(), :record_id, :action, :final, :comm)';
     $stmt = $this->databox->get_connection()->prepare($sql);
     $params = [':log_id' => $this->get_id(), ':record_id' => $record->get_record_id(), ':action' => $action, ':final' => $final, ':comm' => $comment];
     $stmt->execute($params);
     $stmt->closeCursor();
     return $this;
 }
Example #7
0
 /**
  * {@inheritdoc}
  *
  * @return Story
  */
 public static function loadFromString(Application $app, $string)
 {
     $ids = explode('_', $string);
     try {
         $story = new \record_adapter($app, $ids[0], $ids[1]);
     } catch (NotFoundHttpException $e) {
         throw new \InvalidArgumentException('Unable to fetch a story from string');
     }
     if (!$story->is_grouping()) {
         throw new \InvalidArgumentException('Unable to fetch a story from string');
     }
     return new static($story);
 }
 public function attachStories(Request $request)
 {
     if (!$request->request->get('stories')) {
         throw new BadRequestHttpException('Missing parameters stories');
     }
     $storyWZRepo = $this->getStoryWZRepository();
     $alreadyFixed = $done = 0;
     $stories = $request->request->get('stories', []);
     $user = $this->getAuthenticatedUser();
     $acl = $this->getAclForUser($user);
     $manager = $this->getEntityManager();
     foreach ($stories as $element) {
         $element = explode('_', $element);
         $story = new \record_adapter($this->app, $element[0], $element[1]);
         if (!$story->isStory()) {
             throw new \Exception('You can only attach stories');
         }
         if (!$acl->has_access_to_base($story->get_base_id())) {
             throw new AccessDeniedHttpException('You do not have access to this Story');
         }
         if ($storyWZRepo->findUserStory($this->app, $user, $story)) {
             $alreadyFixed++;
             continue;
         }
         $storyWZ = new StoryWZ();
         $storyWZ->setUser($user);
         $storyWZ->setRecord($story);
         $manager->persist($storyWZ);
         $done++;
     }
     $manager->flush();
     if ($alreadyFixed === 0) {
         if ($done <= 1) {
             $message = $this->app->trans('%quantity% Story attached to the WorkZone', ['%quantity%' => $done]);
         } else {
             $message = $this->app->trans('%quantity% Stories attached to the WorkZone', ['%quantity%' => $done]);
         }
     } else {
         if ($done <= 1) {
             $message = $this->app->trans('%quantity% Story attached to the WorkZone, %quantity_already% already attached', ['%quantity%' => $done, '%quantity_already%' => $alreadyFixed]);
         } else {
             $message = $this->app->trans('%quantity% Stories attached to the WorkZone, %quantity_already% already attached', ['%quantity%' => $done, '%quantity_already%' => $alreadyFixed]);
         }
     }
     if ($request->getRequestFormat() == 'json') {
         return $this->app->json(['success' => true, 'message' => $message]);
     }
     return $this->app->redirectPath('prod_workzone_show');
 }
 /**
  *
  * @param  Array   $datas
  * @param  boolean $unread
  * @return Array
  */
 public function datas(array $data, $unread)
 {
     $reason = $data['reason'];
     $account_id = $data['account_id'];
     $sbas_id = $data['sbas_id'];
     $rid = $data['record_id'];
     try {
         $account = Bridge_Account::load_account($this->app, $account_id);
         $record = new record_adapter($this->app, $sbas_id, $rid);
     } catch (\Exception $e) {
         return [];
     }
     $ret = ['text' => $this->app->trans("L'upload concernant le record %title% sur le compte %bridge_name% a echoue pour les raisons suivantes : %reason%", ['%title%' => $record->get_title(), '%bridge_name%' => $account->get_api()->get_connector()->get_name(), '%reason%' => $reason]), 'class' => ''];
     return $ret;
 }
Example #10
0
 /**
  * @desc build the result from the specified sql
  * @param  array         $champ all the field from the request displayed in a array
  * @param  string        $sql   the request from buildreq
  * @return $this->result
  */
 protected function buildResult(Application $app, $rs)
 {
     $i = 0;
     $pref = parent::getPreff($app, $this->sbas_id);
     foreach ($rs as $row) {
         if ($this->enable_limit && $i > $this->nb_record) {
             break;
         }
         foreach ($this->champ as $column) {
             $this->formatResult($column, $row[$column], $i);
         }
         if (array_key_exists('record_id', $row)) {
             try {
                 $record = new \record_adapter($app, $this->sbas_id, $row['record_id']);
             } catch (\Exception_Record_AdapterNotFound $e) {
                 continue;
             }
             foreach ($pref as $field) {
                 try {
                     $this->result[$i][$field] = $record->get_caption()->get_field($field)->get_serialized_values();
                 } catch (\Exception $e) {
                     $this->result[$i][$field] = '';
                 }
             }
         }
         $i++;
     }
 }
Example #11
0
 public function testRemoveElementFromStory()
 {
     $story = \record_adapter::createStory(self::$DI['app'], self::$DI['collection']);
     $records = [self::$DI['record_1'], self::$DI['record_2']];
     foreach ($records as $record) {
         $story->appendChild($record);
     }
     $totalRecords = $story->get_children()->get_count();
     $n = 0;
     foreach ($records as $record) {
         /* @var $record \record_adapter */
         $route = sprintf("/prod/story/%s/%s/delete/%s/%s/", $story->get_sbas_id(), $story->get_record_id(), $record->get_sbas_id(), $record->get_record_id());
         if ($n % 2 === 0) {
             $crawler = self::$DI['client']->request('POST', $route);
             $response = self::$DI['client']->getResponse();
             $this->assertEquals(302, $response->getStatusCode());
         } else {
             $crawler = self::$DI['client']->request('POST', $route, [], [], ["HTTP_ACCEPT" => "application/json"]);
             $response = self::$DI['client']->getResponse();
             $this->assertEquals(200, $response->getStatusCode());
             $data = json_decode($response->getContent(), true);
             $this->assertTrue($data['success']);
         }
         $n++;
         $this->assertEquals($totalRecords - $n, $story->get_children()->get_count());
     }
     $story->delete();
 }
Example #12
0
 /**
  *
  * @param Application $app
  * @param int         $sbas_id
  * @param int         $record_id
  * @param boolean     $deny
  * @param int         $order_master_id
  */
 public function __construct(Application $app, $sbas_id, $record_id, $deny, $order_master_id)
 {
     $this->deny = !!$deny;
     $this->order_master_id = $order_master_id;
     parent::__construct($app, $sbas_id, $record_id);
     $this->get_subdefs();
     return $this;
 }
Example #13
0
 public function deliverContent(Request $request, \record_adapter $record, $subdef, $watermark, $stamp, Application $app)
 {
     $file = $record->get_subdef($subdef);
     $pathOut = $file->get_pathfile();
     if ($watermark === true && $file->get_type() === \media_subdef::TYPE_IMAGE) {
         $pathOut = \recordutils_image::watermark($app, $file);
     } elseif ($stamp === true && $file->get_type() === \media_subdef::TYPE_IMAGE) {
         $pathOut = \recordutils_image::stamp($app, $file);
     }
     $log_id = null;
     try {
         $logger = $app['phraseanet.logger']($record->get_databox());
         $log_id = $logger->get_id();
         $referrer = 'NO REFERRER';
         if (isset($_SERVER['HTTP_REFERER'])) {
             $referrer = $_SERVER['HTTP_REFERER'];
         }
         $record->log_view($log_id, $referrer, $app['conf']->get(['main', 'key']));
     } catch (\Exception $e) {
     }
     $disposition = $request->query->get('download') ? DeliverDataInterface::DISPOSITION_ATTACHMENT : DeliverDataInterface::DISPOSITION_INLINE;
     $response = $app['phraseanet.file-serve']->deliverFile($pathOut, $file->get_file(), $disposition, $file->get_mime());
     $response->setPrivate();
     /* @var $response \Symfony\Component\HttpFoundation\Response */
     if ($file->getEtag()) {
         $response->setEtag($file->getEtag());
         $response->setLastModified($file->get_modification_date());
     }
     if (false === $record->is_grouping() && $subdef !== 'document') {
         try {
             if ($file->getDataboxSubdef()->get_class() == \databox_subdef::CLASS_THUMBNAIL) {
                 // default expiration is 5 days
                 $expiration = 60 * 60 * 24 * 5;
                 $response->setExpires(new \DateTime(sprintf('+%d seconds', $expiration)));
                 $response->setMaxAge($expiration);
                 $response->setSharedMaxAge($expiration);
                 $response->setPublic();
             }
         } catch (\Exception $e) {
         }
     }
     $response->isNotModified($request);
     return $response;
 }
Example #14
0
 /**
  * Part of the cache_cacheableInterface
  *
  * @param  string        $option
  * @return caption_field
  */
 public function delete_data_from_cache($option = null)
 {
     $this->value = $this->VocabularyId = $this->VocabularyType = null;
     $this->record->delete_data_from_cache(record_adapter::CACHE_TITLE);
     try {
         $this->record->get_caption()->get_field($this->databox_field->get_name())->delete_data_from_cache();
     } catch (\Exception $e) {
     }
     unset(self::$localCache[$this->get_cache_key($option)]);
 }
Example #15
0
 /**
  * @covers Alchemy\Phrasea\Controller\Prod\Records::renewUrl
  */
 public function testRenewUrl()
 {
     $file = new File(self::$DI['app'], self::$DI['app']['mediavorus']->guess(__DIR__ . '/../../../../../files/cestlafete.jpg'), self::$DI['collection']);
     $record = \record_adapter::createFromFile($file, self::$DI['app']);
     $this->XMLHTTPRequest('POST', '/prod/records/renew-url/', ['lst' => $record->get_serialize_key()]);
     $response = self::$DI['client']->getResponse();
     $datas = (array) json_decode($response->getContent());
     $this->assertTrue(count($datas) > 0);
     $record->delete();
     unset($response, $datas, $record);
 }
Example #16
0
 /**
  *
  * @param Application $app
  * @param integer     $sbas_id
  * @param integer     $record_id
  * @param string      $directory
  * @param integer     $remain_hd
  *
  * @return record_exportElement
  */
 public function __construct(Application $app, $sbas_id, $record_id, $directory = '', $remain_hd = false)
 {
     $this->directory = $directory;
     if ($this->directory) {
         $unicode = new \unicode();
         $this->directory = $unicode->remove_nonazAZ09($this->directory) . '/';
     }
     $this->remain_hd = $remain_hd;
     $this->size = [];
     parent::__construct($app, $sbas_id, $record_id);
     $this->get_actions($remain_hd);
     return $this;
 }
Example #17
0
 public function connect(Application $app)
 {
     $app['controller.datafiles'] = $this;
     $controllers = $app['controllers_factory'];
     $that = $this;
     $controllers->before(function (Request $request) use($app) {
         if (!$app['authentication']->isAuthenticated()) {
             $app->abort(403, sprintf('You are not authorized to access %s', $request->getRequestUri()));
         }
     });
     $controllers->get('/{sbas_id}/{record_id}/{subdef}/', function ($sbas_id, $record_id, $subdef, PhraseaApplication $app) use($that) {
         $databox = $app['phraseanet.appbox']->get_databox((int) $sbas_id);
         $record = new \record_adapter($app, $sbas_id, $record_id);
         $stamp = $watermark = false;
         if ($subdef != 'thumbnail') {
             $all_access = false;
             $subdefStruct = $databox->get_subdef_structure();
             if ($subdefStruct->getSubdefGroup($record->get_type())) {
                 foreach ($subdefStruct->getSubdefGroup($record->get_type()) as $subdefObj) {
                     if ($subdefObj->get_name() == $subdef) {
                         if ($subdefObj->get_class() == 'thumbnail') {
                             $all_access = true;
                         }
                         break;
                     }
                 }
             }
             if (!$record->has_subdef($subdef) || !$record->get_subdef($subdef)->is_physically_present()) {
                 throw new NotFoundHttpException();
             }
             if (!$app['acl']->get($app['authentication']->getUser())->has_access_to_subdef($record, $subdef)) {
                 throw new AccessDeniedHttpException(sprintf('User has not access to subdef %s', $subdef));
             }
             $stamp = false;
             $watermark = !$app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'nowatermark');
             if ($watermark && !$all_access) {
                 $subdef_class = $databox->get_subdef_structure()->get_subdef($record->get_type(), $subdef)->get_class();
                 if ($subdef_class == \databox_subdef::CLASS_PREVIEW && $app['acl']->get($app['authentication']->getUser())->has_preview_grant($record)) {
                     $watermark = false;
                 } elseif ($subdef_class == \databox_subdef::CLASS_DOCUMENT && $app['acl']->get($app['authentication']->getUser())->has_hd_grant($record)) {
                     $watermark = false;
                 }
             }
             if ($watermark && !$all_access) {
                 $repository = $app['EM']->getRepository('Phraseanet:BasketElement');
                 /* @var $repository BasketElementRepository */
                 $ValidationByRecord = $repository->findReceivedValidationElementsByRecord($record, $app['authentication']->getUser());
                 $ReceptionByRecord = $repository->findReceivedElementsByRecord($record, $app['authentication']->getUser());
                 if ($ValidationByRecord && count($ValidationByRecord) > 0) {
                     $watermark = false;
                 } elseif ($ReceptionByRecord && count($ReceptionByRecord) > 0) {
                     $watermark = false;
                 }
             }
         }
         return $that->deliverContent($app['request'], $record, $subdef, $watermark, $stamp, $app);
     })->bind('datafile')->assert('sbas_id', '\\d+')->assert('record_id', '\\d+');
     return $controllers;
 }
Example #18
0
 /**
  *
  * @param  boolean $random
  * @return string
  */
 protected function generate_url()
 {
     if (!$this->is_physically_present()) {
         return;
     }
     if (in_array($this->mime, ['video/mp4'])) {
         $token = p4file::apache_tokenize($this->app['conf'], $this->get_pathfile());
         if ($token) {
             $this->url = $token;
             return;
         }
     }
     $this->url = "/datafiles/" . $this->record->get_sbas_id() . "/" . $this->record->get_record_id() . "/" . $this->get_name() . "/";
     return;
 }
 public function getAction(Request $request, $sbas_id, $record_id, $subdef)
 {
     $databox = $this->appbox->get_databox((int) $sbas_id);
     $record = new \record_adapter($this->app, $sbas_id, $record_id);
     $stamp = $watermark = false;
     if ($subdef != 'thumbnail') {
         $all_access = false;
         $subdefStruct = $databox->get_subdef_structure();
         if ($subdefStruct->getSubdefGroup($record->get_type())) {
             foreach ($subdefStruct->getSubdefGroup($record->get_type()) as $subdefObj) {
                 /** @var \databox_subdef $subdefObj */
                 if ($subdefObj->get_name() == $subdef) {
                     if ($subdefObj->get_class() == 'thumbnail') {
                         $all_access = true;
                     }
                     break;
                 }
             }
         }
         if (!$record->has_subdef($subdef) || !$record->get_subdef($subdef)->is_physically_present()) {
             throw new NotFoundHttpException();
         }
         if (!$this->acl->get($this->authentication->getUser())->has_access_to_subdef($record, $subdef)) {
             throw new AccessDeniedHttpException(sprintf('User has not access to subdef %s', $subdef));
         }
         $stamp = false;
         $watermark = !$this->acl->get($this->authentication->getUser())->has_right_on_base($record->get_base_id(), 'nowatermark');
         if ($watermark && !$all_access) {
             $subdef_class = null;
             try {
                 $subdef_class = $databox->get_subdef_structure()->get_subdef($record->get_type(), $subdef)->get_class();
             } catch (\Exception_Databox_SubdefNotFound $e) {
             }
             if ($subdef_class == \databox_subdef::CLASS_PREVIEW && $this->acl->get($this->authentication->getUser())->has_preview_grant($record)) {
                 $watermark = false;
             } elseif ($subdef_class == \databox_subdef::CLASS_DOCUMENT && $this->acl->get($this->authentication->getUser())->has_hd_grant($record)) {
                 $watermark = false;
             }
         }
         if ($watermark && !$all_access) {
             $repository = $this->app['repo.basket-elements'];
             $ValidationByRecord = $repository->findReceivedValidationElementsByRecord($record, $this->authentication->getUser());
             $ReceptionByRecord = $repository->findReceivedElementsByRecord($record, $this->authentication->getUser());
             if ($ValidationByRecord && count($ValidationByRecord) > 0) {
                 $watermark = false;
             } elseif ($ReceptionByRecord && count($ReceptionByRecord) > 0) {
                 $watermark = false;
             }
         }
     }
     return $this->deliverContent($request, $record, $subdef, $watermark, $stamp);
 }
Example #20
0
 /**
  *
  * @param  boolean $random
  * @return string
  */
 protected function generate_url()
 {
     if (!$this->is_physically_present()) {
         return;
     }
     if ($this->get_name() === 'thumbnail') {
         if ($this->app['phraseanet.static-file-factory']->isStaticFileModeEnabled() && null !== ($url = $this->app['phraseanet.static-file']->getUrl($this->get_pathfile()))) {
             $this->url = $url;
             return;
         }
     }
     if ($this->app['phraseanet.h264-factory']->isH264Enabled() && in_array($this->mime, ['video/mp4'])) {
         if (null !== ($url = $this->app['phraseanet.h264']->getUrl($this->get_pathfile()))) {
             $this->url = $url;
             return;
         }
     }
     $this->url = Url::factory("/datafiles/" . $this->record->get_sbas_id() . "/" . $this->record->get_record_id() . "/" . $this->get_name() . "/");
     return;
 }
Example #21
0
 /**
  * {@inheritdoc}
  */
 public function check(EntityManager $em, File $file)
 {
     $boolean = !count(\record_adapter::get_record_by_uuid($this->app, $file->getCollection()->get_databox(), $file->getUUID()));
     return new Response($boolean, $this);
 }
Example #22
0
 /**
  * Create a new RecordRequest from current request
  *
  * @param  Application    $app
  * @param  Request        $request
  * @param  boolean        $flattenStories
  * @param  array          $rightsColl
  * @param  array          $rightsDatabox
  * @return RecordsRequest|\record_adapter[]
  */
 public static function fromRequest(Application $app, Request $request, $flattenStories = self::FLATTEN_NO, array $rightsColl = [], array $rightsDatabox = [])
 {
     $elements = $received = [];
     $basket = null;
     if ($request->get('ssel')) {
         $basket = $app['converter.basket']->convert($request->get('ssel'));
         $app['acl.basket']->hasAccess($basket, $app->getAuthenticatedUser());
         foreach ($basket->getElements() as $basket_element) {
             $received[$basket_element->getRecord($app)->get_serialize_key()] = $basket_element->getRecord($app);
         }
     } elseif ($request->get('story')) {
         $repository = $app['repo.story-wz'];
         $storyWZ = $repository->findByUserAndId($app, $app->getAuthenticatedUser(), $request->get('story'));
         $received[$storyWZ->getRecord($app)->get_serialize_key()] = $storyWZ->getRecord($app);
     } else {
         foreach (explode(";", $request->get('lst')) as $bas_rec) {
             $basrec = explode('_', $bas_rec);
             if (count($basrec) != 2) {
                 continue;
             }
             try {
                 $record = new \record_adapter($app, (int) $basrec[0], (int) $basrec[1]);
                 $received[$record->get_serialize_key()] = $record;
                 unset($record);
             } catch (NotFoundHttpException $e) {
                 continue;
             }
         }
     }
     $elements = $received;
     $to_remove = [];
     foreach ($elements as $id => $record) {
         if (!$app->getAclForUser($app->getAuthenticatedUser())->has_access_to_record($record)) {
             $to_remove[] = $id;
             continue;
         }
         foreach ($rightsColl as $right) {
             if (!$app->getAclForUser($app->getAuthenticatedUser())->has_right_on_base($record->get_base_id(), $right)) {
                 $to_remove[] = $id;
                 continue;
             }
         }
         foreach ($rightsDatabox as $right) {
             if (!$app->getAclForUser($app->getAuthenticatedUser())->has_right_on_sbas($record->get_sbas_id(), $right)) {
                 $to_remove[] = $id;
                 continue;
             }
         }
     }
     foreach ($to_remove as $id) {
         unset($elements[$id]);
     }
     return new static($elements, new ArrayCollection($received), $basket, $flattenStories);
 }
 /**
  * @param array                $row
  * @param \record_adapter|null $record
  * @return \record_adapter
  */
 private function mapRecordFromResultRow(array $row, \record_adapter $record = null)
 {
     if (null === $record) {
         $record = new \record_adapter($this->app, $this->databox->get_sbas_id(), $row['record_id'], null, false);
     }
     $record->mapFromData($row);
     $record->putInCache();
     return $record;
 }
Example #24
0
 public function has_status_access_to_record(record_adapter $record)
 {
     return 0 === ((bindec($record->get_status()) ^ $this->get_mask_xor($record->get_base_id())) & $this->get_mask_and($record->get_base_id()));
 }
Example #25
0
 /**
  * @covers media_subdef::get_sbas_id
  */
 public function testGet_sbas_id()
 {
     $this->assertEquals(self::$recordonbleu->get_sbas_id(), self::$objectNotPresent->get_record()->get_sbas_id());
     $this->assertEquals(self::$recordonbleu->get_sbas_id(), self::$objectPresent->get_record()->get_sbas_id());
 }
Example #26
0
 protected function injectMetadatas(\record_adapter $record)
 {
     foreach ($record->get_databox()->get_meta_structure()->get_elements() as $field) {
         try {
             $values = $record->get_caption()->get_field($field->get_name())->get_values();
             $value = array_pop($values);
             $meta_id = $value->getId();
         } catch (\Exception $e) {
             $meta_id = null;
         }
         $toupdate[$field->get_id()] = ['meta_id' => $meta_id, 'meta_struct_id' => $field->get_id(), 'value' => 'podom pom pom ' . $field->get_id()];
     }
     $record->set_metadatas($toupdate);
 }
 private function getSqlDateFields(\record_adapter $record)
 {
     $configuration = $this->getConfiguration();
     $sql_fields = [];
     foreach ($configuration['date_fields'] as $field_name) {
         try {
             $value = $record->get_caption()->get_field($field_name)->get_serialized_values();
         } catch (\Exception $e) {
             $value = null;
         }
         if ($value) {
             $date = \DateTime::createFromFormat('Y/m/d H:i:s', $this->app['unicode']->parseDate($value));
             $value = $date->format('U');
         }
         $sql_fields[] = $value ?: '-1';
     }
     return ($sql_fields ? ', ' : '') . implode(',', $sql_fields);
 }
Example #28
0
 /**
  *
  * @param  record_adapter $record
  * @return array
  */
 private function check_record_constraints(record_adapter $record)
 {
     $errors = [];
     if (!$record->get_hd_file() instanceof \SplFileInfo) {
         $errors["file_size"] = $this->translator->trans("Le record n'a pas de fichier physique");
     }
     //Record must rely on real file
     if ($record->get_duration() > self::AUTH_VIDEO_DURATION) {
         $errors["duration"] = $this->translator->trans("La taille maximale d'une video est de %duration% minutes.", ['%duration%' => self::AUTH_VIDEO_DURATION / 60]);
     }
     if ($record->get_technical_infos('size') > self::AUTH_VIDEO_SIZE) {
         $errors["size"] = $this->translator->trans("Le poids maximum d'un fichier est de %size%", ['%size%' => p4string::format_octets(self::AUTH_VIDEO_SIZE)]);
     }
     return $errors;
 }
 private function generateRecord(\Pimple $DI)
 {
     foreach (range(1, 7) as $i) {
         $file = new File($this->container, $this->container['mediavorus']->guess(__DIR__ . '/../../../../../tests/files/test001.jpg'), $DI['coll']);
         $record = \record_adapter::createFromFile($file, $this->container);
         $this->container['subdef.generator']->generateSubdefs($record);
         $DI['record_' . $i] = $record;
     }
     $media = $this->container['mediavorus']->guess($this->container['root.path'] . '/tests/files/cestlafete.jpg');
     foreach (range(1, 3) as $i) {
         $story = \record_adapter::createStory($this->container, $DI['coll']);
         if ($i < 3) {
             $this->container['subdef.substituer']->substitute($story, 'preview', $media);
             $this->container['subdef.substituer']->substitute($story, 'thumbnail', $media);
         }
         $DI['record_story_' . $i] = $story;
     }
 }
Example #30
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;
 }