%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/DAV/Reminders/Backend/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/DAV/Reminders/Backend/PDO.php |
<?php /* * Copyright 2004-2014, AfterLogic Corp. * Licensed under AGPLv3 license or AfterLogic license * if commercial version of the product was purchased. * See the LICENSE file for a full license statement. */ namespace afterlogic\DAV\Reminders\Backend; use afterlogic\DAV\Constants; class PDO { /** * Reference to PDO connection * * @var \PDO */ protected $pdo; /** * PDO table name we'll be using * * @var string */ protected $table; protected $calendarTbl; protected $principalsTbl; /** * Creates the backend object. * * @return void */ public function __construct() { $dBPrefix = \CApi::GetSettings()->GetConf('Common/DBPrefix'); $this->pdo = \CApi::GetPDO(); $this->table = $dBPrefix.Constants::T_REMINDERS; $this->calendarTbl = $dBPrefix.Constants::T_CALENDARS; $this->principalsTbl = $dBPrefix.Constants::T_PRINCIPALS; } public function getReminder($eventId, $user = null) { $userWhere = ''; $params = array($eventId); if (isset($user)) { $userWhere = ' AND user = ?'; $params[] = $user; } $stmt = $this->pdo->prepare('SELECT id, user, calendaruri, eventid, time, starttime, allday' . ' FROM '.$this->table.' WHERE eventid = ?'.$userWhere); $stmt->execute($params); return $stmt->fetch(\PDO::FETCH_ASSOC); } public function getReminders($start = null, $end = null) { $values = array(); $timeFilter = ''; if ($start != null && $end != null) { $timeFilter = ' and time > ? and time <= ?'; $values = array( (int) $start, (int) $end ); } $stmt = $this->pdo->prepare('SELECT id, user, calendaruri, eventid, time, starttime, allday' . ' FROM '.$this->table.' WHERE 1 = 1' . $timeFilter); $stmt->execute($values); $cache = array(); while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { $cache[] = array( 'id' => $row['id'], 'user' => $row['user'], 'calendaruri' => $row['calendaruri'], 'eventid' => $row['eventid'], 'time' => $row['time'], 'starttime' => $row['starttime'], 'allday' => $row['allday'] ); } return $cache; } public function addReminder($user, $calendarUri, $eventId, $time = null, $starttime = null, $allday = false) { $values = $fieldNames = array(); $fieldNames[] = 'user'; $values[':user'] = $user; $fieldNames[] = 'calendaruri'; $values[':calendaruri'] = $calendarUri; $fieldNames[] = 'eventid'; $values[':eventid'] = $eventId; if ($time != null) { $fieldNames[] = 'time'; $values[':time'] = (int) $time; } if ($starttime != null) { $fieldNames[] = 'starttime'; $values[':starttime'] = (int) $starttime; } $fieldNames[] = 'allday'; $values[':allday'] = $allday ? 1 : 0; $stmt = $this->pdo->prepare("INSERT INTO ".$this->table." (".implode(', ', $fieldNames).") VALUES (".implode(', ',array_keys($values)).")"); $stmt->execute($values); return $this->pdo->lastInsertId(); } public function deleteReminder($eventId, $user = null) { $userWhere = ''; $params = array($eventId); if (isset($user)) { $userWhere = ' AND user = ?'; $params[] = $user; } $stmt = $this->pdo->prepare('DELETE FROM '.$this->table.' WHERE eventid = ?'.$userWhere); $stmt->execute($params); } public function deleteReminderByCalendar($calendarUri) { $stmt = $this->pdo->prepare('DELETE FROM '.$this->table.' WHERE calendaruri = ?'); $stmt->execute(array($calendarUri)); } public static function getEventId($uri) { return basename($uri, '.ics'); } public static function getEventUri($uri) { return basename($uri); } public static function getCalendarUri($uri) { return dirname($uri); } public static function isEvent($uri) { $sUriExt = pathinfo($uri, PATHINFO_EXTENSION); return ($sUriExt != null && strtoupper($sUriExt) == 'ICS'); } public static function isCalendar($uri) { return (strpos($uri, 'calendars/') !== false || strpos($uri, 'delegation/') !== false); } public function updateReminder($uri, $data, $user) { if (self::isCalendar($uri) && self::isEvent($uri)) { $calendarUri = trim($this->getCalendarUri($uri), '/'); $eventId = $this->getEventId($uri); $aReminder = $this->getReminder($eventId, $user); $this->deleteReminder($eventId, $user); $vCal = \Sabre\VObject\Reader::read($data); $aBaseEvents = $vCal->getBaseComponents('VEVENT'); $bAllDay = false; if (isset($aBaseEvents[0])) { $oBaseEvent = $aBaseEvents[0]; $oNowDT = new \DateTime('now', new \DateTimeZone('UTC')); $iReminderStartTS = $oNowDT->getTimestamp(); if ($aReminder) { $iReminderStartTS = $aReminder['starttime']; } $bAllDay = !$oBaseEvent->DTSTART->hasTime(); $oStartDT = $oBaseEvent->DTSTART->getDateTime(); $oStartDT->setTimezone(new \DateTimeZone('UTC')); $oEndDT = $oBaseEvent->DTEND->getDateTime(); $oEndDT->setTimezone(new \DateTimeZone('UTC')); $oInterval = $oStartDT->diff($oEndDT); $oStartDT = \CCalendarHelper::getNextRepeat($oNowDT, $oBaseEvent); if ($oStartDT) { $iReminderTime = \CCalendarHelper::GetActualReminderTime($oBaseEvent, $oNowDT, $oStartDT); if ($iReminderTime === false && isset($oBaseEvent->RRULE)) { $iStartTS = $oStartDT->getTimestamp(); if ($iStartTS == $iReminderStartTS) { $oStartDT->add($oInterval); $oStartDT = \CCalendarHelper::getNextRepeat($oStartDT, $oBaseEvent); } $iReminderTime = \CCalendarHelper::GetActualReminderTime($oBaseEvent, $oNowDT, $oStartDT); } if ($iReminderTime !== false) { $iOffset = 0; if ($bAllDay) { $oAccount = \afterlogic\DAV\Utils::GetAccountByLogin($user); if ($oAccount) { $oClientTZ = new \DateTimeZone($oAccount->User->ClientTimeZone); $oNowDTClientTZ = new \DateTime("now", $oClientTZ); $iOffset = $oNowDTClientTZ->getOffset(); } } $iStartTS = $oStartDT->getTimestamp(); $this->addReminder($user, $calendarUri, $eventId, $iReminderTime - $iOffset, $iStartTS - $iOffset, $bAllDay); } } } } } }