%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/cfiles/widgets/
Upload File :
Create Path :
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;
    }

}

Zerion Mini Shell 1.0