%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/FileList.php |
<?php
namespace humhub\modules\cfiles\widgets;
use Yii;
use humhub\modules\cfiles\models\rows\AbstractFileSystemItemRow;
use humhub\modules\cfiles\models\rows\BaseFileRow;
use humhub\modules\cfiles\models\rows\FileSystemItemRow;
use humhub\modules\cfiles\models\rows\FolderRow;
use humhub\modules\cfiles\models\rows\SpecialFolderRow;
use humhub\modules\cfiles\Module;
use humhub\modules\cfiles\permissions\ManageFiles;
use humhub\modules\cfiles\models\rows\FileRow;
use humhub\modules\cfiles\models\File;
use humhub\modules\cfiles\models\FileSystemItem;
use yii\base\Widget;
use yii\data\Pagination;
/**
* Widget for rendering the file list.
*/
class FileList extends Widget
{
/**
* @var \humhub\modules\cfiles\models\Folder current folder
*/
public $folder;
/**
* @var \humhub\modules\content\components\ContentContainerActiveRecord Current content container.
*/
public $contentContainer;
/**
* @var array file order option used by file query.
*/
public $filesOrder;
/**
* @var array folder order option used by folder query.
*/
public $foldersOrder;
/**
* @var AbstractFileSystemItemRow[] All file items of the current folder sorted by item type.
*/
protected $rows;
/**
* @var string sort field
*/
public $sort;
/**
* @var string sort order ASC/DESC
*/
public $order;
/**
* @var Pagination
*/
protected $pagination;
/**
* @inheritdoc
*/
public function init()
{
$this->initSort();
}
public function initSort()
{
/** @var $module Module */
$module = Yii::$app->getModule('cfiles');
// Init with default module values
$this->sort = ($this->folder->isAllPostedFiles()) ? $module->defaultPostedFilesSort : $module->defaultSort;
$this->order = ($this->folder->isAllPostedFiles()) ? $module->defaultPostedFilesOrder : $module->defaultOrder;
// Overwrite with request sort order if given
$this->sort = Yii::$app->request->get('sort', $this->sort);
$this->order = Yii::$app->request->get('order', $this->order);
// Save sort settings if sorting was used and logged in user is given or try fetching user settings.
if(Yii::$app->request->get('sort') && !Yii::$app->user->isGuest) {
$settings = $module->settings->user(Yii::$app->user->getIdentity());
$settings->set('defaultSort', $this->sort);
$settings->set('defaultOrder', $this->order);
} else if(!Yii::$app->user->isGuest) {
$settings = $module->settings->user(Yii::$app->user->getIdentity());
$this->sort = $settings->get('defaultSort', $this->sort);
$this->order = $settings->get('defaultOrder', $this->order);
}
}
public function getDefaultSort()
{
/** @var $module Module */
$module = Yii::$app->getModule('cfiles');
$moduleSetting= ($this->folder->isAllPostedFiles()) ? $module->defaultPostedFilesSort : $module->defaultSort;
return $module->settings->user(Yii::$app->user->getIdentity())->get('defaultSort', $moduleSetting);
}
public function getDefaultOrder()
{
/** @var $module Module */
$module = Yii::$app->getModule('cfiles');
$moduleSetting= ($this->folder->isAllPostedFiles()) ? $module->defaultPostedFilesSort : $module->defaultSort;
return $module->settings->user(Yii::$app->user->getIdentity())->get('defaultOrder', $moduleSetting);
}
/**
* @inheritdoc
*/
public function run()
{
if($this->folder->isAllPostedFiles()) {
$this->setPostedFilesRows();
} else {
$this->setSystemItemRows();
}
$canWrite = $this->contentContainer->can(ManageFiles::class);
$itemsSelectable = !$this->folder->isAllPostedFiles() && ($canWrite || Yii::$app->getModule('cfiles')->isZipSupportEnabled());
return $this->render('fileList', [
'rows' => $this->rows,
'pagination' => $this->pagination,
'folder' => $this->folder,
'sort' => $this->sort,
'order' => $this->order,
'itemsSelectable' => $itemsSelectable,
'itemsInFolder' => count($this->rows),
'canWrite' => $canWrite,
]);
}
protected function setPostedFilesRows()
{
$query = File::getPostedFiles($this->contentContainer, BaseFileRow::translateOrder($this->sort, $this->order));
$countQuery = clone $query;
$this->pagination = new Pagination(['totalCount' => $countQuery->count()]);
$files = $query->offset($this->pagination->offset)->limit($this->pagination->limit)->all();
$this->rows = [];
foreach ($files as $file) {
$this->rows[] = new BaseFileRow(['parentFolder' => $this->folder, 'baseFile' => $file]);
}
}
/**
* Returns all file items of the current folder sorted by item type.
* @return array
*/
protected function setSystemItemRows()
{
$this->rows = [];
/** @var $module Module */
foreach ($this->folder->getSpecialFolders() as $specialFolder) {
$this->rows[] = new SpecialFolderRow(['item' => $specialFolder]);
}
foreach ($this->folder->getSubFolders(FolderRow::translateOrder($this->sort, $this->order)) as $subFolder) {
$this->rows[] = new FolderRow(['item' => $subFolder]);
}
foreach ($this->folder->getSubFiles(FileRow::translateOrder($this->sort, $this->order)) as $subFile) {
$this->rows[] = new FileRow(['item' => $subFile]);
}
}
/**
* Returns a list of selected items
*
* @return \humhub\modules\cfiles\models\FileSystemItem[]
*/
public static function getSelectedItems()
{
$selectedItems = Yii::$app->request->post('selection');
$items = [];
// download selected items if there are some
if (is_array($selectedItems)) {
foreach ($selectedItems as $itemId) {
$item = FileSystemItem::getItemById($itemId);
if ($item !== null) {
$items[] = $item;
}
}
}
return $items;
}
}