release() публичный статический метод

public static release ( string $key )
$key string
Пример #1
0
 /**
  *
  */
 public function generate()
 {
     $errorImage = PIMCORE_PATH . '/static6/img/filetype-not-supported.png';
     $deferred = false;
     $generated = false;
     if (!$this->asset) {
         $this->filesystemPath = $errorImage;
     } elseif (!$this->filesystemPath) {
         $cs = $this->asset->getCustomSetting("image_thumbnail_time");
         $im = $this->asset->getCustomSetting("image_thumbnail_asset");
         if ($im || $this->imageAsset) {
             if ($this->imageAsset) {
                 $im = $this->imageAsset;
             } else {
                 $im = Model\Asset::getById($im);
             }
             if ($im instanceof Image) {
                 $imageThumbnail = $im->getThumbnail($this->getConfig());
                 $this->filesystemPath = $imageThumbnail->getFileSystemPath();
             }
         }
         if (!$this->filesystemPath) {
             $timeOffset = $this->timeOffset;
             if (!$this->timeOffset && $cs) {
                 $timeOffset = $cs;
             }
             // fallback
             if (!$timeOffset) {
                 $timeOffset = ceil($this->asset->getDuration() / 3);
             }
             $converter = \Pimcore\Video::getInstance();
             $converter->load($this->asset->getFileSystemPath());
             $path = PIMCORE_TEMPORARY_DIRECTORY . "/video-image-cache/video_" . $this->asset->getId() . "__thumbnail_" . $timeOffset . ".png";
             if (!is_dir(dirname($path))) {
                 File::mkdir(dirname($path));
             }
             if (!is_file($path)) {
                 $lockKey = "video_image_thumbnail_" . $this->asset->getId() . "_" . $timeOffset;
                 Model\Tool\Lock::acquire($lockKey);
                 // after we got the lock, check again if the image exists in the meantime - if not - generate it
                 if (!is_file($path)) {
                     $converter->saveImage($path, $timeOffset);
                     $generated = true;
                 }
                 Model\Tool\Lock::release($lockKey);
             }
             if ($this->getConfig()) {
                 $this->getConfig()->setFilenameSuffix("time-" . $timeOffset);
                 try {
                     $path = Image\Thumbnail\Processor::process($this->asset, $this->getConfig(), $path, $deferred, true, $generated);
                 } catch (\Exception $e) {
                     Logger::error("Couldn't create image-thumbnail of video " . $this->asset->getRealFullPath());
                     Logger::error($e);
                     $path = $errorImage;
                 }
             }
             $this->filesystemPath = $path;
         }
         \Pimcore::getEventManager()->trigger("asset.video.image-thumbnail", $this, ["deferred" => $deferred, "generated" => $generated]);
     }
 }
Пример #2
0
 /**
  * delete lock file
  * @return void
  */
 public function unlock()
 {
     Tool\Lock::release($this->getLockKey());
 }
