%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/models/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/models/CalendarEntryQuery.php |
<?php
namespace humhub\modules\calendar\models;
use humhub\modules\calendar\interfaces\recurrence\AbstractRecurrenceQuery;
use humhub\modules\content\components\ContentContainerActiveRecord;
use DateTime;
/**
* CalendarEntryQuery class can be used for creating filter queries for [[CalendarEntry]] models.
*
* The class follows the builder pattern and can be used as follows:
*
* ```php
* // Find all CalendarEntries of user profile of $user1
* CalendarEntryQuery::find()->container($user1)->limit(20)->all();
*
* // Find all entries from 3 days in the past till three days in the future
* CalendarEntryQuery::find()->from(-3)->to(3)->all();
*
* // Find all entries within today at 00:00 till three days in the future at 23:59
* CalendarEntryQuery::find()->days(3)->all();
*
* // Filter entries where the current user is participating
* CalendarEntryQuery::find()->participate();
* ```
*
* > Note: If [[from()]] and [[to()]] is set, the query will use an open range query by default, which
* means either the start time or the end time of the [[CalendarEntry]] has to be within the searched interval.
* This behaviour can be changed by using the [[openRange()]]-method. If the openRange behaviour is deactivated
* only entries with start and end time within the search interval will be included.
*
* > Note: By default we are searching in whole day intervals and get rid of the time information of from/to boundaries by setting
* the time of the from date to 00:00:00 and the time of the end date to 23:59:59. This behaviour can be deactivated by using the [[withTime()]]-method.
*
* The following filters are available:
*
* - [[from()]]: Date filter interval start
* - [[to()]]: Date filter interval end
* - [[days()]]: Filter by future or past day interval
* - [[months()]]: Filter by future or past month interval
* - [[years()]]: Filter by future or past year interval
*
* - [[container()]]: Filter by container
* - [[userRelated()]]: Adds a user relation by the given or default scope (e.g: Following Spaces, Member Spaces, Own Profile, etc.)
* - [[participant()]]: Given user accepted invitation
* - [[mine()]]: Entries created by the given user
* - [[responded()]]: Entries where given user has given any response (accepted/declined...)
* - [[notResponded()]]: Entries where given user has not given any response yet (accepted/declined...)
*
* @author buddha
*/
class CalendarEntryQuery extends AbstractRecurrenceQuery
{
/**
* @inheritdocs
*/
protected static $recordClass = CalendarEntry::class;
/**
* @inheritdocs
*/
protected $dateQueryType = self::DATE_QUERY_TYPE_MIXED;
/**
* @var bool true if the participant join has already been added else false
*/
private $praticipantJoined = false;
public static function findForFilter(DateTime $start = null, DateTime $end = null, ContentContainerActiveRecord $container = null, $filters = [], $limit = 50, $expand = true, $types = [])
{
/* @var $events CalendarEntry[] */
$events = parent::findForFilter($start, $end, $container, $filters, $limit, $expand, $types);
return $events;
}
public function filterResponded()
{
$this->participantJoin();
$this->_query->andWhere(['IS NOT', 'calendar_entry_participant.id', new \yii\db\Expression('NULL')]);
}
public function filterNotResponded()
{
$this->participantJoin();
$this->_query->andWhere(['IS', 'calendar_entry_participant.id', new \yii\db\Expression('NULL')]);
}
public function filterIsParticipant()
{
$this->participantJoin();
$this->_query->andWhere(['calendar_entry_participant.participation_state' => CalendarEntryParticipant::PARTICIPATION_STATE_ACCEPTED]);
}
private function participantJoin()
{
if(!$this->praticipantJoined) {
$this->_query->leftJoin('calendar_entry_participant', 'calendar_entry.id=calendar_entry_participant.calendar_entry_id AND calendar_entry_participant.user_id=:userId', [':userId' => $this->_user->id]);
$this->praticipantJoined = true;
}
}
}