Beispiel #1
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $conn = $appbox->get_connection();
     try {
         //get all old lazaret file & transform them to LazaretFile object
         $sql = 'SELECT * FROM lazaret';
         $stmt = $conn->prepare($sql);
         $stmt->execute();
         $rs = $stmt->fetchAll();
         $stmt->closeCursor();
     } catch (DBALException $e) {
         // table not found
         if ($e->getCode() == '42S02') {
         }
         return;
     }
     //order matters for foreign keys constraints
     //truncate all altered tables
     $this->truncateTable($app['EM'], 'Alchemy\\Phrasea\\Model\\Entities\\LazaretAttribute');
     $this->truncateTable($app['EM'], 'Alchemy\\Phrasea\\Model\\Entities\\LazaretCheck');
     $this->truncateTable($app['EM'], 'Alchemy\\Phrasea\\Model\\Entities\\LazaretFile');
     $this->truncateTable($app['EM'], 'Alchemy\\Phrasea\\Model\\Entities\\LazaretSession');
     $i = 0;
     foreach ($rs as $row) {
         $filePath = $app['tmp.lazaret.path'] . '/' . $row['filepath'];
         if (null === ($user = $this->loadUser($app['EM'], $row['usr_id']))) {
             continue;
         }
         if (file_exists($filePath)) {
             $spec = new ImageSpec();
             $spec->setResizeMode(ImageSpec::RESIZE_MODE_INBOUND_FIXEDRATIO);
             $spec->setDimensions(375, 275);
             $thumbPath = $app['tmp.lazaret.path'] . '/' . sprintf("thumb_%s", $row['filepath']);
             try {
                 $app['media-alchemyst']->turnInto($filePath, $thumbPath, $spec);
             } catch (MediaAlchemystException $e) {
             }
             $media = $app['mediavorus']->guess($filePath);
             $collection = \collection::get_from_base_id($app, $row['base_id']);
             $borderFile = new \Alchemy\Phrasea\Border\File($app, $media, $collection);
             $lazaretSession = new LazaretSession();
             $lazaretSession->setUser($user);
             $lazaretFile = new LazaretFile();
             $lazaretFile->setBaseId($row['base_id']);
             if (null === $row['uuid']) {
                 $uuid = $borderFile->getUUID(true);
                 $lazaretFile->setUuid($uuid);
             } else {
                 $lazaretFile->setUuid($row['uuid']);
             }
             if (null === $row['sha256']) {
                 $sha256 = $media->getHash('sha256');
                 $lazaretFile->setSha256($sha256);
             } else {
                 $lazaretFile->setSha256($row['sha256']);
             }
             $lazaretFile->setOriginalName($row['filename']);
             $lazaretFile->setFilename($row['filepath']);
             $lazaretFile->setThumbFilename(pathinfo($thumbPath), PATHINFO_BASENAME);
             $lazaretFile->setCreated(new \DateTime($row['created_on']));
             $lazaretFile->setSession($lazaretSession);
             $app['EM']->persist($lazaretFile);
             if (0 === ++$i % 100) {
                 $app['EM']->flush();
                 $app['EM']->clear();
             }
         }
     }
     $app['EM']->flush();
     $app['EM']->clear();
     $stmt->closeCursor();
     return true;
 }
Beispiel #2
0
 private function list_lazaret_file(Application $app, LazaretFile $file)
 {
     $checks = array_map(function ($checker) use($app) {
         return $checker->getMessage($app['translator']);
     }, iterator_to_array($file->getChecks()));
     $usr_id = $user = null;
     if ($file->getSession()->getUser()) {
         $user = $file->getSession()->getUser();
         $usr_id = $user->getId();
     }
     $session = ['id' => $file->getSession()->getId(), 'usr_id' => $usr_id, 'user' => $user ? $this->list_user($user) : null];
     return ['id' => $file->getId(), 'quarantine_session' => $session, 'base_id' => $file->getBaseId(), 'original_name' => $file->getOriginalName(), 'sha256' => $file->getSha256(), 'uuid' => $file->getUuid(), 'forced' => $file->getForced(), 'checks' => $file->getForced() ? [] : $checks, 'created_on' => $file->getCreated()->format(DATE_ATOM), 'updated_on' => $file->getUpdated()->format(DATE_ATOM)];
 }
 /**
  * {@inheritDoc}
  */
 public function getRecordsToSubstitute(\Alchemy\Phrasea\Application $app)
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getRecordsToSubstitute', array($app));
     return parent::getRecordsToSubstitute($app);
 }
Beispiel #4
0
 protected function denyLazaretFile(Application $app, LazaretFile $lazaretFile)
 {
     $lazaretFileName = $app['root.path'] . '/tmp/lazaret/' . $lazaretFile->getFilename();
     $lazaretThumbFileName = $app['root.path'] . '/tmp/lazaret/' . $lazaretFile->getThumbFilename();
     $app['EM']->remove($lazaretFile);
     $app['EM']->flush();
     try {
         $app['filesystem']->remove([$lazaretFileName, $lazaretThumbFileName]);
     } catch (IOException $e) {
     }
     return $this;
 }
