summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php')
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php108
1 files changed, 72 insertions, 36 deletions
diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
index f04b8e4c45a..2e580fd78a3 100644
--- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
+++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2018 Thomas Citharel <tcit@tcit.fr>
+ * @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license GNU AGPL version 3 or any later version
*
@@ -20,11 +23,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-
namespace OCA\DAV\CalDAV\Reminder\NotificationProvider;
use OCA\DAV\AppInfo\Application;
-use OCA\DAV\CalDAV\Reminder\AbstractNotificationProvider;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IURLGenerator;
@@ -32,22 +33,24 @@ use OCP\L10N\IFactory as L10NFactory;
use OCP\Notification\IManager;
use OCP\IUser;
use OCP\Notification\INotification;
-use Sabre\VObject\Component\VCalendar;
use OCP\AppFramework\Utility\ITimeFactory;
+use Sabre\VObject\Component\VEvent;
+use Sabre\VObject\Property;
-class PushProvider extends AbstractNotificationProvider {
+/**
+ * Class PushProvider
+ *
+ * @package OCA\DAV\CalDAV\Reminder\NotificationProvider
+ */
+class PushProvider extends AbstractProvider {
/** @var string */
public const NOTIFICATION_TYPE = 'DISPLAY';
- /**
- * @var IManager
- */
+ /** @var IManager */
private $manager;
- /**
- * @var ITimeFactory
- */
+ /** @var ITimeFactory */
private $timeFactory;
/**
@@ -58,42 +61,75 @@ class PushProvider extends AbstractNotificationProvider {
* @param IUrlGenerator $urlGenerator
* @param ITimeFactory $timeFactory
*/
- public function __construct(IConfig $config, IManager $manager, ILogger $logger,
+ public function __construct(IConfig $config,
+ IManager $manager,
+ ILogger $logger,
L10NFactory $l10nFactory,
- IURLGenerator $urlGenerator, ITimeFactory $timeFactory) {
+ IURLGenerator $urlGenerator,
+ ITimeFactory $timeFactory) {
parent::__construct($logger, $l10nFactory, $urlGenerator, $config);
$this->manager = $manager;
$this->timeFactory = $timeFactory;
}
/**
- * Send notification
+ * Send push notification to all users.
*
- * @param VCalendar $vcalendar
+ * @param VEvent $vevent
* @param string $calendarDisplayName
- * @param IUser $user
- * @return void
+ * @param IUser[] $users
* @throws \Exception
*/
- public function send(VCalendar $vcalendar, string $calendarDisplayName, IUser $user):void {
- $lang = $this->config->getUserValue($user->getUID(), 'core', 'lang', $this->l10nFactory->findLanguage());
- $this->l10n = $this->l10nFactory->get('dav', $lang);
+ public function send(VEvent $vevent,
+ string $calendarDisplayName=null,
+ array $users=[]):void {
+ $eventDetails = $this->extractEventDetails($vevent);
+ $eventDetails['calendar_displayname'] = $calendarDisplayName;
- $event = $this->extractEventDetails($vcalendar);
- /** @var INotification $notification */
- $notification = $this->manager->createNotification();
- $notification->setApp(Application::APP_ID)
- ->setUser($user->getUID())
- ->setDateTime($this->timeFactory->getDateTime())
- ->setObject(Application::APP_ID, $event['uid']) // $type and $id
- ->setSubject('calendar_reminder', ['title' => $event['title'], 'start' => $event['start']->getTimestamp()]) // $subject and $parameters
- ->setMessage('calendar_reminder', [
- 'when' => $event['when'],
- 'description' => $event['description'],
- 'location' => $event['location'],
- 'calendar' => $calendarDisplayName
- ])
- ;
- $this->manager->notify($notification);
+ foreach($users as $user) {
+ /** @var INotification $notification */
+ $notification = $this->manager->createNotification();
+ $notification->setApp(Application::APP_ID)
+ ->setUser($user->getUID())
+ ->setDateTime($this->timeFactory->getDateTime())
+ ->setObject(Application::APP_ID, (string) $vevent->UID)
+ ->setSubject('calendar_reminder', [
+ 'title' => $eventDetails['title'],
+ 'start_atom' => $eventDetails['start_atom']
+ ])
+ ->setMessage('calendar_reminder', $eventDetails);
+
+ $this->manager->notify($notification);
+ }
}
+
+ /**
+ * @var VEvent $vevent
+ * @return array
+ * @throws \Exception
+ */
+ protected function extractEventDetails(VEvent $vevent):array {
+ /** @var Property\ICalendar\DateTime $start */
+ $start = $vevent->DTSTART;
+ $end = $this->getDTEndFromEvent($vevent);
+
+ return [
+ 'title' => isset($vevent->SUMMARY)
+ ? ((string) $vevent->SUMMARY)
+ : null,
+ 'description' => isset($vevent->DESCRIPTION)
+ ? ((string) $vevent->DESCRIPTION)
+ : null,
+ 'location' => isset($vevent->LOCATION)
+ ? ((string) $vevent->LOCATION)
+ : null,
+ 'all_day' => $start instanceof Property\ICalendar\Date,
+ 'start_atom' => $start->getDateTime()->format(\DateTime::ATOM),
+ 'start_is_floating' => $start->isFloating(),
+ 'start_timezone' => $start->getDateTime()->getTimezone()->getName(),
+ 'end_atom' => $end->getDateTime()->format(\DateTime::ATOM),
+ 'end_is_floating' => $end->isFloating(),
+ 'end_timezone' => $end->getDateTime()->getTimezone()->getName(),
+ ];
+ }
}