Пример #3
0
 /**
  * @param $processId
  */
 public static function execute($processId)
 {
     $instance = new self();
     $instance->setProcessId($processId);
     $instanceItem = TmpStore::get($instance->getJobStoreId($processId));
     $instance = $instanceItem->getData();
     $formats = [];
     $conversionStatus = "finished";
     // check if there is already a transcoding process running, wait if so ...
     Model\Tool\Lock::acquire("video-transcoding", 7200, 10);
     // expires after 2 hrs, refreshes every 10 secs
     $asset = Model\Asset::getById($instance->getAssetId());
     // start converting
     foreach ($instance->queue as $converter) {
         try {
             Logger::info("start video " . $converter->getFormat() . " to " . $converter->getDestinationFile());
             $success = $converter->save();
             Logger::info("finished video " . $converter->getFormat() . " to " . $converter->getDestinationFile());
             File::rename($converter->getDestinationFile(), $converter->getStorageFile());
             // set proper permissions
             @chmod($converter->getStorageFile(), File::getDefaultMode());
             if ($success) {
                 $formats[$converter->getFormat()] = str_replace($asset->getVideoThumbnailSavePath(), "", $converter->getStorageFile());
             } else {
                 $conversionStatus = "error";
             }
             $converter->destroy();
         } catch (\Exception $e) {
             Logger::error($e);
         }
     }
     Model\Tool\Lock::release("video-transcoding");
     if ($asset) {
         $customSetting = $asset->getCustomSetting("thumbnails");
         $customSetting = is_array($customSetting) ? $customSetting : [];
         if (array_key_exists($instance->getConfig()->getName(), $customSetting) && array_key_exists("formats", $customSetting[$instance->getConfig()->getName()]) && is_array($customSetting[$instance->getConfig()->getName()]["formats"])) {
             $formats = array_merge($customSetting[$instance->getConfig()->getName()]["formats"], $formats);
         }
         $customSetting[$instance->getConfig()->getName()] = ["status" => $conversionStatus, "formats" => $formats];
         $asset->setCustomSetting("thumbnails", $customSetting);
         $asset->save();
     }
     TmpStore::delete($instance->getJobStoreId());
 }
Пример #4
0
 /**
  * @param null $path
  * @return null|string|void
  * @throws \Exception
  */
 public function getPdf($path = null)
 {
     if ($path) {
         $path = $this->preparePath($path);
     }
     $pdfPath = null;
     if (!$path && $this->path) {
         $path = $this->path;
     }
     try {
         // if the document is already an PDF, delegate the call directly to parent::getPdf() (Ghostscript)
         $pdfPath = parent::getPdf($path);
         return $pdfPath;
     } catch (\Exception $e) {
         // nothing to do, delegate to libreoffice
     }
     $pdfFile = PIMCORE_TEMPORARY_DIRECTORY . "/document-pdf-cache/document_" . md5($path . filemtime($path)) . "__libreoffice.pdf";
     if (!is_dir(dirname($pdfFile))) {
         File::mkdir(dirname($pdfFile));
     }
     $lockKey = "soffice";
     if (!file_exists($pdfFile)) {
         // a list of all available filters is here:
         // http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters
         $cmd = self::getLibreOfficeCli() . " --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir " . escapeshellarg(PIMCORE_SYSTEM_TEMP_DIRECTORY) . " " . escapeshellarg($path);
         Model\Tool\Lock::acquire($lockKey);
         // avoid parallel conversions
         $out = Console::exec($cmd, PIMCORE_LOG_DIRECTORY . "/libreoffice-pdf-convert.log", 240);
         Model\Tool\Lock::release($lockKey);
         Logger::debug("LibreOffice Output was: " . $out);
         $tmpName = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/" . preg_replace("/\\." . File::getFileExtension($path) . "\$/", ".pdf", basename($path));
         if (file_exists($tmpName)) {
             File::rename($tmpName, $pdfFile);
             $pdfPath = $pdfFile;
         } else {
             $message = "Couldn't convert document to PDF: " . $path . " with the command: '" . $cmd . "'";
             Logger::error($message);
             throw new \Exception($message);
         }
     } else {
         $pdfPath = $pdfFile;
     }
     return $pdfPath;
 }
Пример #5
0
 /**
  * checks if there are some entries in the store table left for indexing
  * if not -> re-index is finished
  *
  * @throws Exception
  */
 protected function completeReindexMode()
 {
     if ($this->isInReindexMode()) {
         // check if all entries are updated
         $query = "SELECT count(*) FROM " . $this->getStoreTableName() . " WHERE tenant = ? AND (in_preparation_queue = 1 OR crc_current != crc_index);";
         $result = $this->db->fetchOne($query, array($this->name));
         if ($result == 0) {
             //no entries left --> re-index is finished
             $this->switchIndexAlias();
             Tool\Lock::release(self::REINDEX_LOCK_KEY);
         } else {
             //there are entries left --> re-index not finished yet
             Logger::info("Re-Indexing is not finished, still re-indexing for version number: " . $this->indexVersion);
         }
     }
 }