Beispiel #5
0
 /**
  * Send a package file to lazaret
  *
  * @param File           $file    The package file
  * @param Visa           $visa    The visa related to the package file
  * @param LazaretSession $session The current LazaretSession
  * @param Boolean        $forced  True if the file has been forced to quarantine
  *
  * @return LazaretFile
  */
 protected function createLazaret(File $file, Visa $visa, LazaretSession $session, $forced)
 {
     $date = new \DateTime();
     $file->addAttribute(new MetadataAttr(new Metadata(new TfQuarantine(), new MonoValue($date->format('Y/m/d H:i:s')))));
     $lazaretPathname = $this->bookLazaretPathfile($file->getOriginalName());
     $lazaretPathnameThumb = $this->bookLazaretPathfile($file->getOriginalName(), 'thumb');
     $this->app['filesystem']->copy($file->getFile()->getRealPath(), $lazaretPathname, true);
     $spec = new ImageSpec();
     $spec->setResizeMode(ImageSpec::RESIZE_MODE_INBOUND_FIXEDRATIO);
     $spec->setDimensions(375, 275);
     try {
         $this->app['media-alchemyst']->turnInto($file->getFile()->getPathname(), $lazaretPathnameThumb, $spec);
     } catch (MediaAlchemystException $e) {
     }
     $lazaretFile = new LazaretFile();
     $lazaretFile->setBaseId($file->getCollection()->get_base_id());
     $lazaretFile->setSha256($file->getSha256());
     $lazaretFile->setUuid($file->getUUID());
     $lazaretFile->setOriginalName($file->getOriginalName());
     $lazaretFile->setForced($forced);
     $lazaretFile->setFilename(pathinfo($lazaretPathname, PATHINFO_BASENAME));
     $lazaretFile->setThumbFileName(pathinfo($lazaretPathnameThumb, PATHINFO_BASENAME));
     $lazaretFile->setSession($session);
     $this->app['orm.em']->persist($lazaretFile);
     foreach ($file->getAttributes() as $fileAttribute) {
         $attribute = new LazaretAttribute();
         $attribute->setName($fileAttribute->getName());
         $attribute->setValue($fileAttribute->asString());
         $attribute->setLazaretFile($lazaretFile);
         $lazaretFile->addAttribute($attribute);
         $this->app['orm.em']->persist($attribute);
     }
     foreach ($visa->getResponses() as $response) {
         if (!$response->isOk()) {
             $check = new LazaretCheck();
             $check->setCheckClassname(get_class($response->getChecker()));
             $check->setLazaretFile($lazaretFile);
             $lazaretFile->addCheck($check);
             $this->app['orm.em']->persist($check);
         }
     }
     $this->app['orm.em']->flush();
     return $lazaretFile;
 }
Beispiel #6
0
 private function listLazaretFile(LazaretFile $file)
 {
     $manager = $this->getBorderManager();
     /** @var TranslatorInterface $translator */
     $translator = $this->app['translator'];
     $checks = array_map(function (LazaretCheck $checker) use($manager, $translator) {
         $checkerFQCN = $checker->getCheckClassname();
         return $manager->getCheckerFromFQCN($checkerFQCN)->getMessage($translator);
     }, iterator_to_array($file->getChecks()));
     $usr_id = $user = null;
     if ($file->getSession()->getUser()) {
         $user = $file->getSession()->getUser();
         $usr_id = $user->getId();
     }
     $session = ['id' => $file->getSession()->getId(), 'usr_id' => $usr_id, 'user' => $user ? $this->listUser($user) : null];
     return ['id' => $file->getId(), 'quarantine_session' => $session, 'base_id' => $file->getBaseId(), 'original_name' => $file->getOriginalName(), 'sha256' => $file->getSha256(), 'uuid' => $file->getUuid(), 'forced' => $file->getForced(), 'checks' => $file->getForced() ? [] : $checks, 'created_on' => $file->getCreated()->format(DATE_ATOM), 'updated_on' => $file->getUpdated()->format(DATE_ATOM)];
 }
Beispiel #7
0
 protected function list_lazaret_file(LazaretFile $file)
 {
     $checks = [];
     if ($file->getChecks()) {
         foreach ($file->getChecks() as $checker) {
             $checks[] = $checker->getMessage($this->app['translator']);
         }
     }
     $usr_id = null;
     if ($file->getSession()->getUser()) {
         $usr_id = $file->getSession()->getUser()->getId();
     }
     $session = ['id' => $file->getSession()->getId(), 'usr_id' => $usr_id];
     return ['id' => $file->getId(), 'quarantine_session' => $session, 'base_id' => $file->getBaseId(), 'original_name' => $file->getOriginalName(), 'sha256' => $file->getSha256(), 'uuid' => $file->getUuid(), 'forced' => $file->getForced(), 'checks' => $file->getForced() ? [] : $checks, 'created_on' => $file->getCreated()->format(DATE_ATOM), 'updated_on' => $file->getUpdated()->format(DATE_ATOM)];
 }
 protected function denyLazaretFile(LazaretFile $lazaretFile)
 {
     $path = $this->app['tmp.lazaret.path'];
     $lazaretFileName = $path . '/' . $lazaretFile->getFilename();
     $lazaretThumbFileName = $path . '/' . $lazaretFile->getThumbFilename();
     $manager = $this->getEntityManager();
     $manager->remove($lazaretFile);
     $manager->flush();
     try {
         $this->getFilesystem()->remove([$lazaretFileName, $lazaretThumbFileName]);
     } catch (IOException $e) {
     }
     return $this;
 }