%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/models/forms/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/models/forms/TaskFilter.php

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

/**
 * Created by PhpStorm.
 * User: buddha
 * Date: 01.07.2017
 * Time: 17:18
 */

namespace humhub\modules\tasks\models\forms;


use humhub\libs\DbDateValidator;
use humhub\modules\tasks\CalendarUtils;
use Yii;
use humhub\modules\tasks\models\Task;
use humhub\modules\content\components\ContentContainerActiveRecord;
use humhub\modules\tasks\models\user\TaskUser;
use yii\base\Model;

class TaskFilter extends Model
{
    const FILTER_TITLE = 'title';
    const FILTER_OVERDUE = 'overdue';
    const FILTER_ASSIGNED = 'assigned';
    const FILTER_RESPONSIBLE = 'responsible';
    const FILTER_MINE = 'mine';
    const FILTER_STATE = 'state';
    const FILTER_SPACE = 'spaces';
    const FILTER_DATE_START = 'date_start';
    const FILTER_DATE_END = 'date_end';

    public $filters = [];

    public $states = [];

    public $spaces = [];

    public $date_start;

    public $date_end;


    /**
     * @var ContentContainerActiveRecord
     */
    public $contentContainer;

    /**
     * @var string
     */
    public $title;

    /**
     * @var int
     */
    public $own;

    public function rules()
    {
        return [
            [['title', 'date_start', 'date_end'], 'string'],
            [['filters', 'states', 'spaces'], 'safe'],
            [['date_start'], DbDateValidator::class],
            [['date_end'], DbDateValidator::class],
        ];
    }

    public function attributeLabels()
    {
        return [
            'title' => Yii::t('TasksModule.base', 'Filter tasks'),
            'status' => Yii::t('TasksModule.base', 'Status'),
            'overdue' => Yii::t('TasksModule.base', 'Overdue'),
            'taskAssigned' => Yii::t('TasksModule.base', 'I\'m assigned'),
            'taskResponsible' => Yii::t('TasksModule.base', 'I\'m responsible'),
            'own' => Yii::t('TasksModule.base', 'Created by me'),
        ];
    }

    public function query()
    {
        $this->validate();

        $query = Task::find()->readable()->andWhere('content.archived = 0');


        if($this->contentContainer) {
            $query->contentContainer($this->contentContainer);
        } else if (!empty($this->spaces)) {
            $query->joinWith(['content', 'content.contentContainer', 'content.createdBy']);
            $query->andWhere( ['IN', 'contentcontainer.guid', $this->spaces]);
        } else {
            // exclude archived content from global view
            $query->andWhere('space.status = 1 OR space.status IS NULL');
        }

        if($this->isFilterActive(static::FILTER_OVERDUE)) {
            $query->andWhere('task.end_datetime < DATE(NOW())');
            $query->andWhere(['!=', 'task.status', Task::STATUS_COMPLETED]);
        }

        if(!empty($this->states)) {
             $query->andWhere(['in', 'task.status', $this->states]);
        }

        if(!empty($this->title)) {
            $query->andWhere(['like', 'title', $this->title]);
        }

        if ($this->isFilterActive(static::FILTER_ASSIGNED)) {
            $subQuery = TaskUser::find()
                ->where('task_user.task_id=task.id')
                ->andWhere(['task_user.user_id' => Yii::$app->user->id, 'task_user.user_type' => Task::USER_ASSIGNED]);
            $query->andWhere(['exists', $subQuery]);
        }

        if ($this->isFilterActive(static::FILTER_RESPONSIBLE)) {
            $subQuery = TaskUser::find()
                ->where('task_user.task_id=task.id')
                ->andWhere(['task_user.user_id' => Yii::$app->user->id, 'task_user.user_type' => Task::USER_RESPONSIBLE]);
            $query->andWhere(['exists', $subQuery]);
        }

        if($this->isFilterActive(static::FILTER_MINE)) {
            $query->andWhere(['content.created_by' => Yii::$app->user->id]);
        }

        if (! empty($this->date_start) && ! empty($this->date_end)) {
            $query->andWhere(
                ['or',
                    ['and',
                        CalendarUtils::getStartCriteria($this->date_start, 'start_datetime', '>='),
                        CalendarUtils::getStartCriteria($this->date_end, 'start_datetime', '<=')
                    ],
                    ['and',
                        CalendarUtils::getEndCriteria($this->date_start, 'end_datetime', '>='),
                        CalendarUtils::getEndCriteria($this->date_end, 'end_datetime', '<=')
                    ]
                ]
            );
        } elseif (! empty($this->date_start)) {
            $query->andWhere(CalendarUtils::getStartCriteria($this->date_start, 'start_datetime'));
        } elseif (! empty($this->date_end)) {
            $query->andWhere(CalendarUtils::getEndCriteria($this->date_end, 'end_datetime'));
        }

        $query->orderBy(['task.status' => SORT_ASC, 'task.scheduling' => SORT_DESC, 'task.end_datetime' => SORT_ASC]);

        return $query;
    }

    public function isFilterActive($filter)
    {
        return in_array($filter, $this->filters);
    }
}

Zerion Mini Shell 1.0