Пример #6
0
 /**
  * @param $thumbnailName
  * @param int $page
  * @param bool $deferred $deferred deferred means that the image will be generated on-the-fly (details see below)
  * @return mixed|string
  */
 public function getImageThumbnail($thumbnailName, $page = 1, $deferred = false)
 {
     // just 4 testing
     //$this->clearThumbnails(true);
     if (!\Pimcore\Document::isAvailable()) {
         \Logger::error("Couldn't create image-thumbnail of document " . $this->getFullPath() . " no document adapter is available");
         return "/pimcore/static/img/filetype-not-supported.png";
     }
     $thumbnail = Image\Thumbnail\Config::getByAutoDetect($thumbnailName);
     $thumbnail->setName("document_" . $thumbnail->getName() . "-" . $page);
     try {
         if (!$deferred) {
             $converter = \Pimcore\Document::getInstance();
             $converter->load($this->getFileSystemPath());
             $path = PIMCORE_TEMPORARY_DIRECTORY . "/document-image-cache/document_" . $this->getId() . "__thumbnail_" . $page . ".png";
             if (!is_dir(dirname($path))) {
                 \Pimcore\File::mkdir(dirname($path));
             }
             $lockKey = "document-thumbnail-" . $this->getId() . "-" . $page;
             if (!is_file($path) && !Model\Tool\Lock::isLocked($lockKey)) {
                 Model\Tool\Lock::lock($lockKey);
                 $converter->saveImage($path, $page);
                 Model\Tool\Lock::release($lockKey);
             } else {
                 if (Model\Tool\Lock::isLocked($lockKey)) {
                     return "/pimcore/static/img/please-wait.png";
                 }
             }
         }
         if ($thumbnail) {
             $path = Image\Thumbnail\Processor::process($this, $thumbnail, $path, $deferred);
         }
         return preg_replace("@^" . preg_quote(PIMCORE_DOCUMENT_ROOT) . "@", "", $path);
     } catch (\Exception $e) {
         \Logger::error("Couldn't create image-thumbnail of document " . $this->getFullPath());
         \Logger::error($e);
     }
     return "/pimcore/static/img/filetype-not-supported.png";
 }
Пример #7
0
 /**
  *
  */
 public function generate()
 {
     $errorImage = PIMCORE_PATH . '/static6/img/filetype-not-supported.png';
     $generated = false;
     if (!$this->asset) {
         $this->filesystemPath = $errorImage;
     } elseif (!$this->filesystemPath) {
         $config = $this->getConfig();
         $config->setName("document_" . $config->getName() . "-" . $this->page);
         try {
             $path = null;
             if (!$this->deferred) {
                 $converter = \Pimcore\Document::getInstance();
                 $converter->load($this->asset->getFileSystemPath());
                 $path = PIMCORE_TEMPORARY_DIRECTORY . "/document-image-cache/document_" . $this->asset->getId() . "__thumbnail_" . $this->page . ".png";
                 if (!is_dir(dirname($path))) {
                     \Pimcore\File::mkdir(dirname($path));
                 }
                 $lockKey = "document-thumbnail-" . $this->asset->getId() . "-" . $this->page;
                 if (!is_file($path) && !Model\Tool\Lock::isLocked($lockKey)) {
                     Model\Tool\Lock::lock($lockKey);
                     $converter->saveImage($path, $this->page);
                     $generated = true;
                     Model\Tool\Lock::release($lockKey);
                 } elseif (Model\Tool\Lock::isLocked($lockKey)) {
                     return "/pimcore/static6/img/please-wait.png";
                 }
             }
             if ($config) {
                 $path = Image\Thumbnail\Processor::process($this->asset, $config, $path, $this->deferred, true, $generated);
             }
             $this->filesystemPath = $path;
         } catch (\Exception $e) {
             Logger::error("Couldn't create image-thumbnail of document " . $this->asset->getRealFullPath());
             Logger::error($e);
             $this->filesystemPath = $errorImage;
         }
         \Pimcore::getEventManager()->trigger("asset.document.image-thumbnail", $this, ["deferred" => $this->deferred, "generated" => $generated]);
     }
 }
