diff --git a/lib/classes/ModulesNotification.class.php b/lib/classes/ModulesNotification.class.php index 324b5c5d61ade3d8d3a7569c94a5540fdffa3292..3ee66421ea0065e65eaad21cf49611730aef8ca9 100644 --- a/lib/classes/ModulesNotification.class.php +++ b/lib/classes/ModulesNotification.class.php @@ -142,12 +142,15 @@ class ModulesNotification } } if (count($news)) { - $auth_plugin = User::find($user_id)->auth_plugin; + $user = User::find($user_id); + $auth_plugin = $user->auth_plugin; if (!is_a('StudipAuth' . ucfirst($auth_plugin), 'StudipAuthSSO', true)) { $auth_plugin = null; } $template = $GLOBALS['template_factory']->open('mail/notification_html'); $template->set_attribute('lang', getUserLanguagePath($user_id)); + $template->set_attribute('rec_fullname', $user->getFullname('full')); + $template->set_attribute('rec_username', $user->username); $template->set_attribute('news', $news); $template->set_attribute('sso', $auth_plugin); diff --git a/lib/messaging.inc.php b/lib/messaging.inc.php index 8f2b6ce61ec4ad4ecbf9903577e74cdd89da0384..0fb7c3fd47c3c648bf337f53276816c00b99a474 100644 --- a/lib/messaging.inc.php +++ b/lib/messaging.inc.php @@ -183,7 +183,7 @@ class messaging if ($snd_user_id != "____%system%____") { $sender = User::find($snd_user_id); - $snd_fullname = $sender->getFullName(); + $snd_fullname = $sender->getFullName() . ' (' . $sender->username . ')'; $reply_to = $sender->Email; } $attachments = []; @@ -198,8 +198,8 @@ class messaging $template->set_attribute('message', kill_format($message)); $template->set_attribute('rec_fullname', $rec_fullname); $template->set_attribute('rec_email', $to); + $template->set_attribute('snd_email', $reply_to); if (isset($snd_fullname)) { - $template->set_attribute('snd_email', $reply_to); $template->set_attribute('snd_fullname', $snd_fullname); } if ($attachments_as_links) { @@ -211,9 +211,10 @@ class messaging $template->set_attribute('lang', getUserLanguagePath($rec_user_id)); $template->set_attribute('message', $message); $template->set_attribute('rec_fullname', $rec_fullname); + $template->set_attribute('rec_username', $receiver->username); $template->set_attribute('rec_email', $to); + $template->set_attribute('snd_email', $reply_to); if (isset($snd_fullname)) { - $template->set_attribute('snd_email', $reply_to); $template->set_attribute('snd_fullname', $snd_fullname); } if ($attachments_as_links) { @@ -296,8 +297,6 @@ class messaging // system-signatur $snd_user_id = '____%system%____'; setTempLanguage(); - $message .= $this->sig_string; - $message .= _('Diese Nachricht wurde automatisch vom Stud.IP-System generiert. Sie können darauf nicht antworten.'); restoreLanguage(); } @@ -306,11 +305,19 @@ class messaging $query = "INSERT INTO message (message_id, autor_id, subject, message, show_adressees, priority, mkdate) VALUES (?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP())"; $statement = DBManager::get()->prepare($query); + + $internal_message = $message; + + if ($snd_user_id === '____%system%____') { + $internal_message .= $this->sig_string . ' ' . + _('Diese Nachricht wurde automatisch vom Stud.IP-System generiert. Sie können darauf nicht antworten.'); + } + $statement->execute([ $tmp_message_id, $snd_user_id, $subject, - $message, + $internal_message, (int) $show_adressees, $priority, ]); diff --git a/templates/mail/html.php b/templates/mail/html.php index e7379653ed5779967858d4876619e60ef89dd037..cfb4e95fc724fe9e51caefe2ad5447afd9190655 100644 --- a/templates/mail/html.php +++ b/templates/mail/html.php @@ -1,38 +1,119 @@ -<? +<?php # Lifter010: TODO +/** + * @var string $snd_fullname + * @var string $rec_fullname + * @var string $rec_username + * @var string $message + * @var array $attachments + */ ?> <html> -<head> - <?= Assets::stylesheet('studip-base.css') ?> -</head> -<body> - <div style="background-color: white; margin: auto; width: 700px; padding: 4px;"> - <?= Assets::img("locale/$lang/LC_PICTURES/mail_header.png") ?> - <p> - <?= formatReady($message, true, true) ?> - </p> - <? if (isset($attachments) && count($attachments)) : ?> - <hr> - <span class="minor"> - <?=_("Dateianhänge:")?> - <ul> - <? foreach($attachments as $attachment) : ?> - <li> - <a href="<?= $attachment->getDownloadURL() ?>"><?= htmlReady($attachment->name . ' (' . relsize($attachment->file->size, false) . ')') ?></a> - </li> - <? endforeach;?> - </ul> - </span> - <? endif;?> - <hr> - <span class="minor"> - <? if ($snd_fullname) : ?> - <?= sprintf(_('Diese E-Mail ist eine Kopie einer systeminternen Nachricht, die in Stud.IP von %s (<a href="%s">%s</a>) an %s (<a href="%s">%s</a>) versendet wurde.'), htmlReady($snd_fullname), htmlReady($snd_email),htmlReady($snd_email), htmlReady($rec_fullname), htmlReady($rec_email),htmlReady($rec_email)) ?> - <? else : ?> - <?= sprintf(_("Diese E-Mail ist eine Kopie einer systeminternen Nachricht, die in Stud.IP an %s versendet wurde."), htmlReady($rec_fullname)) ?> - <? endif ?> - <br><?= sprintf(_("Sie erreichen Stud.IP unter %s"), "<a href=\"" . $GLOBALS['ABSOLUTE_URI_STUDIP'] . "\">" . $GLOBALS['ABSOLUTE_URI_STUDIP'] . "</a>") ?> - </span> - </div> -</body> + <head> + <style> + body { + background-color: #e7ebf1; + font-family: 'Lato', Helvetica, Arial, sans-serif; + } + + a, a:link, a:visited { + color: #28497c; + text-decoration: none; + } + a[href] { + transition: color .3s; + } + a[disabled] { + pointer-events: none; + } + + a:hover, a:active { + color: #d60000; + text-decoration: none; + } + + .studip-mail { + background-color: #ffffff; + border: 1px solid #d0d7e3; + margin: 25px auto; + padding: 10px 25px 25px 25px; + width: 700px; + } + + .studip-mail header { + border-bottom: 1px solid #d0d7e3; + text-align: center; + padding-bottom: 15px; + } + + .studip-mail-header-logo { + margin-left: auto; + margin-right: auto; + } + + .studip-mail-sndrec { + margin-top: 0; + } + + .studip-mail-message { + line-height: 1.33; + padding: 15px 25px; + } + + .studip-mail footer { + border-top: 1px solid #d0d7e3; + text-align: center; + padding-top: 15px; + } + </style> + </head> + <body> + <article class="studip-mail"> + <header> + <div class="studip-mail-header-logo" > + <img alt="" width="130" height="92" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODQxLjg5IDU5NS4yOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgODQxLjg5IDU5NS4yOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMTM0MDk0IiBkPSJNNzYzLjE3MiwyNDguMzU1YzAtMTcuNjM5LTE0LjMzMS0zMS45NTYtMzEuOTctMzEuOTU2Yy0xNy42NTIsMC0zMS45NDEsMTQuMzE2LTMxLjk0MSwzMS45NTYNCgkJczE0LjI4OSwzMS45NywzMS45NDEsMzEuOTdDNzQ4Ljg0MSwyODAuMzI1LDc2My4xNzIsMjY1Ljk5NCw3NjMuMTcyLDI0OC4zNTUgTTczMS4yMDIsMTYzLjI3Mg0KCQljLTQ2Ljk1OCwwLTg1LjA3NiwzOC4xMTItODUuMDksODUuMDYzaDI1LjM0YzAuMDA2LTMyLjk2NiwyNi43NjItNTkuNzQzLDU5Ljc1LTU5Ljc0M2MzMywwLDU5Ljc3NywyNi43ODMsNTkuNzc3LDU5Ljc2NA0KCQljMCwzMi45ODUtMjYuNzYyLDU5Ljc1Ni01OS43NSw1OS43NjJ2MjUuMzRjNDYuOTc4LTAuMDEzLDg1LjA2My0zOC4xMzksODUuMDYzLTg1LjEwM1M3NzguMTkzLDE2My4yNzIsNzMxLjIwMiwxNjMuMjcyIi8+DQoJPHJlY3QgeD0iNDg2LjkxNiIgeT0iMzk5LjMxOCIgZmlsbD0iI0FFMEEwRCIgd2lkdGg9IjMwLjY0MSIgaGVpZ2h0PSIzMC42NDEiLz4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTUxLjAwMiwzODUuNTY3YzEwLjk1MSw5LjUyNCwyNS4yMzYsMTYuMTksMzguMDkzLDE2LjE5YzE0LjUyMiwwLDIxLjY2NC01LjcxNCwyMS42NjQtMTQuOTk4DQoJCQljMC05Ljc2My04LjgwOC0xMi44NTgtMjIuMzgtMTguNTcxbC0xOS45OTgtOC41NzFjLTE2LjE5LTYuNDI5LTMxLjQyNy0xOS43NjEtMzEuNDI3LTQyLjM3OA0KCQkJYzAtMjUuNzEzLDIzLjA5NS00Ni4xODgsNTUuMjM1LTQ2LjE4OGMxNy44NTYsMCwzNi42NjQsNy4xNDIsNDkuOTk2LDIwLjQ3NWwtMTcuNjE3LDIyLjE0MmMtMTAuMjM5LTcuODU4LTIwLTEyLjM4MS0zMi4zOC0xMi4zODENCgkJCWMtMTEuOTA1LDAtMTkuNzYxLDUuMjM5LTE5Ljc2MSwxNC4wNDdjMCw5LjUyNCwxMC4yMzcsMTIuODU2LDIzLjgwOCwxOC4zMzJsMTkuNzYxLDguMDk1DQoJCQljMTguODA4LDcuNjE5LDMwLjcxMiwyMC4yMzcsMzAuNzEyLDQyLjE0MWMwLDI1LjcxMy0yMS40MjcsNDguMDkzLTU4LjMzLDQ4LjA5M2MtMjAuMjM2LDAtNDEuNjY0LTcuNjE5LTU3LjYxNS0yMi4zOA0KCQkJTDUxLjAwMiwzODUuNTY3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMTgzLjM3OCwzMzIuMTAzaC0zMi45ODN2LTI3LjYxNWg5OC45NTJ2MjcuNjE1aC0zMi45ODV2OTcuMDM0aC0zMi45ODNWMzMyLjEwM3oiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTI2MS4xNTUsMzA0LjQ4N2gzMi45ODN2NjguMjY5YzAsMjIuMjQ2LDUuNzU0LDMwLjMsMTguNzk0LDMwLjNjMTMuMDQsMCwxOS4xNzctOC4wNTUsMTkuMTc3LTMwLjMNCgkJCXYtNjguMjY5aDMxLjgzNHY2NC40MzVjMCw0Mi41NzItMTYuMTA5LDYyLjUxNS01MS4wMSw2Mi41MTVzLTUxLjc3Ny0xOS45NDMtNTEuNzc3LTYyLjUxNVYzMDQuNDg3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMzc5LjEyMiwzMDQuNDg3aDM2LjgxOWMzNy45NywwLDY0LjA1LDE3LjY0Myw2NC4wNSw2MS43NWMwLDQ0LjEwNS0yNi4wOCw2Mi44OTktNjIuMTMyLDYyLjg5OWgtMzguNzM3DQoJCQlWMzA0LjQ4N3ogTTQxNC4wMjMsNDAyLjY3MmMxOC4wMjcsMCwzMi4yMTgtNy4yODYsMzIuMjE4LTM2LjQzNWMwLTI5LjE0OS0xNC4xOTEtMzUuMjg2LTMyLjIxOC0zNS4yODZoLTEuOTE2djcxLjcyMUg0MTQuMDIzeiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNNTMyLjU1LDI3My45MDZoMzUuMjM2djE1NS4yM0g1MzIuNTVWMjczLjkwNnoiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTU4NC40NDQsMjczLjkwNmg1Ni42NjNjMzMuODA4LDAsNjAuNzEyLDEyLjM4MSw2MC43MTIsNDkuOTk4YzAsMzYuNDI3LTI3Ljg1Niw1Mi42MTUtNjAuNzEyLDUyLjYxNQ0KCQkJaC0yMS40Mjd2NTIuNjE3aC0zNS4yMzVWMjczLjkwNnogTTYzOC45NjQsMzQ4LjY2NWMxOS4yODUsMCwyOC41NjktOC41NzEsMjguNTY5LTI0Ljc2MWMwLTE2LjE5LTkuOTk4LTIyLjE0Mi0yOC41NjktMjIuMTQyDQoJCQloLTE5LjI4NXY0Ni45MDNINjM4Ljk2NHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg=="> + </div> + <p class="studip-mail-sndrec"> + <?php if ($snd_fullname) : ?> + <?= sprintf(_('%1$s hat Ihnen eine Nachricht in Stud.IP geschickt.'), + htmlReady($snd_fullname), htmlReady($rec_fullname), htmlReady($rec_username)) ?> + <?php else : ?> + <?= sprintf( + _('Stud.IP hat eine automatische Systemnachricht für Sie.'), + htmlReady($rec_fullname), + htmlReady($rec_username) + ) ?> + <?php endif ?> + </p> + </header> + <section class="studip-mail-message"> + <p> + <?= formatReady($message, true, true) ?> + </p> + <?php if (isset($attachments) && count($attachments)) : ?> + <div class="studip-mail-attachments"> + <?= _('Dateianhänge:') ?> + <ul> + <?php foreach($attachments as $attachment) : ?> + <li> + <a href="<?= $attachment->getDownloadURL() ?>"><?= htmlReady($attachment->name . + ' (' . relsize($attachment->file->size, false) . ')') ?></a> + </li> + <?php endforeach ?> + </ul> + </div> + <?php endif ?> + </section> + <footer> + <?= sprintf( + _('Diese E-Mail ist eine Kopie einer systeminternen Nachricht, die in Stud.IP an %1$s (%2$s) versendet wurde.'), + htmlReady($rec_fullname), + htmlReady($rec_username) + ) + ?> + <br><?= sprintf(_('Sie erreichen Stud.IP unter %s'), + '<a href="' . $GLOBALS['ABSOLUTE_URI_STUDIP'] . '">' . $GLOBALS['ABSOLUTE_URI_STUDIP'] . '</a>') ?> + </footer> + </article> + </body> </html> diff --git a/templates/mail/notification_html.php b/templates/mail/notification_html.php index 5060fb7452de147f04fe33d0201851b6019783e1..48f4cef8dafd6a09c817f558a3f41b15bbf4b5c8 100644 --- a/templates/mail/notification_html.php +++ b/templates/mail/notification_html.php @@ -1,50 +1,122 @@ <? # Lifter010: TODO +/** + * @var string $rec_fullname + * @var string $rec_username + * @var array $news + * @var string $sso + */ ?> <html> -<head> - <?= Assets::stylesheet('studip-base.css') ?> -</head> -<body> - <div style="background-color: white; margin: auto; max-width: 700px; padding: 4px;"> - <?= Assets::img("locale/$lang/LC_PICTURES/mail_header_notification.png") ?> - <p> - <?= _("Sie erhalten hiermit in regelmäßigen Abständen Informationen über Neuigkeiten und Änderungen in belegten Veranstaltungen.") ?> - <br><br> - <?= _("Über welche Inhalte und in welchem Format Sie informiert werden wollen, können Sie hier einstellen:") ?> - <br> - <a href="<?= URLHelper::getLink('dispatch.php/settings/notification', ['again' => 'yes', 'sso' => $sso]) ?>"> - <?= URLHelper::getLink('dispatch.php/settings/notification', ['again' => 'yes', 'sso' => $sso]) ?> - </a> - </p> - - <table class="default"> - <? foreach ($news as $sem_titel => $data) : ?> - <tr class="table_header_bold"> - <td colspan="2" style="font-weight: bold;"> - <a href="<?= URLHelper::getLink('seminar_main.php', ['again' => 'yes', 'sso' => $sso, 'auswahl' => $data[0]['range_id']]) ?>"> - <?= htmlReady($sem_titel) ?> - <?= (($semester = get_semester($data[0]['range_id'])) ? ' ('.$semester.')' : '') ?> - </a> - </td> - </tr> - - <? foreach ($data as $module) : ?> - <tr class="<?= TextHelper::cycle('hover_odd', 'hover_even') ?>"> - <td> - <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= htmlReady($module['text']) ?></a> - </td> - <td> - <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= $module['icon']->asImg(['title' => $module['text']]) ?></a> - </td> - </tr> - <? endforeach ?> - <? endforeach ?> - </table> - <hr> - <span class="minor"> - <?= _("Diese Nachricht wurde automatisch vom Stud.IP-System generiert. Sie können darauf nicht antworten.") ?> - </span> - </div> -</body> + <head> + <style> + body { + background-color: #e7ebf1; + font-family: 'Lato', Helvetica, Arial, sans-serif; + } + + a, a:link, a:visited { + color: #28497c; + text-decoration: none; + } + a[href] { + transition: color .3s; + } + a[disabled] { + pointer-events: none; + } + + a:hover, a:active { + color: #d60000; + text-decoration: none; + } + + .studip-mail { + background-color: #ffffff; + border: 1px solid #d0d7e3; + margin: 25px auto; + padding: 10px 25px 25px 25px; + width: 700px; + } + + .studip-mail header { + border-bottom: 1px solid #d0d7e3; + text-align: center; + padding-bottom: 15px; + } + + .studip-mail-header-logo { + margin-left: auto; + margin-right: auto; + } + + .studip-mail-sndrec { + margin-top: 0; + } + + .studip-mail-message { + line-height: 1.33; + padding: 15px 25px; + } + + .studip-mail footer { + border-top: 1px solid #d0d7e3; + text-align: center; + padding-top: 15px; + } + </style> + </head> + <body> + <article class="studip-mail"> + <header> + <div class="studip-mail-header-logo" > + <img alt="" width="130" height="92" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODQxLjg5IDU5NS4yOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgODQxLjg5IDU5NS4yOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMTM0MDk0IiBkPSJNNzYzLjE3MiwyNDguMzU1YzAtMTcuNjM5LTE0LjMzMS0zMS45NTYtMzEuOTctMzEuOTU2Yy0xNy42NTIsMC0zMS45NDEsMTQuMzE2LTMxLjk0MSwzMS45NTYNCgkJczE0LjI4OSwzMS45NywzMS45NDEsMzEuOTdDNzQ4Ljg0MSwyODAuMzI1LDc2My4xNzIsMjY1Ljk5NCw3NjMuMTcyLDI0OC4zNTUgTTczMS4yMDIsMTYzLjI3Mg0KCQljLTQ2Ljk1OCwwLTg1LjA3NiwzOC4xMTItODUuMDksODUuMDYzaDI1LjM0YzAuMDA2LTMyLjk2NiwyNi43NjItNTkuNzQzLDU5Ljc1LTU5Ljc0M2MzMywwLDU5Ljc3NywyNi43ODMsNTkuNzc3LDU5Ljc2NA0KCQljMCwzMi45ODUtMjYuNzYyLDU5Ljc1Ni01OS43NSw1OS43NjJ2MjUuMzRjNDYuOTc4LTAuMDEzLDg1LjA2My0zOC4xMzksODUuMDYzLTg1LjEwM1M3NzguMTkzLDE2My4yNzIsNzMxLjIwMiwxNjMuMjcyIi8+DQoJPHJlY3QgeD0iNDg2LjkxNiIgeT0iMzk5LjMxOCIgZmlsbD0iI0FFMEEwRCIgd2lkdGg9IjMwLjY0MSIgaGVpZ2h0PSIzMC42NDEiLz4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTUxLjAwMiwzODUuNTY3YzEwLjk1MSw5LjUyNCwyNS4yMzYsMTYuMTksMzguMDkzLDE2LjE5YzE0LjUyMiwwLDIxLjY2NC01LjcxNCwyMS42NjQtMTQuOTk4DQoJCQljMC05Ljc2My04LjgwOC0xMi44NTgtMjIuMzgtMTguNTcxbC0xOS45OTgtOC41NzFjLTE2LjE5LTYuNDI5LTMxLjQyNy0xOS43NjEtMzEuNDI3LTQyLjM3OA0KCQkJYzAtMjUuNzEzLDIzLjA5NS00Ni4xODgsNTUuMjM1LTQ2LjE4OGMxNy44NTYsMCwzNi42NjQsNy4xNDIsNDkuOTk2LDIwLjQ3NWwtMTcuNjE3LDIyLjE0MmMtMTAuMjM5LTcuODU4LTIwLTEyLjM4MS0zMi4zOC0xMi4zODENCgkJCWMtMTEuOTA1LDAtMTkuNzYxLDUuMjM5LTE5Ljc2MSwxNC4wNDdjMCw5LjUyNCwxMC4yMzcsMTIuODU2LDIzLjgwOCwxOC4zMzJsMTkuNzYxLDguMDk1DQoJCQljMTguODA4LDcuNjE5LDMwLjcxMiwyMC4yMzcsMzAuNzEyLDQyLjE0MWMwLDI1LjcxMy0yMS40MjcsNDguMDkzLTU4LjMzLDQ4LjA5M2MtMjAuMjM2LDAtNDEuNjY0LTcuNjE5LTU3LjYxNS0yMi4zOA0KCQkJTDUxLjAwMiwzODUuNTY3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMTgzLjM3OCwzMzIuMTAzaC0zMi45ODN2LTI3LjYxNWg5OC45NTJ2MjcuNjE1aC0zMi45ODV2OTcuMDM0aC0zMi45ODNWMzMyLjEwM3oiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTI2MS4xNTUsMzA0LjQ4N2gzMi45ODN2NjguMjY5YzAsMjIuMjQ2LDUuNzU0LDMwLjMsMTguNzk0LDMwLjNjMTMuMDQsMCwxOS4xNzctOC4wNTUsMTkuMTc3LTMwLjMNCgkJCXYtNjguMjY5aDMxLjgzNHY2NC40MzVjMCw0Mi41NzItMTYuMTA5LDYyLjUxNS01MS4wMSw2Mi41MTVzLTUxLjc3Ny0xOS45NDMtNTEuNzc3LTYyLjUxNVYzMDQuNDg3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMzc5LjEyMiwzMDQuNDg3aDM2LjgxOWMzNy45NywwLDY0LjA1LDE3LjY0Myw2NC4wNSw2MS43NWMwLDQ0LjEwNS0yNi4wOCw2Mi44OTktNjIuMTMyLDYyLjg5OWgtMzguNzM3DQoJCQlWMzA0LjQ4N3ogTTQxNC4wMjMsNDAyLjY3MmMxOC4wMjcsMCwzMi4yMTgtNy4yODYsMzIuMjE4LTM2LjQzNWMwLTI5LjE0OS0xNC4xOTEtMzUuMjg2LTMyLjIxOC0zNS4yODZoLTEuOTE2djcxLjcyMUg0MTQuMDIzeiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNNTMyLjU1LDI3My45MDZoMzUuMjM2djE1NS4yM0g1MzIuNTVWMjczLjkwNnoiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTU4NC40NDQsMjczLjkwNmg1Ni42NjNjMzMuODA4LDAsNjAuNzEyLDEyLjM4MSw2MC43MTIsNDkuOTk4YzAsMzYuNDI3LTI3Ljg1Niw1Mi42MTUtNjAuNzEyLDUyLjYxNQ0KCQkJaC0yMS40Mjd2NTIuNjE3aC0zNS4yMzVWMjczLjkwNnogTTYzOC45NjQsMzQ4LjY2NWMxOS4yODUsMCwyOC41NjktOC41NzEsMjguNTY5LTI0Ljc2MWMwLTE2LjE5LTkuOTk4LTIyLjE0Mi0yOC41NjktMjIuMTQyDQoJCQloLTE5LjI4NXY0Ni45MDNINjM4Ljk2NHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg=="> + </div> + <p class="studip-mail-sndrec"> + <?= sprintf( + _('Stud.IP hat eine automatische Systemnachricht für Sie.'), + htmlReady($rec_fullname), + htmlReady($rec_username) + ) ?> + </p> + <p> + <?= _("Sie erhalten hiermit in regelmäßigen Abständen Informationen über Neuigkeiten und Änderungen in belegten Veranstaltungen.") ?> + <br><br> + <?= _("Über welche Inhalte und in welchem Format Sie informiert werden wollen, können Sie hier einstellen:") ?> + <br> + <a href="<?= URLHelper::getLink('dispatch.php/settings/notification', ['again' => 'yes', 'sso' => $sso]) ?>"> + <?= URLHelper::getLink('dispatch.php/settings/notification', ['again' => 'yes', 'sso' => $sso]) ?> + </a> + </p> + </header> + <section class="studip-mail-message"> + <table class="default"> + <? foreach ($news as $sem_titel => $data) : ?> + <tr class="table_header_bold"> + <td style="font-weight: bold;"> + <a href="<?= URLHelper::getLink('seminar_main.php', ['again' => 'yes', 'sso' => $sso, 'auswahl' => $data[0]['range_id']]) ?>"> + <?= htmlReady($sem_titel) ?> + <?= (($semester = Course::find($data[0]['range_id'])->semester_text) ? ' ('.$semester.')' : '') ?> + </a> + </td> + </tr> + <? foreach ($data as $module) : ?> + <tr class="<?= TextHelper::cycle('hover_odd', 'hover_even') ?>"> + <td> + <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= htmlReady($module['text']) ?></a> + </td> + </tr> + <? endforeach ?> + <? endforeach ?> + </table> + </section> + <footer> + <?= sprintf( + _('Diese E-Mail wurde von Stud.IP an %1$s (%2$s) versendet.'), + htmlReady($rec_fullname), + htmlReady($rec_username) + ) + ?> + </footer> + </body> </html>