%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/cfiles/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/cfiles/widgets/FileListContextMenu.php |
<?php
namespace humhub\modules\cfiles\widgets;
use humhub\modules\cfiles\models\FileSystemItem;
use humhub\modules\cfiles\models\Folder;
use humhub\modules\cfiles\models\rows\FileSystemItemRow;
use humhub\modules\cfiles\permissions\ManageFiles;
use humhub\modules\content\widgets\WallEntryControls;
use humhub\modules\ui\menu\DropdownDivider;
use humhub\modules\ui\menu\MenuLink;
use Yii;
/**
* Widget for rendering the file list context menu.
*/
class FileListContextMenu extends WallEntryControls
{
/**
* @var Folder Current folder model instance
*/
public $folder;
/**
* @var FileSystemItemRow File or Folder row object
*/
public $row;
/**
* @inheritdoc
*/
public $template = 'fileListContextMenu';
/**
* @inheritdoc
*/
public function init()
{
if ($this->disabledWallEntryControls()) {
$this->initRenderOptions();
return;
}
$this->object = $this->row->item;
$this->wallEntryWidget = $this->row->getContext();
parent::init();
}
private function disabledWallEntryControls(): bool
{
if (!isset($this->row->item) || !($this->row->item instanceof FileSystemItem)) {
return true;
}
if (in_array($this->row->getType(), ['folder', 'folder-posted'])) {
return true;
}
return false;
}
public function initControls()
{
$this->renderOptions->disableControlsEntryEdit();
$this->renderOptions->disableControlsEntryPermalink();
$this->renderOptions->disableControlsEntryDelete();
$this->renderOptions->disableControlsEntryPin();
$this->renderOptions->disableControlsEntryMove();
$this->renderOptions->disableControlsEntryArchive();
switch ($this->row->getType()) {
case 'image':
$this->initMenuImage();
break;
case 'folder':
$this->initMenuFolder();
return; // Don't init core menu entries for folders
case 'folder-posted':
$this->initMenuAllPostedFiles();
return; // Don't init core menu entries for folders
default:
$this->initMenuFile();
}
if (!$this->disabledWallEntryControls()) {
parent::initControls();
}
}
private function initMenuFolder()
{
$this->addMenu(Yii::t('CfilesModule.base', 'Open'), 'download', 'folder-open', 10);
$this->addMenu(Yii::t('CfilesModule.base', 'Display Url'), 'show-url', 'link', 20);
$this->addEntry(new DropdownDivider(['sortOrder' => 25]));
if ($this->isEditableRow()) {
$this->addMenu(Yii::t('CfilesModule.base', 'Edit'), 'edit-folder', 'pencil', 30);
$this->addMenu(Yii::t('CfilesModule.base', 'Delete'), 'delete', 'trash', 40);
}
if ($this->canWrite()) {
$this->addMenu(Yii::t('CfilesModule.base', 'Move'), 'move-files', 'arrows', 50);
}
if ($this->zipEnabled()) {
$this->addMenu(Yii::t('CfilesModule.base', 'Download ZIP'), 'zip', 'file-archive-o', 60);
}
}
private function initMenuFile()
{
$this->addMenu(Yii::t('CfilesModule.base', 'Download'), 'download', 'cloud-download', 10);
$this->addMenu(Yii::t('CfilesModule.base', 'Show Post'), 'show-post', 'window-maximize', 20);
$this->addMenu(Yii::t('CfilesModule.base', 'Display Url'), 'show-url', 'link', 30);
if (!$this->folder->isAllPostedFiles() && $this->isEditableRow()) {
$this->addEntry(new DropdownDivider(['sortOrder' => 35]));
$this->addMenu(Yii::t('CfilesModule.base', 'Edit'), 'edit-file', 'pencil', 40);
$this->addMenu(Yii::t('CfilesModule.base', 'Delete'), 'delete', 'trash', 50);
if ($this->canWrite()) {
$this->addMenu(Yii::t('CfilesModule.base', 'Move'), 'move-files', 'arrows', 60);
}
$this->addMenu(Yii::t('CfilesModule.base', 'Versions'), 'versions', 'history', 70);
}
}
private function initMenuImage()
{
$this->initMenuFile();
}
private function initMenuAllPostedFiles()
{
$this->addMenu(Yii::t('CfilesModule.base', 'Open'), 'download', 'folder-open', 10);
$this->addMenu(Yii::t('CfilesModule.base', 'Display Url'), 'show-url', 'link', 20);
}
private function isEditableRow(): bool
{
return $this->row->item->canEdit();
}
private function canWrite(): bool
{
return $this->isEditableRow() && $this->folder->content->container->can(ManageFiles::class);
}
private function zipEnabled(): bool
{
return !Yii::$app->getModule('cfiles')->settings->get('disableZipSupport');
}
private function addMenu(string $label, string $action, string $icon, int $sortOrder = 1)
{
$this->addEntry(new MenuLink([
'label' => $label,
'url' => '#',
'icon' => $icon,
'sortOrder' => $sortOrder,
'htmlOptions' => ['data-action' => $action],
]));
}
}