Пример #8
0
 public function wordExportDownloadAction()
 {
     $id = $this->getParam("id");
     $exportFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/" . $id . ".html";
     // add closing body/html
     //$f = fopen($exportFile, "a+");
     //fwrite($f, "</body></html>");
     //fclose($f);
     // should be done via Pimcore_Document(_Adapter_LibreOffice) in the future
     if (\Pimcore\Document::isFileTypeSupported("docx")) {
         $lockKey = "soffice";
         Model\Tool\Lock::acquire($lockKey);
         // avoid parallel conversions of the same document
         $out = Tool\Console::exec(\Pimcore\Document\Adapter\LibreOffice::getLibreOfficeCli() . ' --headless --convert-to docx:"Office Open XML Text" --outdir ' . PIMCORE_TEMPORARY_DIRECTORY . " " . $exportFile);
         \Logger::debug("LibreOffice Output was: " . $out);
         $tmpName = PIMCORE_TEMPORARY_DIRECTORY . "/" . preg_replace("/\\." . File::getFileExtension($exportFile) . "\$/", ".docx", basename($exportFile));
         Model\Tool\Lock::release($lockKey);
         // end what should be done in Pimcore_Document
         header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document");
         header('Content-Disposition: attachment; filename="' . basename($tmpName) . '"');
     } else {
         // no conversion, output html file
         $tmpName = $exportFile;
         header("Content-Type: text/html");
         header('Content-Disposition: attachment; filename="' . basename($tmpName) . '"');
     }
     while (@ob_end_flush()) {
     }
     flush();
     readfile($tmpName);
     @unlink($exportFile);
     @unlink($tmpName);
     exit;
 }
Пример #9
0
 /**
  * @param $documentId
  * @throws \Exception
  */
 public function cancelGeneration($documentId)
 {
     $document = Document\Printpage::getById($documentId);
     if (empty($document)) {
         throw new \Exception("Document with id " . $documentId . " not found.");
     }
     Model\Tool\Lock::release($document->getLockKey());
     Model\Tool\TmpStore::delete($document->getLockKey());
 }
Пример #10
0
 /**
  * @param $thumbnailName
  * @param null $timeOffset
  * @param null $imageAsset
  * @return mixed|string
  * @throws \Exception
  */
 public function getImageThumbnail($thumbnailName, $timeOffset = null, $imageAsset = null)
 {
     if (!\Pimcore\Video::isAvailable()) {
         \Logger::error("Couldn't create image-thumbnail of video " . $this->getFullPath() . " no video adapter is available");
         return "/pimcore/static/img/filetype-not-supported.png";
     }
     $cs = $this->getCustomSetting("image_thumbnail_time");
     $im = $this->getCustomSetting("image_thumbnail_asset");
     if ($im || $imageAsset) {
         if ($im) {
             $imageAsset = Model\Asset::getById($im);
         }
         if ($imageAsset instanceof Image) {
             return $imageAsset->getThumbnail($thumbnailName);
         }
     }
     if (!$timeOffset && $cs) {
         $timeOffset = $cs;
     }
     // fallback
     if (!$timeOffset) {
         $timeOffset = ceil($this->getDuration() / 3);
     }
     $converter = \Pimcore\Video::getInstance();
     $converter->load($this->getFileSystemPath());
     $path = PIMCORE_TEMPORARY_DIRECTORY . "/video-image-cache/video_" . $this->getId() . "__thumbnail_" . $timeOffset . ".png";
     if (!is_dir(dirname($path))) {
         File::mkdir(dirname($path));
     }
     if (!is_file($path)) {
         $lockKey = "video_image_thumbnail_" . $this->getId() . "_" . $timeOffset;
         Model\Tool\Lock::acquire($lockKey);
         // after we got the lock, check again if the image exists in the meantime - if not - generate it
         if (!is_file($path)) {
             $converter->saveImage($path, $timeOffset);
         }
         Model\Tool\Lock::release($lockKey);
     }
     $thumbnail = $this->getImageThumbnailConfig($thumbnailName);
     if ($thumbnail) {
         $thumbnail->setFilenameSuffix("time-" . $timeOffset);
         try {
             $path = Image\Thumbnail\Processor::process($this, $thumbnail, $path);
         } catch (\Exception $e) {
             \Logger::error("Couldn't create image-thumbnail of video " . $this->getFullPath());
             \Logger::error($e);
             return "/pimcore/static/img/filetype-not-supported.png";
         }
     }
     $path = preg_replace("@^" . preg_quote(PIMCORE_DOCUMENT_ROOT, "@") . "@", "", $path);
     return $path;
 }
