%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/converter/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/converter/TextConverter.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\file\converter; use Yii; use humhub\modules\file\models\File; use humhub\modules\file\libs\FileHelper; /** * Text Converter * * @since 1.3 * @author Luke */ class TextConverter extends BaseConverter { /** * List of installed text conversion converters * * Example: * * ``` * [ * 'cmd' => '/usr/bin/pdftotext -q -enc UTF-8 {fileName} {outputFileName}', * 'only' => ['pdf'] * ], * [ * 'cmd' => '/usr/bin/java -jar /path/to/tika-app-1.16.jar --text {fileName} 2>/dev/null', * 'except' => ['image/'] * ] * ``` * * @var array */ public $converter = []; /** * @var int maximum text file size in byte */ public $maxTextFileSize = 3.2e+7; /** * @inheritdoc */ public function getId() { return 'text'; } /** * @inheritdoc */ protected function canConvert(File $file) { $originalFile = $file->store->get(); if (!is_file($originalFile)) { return false; } if ($this->getConverter() === null) { // No text converter found for given file return false; } return true; } /** * @inheritdoc */ protected function convert($fileName) { $convertedFile = $this->file->store->get($fileName); if (is_file($convertedFile)) { return; } $textContent = ''; $converter = $this->getConverter(); if ($converter !== null) { if (Yii::$app->request->isConsoleRequest) { print "C"; } $command = str_replace('{fileName}', $this->file->store->get(), $converter['cmd']); if (strpos($command, "{outputFileName}") !== false) { $command = str_replace('{outputFileName}', $convertedFile, $command); shell_exec($command); } else { $textContent = shell_exec($command) . "\n"; file_put_contents($convertedFile, $textContent); } } } /** * Returns the first matching converter for the file * * @return array the converter definitions */ public function getConverter() { foreach ($this->converter as $converter) { // Check Exceptions if (!empty($converter['except']) && is_array($converter['except'])) { foreach ($converter['except'] as $except) { if (strpos($this->file->mime_type, $except) !== false || FileHelper::getExtension($this->file) == $except) { continue 2; } } } if (!empty($converter['only']) && is_array($converter['only'])) { foreach ($converter['only'] as $only) { if (strpos($this->file->mime_type, $only) !== false || FileHelper::getExtension($this->file) == $only) { return $converter; } } } else { // Valid for all file types return $converter; } } return null; } /** * Returns the file content as text * * @return string the text output */ public function getContentAsText() { $fileName = $this->getFilename(); $convertedFile = $this->file->store->get($fileName); if (is_file($convertedFile)) { // Reduce file size to max text length if (filesize($convertedFile) > $this->maxTextFileSize) { $fp = fopen($convertedFile, "r+"); ftruncate($fp, $this->maxTextFileSize); fclose($fp); } return file_get_contents($convertedFile); } return null; } }