<?php declare(strict_types=1); /* * This file is part of newsmailer bundle for Contao. * * (c) Benjamin Roth * * @license LGPL-3.0-or-later */ namespace vonRotenberg\NewsmailerBundle\EventListener; use Contao\BackendUser; use Contao\Config; use Contao\CoreBundle\ServiceAnnotation\Callback; use Contao\DataContainer; use Contao\Message; use Contao\NewsModel; use Contao\StringUtil; use Contao\System; use NotificationCenter\Model\Notification; class NewsSendTestmailListener { /** * @Callback(table="tl_news", target="fields.nc_testmail.load") */ public function onLoadCallback($varValue, DataContainer $dc) { return null; } /** * @Callback(table="tl_news", target="fields.nc_testmail.save") */ public function onSaveCallback($varValue, DataContainer $dc) { if ($varValue && System::getContainer()->get('contao.security.token_checker')->hasBackendUser()) { $News = NewsModel::findByPk($dc->id); $User = BackendUser::getInstance(); list($admin_name,$admin_email) = StringUtil::splitFriendlyEmail(Config::get('adminEmail')); if ($News !== null && ($Archive = $News->getRelated('pid')) !== null && ($Notification = Notification::findByPk($Archive->nc_notification)) !== null) { $arrRow = array( 'date' => date('d.m.Y',$News->date), 'headline' => $News->headline, 'teaser' => \Contao\StringUtil::substr(strip_tags(str_ireplace(array('<br />','<br>','<br/>','</p>','<p>'),' ',$News->teaser)),128) ); if (($objJumpTo = $Archive->getRelated('jumpTo')) !== null) { $arrRow['url'] = $objJumpTo->getAbsoluteUrl(sprintf((Config::get('useAutoItem') ? '/%s' : '/items/%s'),$News->alias)).'?ltoken=%%_TOKEN_%%'; } $arrNewsPlain[] = date('d.m.Y',$News->date).' - '.$News->headline; $arrNewsHtml[] = '<div style="margin-bottom: 15px;"><h3>'.$arrRow['date'].' '.$arrRow['headline'].'</h3><p>'.$arrRow['teaser'].'</p>'. ($arrRow['url'] ? '<p><a href="'.$arrRow['url'].'">» Ganze Nachricht lesen...</a></p>' : '') .'</div>'; // User $strEmail = $User->email; if (($Member = \MemberModel::findActiveByEmailAndUsername($strEmail)) !== null) { $strLastname = $Member->firstname; $strFirstname = $Member->lastname; /*if ($Member->nc_news_additionalEmail) { $strEmail .= ','.$Member->nc_news_additionalEmail; }*/ // $strToken = \TokenLogin::getOrRenewUserToken($Member); $strToken = ''; } else { $arrSplitName = explode(" ", $User->name); $strLastname = array_pop($arrSplitName); $strFirstname = implode(" ", $arrSplitName); $strToken = ''; } if ($Notification->send(array ( 'member_email' => $strEmail, 'member_firstname' => $strFirstname, 'member_lastname' => $strLastname, 'news_topics' => implode("\n",$arrNewsPlain), 'news_topics_html' => "<ul>\n<li>".str_replace('%%_TOKEN_%%',$strToken,implode("</li>\n<li>",$arrNewsHtml))."</li>\n</ul>", 'member_login_token' => $strToken, 'admin_email' => $admin_email, ), $GLOBALS['TL_LANGUAGE'])) { Message::addConfirmation(sprintf($GLOBALS['TL_LANG']['tl_news']['MSC']['nc_news_testletter'],$strEmail)); } else { Message::addError($GLOBALS['TL_LANG']['tl_news']['MSC']['nc_news_testletter_error']); } } } return null; } }