%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/widgets/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/widgets/DirectoryFilters.php

<?php
/**
 * @link https://www.humhub.org/
 * @copyright Copyright (c) 2021 HumHub GmbH & Co. KG
 * @license https://www.humhub.com/licences
 */

namespace humhub\modules\ui\widgets;

use humhub\components\Widget;
use humhub\libs\Html;
use humhub\widgets\Button;
use Yii;
use yii\helpers\ArrayHelper;

/**
 * DirectoryFilters displays the filters on the directory people/spaces/modules pages
 *
 * @since 1.9
 * @author Luke
 */
abstract class DirectoryFilters extends Widget
{
    /**
     * @var array Filters
     */
    protected $filters = [];

    /**
     * @var string Main page URL, used to reset and submit a form with filters
     */
    public $pageUrl;

    /**
     * @var bool True - if paganation is used for the filtered results
     * @since 1.11
     */
    public $paginationUsed = true;

    /**
     * @inheritDoc
     */
    public function init()
    {
        $this->initDefaultFilters();

        $this->addFilter('reset', [
            'type' => 'info',
            'wrapperClass' => 'col-md-2 form-search-without-info',
            'info' => Html::a(Yii::t('UiModule.base', 'Reset filters'), [$this->pageUrl], ['class' => 'form-search-reset']),
            'sortOrder' => 10000,
        ]);

        parent::init();

        ArrayHelper::multisort($this->filters, 'sortOrder');
    }

    abstract protected function initDefaultFilters();

    /**
     * @inheritdoc
     */
    public function run()
    {
        return $this->render('@humhub/modules/ui/widgets/views/directoryFilters', ['directoryFilters' => $this]);
    }

    public function renderFilters(): string
    {
        $filtersHtml = '';
        foreach ($this->filters as $filter => $data) {
            $filtersHtml .= $this->render('@humhub/modules/ui/widgets/views/directoryFilter', [
                'directoryFilters' => $this,
                'filter' => $filter,
                'data' => array_merge(self::getDefaultFilterData(), $data),
            ]);
        }
        return $filtersHtml;
    }

    public static function getDefaultFilterData(): array
    {
        return [
            'wrapperClass' => 'col-md-2',
            'titleClass' => 'form-search-field-info',
            'inputClass' => 'form-control',
            'beforeInput' => '',
            'afterInput' => '',
        ];
    }

    public function renderFilterInput(string $filter, array $data): string
    {
        $inputOptions = ['class' => $data['inputClass']];

        if (isset($data['inputOptions'])) {
            $inputOptions = array_merge($inputOptions, $data['inputOptions']);
        }

        switch ($data['type']) {
            case 'dropdown':
            case 'dropdownlist':
                $inputOptions['data-action-change'] = 'cards.applyFilters';
                $inputOptions['options'] = ['separator' => ['disabled' => '']];
                $inputHtml = Html::dropDownList($filter, self::getValue($filter), $data['options'], $inputOptions);
                break;

            case 'tags':
                $inputHtml = '';
                if (empty($data['tags'])) {
                    break;
                }

                $activeTags = self::getValue($filter);
                $filterOptions = empty($data['multiple']) ? [] : ['data-multiple' => 1];
                $inputHtml .= Html::hiddenInput($filter, $activeTags, $filterOptions);
                $activeTags = empty($activeTags) ? [] : explode(',', $activeTags);

                foreach ($data['tags'] as $tagKey => $tagLabel) {
                    $isActiveTag = (empty($tagKey) && empty($activeTags))
                        || in_array($tagKey, $activeTags);

                    $inputHtml .= Button::none($tagLabel)
                        ->options(['class' => 'btn btn-sm btn-primary' . ($isActiveTag ? ' active' : '')])
                        ->action('cards.selectTag')
                        ->options([
                            'data-filter' => $filter,
                            'data-tag' => $tagKey,
                        ]);
                }
                break;

            case 'info':
                $inputHtml = $data['info'];
                break;
            case 'widget':
                $inputOptions['data-action-change'] = 'cards.applyFilters';
                $inputHtml = $data['widget']::widget(array_merge(['name' => $filter, 'options' => $inputOptions], $data['widgetOptions']));
                break;
            case 'input':
            case 'text':
            default:
                if (isset($data['placeholder'])) {
                    $inputOptions['placeholder'] = $data['placeholder'];
                }
                $inputHtml = Html::textInput($filter, self::getValue($filter), $inputOptions);
        }

        return $data['beforeInput'] . $inputHtml . $data['afterInput'];
    }

    public function addFilter(string $filterKey, array $filterData)
    {
        $this->filters[$filterKey] = $filterData;
    }

    public function removeFilter(string $filterKey)
    {
        unset($this->filters[$filterKey]);
    }

    public static function getDefaultValue(string $filter): string
    {
        return '';
    }

    public static function getValue(string $filter)
    {
        $defaultValue = static::getDefaultValue($filter);

        if (preg_match('/^(.+?)\[(.+?)\]$/', $filter, $arrayMatch)) {
            $array = Yii::$app->request->get($arrayMatch[1]);
            return isset($array[$arrayMatch[2]]) ? $array[$arrayMatch[2]] : $defaultValue;
        }

        return Yii::$app->request->get($filter, $defaultValue);
    }

}

Zerion Mini Shell 1.0