%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/ICS.php |
<?php /** *Original script: https://gist.github.com/jakebellacera/635416 */ namespace humhub\modules\calendar\models; use DateInterval; use DateTime; use Yii; /** * Class ICS * @package humhub\modules\calendar\models * @deprecated since 0.7 use humhub\modules\calendar\interfaces\VCalendar instead */ class ICS { const DT_FORMAT_TIME = 'php:His'; const DT_FORMAT_DAY = 'php:Ymd'; protected $summary; protected $description; protected $dtstart; protected $dtend; protected $location; protected $url; protected $timezone; /** * ICS constructor. * @param string $summary * @param string $description * @param string $dtstart * @param string $dtend * @param string $location * @param string $url * @param string $timezone * @param bool $allDay * @throws \Exception */ public function __construct($summary, $description, $dtstart, $dtend, $location, $url, $timezone, $allDay = false) { if($allDay) { $dtend = (new DateTime($dtend))->add(new DateInterval('P1D')); } $this->summary = $this->escapeString($summary); $this->description = $this->escapeString($description); $this->dtstart = $this->formatTimestamp($dtstart, $allDay); $this->dtend = $this->formatTimestamp($dtend, $allDay); $this->location = $this->escapeString($location); $this->url = $this->escapeString($url); $this->timezone = $timezone; } public function __toString() { $rows = $this->buildProps(); $string = implode("\r\n", $rows); return $string; } private function buildProps() { $ics_props = [ 'BEGIN:VCALENDAR', 'VERSION:2.0', 'PRODID:-//hacksw/handcal//NONSGML v1.0//EN', 'CALSCALE:GREGORIAN', 'BEGIN:VEVENT', 'LOCATION:' . $this->location, 'DESCRIPTION:' . $this->description, 'DTSTART:' . $this->dtstart, 'DTEND:' . $this->dtend, 'SUMMARY:' . $this->summary, 'URL:' . $this->url, 'DTSTAMP:' . $this->formatTimestamp('now'), 'UID:' . uniqid(), 'END:VEVENT', 'END:VCALENDAR' ]; return $ics_props; } private function formatTimestamp($timestamp, $allDay = false) { $dt = ($timestamp instanceof DateTime) ? $timestamp : new DateTime($timestamp); $result = Yii::$app->formatter->asDate($dt, self::DT_FORMAT_DAY); if(!$allDay) { $result .= "T". Yii::$app->formatter->asTime($dt, self::DT_FORMAT_TIME); } return $result; } private function escapeString($str) { return preg_replace('/([\,;])/','\\\$1', $str); } }