コード例 #1
0
ファイル: subdef.php プロジェクト: romainneutron/Phraseanet
 /**
  * Build Image Subdef object depending the SimpleXMLElement
  *
  * @param  SimpleXMLElement                    $sd
  * @return \Alchemy\Phrasea\Media\Subdef\Video
  */
 protected function buildImageSubdef(SimpleXMLElement $sd)
 {
     $image = new Image($this->translator);
     if ($sd->size) {
         $image->setOptionValue(Image::OPTION_SIZE, (int) $sd->size);
     }
     if ($sd->quality) {
         $image->setOptionValue(Image::OPTION_QUALITY, (int) $sd->quality);
     }
     if ($sd->strip) {
         $image->setOptionValue(Image::OPTION_STRIP, p4field::isyes($sd->strip));
     }
     if ($sd->dpi) {
         $image->setOptionValue(Image::OPTION_RESOLUTION, (int) $sd->dpi);
     }
     return $image;
 }
コード例 #2
0
ファイル: ArchiveJob.php プロジェクト: luisbrito/Phraseanet
 /**
  * {@inheritdoc}
  */
 protected function doJob(JobData $data)
 {
     $app = $data->getApplication();
     $task = $data->getTask();
     $settings = simplexml_load_string($task->getSettings());
     $baseId = (string) $settings->base_id;
     $sbasId = \phrasea::sbasFromBas($app, $baseId);
     if (!$sbasId) {
         throw new RuntimeException('Invalid collection base_id.');
     }
     $databox = $app->findDataboxById($sbasId);
     $TColls = [];
     $collection = null;
     foreach ($databox->get_collections() as $coll) {
         $TColls['c' . $coll->get_coll_id()] = $coll->get_coll_id();
         if ($baseId == $coll->get_base_id()) {
             $collection = $coll;
         }
     }
     $server_coll_id = $collection->get_coll_id();
     // mask(s) of accepted files
     $tmask = [];
     $tmaskgrp = [];
     $cold = min(max((int) $settings->cold, self::MINCOLD), self::MAXCOLD);
     $stat0 = $stat1 = "0";
     if (false !== ($sxBasePrefs = simplexml_load_string($collection->get_prefs()))) {
         if ($sxBasePrefs->status) {
             $stat0 = (string) $sxBasePrefs->status;
         }
     }
     if ($settings->status) {
         $stat1 = (string) $settings->status;
     }
     if (!$stat0) {
         $stat0 = '0';
     }
     if (!$stat1) {
         $stat1 = '0';
     }
     // check the data-repository exists
     $pathhd = (string) $settings->path;
     if ($pathhd) {
         $app['filesystem']->mkdir($pathhd, 0750);
     }
     // load masks
     if ($settings->files && $settings->files->file) {
         foreach ($settings->files->file as $ft) {
             $tmask[] = ["mask" => (string) $ft["mask"], "caption" => (string) $ft["caption"], "accept" => (string) $ft["accept"]];
         }
     }
     if ($settings->files && $settings->files->grouping) {
         foreach ($settings->files->grouping as $ft) {
             $tmaskgrp[] = ["mask" => (string) $ft["mask"], "caption" => (string) $ft["caption"], "representation" => (string) $ft["representation"], "accept" => (string) $ft["accept"]];
         }
     }
     if (count($tmask) == 0) {
         // no mask defined : accept all kind of files
         $tmask[] = ["mask" => ".*", "caption" => "", "accept" => ""];
     }
     while ($this->isStarted()) {
         $path_in = (string) $settings->hotfolder;
         if (!@is_dir($path_in)) {
             throw new RuntimeException(sprintf('Error : missing hotfolder \'%s\', stopping.', $path_in));
         }
         // copy settings to task, so it's easier to get later
         $moveArchived = \p4field::isyes($settings->move_archived);
         $moveError = \p4field::isyes($settings->move_error);
         clearstatcache();
         if (false === $app['filesystem']->exists($path_in . "/.phrasea.xml")) {
             throw new RuntimeException(sprintf('NO .phrasea.xml AT ROOT \'%s\' !', $path_in));
         }
         $path_archived = $path_error = null;
         if ($moveArchived) {
             $path_archived = $path_in . '_archived';
             $app['filesystem']->mkdir($path_archived, 0755);
         }
         if ($moveError) {
             $path_error = $path_in . '_error';
             $app['filesystem']->mkdir($path_error, 0755);
         }
         $dom = new \DOMDocument();
         $dom->formatOutput = true;
         $root = $dom->appendChild($dom->createElement('root'));
         $nnew = $this->listFilesPhase1($app, $dom, $root, $path_in, $server_coll_id, 0, $TColls);
         if ($app['debug']) {
             $this->log('debug', "=========== listFilesPhase1 ========== (returned " . $nnew . ")\n" . $dom->saveXML());
         }
         if (!$this->isStarted()) {
             return;
         }
         // wait for files to be cold
         $this->pause($cold);
         if (!$this->isStarted()) {
             return;
         }
         $this->listFilesPhase2($app, $dom, $root, $path_in, 0);
         if ($app['debug']) {
             $this->log('debug', "=========== listFilesPhase2 ========== : \n" . $dom->saveXML());
         }
         if (!$this->isStarted()) {
             return;
         }
         $this->makePairs($dom, $root, $path_in, $path_archived, $path_error, false, 0, $tmask, $tmaskgrp);
         if ($app['debug']) {
             $this->log('debug', "=========== makePairs ========== : \n" . $dom->saveXML());
         }
         $r = $this->removeBadGroups($app, $dom, $root, $path_in, $path_archived, $path_error, 0, $moveError);
         if ($app['debug']) {
             $this->log('debug', "=========== removeBadGroups ========== (returned " . ((bool) $r ? 'true' : 'false') . ") : \n" . $dom->saveXML());
         }
         $this->archive($app, $databox, $dom, $root, $path_in, $path_archived, $path_error, 0, $moveError, $moveArchived, $stat0, $stat1);
         if ($app['debug']) {
             $this->log('debug', "=========== archive ========== : \n" . $dom->saveXML());
         }
         if (!$this->isStarted()) {
             return;
         }
         $this->bubbleResults($dom, $root, $path_in, 0, \p4field::isyes($settings->copy_spe));
         if ($app['debug']) {
             $this->log('debug', "=========== bubbleResults ========== : \n" . $dom->saveXML());
         }
         $moved = $this->moveFiles($app, $dom, $root, $path_in, $path_archived, $path_error, 0, $moveArchived, $moveError);
         if ($app['debug']) {
             $this->log('debug', "=========== moveFiles ========== (returned " . ($moved ? 'true' : 'false') . ") : \n" . $dom->saveXML());
         }
     }
 }