Пример #11
0
 /**
  * @param $processId
  */
 public static function execute($processId)
 {
     $instance = new self();
     $instance->setProcessId($processId);
     $instanceItem = TmpStore::get($instance->getJobStoreId($processId));
     $instance = $instanceItem->getData();
     $formats = array();
     $overallStatus = array();
     $conversionStatus = "finished";
     // set overall status for all formats to 0
     foreach ($instance->queue as $converter) {
         $overallStatus[$converter->getFormat()] = 0;
     }
     // check if there is already a transcoding process running, wait if so ...
     Model\Tool\Lock::acquire("video-transcoding", 7200, 10);
     // expires after 2 hrs, refreshes every 10 secs
     // start converting
     foreach ($instance->queue as $converter) {
         try {
             \Logger::info("start video " . $converter->getFormat() . " to " . $converter->getDestinationFile());
             $converter->save();
             while (!$converter->isFinished()) {
                 sleep(5);
                 $overallStatus[$converter->getFormat()] = $converter->getConversionStatus();
                 $a = 0;
                 foreach ($overallStatus as $f => $s) {
                     $a += $s;
                 }
                 $a = $a / count($overallStatus);
                 $instance->setStatus($a);
                 $instance->save();
             }
             \Logger::info("finished video " . $converter->getFormat() . " to " . $converter->getDestinationFile());
             // set proper permissions
             @chmod($converter->getDestinationFile(), File::getDefaultMode());
             if ($converter->getConversionStatus() !== "error") {
                 $formats[$converter->getFormat()] = str_replace(PIMCORE_DOCUMENT_ROOT, "", $converter->getDestinationFile());
             } else {
                 $conversionStatus = "error";
             }
             $converter->destroy();
         } catch (\Exception $e) {
             \Logger::error($e);
         }
     }
     Model\Tool\Lock::release("video-transcoding");
     $asset = Model\Asset::getById($instance->getAssetId());
     if ($asset) {
         $customSetting = $asset->getCustomSetting("thumbnails");
         $customSetting = is_array($customSetting) ? $customSetting : array();
         if (array_key_exists($instance->getConfig()->getName(), $customSetting) && array_key_exists("formats", $customSetting[$instance->getConfig()->getName()]) && is_array($customSetting[$instance->getConfig()->getName()]["formats"])) {
             $formats = array_merge($customSetting[$instance->getConfig()->getName()]["formats"], $formats);
         }
         $customSetting[$instance->getConfig()->getName()] = array("status" => $conversionStatus, "formats" => $formats);
         $asset->setCustomSetting("thumbnails", $customSetting);
         $asset->save();
     }
     TmpStore::delete($instance->getJobStoreId());
 }