Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 117 |
TaskFilterNavigation | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
110 | |
0.00% |
0 / 117 |
initFilterPanels | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
initFilterBlocks | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
initFilters | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 96 |
|||
getData | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
<?php | |
/** | |
* Created by PhpStorm. | |
* User: kingb | |
* Date: 05.10.2018 | |
* Time: 20:51 | |
*/ | |
namespace humhub\modules\tasks\widgets\search; | |
use humhub\modules\content\helpers\ContentContainerHelper; | |
use humhub\modules\space\models\Space; | |
use humhub\modules\space\modules\manage\models\MembershipSearch; | |
use humhub\modules\space\widgets\SpacePickerField; | |
use Yii; | |
use humhub\modules\tasks\helpers\TaskUrl; | |
use humhub\modules\tasks\models\forms\TaskFilter; | |
use humhub\modules\tasks\models\state\TaskState; | |
use humhub\modules\ui\filter\widgets\FilterNavigation; | |
use humhub\modules\ui\filter\widgets\PickerFilterInput; | |
use humhub\modules\ui\form\widgets\MultiSelect; | |
use humhub\modules\ui\filter\widgets\TextFilterInput; | |
class TaskFilterNavigation extends FilterNavigation | |
{ | |
const PANEL_POSITION_TOP = 1; | |
const PANEL_POSITION_BOTTOM_LEFT = 2; | |
const PANEL_POSITION_BOTTOM_CENTER = 3; | |
const PANEL_POSITION_BOTTOM_RIGHT = 4; | |
const FILTER_BLOCK_TITLE = 'title'; | |
const FILTER_BLOCK_CHECKBOX = 'checkbox'; | |
const FILTER_BLOCK_PICKER = 'picker'; | |
const FILTER_BLOCK_DATEPICKER = 'datePicker'; | |
public $jsWidget = 'task.search.TaskFilter'; | |
/** | |
* @var string view | |
*/ | |
public $view = 'taskFilterNavigation'; | |
/** | |
* @inheritdoc | |
*/ | |
public $id = 'task-filter-nav'; | |
public $init = true; | |
public $defaultBlock = self::FILTER_BLOCK_CHECKBOX; | |
/** | |
* @var TaskFilter | |
*/ | |
public $filter; | |
/** | |
* Initialization logic for default filter panels | |
*/ | |
protected function initFilterPanels() | |
{ | |
$this->filterPanels[static::PANEL_POSITION_TOP] = []; | |
$this->filterPanels[static::PANEL_POSITION_BOTTOM_LEFT] = []; | |
$this->filterPanels[static::PANEL_POSITION_BOTTOM_CENTER] = []; | |
$this->filterPanels[static::PANEL_POSITION_BOTTOM_RIGHT] = []; | |
} | |
/** | |
* Initialization logic for default filter blocks. | |
* | |
* This function can make use of the [[addFilterBlock()]] to add filter blocks to the previously initialized panels | |
*/ | |
protected function initFilterBlocks() | |
{ | |
$this->addFilterBlock(static::FILTER_BLOCK_TITLE, [], static::PANEL_POSITION_TOP); | |
$this->addFilterBlock(static::FILTER_BLOCK_CHECKBOX, [], static::PANEL_POSITION_BOTTOM_LEFT); | |
$this->addFilterBlock(static::FILTER_BLOCK_PICKER, [], static::PANEL_POSITION_BOTTOM_CENTER); | |
$this->addFilterBlock(static::FILTER_BLOCK_DATEPICKER, [], static::PANEL_POSITION_BOTTOM_RIGHT); | |
} | |
/** | |
* Initialization logic for default filter blocks. | |
* | |
* This function can make use of the [[addFilter()]] to add filters the previously initialized blocks | |
*/ | |
protected function initFilters() | |
{ | |
if(!$this->filter) { | |
$this->filter = new TaskFilter(); | |
} | |
/** | |
* Patches an textfilter issue with HumHub < 1.3.9 which uses keypress instead of keydown | |
*/ | |
if (version_compare(Yii::$app->version, '1.3.9', 'lt')) { | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_TITLE, | |
'category' => 'title', | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Title'), | |
'class' => TextFilterInput::class, | |
'changeAction' => null, | |
'options' => [ | |
'style' => 'width:100%', | |
'data-action-keydown' => 'inputChange', | |
'data-action-keypress' => null, | |
'placeholder' => Yii::t('TasksModule.views_index_index', 'Filter tasks by title') | |
], | |
'sortOrder' => 100], static::FILTER_BLOCK_TITLE); | |
} else { | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_TITLE, | |
'category' => 'title', | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Title'), | |
'class' => TextFilterInput::class, | |
'options' => [ | |
'style' => 'width:100%', | |
'placeholder' => Yii::t('TasksModule.views_index_index', 'Filter tasks by title') | |
], | |
'sortOrder' => 100], static::FILTER_BLOCK_TITLE); | |
} | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_OVERDUE, | |
'checked' => $this->filter->isFilterActive(TaskFilter::FILTER_OVERDUE), | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Overdue'), | |
'sortOrder' => 100], static::FILTER_BLOCK_CHECKBOX); | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_ASSIGNED, | |
'checked' => $this->filter->isFilterActive(TaskFilter::FILTER_ASSIGNED), | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'I\'m assigned'), | |
'sortOrder' => 200], static::FILTER_BLOCK_CHECKBOX); | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_RESPONSIBLE, | |
'checked' => $this->filter->isFilterActive(TaskFilter::FILTER_RESPONSIBLE), | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'I\'m responsible'), | |
'sortOrder' => 300], static::FILTER_BLOCK_CHECKBOX); | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_MINE, | |
'checked' => $this->filter->isFilterActive(TaskFilter::FILTER_MINE), | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Created by me'), | |
'sortOrder' => 400], static::FILTER_BLOCK_CHECKBOX); | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_STATE, | |
'category' => 'states', | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Status'), | |
'class' => PickerFilterInput::class, | |
'picker' => MultiSelect::class, | |
'pickerOptions' => [ | |
'items' => TaskState::getStatusItems(), | |
'placeholder' => Yii::t('TasksModule.models_forms_TaskFilter', 'Filter status'), | |
'placeholderMore' => Yii::t('TasksModule.models_forms_TaskFilter', 'Filter status'), | |
'name' => 'task-filter-state' | |
]],static::FILTER_BLOCK_PICKER); | |
if(!$this->filter->contentContainer) { | |
$memberships = MembershipSearch::findByUser(Yii::$app->user->identity)->all(); | |
$spaces = []; | |
foreach ($memberships as $membership) { | |
if($membership->space->isModuleEnabled('tasks')) { | |
$spaces[] = $membership->space; | |
} | |
} | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_SPACE, | |
'category' => 'spaces', | |
'title' => Yii::t('TasksModule.models_forms_TaskFilter', 'Spaces'), | |
'class' => PickerFilterInput::class, | |
'picker' => SpacePickerField::class, | |
'pickerOptions' => [ | |
'name' => 'task-filter-spaces', | |
'defaultResults' => $spaces, | |
]], static::FILTER_BLOCK_PICKER); | |
} | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_DATE_START, | |
'category' => 'date_start', | |
'class' => DateFilter::class, | |
'filterOptions' => [ | |
'placeholder' => Yii::t('TasksModule.models_forms_TaskFilter', 'Start date'), | |
]], static::FILTER_BLOCK_DATEPICKER); | |
$this->addFilter([ | |
'id' => TaskFilter::FILTER_DATE_END, | |
'category' => 'date_end', | |
'class' => DateFilter::class, | |
'filterOptions' => [ | |
'placeholder' => Yii::t('TasksModule.models_forms_TaskFilter', 'End date'), | |
]], static::FILTER_BLOCK_DATEPICKER); | |
} | |
public function getData() | |
{ | |
$container = ContentContainerHelper::getCurrent(); | |
return [ | |
'container-guid' => $container ? $container->guid : null, | |
'filter-url' => TaskUrl::globalFilter($this->filter->contentContainer), | |
'csv-export-url' => TaskUrl::exportCsv($this->filter->contentContainer), | |
'xlsx-export-url' => TaskUrl::exportXlsx($this->filter->contentContainer), | |
]; | |
} | |
} |