コード例 #3
0
ファイル: SubdefsJob.php プロジェクト: luisbrito/Phraseanet
 /**
  * {@inheritdoc}
  */
 protected function doJob(JobData $data)
 {
     $app = $data->getApplication();
     $settings = simplexml_load_string($data->getTask()->getSettings());
     $thumbnailExtraction = (bool) (string) $settings->embedded;
     Image2Image::$lookForEmbeddedPreview = $thumbnailExtraction;
     $sqlqmark = array();
     $sqlparms = array();
     foreach (array('image', 'video', 'audio', 'document', 'flash', 'unknown') as $type) {
         if (!isset($settings->{"type_" . $type}) || !\p4field::isno($settings->{"type_" . $type})) {
             $sqlqmark[] = '?';
             $sqlparms[] = $type;
         }
     }
     if (count($sqlqmark) == 0) {
         return;
     }
     foreach ($app->getDataboxes() as $databox) {
         if (!$this->isStarted()) {
             break;
         }
         if (count($settings->xpath("sbas[text()=" . $databox->get_sbas_id() . "]")) == 0) {
             continue;
         }
         $conn = $databox->get_connection();
         $sql = 'SELECT coll_id, record_id FROM record' . ' WHERE jeton & ' . PhraseaTokens::MAKE_SUBDEF . ' > 0' . ' AND type IN(' . implode(',', $sqlqmark) . ')' . ' ORDER BY record_id DESC LIMIT 0, 30';
         $stmt = $conn->prepare($sql);
         $stmt->execute($sqlparms);
         $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         $i = 0;
         foreach ($rs as $row) {
             if (!$this->isStarted()) {
                 break;
             }
             $this->log('info', sprintf("Generate subdefs for : sbasid=%s / databox=%s / recordid=%s ", $databox->get_sbas_id(), $databox->get_dbname(), $row['record_id']));
             try {
                 $record = $databox->get_record($row['record_id']);
                 /** @var SubdefGenerator $sg */
                 $sg = $app['subdef.generator'];
                 $sg->generateSubdefs($record);
             } catch (\Exception $e) {
                 $this->log('warning', sprintf("Generate subdefs failed for : sbasid=%s / databox=%s / recordid=%s : %s", $databox->get_sbas_id(), $databox->get_dbname(), $row['record_id'], $e->getMessage()));
             }
             $sql = 'UPDATE record' . ' SET jeton=(jeton & ~(:flag)), moddate=NOW()' . ' WHERE record_id=:record_id';
             $stmt = $conn->prepare($sql);
             $stmt->execute([':record_id' => $row['record_id'], ':flag' => PhraseaTokens::MAKE_SUBDEF]);
             $stmt->closeCursor();
             // rewrite metadata
             $sql = 'UPDATE record' . ' SET jeton=(jeton | :flag)' . ' WHERE record_id=:record_id';
             $stmt = $conn->prepare($sql);
             $stmt->execute([':record_id' => $row['record_id'], ':flag' => PhraseaTokens::WRITE_META_SUBDEF | PhraseaTokens::TO_INDEX]);
             $stmt->closeCursor();
             unset($record);
             $i++;
             if ($i % 5 === 0) {
                 $app['elasticsearch.indexer']->flushQueue();
             }
         }
     }
     $app['elasticsearch.indexer']->flushQueue();
 }
