%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/CalendarEntryDummy.php |
<?php
namespace humhub\modules\calendar\models;
use humhub\modules\calendar\helpers\RecurrenceHelper;
use humhub\modules\calendar\interfaces\event\CalendarEventIF;
use humhub\modules\calendar\interfaces\event\CalendarTypeIF;
use humhub\modules\calendar\interfaces\event\EditableEventIF;
use humhub\modules\calendar\interfaces\recurrence\RecurrenceQueryIF;
use humhub\modules\calendar\interfaces\recurrence\RecurrentEventIF;
use DateTime;
use humhub\modules\calendar\helpers\CalendarUtils;
use humhub\widgets\Label;
use yii\base\Model;
/**
* This is the model class for table "calendar_entry".
*
* The followings are the available columns in table 'calendar_entry':
* @property integer $id
* @property string $title
* @property string $description
* @property string $start_datetime
* @property string $end_datetime
* @property integer $all_day
* @property integer $participation_mode
* @property string $color
* @property string $uid
* @property integer $allow_decline
* @property integer $allow_maybe
* @property string $participant_info
* @property integer closed
* @property integer max_participants
* @property string rrule
* @property string recurrence_id
* @property int parent_event_id
* @property string exdate
* @property string sequence
* @property CalendarEntryParticipant[] participantEntries
* @property string $time_zone The timeZone this entry was saved, note the dates itself are always saved in app timeZone
* @property string $location
* @property-read bool $recurring
* @property-read bool $reminder
*/
class CalendarEntryDummy extends Model implements CalendarEventIF, RecurrentEventIF
{
/**
* @var DateTime
*/
public $start;
/**
* @var DateTime
*/
public $end;
/**
* @var bool
*/
public $isAllDay = true;
/**
* @var string
*/
public $rrule;
/**
* Returns an unique id for this event, which is used beside others in ICal exports.
* When implementing [[EditableEventIF]] the uid will be assigned automatically when saving the event
* unless the module itself did already assign a uid.
*
* @return string|null
* @see EditableEventIF
* @see https://www.kanzaki.com/docs/ical/uid.html
*/
public function getUid()
{
return 'DUMMY';
}
/**
* Returns the [[CalendarTypeIF]] of this type.
* @return CalendarTypeIF instance of the related calendar type
*/
public function getEventType()
{
return null;
}
/**
* Defines whether or not this event is an spans over an whole day.
* Note all_day events should omit any timezone translations.
*
* @return boolean
*/
public function isAllDay()
{
return $this->isAllDay;
}
/**
* Returns the datetime this event starts.
* In case of all day events timezone have to be omitted:
*
* ```
* 09.01.2020 00:00:00
* ```
*
* The timezone of this date does not has to be the same as [[getTimezone()]] as in the following example:
*
* ```
* public function getStartDateTime()
* {
* return new DateTime($this->start_datetime, CalendarUtils::getSystemTimeZone(false));
* }
* ```
*
* > Note: Ideally the underlying database field should have the name `start_datetime` otherwise the [[AbstractCalendarQuery::$startField]]
* > needs to be overwritten.
*
* @return DateTime start datetime
* @see AbstractCalendarQuery::$startField
*/
public function getStartDateTime()
{
return $this->start;
}
/**
* Returns the datetime this event ends.
*
* The timezone of this date does not has to be the same as [[getTimezone()]] as in the following example:
*
* ```
* public function getEndDateTime()
* {
* return new DateTime($this->end_datetime, CalendarUtils::getSystemTimeZone(false));
* }
* ```
*
* > Note: Ideally the underlying database field should have the name `end_datetime`, otherwise the [[AbstractCalendarQuery::$endField]]
* > needs to be overwritten.
*
* @return DateTime start datetime
* @see AbstractCalendarQuery::$endField
*/
public function getEndDateTime()
{
return $this->end;
}
/**
* The timezone string this event was originally saved in, which does not have to be the same timezone [[getStartDateTime()]]
* and [[getEndDateTime()]].
*
* @return string The timezone string of this item.
*/
public function getTimezone()
{
return CalendarUtils::getSystemTimeZone(true);
}
/**
* The timezone string of the end date.
* In case the start and end timezone is the same, this function can return null.
*
* @return string|null
*/
public function getEndTimezone()
{
return null;
}
/**
* Returns an url pointing to the detail view of this event. This function should not return an url to
* a modal view.
*
* @return string
*/
public function getUrl()
{
return null;
}
/**
* Returns a hex color string e.g: '#44B5F6', which defines the color of this specific event.
* When null is returned a default color of the related [[CalendarTypeIF]] is used.
*
* @return string|null hex color string e.g: '#44B5F6'
*/
public function getColor()
{
return null;
}
/**
* @return string a human readable title for this event
*/
public function getTitle()
{
return 'Dummy';
}
/**
* @return string|null a location of this event
*/
public function getLocation()
{
return null;
}
/**
* @return string|null a description of this event
*/
public function getDescription()
{
return 'Dummy';
}
/**
* (optional) A badge/label used in snippets
*
* @return Label|string|null
*/
public function getBadge()
{
return null;
}
/**
* (optional) Additional configuration options
* @return array
*/
public function getCalendarOptions()
{
return [];
}
/**
* Used for example in ICal exports. In case of ContentActiveRecords a common implementation would be:
*
* ```php
* public function getLastModified()
* {
* return new DateTime($this->content->updated_at);
* }
* ```
* @return DateTime|null
*/
public function getLastModified()
{
return null;
}
/**
* Optional sequence support see https://www.kanzaki.com/docs/ical/sequence.html
*
* This function should return 0 in case sequences is not supported.
*
* @return int
*/
public function getSequence()
{
return 0;
}
/**
* Sets the uid of this event. This only have to be implemented if the module does not generate own UIDs.
* If not actually implemented (empty) a new UID is created every time this event is exported.
*
* @param $uid
* @return mixed
*/
public function setUid($uid)
{
// TODO: Implement setUid() method.
}
/**
* Sets the event revision sequence, this is optional and can be implemented as empty function if not supported.
*
* The calendar interface increments the sequence automatically when an EditableEventIF content entry is saved
* or when using the [[RecurrenceFormModel]].
*
* @param $sequence
* @return mixed
*/
public function setSequence($sequence)
{
// TODO: Implement setSequence() method.
}
/**
* Should update all data used by the event interface setter.
*
* @return bool|int
*/
public function saveEvent()
{
// TODO: Implement saveEvent() method.
}
/**
* @return int the id of this event
*/
public function getId()
{
// TODO: Implement getId() method.
}
public function getRecurring(): bool
{
return !empty($this->rrule);
}
public function isRecurringEnabled(): bool
{
return $this->recurring;
}
/**
* @return string the rrule string
*/
public function getRrule()
{
return $this->rrule;
}
/**
* Sets the $rrule string of this event.
*
* @param string|null $rrule
*/
public function setRrule($rrule)
{
$this->rrule = $rrule;
}
/**
* Returns the id of the recurrent root event.
*
* > Note: The root id should not be set manually
*
* @return int the id of the root event
*/
public function getRecurrenceRootId()
{
// TODO: Implement getRecurrenceRootId() method.
}
/**
* Sets the id of the recurrence root event.
*
* > Note: The root id should not be set manually.
*
* @param int $rootId sets the root id of a recurrence instance
*/
public function setRecurrenceRootId($rootId)
{
// TODO: Implement setRecurrenceRootId() method.
}
/**
* Returns the recurrence id of this event.
*
* > Note: The recurrence id should not be set manually
*
* @return string|null
*/
public function getRecurrenceId()
{
// TODO: Implement getRecurrenceId() method.
}
/**
* Sets the recurrence id.
*
* > Note: The recurrence id should not be set manually
*
* @param $recurrenceId
* @return mixed
*/
public function setRecurrenceId($recurrenceId)
{
// TODO: Implement setRecurrenceId() method.
}
public function getReminder(): bool
{
return false;
}
/**
* Returns a comma seperated list of recurrence ids, which are used to exclude specific dates from the recurring
* root event.
*
* > Note: Exdates are set automatically in the beforeDelete handler of ContentActiveRecord based events.
*
* @return string|null
*/
public function getExdate()
{
// TODO: Implement getExdate() method.
}
/**
* Sets the exdate field, which are used to exclude specific dates from the recurring root event.
*
* In order to create an exdate string the [[RecurrenceHelper::addExdates()]] can be used.
*
* > Note: Exdates are set automatically in the beforeDelete handler of ContentActiveRecord based events.
*
* @param $exdateStr
* @return mixed
* @see RecurrenceHelper::addExdates()
*/
public function setExdate($exdateStr)
{
// TODO: Implement setExdate() method.
}
/**
* This function is called while expanding a recurrent root event.
* Usually the implementation of this event sets the `start_datetime` and `end_datetime` and doing some other
* initialization tasks. Note you won't
*
* Example:
*
* ```php
* public function createRecurrence($start, $end)
* {
* $instance = new self($this->content->container, $this->content->visibility);
* $instance->start_datetime = $start;
* $instance->end_datetime = $end;
* $instance->syncEventData($this);
* return $instance;
* }
* ```
*
* @param string $start start of the event in db format
* @param string $end end of the event in db format
* @return static
*/
public function createRecurrence($start, $end)
{
// TODO: Implement createRecurrence() method.
}
/**
* This function is called in order to synchronize a recurrent instance with a given root event.
* An implementation of this function should copy all relevant data as for example description and title
* from the root event.
*
* This function is called on recurrence instances after they were expanded. In this case the $original parameter is
* null and the this instance is not persisted.
*
* Furthermore, this function is called on existing recurrent events once a root event is saved. In this case the
* $original parameter points to the original root before the update. The function may skip some synchronizations in
* this case, for example if the recurrent instance description was changed before the root edit:
*
* ```
* public function syncEventData($root, $original = null) {
* // Only change title if we did not overwrite the original title already
* if(!$original || $original->title === $this->title) {
* $this->title = $root->title;
* }
* }
* ```
*
*
* This function is called by the recurrent interface once when expanding an recurrent instance and when editing
* the root event. This function may behave differently when the $create parameter is set
*
* This function should synchronize the data of this event with the given $root event, by copying all data and
* content as title description texts and additional model data.
*
* Here are examples of data which should be copied:
*
* - content owner [[Content::$created_by]]
* - content visibility [[Content::$visibility]]
* - title
* - description
* - timezone
* - all_day
*
* The following data is copied by default and therefore does not have to be copied manually:
*
* - uid
* - recurrence root id
* - rrule
*
* The following data should not be touched:
*
* - uid
* - start_datetime
* - end_datetime
* - recurrence_id
*
* @param $root static
* @param $create
* @return mixed
*/
public function syncEventData($root, $original = null)
{
// TODO: Implement syncEventData() method.
}
/**
* @return RecurrenceQueryIF
*/
public function getRecurrenceQuery()
{
// TODO: Implement getRecurrenceQuery() method.
}
/**
* Should delete the event. This is required in order to delete recurrent event instances.
*/
public function delete()
{
// TODO: Implement delete() method.
}
}