%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/widgets/FilePreview.php |
<?php
namespace humhub\modules\file\widgets;
use humhub\components\ActiveRecord;
use Yii;
use yii\base\Model;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use humhub\widgets\JsWidget;
use humhub\modules\file\models\File;
use humhub\modules\file\libs\FileHelper;
use humhub\modules\search\libs\SearchHelper;
use humhub\modules\search\controllers\SearchController;
use humhub\modules\file\converter\TextConverter;
/**
*
* @package humhub.modules_core.file.widgets
* @since 1.2
*/
class FilePreview extends JsWidget
{
/**
* @inheritdoc
*/
public $jsWidget = "file.Preview";
/**
* @var File[]|string[] file items to display if no $model is given or $model is a new record.
*/
public $items;
/**
* @var Model model object used to fetch default items if [[items]] is not set
*/
public $model;
/**
* @var string model attribute used in combination with [[model]]
*/
public $attribute;
/**
* @var bool weather or not to hide media files
*/
public $excludeMediaFilesPreview = false;
/**
* @var bool weather or not the file previe is editable
*/
public $edit = false;
/**
* @inheritdoc
*/
public $visible = false;
/**
* @var bool weather or not to prevent popover previews for images
*/
public $preventPopover = false;
/**
* @var string popover position
*/
public $popoverPosition = 'right';
/**
* @var bool defines if only files with show_in_stream falg should be viewed in case $model is used to load the files
* @since 1.2.2
*/
public $showInStream;
/**
* Draws the Upload Button output.
*/
public function run()
{
if (!$this->id) {
$this->id = $this->getId(true);
}
// Initialize preview if data is given.
$this->init = $this->getFileData();
return Html::tag('div', '', $this->getOptions());
}
public function getData()
{
return [
'prevent-popover' => $this->preventPopover,
'popover-position' => $this->popoverPosition,
'file-edit' => $this->edit,
'exclude-media-files-preview' => (int) $this->excludeMediaFilesPreview
];
}
public function getAttributes()
{
return [
'class' => 'well post-file-list'
];
}
protected function getFileData()
{
$files = $this->getFiles();
$result = [];
foreach ($files as $file) {
if ($file) {
if(is_string($file)) {
$file = File::findOne(['guid' => $file]);
}
$result[] = ArrayHelper::merge(FileHelper::getFileInfos($file), ['highlight' => $this->isHighlighed($file)]);
}
}
return $result;
}
protected function getFiles()
{
if (!$this->items && !$this->model) {
return [];
}
if ($this->items) {
return $this->items;
}
if(!($this->model instanceof ActiveRecord) && $this->attribute) {
return Html::getAttributeValue($this->model, $this->attribute);
}
if(!($this->model instanceof ActiveRecord)) {
return [];
}
if ($this->showInStream === null) {
return $this->model->fileManager->findAll();
} else {
return $this->model->fileManager->findStreamFiles($this->showInStream);
}
}
/**
* Checks whether the file should be highlighed in the results or not.
*
* @param File $file
* @return boolean is highlighed
*/
protected function isHighlighed(File $file)
{
if (Yii::$app->controller instanceof SearchController) {
if (SearchController::$keyword !== null) {
$converter = new TextConverter();
if ($converter->applyFile($file) &&
SearchHelper::matchQuery(SearchController::$keyword, $converter->getContentAsText())) {
return true;
}
}
}
return false;
}
}