コード例 #4
0
 private function getCommandline($indexerPath, Application $app, Task $task)
 {
     $cmd = [$indexerPath, '-o'];
     $settings = simplexml_load_string($task->getSettings());
     $host = trim($settings->host);
     $port = (int) $settings->port;
     $base = trim($settings->base);
     $user = trim($settings->user);
     $password = trim($settings->password);
     $socket = (int) $settings->socket;
     $charset = trim($settings->charset);
     $stem = trim($settings->stem);
     $sortempty = trim($settings->sortempty);
     $debugmask = (int) $settings->debugmask;
     $nolog = \p4field::isyes(trim($settings->nolog));
     $winsvc_run = \p4field::isyes(trim($settings->winsvc_run));
     if ('' !== $host) {
         $cmd[] = '--host';
         $cmd[] = $host;
     }
     if (0 < $port) {
         $cmd[] = '--port';
         $cmd[] = $port;
     }
     if ('' !== $base) {
         $cmd[] = '--base';
         $cmd[] = $base;
     }
     if ('' !== $user) {
         $cmd[] = '--user';
         $cmd[] = $user;
     }
     if ('' !== $password) {
         $cmd[] = '--password';
         $cmd[] = $password;
     }
     if (0 < $socket) {
         $cmd[] = '--socket';
         $cmd[] = $socket;
     }
     if ('' !== $charset) {
         $cmd[] = '--default-character-set';
         $cmd[] = $charset;
     }
     if ('' !== $stem) {
         $cmd[] = '--stem';
         $cmd[] = $stem;
     }
     if ('' !== $sortempty) {
         $cmd[] = '--sort-empty';
         $cmd[] = $sortempty;
     }
     if (0 < $debugmask) {
         $cmd[] = '--debug';
         $cmd[] = $debugmask;
     }
     if ($nolog) {
         $cmd[] = '--nolog';
     }
     if ($winsvc_run) {
         $cmd[] = '--run';
     }
     return $cmd;
 }
コード例 #5
0
ファイル: V1Controller.php プロジェクト: luisbrito/Phraseanet
 public function substituteAction(Request $request)
 {
     $ret = array();
     if (count($request->files->get('file')) == 0) {
         return $this->getBadRequestAction($request, 'Missing file parameter');
     }
     $file = $request->files->get('file');
     if (!$file instanceof UploadedFile) {
         return $this->getBadRequestAction($request, 'You can upload one file at time');
     }
     if (!$file->isValid()) {
         return $this->getBadRequestAction($request, 'Data corrupted, please try again');
     }
     if (!$request->get('databox_id')) {
         $this->getBadRequestAction($request, 'Missing databox_id parameter');
     }
     if (!$request->get('record_id')) {
         $this->getBadRequestAction($request, 'Missing record_id parameter');
     }
     if (!$request->get('name')) {
         return $this->getBadRequestAction($request, 'Missing name parameter');
     }
     $media = $this->app->getMediaFromUri($file->getPathname());
     $record = $this->findDataboxById($request->get('databox_id'))->get_record($request->get('record_id'));
     $base_id = $record->getBaseId();
     $collection = \collection::get_from_base_id($this->app, $base_id);
     if (!$this->getAclForUser()->has_right_on_base($base_id, 'canaddrecord')) {
         return Result::create($request, 403, sprintf('You do not have access to collection %s', $collection->get_label($this->app['locale.I18n'])));
     }
     $adapt = $request->get('adapt') === null || !\p4field::isno($request->get('adapt'));
     $ret['adapt'] = $adapt;
     $record->substitute_subdef($request->get('name'), $media, $this->app, $adapt);
     foreach ($record->get_embedable_medias() as $name => $media) {
         if ($name == $request->get('name') && null !== ($subdef = $this->listEmbeddableMedia($request, $record, $media))) {
             $ret[] = $subdef;
         }
     }
     return Result::create($request, $ret)->createResponse();
 }