From b5da170ee953f8fabd591a11f419bac2a2e3a930 Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Thu, 11 Nov 2010 21:19:45 +0100 Subject: [PATCH] Generate a nicer agenda message. --- kronolith/scripts/agenda.php | 30 ++++++++++--- kronolith/templates/agenda/notification.html.php | 53 ++++++++++++++++------- kronolith/themes/graphics/big_agenda.png | Bin 0 -> 4176 bytes 3 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 kronolith/themes/graphics/big_agenda.png diff --git a/kronolith/scripts/agenda.php b/kronolith/scripts/agenda.php index 305807e6f..29fb64d2a 100755 --- a/kronolith/scripts/agenda.php +++ b/kronolith/scripts/agenda.php @@ -32,7 +32,7 @@ function send_agendas() } if (!empty($GLOBALS['conf']['reminder']['server_name'])) { - $GLOBALS['conf']['server']['name'] = $GLOBALS['conf']['reminder']['server_name']; + $_SERVER['SERVER_NAME'] = $GLOBALS['conf']['server']['name'] = $GLOBALS['conf']['reminder']['server_name']; } // Retrieve a list of users associated with each calendar, and @@ -51,11 +51,25 @@ function send_agendas() // Remove duplicates. $users = array_unique($users); + // Generate image mime part first and only once, because we need + // the Content-ID. + $background = new Horde_Themes_Image('big_agenda.png'); + $image = new Horde_Mime_Part(); + $image->setType('image/png'); + $image->setContents(file_get_contents($background->fs)); + $image->setContentId(); + $image->setDisposition('attachment'); + $runtime = new Horde_Date($runtime); $default_timezone = date_default_timezone_get(); $kronolith_driver = Kronolith::getDriver(); $view = new Horde_View(array('templatePath' => KRONOLITH_TEMPLATES . '/agenda', 'encoding' => 'UTF-8')); new Horde_View_Helper_Text($view); + $view->imageId = $image->getContentId(); + $view->date = $runtime; + if (!$GLOBALS['prefs']->isLocked('daily_agenda')) { + $view->prefsUrl = Horde::url(Horde::getServiceLink('prefs', 'kronolith'), true)->remove(session_name()); + } // Loop through the users and generate an agenda for them foreach ($users as $user) { @@ -130,15 +144,14 @@ function send_agendas() ksort($eventlist); $GLOBALS['registry']->setLanguageEnvironment($prefs->getValue('language')); $twentyFour = $prefs->getValue('twentyFour'); - $dateFormat = $prefs->getValue('date_format'); $view->pad = max(Horde_String::length(_("All day")) + 2, $twentyFour ? 6 : 8); - $view->date = $runtime->strftime($dateFormat); + $view->dateFormat = $prefs->getValue('date_format'); $view->timeformat = $twentyFour ? 'H:i' : 'h:ia'; $view->events = $eventlist; $mime_mail = new Horde_Mime_Mail( - array('subject' => sprintf(_("Your daily agenda for %s"), $view->date), + array('subject' => sprintf(_("Your daily agenda for %s"), $runtime->strftime($view->dateFormat)), 'to' => $email, 'from' => $GLOBALS['conf']['reminder']['from_addr'], 'charset' => 'UTF-8')); @@ -153,12 +166,19 @@ function send_agendas() $bodyText->setType('text/plain'); $bodyText->setCharset('UTF-8'); $bodyText->setContents($view->render('notification.plain.php')); + $bodyText->setDisposition('inline'); $multipart->addPart($bodyText); $bodyHtml = new Horde_Mime_Part(); $bodyHtml->setType('text/html'); $bodyHtml->setCharset('UTF-8'); $bodyHtml->setContents($view->render('notification.html.php')); - $multipart->addPart($bodyHtml); + $bodyHtml->setDisposition('inline'); + $related = new Horde_Mime_Part(); + $related->setType('multipart/related'); + $related->setContentTypeParameter('start', $bodyHtml->setContentId()); + $related->addPart($bodyHtml); + $related->addPart($image); + $multipart->addPart($related); $mime_mail->setBasePart($multipart); Horde::logMessage(sprintf('Sending daily agenda to %s', $email), 'DEBUG'); diff --git a/kronolith/templates/agenda/notification.html.php b/kronolith/templates/agenda/notification.html.php index b80afcbce..fbd3ec0c3 100644 --- a/kronolith/templates/agenda/notification.html.php +++ b/kronolith/templates/agenda/notification.html.php @@ -1,19 +1,42 @@ -

h(sprintf(_("Your daily agenda for %s"), $this->date)) ?>

+

h(_("Your daily agenda")) ?>

- - events as $event): ?> +
+ +
+ + + + + + + +
+ date->mday ?> +
date->strftime('%B') ?>
+
+ + events as $event): ?> - - - - - + + + + + + -
- isAllDay()): ?> - h(_("All day")) ?> - - h($event->start->format($this->timeformat)) ?> - + > + + + isAllDay()): ?> + h(_("All day")) ?> + + h($event->start->format($this->timeformat)) ?> + - h($event->title) ?>
 h($event->title) ?>
+
+ + + +prefsUrl): ?> +

prefsUrl . '">', '') ?>

+ diff --git a/kronolith/themes/graphics/big_agenda.png b/kronolith/themes/graphics/big_agenda.png new file mode 100644 index 0000000000000000000000000000000000000000..88ce7d10fe35bbebf60322763ed4f3933b611b34 GIT binary patch literal 4176 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