%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/Handler/
Upload File :
Create Path :
Current File : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/Handler/MailHandler.php

<?php
/**
 * Created by PhpStorm.
 * User: Julian Gilles
 * Date: 28.07.14
 * Time: 11:08
 */
namespace Basis\Handler;

use Basis\Event\Event;
use Basis\Handler\BaseHandler;
use Basis\Model\User\UserFactory;
use Exception;
use ReviewBase\DB\TableGateway\Feature\CertifiedOrNullFeature;
use ReviewBase\DB\TableGateway\Feature\InspectFeature;
use SlmMail\Mail\Message\Mandrill;
use SlmMail\Mail\Transport\HttpTransport;
use SlmMail\Service\MandrillService;
use Zend\I18n\Translator\Translator;
use Zend\Mail;
use Zend\Mime\Message as MimeMessage;
use Zend\Mime\Part as MimePart;
use Zend\Http\Client;
use Zend\Json\Json;
use Zend\Mail\Storage\Folder\Maildir;

class MailHandler extends BaseHandler
{

    protected $_contentHtml = <<<'HTML'
<tr>
  <td width="600" colspan="3" height="8" class="layout">&nbsp;</td>
</tr>
<tr>
  <td width="10"></td>
  <td width="580">*|CONTENT|*</td>
  <td width="10"></td>
</tr>
<tr>
  <td width="600" colspan="3" height="38" class="layout">&nbsp;</td>
</tr>
HTML;


    protected  $_serviceLocator;

    /*
    * @var \SlmMail\Mail\Transport\HttpTransport $_mandrillTransport
    */

    protected $_mandrillTransport;

    /*
    * @var \SlmMail\Service\MandrillService $_mandrillService
    */

    protected $_mandrillService;

    protected $_urlViewHelper;

    /*
     * @var string $baseUrl
     */
    protected  $_baseUrl;
    
    protected $_fromMail;
    
    protected $_fromMailNoReply;
    
    protected $_fromName;
    
    protected $_developmentOutgoingMail;
    
    protected $_bccMail;
    
//    protected $_developmentEmailMode;

    protected $_applicationConfig = null;

    protected $_emailConfig;

    protected $_emailMode;

    protected $_useMailcatcher;
    
    protected $_helpDeskLink;

    protected $_translator = null;

    protected $_marketingURL = null;

    protected $_teamName = null;

    /*
    * @var \Basis\Model\User\UserFactory $_userFactory
    */
//    protected $_userFactory;

    public function __construct($serviceLocator, HttpTransport $mandrillTransport,
        MandrillService $mandrillService, $translator, $applicationConfig, $emailConfig)//, $developmentEmailMode, $useMailcatcher) //UserFactory $userFactory)
    {
        $this->_emailConfig = $emailConfig;
        $this->_applicationConfig;
        $this->translator = $translator;
        $this->_marketingURL = $this->translator->translate('marketingURL');
        $this->_helpDeskLink = $applicationConfig['helpdesk_url'];//'https://apotheken-kritik.zendesk.com/hc/de';
        $this->_fromMail = $applicationConfig['support_email_address'];//"support@apotheken-kritik.de";
        $this->_fromMailNoReply = $applicationConfig['noreply_email_address'];//"noreply@apotheken-kritik.de";
        $this->_fromName = $applicationConfig['from_name_email'];//"apotheken-kritik.de";
        $this->_teamName = $applicationConfig['team_name'];
        //@todo replace developing outgoing email to slack channel email
        $this->_developmentOutgoingMail = $this->_emailConfig['catchAllEmail'];//"florian.koller@conlabz.de";
        $this->_bccMail = $this->_developmentOutgoingMail;
        $this->_emailMode = $this->_emailConfig['emailMode'];
        
        $this->_urlViewHelper = $serviceLocator->get('viewhelpermanager')->get('url');
        $this->_showUrlViewHelper = $serviceLocator->get('viewhelpermanager')->get('ReviewPharmacy\View\Helper\ShowUrlHelper');
             
        $this->_serviceLocator = $serviceLocator;
        $this->_mandrillTransport = $mandrillTransport;
        $this->_mandrillService = $mandrillService;
        //$this->_userFactory = new \Basis\Model\User\UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));

        $this->_baseUrl = $applicationConfig['base_url'];//getenv('APPLICATION_ENV') == "development" ? "http://www.apotheken-kritik.dev" : "http://www.apotheken-kritik.de";
//        $this->_developmentEmailMode = $developmentEmailMode;
//        $this->_useMailcatcher = $useMailcatcher;

        // Entity
        //$this->setTable('user');
        //$this->setEntityType("Basis\Entity\UserEntity");

        // listening
        $this->addEvent("Basis\Event\User\UserChangedCreatedAt", "sendRegistrationMail");
        $this->addEvent("Basis\Event\User\UserChangedRemind", "sendRemindMail");
        $this->addEvent("Basis\Event\User\UserChangedForgotten", "sendForgottenMail");
        $this->addEvent("Basis\Event\User\UserSendMailClaimInformation", "sendClaimInformationMail");
        $this->addEvent("Basis\Event\User\UserSendMailClaimCollision", "sendClaimCollisionMail");
        $this->addEvent("Basis\Event\User\UserSendMailClaimSuccessful", "sendClaimSuccessfulMail");
        $this->addEvent("Basis\Event\User\UserChangedVerifyMail", "sendRegistrationMail");
        
        $this->addEvent("ReviewBase\Event\RateableObjectSite\RateableObjectSiteSendMailClaimActivation", "sendClaimActivationMail");
        $this->addEvent("ReviewBase\Event\RateableObjectSite\RateableObjectSiteSendMailClaimActivationReminder", "sendClaimActivationReminderMail");
        $this->addEvent("ReviewBase\Event\AbstractRateableObject\AbstractRateableObjectCreated", "sendPharmacyCreatedMail");
        $this->addEvent("ReviewBase\Event\AbstractRateableObject\AbstractRateableObjectChanged", "sendPharmacyChangedMail");
        $this->addEvent("ReviewBase\Event\AbstractReview\ReviewApprovedMail", "sendCommentNotificationMail");
    }
    
    private function renderMailContent($text) {
        $html = "";
        $html .= str_replace("*|CONTENT|*", $text, $this->_contentHtml);
        return $html;
    }

    protected function renderMailContentIntoTemplate($title, $text, $templateHTML) {
        //render mail content into content part
        $html = '';
        $html .= str_replace('*|CONTENT|*', $text, $this->_contentHtml);

        //render title into template
        $templateHTML = str_replace('*|TITLE|*', $title, $templateHTML);
        //render content part into template
        $templateHTML = str_replace('*|CONTENT|*', $html, $templateHTML);
        
        return $templateHTML;
    }
    
    protected function sendMail($from, $to, $subject, $content, $title, $ignoreDevelopmentEmailMode = false)
    {
        try {
            $this->transportEmail($from, $to, $subject, $content, $title, $ignoreDevelopmentEmailMode);
        } catch(Exception $e) {
            $e->getMessage();
        }
    }

    protected function transportEmail ($from, $to, $subject, $content, $title, $ignoreDevelopmentEmailMode = false)
    {
        /**
         * if developmentEmailMode is set to true && flag to ignore is not set
         * send emails to developer email address
         */
//        if ($this->_developmentEmailMode && !$ignoreDevelopmentEmailMode)
//        {
//            $to = $this->_developmentOutgoingMail;
//        }

        $originalToRecipient = $to;
        //rewrite all recipients to development email address
        $to = $this->_developmentOutgoingMail;

        //this is a developer option only (from code and not from config)
        if ($ignoreDevelopmentEmailMode)
        {
            $to = $originalToRecipient;
        }

        //decide how to transport
        if ($this->_emailMode === 'production')
        {
            $this->_useMailcatcher = false;
            //explicitly set recipient to original - this is outgoing email
            $to = $originalToRecipient;
        }
        elseif ($this->_emailMode === 'staging')
        {
            $this->_useMailcatcher = false;
            //make sure to send to development email address
            $to = $this->_developmentOutgoingMail;
        }
        else
        {
            //development mode assumed or all else
            $this->_useMailcatcher = true;
        }

        //send normally (via Mandrill) with configured email address
        if(!$this->_useMailcatcher)
        {
            $client = new Client();
            $client->setOptions(array('sslcapath' => '/etc/ssl/certs'));
            $this->_mandrillService->setClient($client);

            $message = new Mandrill();
            $message->addFrom($from, $this->_fromName);
            $message->addTo($to);
            $message->setSubject($subject);
            $message->setEncoding("UTF-8");
            $message->setTemplate("apotheken-notification");
            $message->setOption("important", true);

            $message->setGlobalVariables(
                array(
                    "title" => $title,
                    "content" => $this->renderMailContent(
                        $content ),
                    "likeurl" => "$this->_baseUrl",
                    "email" => $from,
                    "webversion" => "$this->_baseUrl"
                )
            );
            //use mandrill transport layer
            try {
                $this->_mandrillTransport->send($message);
            } catch(Exception $e) {
                $e->getMessage();
            }
        }
        elseif ($this->_useMailcatcher) {
            /**
             * we are on local development so use sendmail for emails and Mailcatcher will get them
             */

            $mailcatcherMessage = new Mail\Message();
            $mailcatcherMessage->setEncoding('UTF-8');
            $mandrillResponse = null;

            //render template from mandrill and use this with the content for the message body
            $client = new Client();
            $client->setOptions(array('sslcapath' => '/etc/ssl/certs'));
            $this->_mandrillService->setClient($client);

            //try to render template
            try {
                $mandrillResponse = $this->_mandrillService->renderTemplate('apotheken-notification');
            }
            catch(Exception $e)
            {
                $e->getMessage();
            }

            //check if there was a valid && usable response from mandrill
            if (isset($mandrillResponse) && array_key_exists('html', $mandrillResponse))
            {
                $mandrillTemplateWithContent = $this->renderMailContentIntoTemplate($title, $content, $mandrillResponse['html']);
                $html = new MimePart($mandrillTemplateWithContent);
                $html->type = "text/html";
                $body = new MimeMessage();
                $body->addPart($html);
                $mailcatcherMessage->setBody($body);
            }
            else
            {
                //use plain text content without template since none could be rendered
                $textOnlyContent = $title . '<br>' . $content;
                $mailcatcherMessage->setBody($textOnlyContent);

            }

            $mailcatcherMessage->addTo($to);
            $mailcatcherMessage->setFrom($from);
            $mailcatcherMessage->setSubject($subject);
            $mailcatcherTransport = new Mail\Transport\Sendmail();
            $mailcatcherTransport->send($mailcatcherMessage);
        }
    }
    
    protected function getUserEmail($entityID)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
 
        $user = $userFactory->getUser($entityID);
        $userEmail = $user->getEmail();
        
        return $userEmail;
    }
    
    protected function getPharmacyEditLink($entityID)
    {
        $link = "<a mc:disable-tracking href='" . $this->_baseUrl . "masterdata/pharmacy/"
                . $entityID ."'>Apotheke verwalten</a>";
        return $link;
    }
    
    protected function sendClaimCollisionMail(Event $event)
    {
        $id = $event->getEntityId();
        $userEmail = $this->getUserEmail($id);
        $params = $event->getParams(false);
        
        $subject = "Übernahme der Apotheke: " . $params->aponame;
        $title = "Apotheke wird schon verwaltet";
        $content = "Die von Ihnen beanspruchte Apotheke wird aktuell schon von "
            . "einem Nutzer verwaltet. Bitte setzen Sie sich mit unserem Support "
            . "in Verbindung falls Sie der Auffassung sind die Berechtigung zu haben "
            . "die Apotheke zu verwalten.<br>"
            . "Den HelpDesk-Bereich erreichen Sie über nachfolgenden Link.<br> "
            . "<a mc:disable-tracking href='" . $this->_helpDeskLink ."'>An Support wenden</a>";
        
        $this->sendMail($this->_fromMail, $userEmail, $subject, $content, $title, true);
    }
    
    protected function sendClaimSuccessfulMail(Event $event)
    {
        $id = $event->getEntityId();
        $userEmail = $this->getUserEmail($id);
        $params = $event->getParams(false);
        
        $subject = "Übernahme der Apotheke: " . $params->aponame;
        $title = "Übernahme erfolgreich";
        $content = "Die von Ihnen beanspruchte Apotheke wurde Ihnen zur Verwaltung "
            . "übertragen. Sie können diese nun in Ihrem Benutzerkonto und "
            . "über den nachfolgenden Link bearbeiten. <br><br>" . $this->getPharmacyEditLink($params->entityid);
        
        /**
         * ignore development email mode since these emails will be send to 
         * registered users
         */
        $this->sendMail($this->_fromMailNoReply, $userEmail, $subject, $content, $title, true);
    }
    
    protected function sendClaimActivationMail(Event $event)
    {
        $id = $event->getEntityId();
        $params = $event->getParams(false);
        $pharmacyEmail = $params->sentTo;
        
        $subject = "Aktivierung des verantwortlichen Nutzers der Apotheke " . $params->aponame;
        $title = "Aktivierung prüfen";
        $userString = $params->usersalutation . " " . $params->usertitle . " " . $params->username . " " . $params->userlastname;
        $content = "Sehr geehrte Damen und Herren, <br>"
            . "Auf " . $this->_marketingURL . " hat ein Benutzer die Verwaltung "
            . "Ihres Apothekeneintrages beantragt. <br><br>"
            . "Wollen Sie dem folgenden Nutzer die Verwaltung der Apotheke: <br>"
            . $params->aponame . " gestatten?<br>"
            . "Nutzerdaten: <br>" . $userString . " (" . $params->useremail . ")<br>"
            . "Sie können den Nutzer als Verwalter der Apotheke freischalten "
            . "indem Sie den nachfolgenden Aktivierungslink aufrufen.<br><br>"
            . "<a mc:disable-tracking href='" . $this->_baseUrl."activate/"
            . $params->hash ."'>" . $userString . " als Verwalter aktivieren</a>";
        
        $this->sendMail($this->_fromMail, $pharmacyEmail, $subject, $content, $title);
    }
    
    protected function sendClaimActivationReminderMail(Event $event)
    {
        $id = $event->getEntityId();
        $params = $event->getParams(false);
        $pharmacyEmail = $params->sentTo;
        
        $subject = "Erinnerung zur Aktivierung des verantwortlichen Nutzers der Apotheke " . $params->aponame;
        $title = "Erinnerung: Aktivierung prüfen";
        $userString = $params->usersalutation . " " . $params->usertitle . " " . $params->username . " " . $params->userlastname;
        $content = "Sehr geehrte Damen und Herren, <br>"
            . "Auf $this->_marketingURL hat ein Benutzer die Verwaltung "
            . "Ihres Apothekeneintrages beantragt. <br>"
            . "Die angeforderte Verknüpfung zwischen Nutzer und Apotheke ist "
            . "noch nicht abgeschlossen. Sie können dies über den folgenden Link "
            . "nachholen. <br><br>"
            . "Wollen Sie dem folgenden Nutzer die Verwaltung der Apotheke: <br>"
            . $params->aponame . " gestatten?<br>"
            . "Nutzerdaten: <br>" . $userString . " (" . $params->useremail . ")<br>"
            . "Sie können den Nutzer als Verwalter der Apotheke freischalten "
            . "indem Sie den nachfolgenden Aktivierungslink aufrufen.<br><br>"
            . "<a mc:disable-tracking href='" . $this->_baseUrl."activate/"
            . $params->hash ."'>" . $userString . " als Verwalter aktivieren</a>";
        
        $this->sendMail($this->_fromMail, $pharmacyEmail, $subject, $content, $title);
    }
    
    protected function sendClaimInformationMail(Event $event)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));

        $id = $event->getEntityId();
        $user = $userFactory->getUser($id);
        $userEmail = $user->getEmail();
        $params = $event->getParams(false);
        
        $subject = "Übernahme der Apotheke: " . $params->aponame;
        $title = "Eintrag übernehmen";
        $content = "Die von Ihnen beanspruchte Apotheke kann Ihnen nicht direkt "
            . "zugeordnet werden. Bitte erstellen Sie in unserem Supportbereich "
            . "eine entsprechende Anfrage, ein Mitarbeiter wird sich dann um "
            . "diese kümmern und Ihnen nach erfolgter Prüfung die Apotheke zuweisen. "
            . "Den HelpDesk-Bereich erreichen Sie über nachfolgenden Link.<br> "
            . "<a mc:disable-tracking href='" . $this->_helpDeskLink ."'>An Support wenden</a>";
        
        $this->sendMail($this->_fromMailNoReply, $userEmail, $subject, $content, $title, true);
    }
    
    protected function sendPharmacyCreatedMail(Event $event)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
        
        $pharmacy = $event->getRateableObject();
        
        $owner = $userFactory->getUser($pharmacy->getOwner());
        $ownerEmail = $owner->getEmail();
        $statusOfPharmacy = $pharmacy->getStatus();
        /**
         * only send email if the one was created from frontend user and has
         * to await approval from support
         */
        if($statusOfPharmacy === InspectFeature::STATUS_INSPECT)
        {
            $subject = "Neuanlage der Apotheke: " . $pharmacy->getName();
            $title = "Apotheke in Prüfung befindlich";
            $content = "Die von Ihnen angelegte Apotheke befindet sich in der Prüfung. <br>"
                . "Sobald diese freigeschaltet wird werden Sie darüber informiert.";
        
            $this->sendMail($this->_fromMailNoReply, $ownerEmail, $subject, $content, $title, true);
        }
    }
    
    protected function sendPharmacyOwnerChangedMail($pharmacy, $oldOwnerID, $newOwnerID)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
        
        $subject = "Verwalterwechsel der Apotheke: " . $pharmacy->getName();
        $title = "Wechsel des verantwortlichen Nutzers";
        
        if (!empty($oldOwnerID))
        {
            $oldOwner = $userFactory->getUser($oldOwnerID);
            $oldOwnerEmail = $oldOwner->getEmail();
            
            $content =  "Sehr geehrte/r " . $oldOwner->getSalutation() . " " . $oldOwner->getTitle() . " " 
                . $oldOwner->getSurname() . ",<br> Die Verwaltung der Apotheke: "
                . $pharmacy->getName() . " wurde auf einen anderen Nutzer übertragen.";
            
            $this->sendMail($this->_fromMailNoReply, $oldOwnerEmail, $subject, $content, $title);
        }
        
        if (!empty($newOwnerID))
        {
            $newOwner = $userFactory->getUser($newOwnerID);
            $newOwnerEmail = $newOwner->getEmail();

            $content =  "Sehr geehrte/r " . $newOwner->getSalutation() . " " . $newOwner->getTitle() . " " 
                . $newOwner->getSurname() . ",<br> Die Verwaltung der Apotheke "
                . $pharmacy->getName() . " wurde auf Sie übertragen. Sie "
                . "erreichen diese über nachfolgenden Link. Dort können Sie "
                . "die Apotheke verwalten.<br>"
                . "<a mc:disable-tracking href='" . $this->_baseUrl . "masterdata/pharmacy/"
                . $pharmacy->getId() ."'>Apotheke verwalten</a>";

            $this->sendMail($this->_fromMailNoReply, $newOwnerEmail, $subject, $content, $title);
        }
  
    }
    
    protected function sendPharmacyChangedMail(Event $event)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
        
        $changedData = Json::decode($event->getParams());
        $pharmacy = $event->getRateableObject();
        $ownerID = $pharmacy->getOwner();
//        $oldOwnerID = $changedData->oldOwnerID;
        
        /**
         * check if only the owner of the pharmacy changed, if so only send
         * an owner change message and no data change email
         */
        $changedDataArray = Json::decode($event->getParams(), true);
        $onlyOwnerChanged = false;
        $countOfChangedFields = count($changedDataArray);
        
        if (($countOfChangedFields === 2) && array_key_exists('oldOwnerID', $changedDataArray) && array_key_exists('owner', $changedDataArray))
        {
            $onlyOwnerChanged = true;
        }
        
        /**
         * check if there was a change in ownership of the object and send emails
         * accordingly
         */
        if (array_key_exists('oldOwnerID', $changedDataArray) && ($changedDataArray['oldOwnerID'] !== $ownerID))
        {
            $this->sendPharmacyOwnerChangedMail($pharmacy, $changedDataArray['oldOwnerID'], $ownerID);
        }
        
        if (!empty($ownerID) && !$onlyOwnerChanged)
        {
            $owner = $userFactory->getUser($ownerID);
            $ownerEmail = $owner->getEmail();
            
            $subject = 'Änderungen an Ihrer Apotheke: '.$pharmacy->getName();
            $title = 'Apothekendatenänderung';
            
            $content =  "Sehr geehrte/r " . $owner->getSalutation() . " " . $owner->getTitle() . " " 
                . $owner->getSurname() . ",<br> Die Daten Ihrer Apotheke: " . $pharmacy->getName() . " haben "
                . "sich geändert. Falls Sie diese Änderungen durchgeführt haben, "
                . "müssen Sie nichts weiter unternehmen. Die Änderungen können "
                . "Sie über nachfolgenden Link einsehen.<br>"
                . "<a mc:disable-tracking href='" . $this->_baseUrl . "masterdata/pharmacy/"
                . $pharmacy->getId() ."'>Änderungen prüfen</a><br>"
                . "Für den Fall das Sie diese Änderungen nicht vorgenommen haben "
                . "kontaktieren Sie bitte unseren Support.";
            
            $this->sendMail($this->_fromMail, $ownerEmail, $subject, $content, $title);
        }
    }

    protected function sendRegistrationMail(Event $event)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
        $id = $event->getEntityId();
        $user = $userFactory->getUser($id);
        $userMail = is_null($user->getVerifyMail()) ? $user->getEmail() : $user->getVerifyMail();

        /*
         * send registration mail if
         *  - user is new and not active
         *  - user should confirm a new mail address
        */
        if($user->getActive() == "0" || !is_null($user->getVerifyMail())){
            $client = new Client();
            $client->setOptions(array('sslcapath' => '/etc/ssl/certs'));
            $this->_mandrillService->setClient($client);

            $userString = $this->getUserSalutationString($user);

            $textContent =  $userString . ",<br>
            klicken Sie bitte auf folgenden Link um Ihren Zugang zu aktivieren:<br><br>
            <a mc:disable-tracking href='" . $this->_baseUrl . "register/confirm/". $user->getHash() ."'>Jetzt $this->_marketingURL - Konto aktivieren</a>"
                    . "<br><br>"
                    . "Ihre Zugangsdaten lauten: <br>"
                    . "E-Mail-Adresse: " . $userMail . "<br>"
                    . "Passwort: --- nur Ihnen bekannt --- <br><br>"
                    . "Ihre Registrierung ist völlig kostenlos und beinhaltet keinerlei "
                    . "Verbindlichkeiten. Ihre E-Mail-Adresse wird nicht bekannt gegeben. "
                    . "Bei weiteren Fragen finden Sie Informationen in unserem Hilfe-Bereich. "
                    . "Sollten Sie Ihre Frage nicht finden, helfen wir Ihnen unter der "
                    . "E-Mail-Adresse $this->_fromMail gerne weiter.<br><br>"
                    . "Mit freundlichen Grüßen<br>"
                    . "Ihr $this->_teamName Team<br><br>"
                    . "Sollte der oben stehende Link nicht funktionieren, kopieren Sie sich "
                    . "bitte diesen Link und rufen Sie ihn in einem Browser-Fenster auf: <br><br>"
                    . $this->_baseUrl. "register/confirm/". $user->getHash() ."<br><br>"
                    . "Bitte beachten Sie: Dies ist eine automatisch generierte E-Mail - "
                    . "eine Antwort auf diese E-Mail ist nicht möglich. Weitergehende "
                    . "Informationen finden Sie in unseren Nutzungsbedingungen und FAQs.";



//            $message = new Mandrill();
//            $message->addFrom($this->_fromMailNoReply, $this->_fromName);
//            $message->addTo($userMail);
//            $message->setSubject("Ihre Registrierung bei apotheken-kritik.de");
//            $message->setEncoding("UTF-8");
//            $message->setTemplate("apotheken-notification");
//            $message->setOption("important", true);
//
//            $message->setGlobalVariables(
//                array(
//                    "title" => "Aktivierung der Registrierung",
//                    "content" => $this->renderMailContent(
//                        $textContent ),
//                    "likeurl" => "http://www.apotheken-kritik.de",
//                    "email" => $this->_fromMailNoReply,
//                    "webversion" => "http://www.apotheken-kritik.de"
//                )
//            );

//            try {
//                $this->_mandrillTransport->send($message);
//            } catch(Exception $e) {
//                $e->getMessage();
//            }

            $title = "Aktivierung der Registrierung";
            $subject = "Ihre Registrierung bei $this->_marketingURL";
            $content = $this->renderMailContent($textContent);
            $this->sendMail($this->_fromMailNoReply, $userMail, $subject, $content, $title, true);
        }
    }

    protected function sendRemindMail(Event $event)
    {
        $params = $event->getParams(false);

        if($params->remind){
            $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
            $client = new Client();
            $client->setOptions(array('sslcapath' => '/etc/ssl/certs'));

            $this->_mandrillService->setClient($client);

            $id = $event->getEntityId();
            $user = $userFactory->getUser($id);

//             $message = new Mandrill();
//             $message->addFrom($this->_fromMailNoReply, $this->_fromName);
//             $message->addTo($user->getEmail());
//             $message->setSubject("Erinnerung: Ihre Registrierung bei apotheken-kritik.de");
//             $message->setEncoding("UTF-8");
//             $message->setTemplate("apotheken-notification");
//             $message->setOption("important", true);

             $userString = $this->getUserSalutationString($user);
             
             $textContent =  $userString . ",<br>"
            . "die Aktivierung Ihres Zugangs für $this->_marketingURL ist noch nicht abgeschlossen.<br>"
            . "klicken Sie bitte auf folgenden Link um Ihren Zugang zu aktivieren:<br><br>"
            . "<a mc:disable-tracking href='" . $this->_baseUrl . "register/confirm/". $user->getHash() ."'>Jetzt $this->_marketingURL - Konto aktivieren</a>"
            . "<br><br>"
            . "Ihre Zugangsdaten lauten: <br>"
            . "E-Mail-Adresse: " . $user->getEmail() . "<br>"
            . "Passwort: --- nur Ihnen bekannt --- <br>"
            . "Ihre Registrierung ist völlig kostenlos und beinhaltet keinerlei "
            . "Verbindlichkeiten. Ihre E-Mail-Adresse wird nicht bekannt gegeben.<br>"
            . "Bei weiteren Fragen finden Sie Informationen in unserem Hilfe-Bereich. "
            . "Sollten Sie Ihre Frage nicht finden, helfen wir Ihnen unter der "
            . "E-Mail-Adresse $this->_fromMail gerne weiter.<br><br>"
            . "Mit freundlichen Grüßen<br>"
            . "Ihr $this->_teamName Team<br><br>"
            . "Sollte der oben stehende Link nicht funktionieren, kopieren Sie sich "
            . "bitte diesen Link und rufen Sie ihn in einem Fenster auf: <br>"
            . $this->_baseUrl. "register/confirm/". $user->getHash() ."<br>"
            . "Bitte beachten Sie: Dies ist eine automatisch generierte E-Mail - "
            . "eine Antwort auf diese E-Mail ist nicht möglich. Weitergehende "
            . "Informationen finden Sie in unseren Nutzungsbedingungen und FAQs.";

//             $message->setGlobalVariables(
//                array(
//                    "title" => "Erinnerungsmail",
//                    "content" => $this->renderMailContent(
//                        $textContent ),
//                    "likeurl" => "http://www.apotheken-kritik.de",
//                    "email" => $this->_fromMailNoReply,
//                    "webversion" => "http://www.apotheken-kritik.de"
//                )
//             );
//
//            try {
//                $this->_mandrillTransport->send($message);
//            } catch(Exception $e) {
//                $e->getMessage();
//            }

            $title = "Erinnerungsmail";
            $subject = "Erinnerung: Ihre Registrierung bei $this->_marketingURL";
            $content = $this->renderMailContent($textContent);
            $this->sendMail($this->_fromMailNoReply, $user->getEmail(), $subject, $content, $title, true);

        }
    }

    protected function sendForgottenMail(Event $event)
    {
        $params = $event->getParams(false);

        if($params->forgotten){
            $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));

            $id = $event->getEntityId();
            $user = $userFactory->getUser($id);

//            $client = new Client();
//            $client->setOptions(array('sslcapath' => '/etc/ssl/certs'));
//            $this->_mandrillService->setClient($client);
//
//            $message = new Mandrill();
//            $message->addFrom($this->_fromMailNoReply, $this->_fromName);
//            $message->addTo($user->getEmail());
//            $message->setSubject("Passwort zurücksetzen");
//            $message->setEncoding("UTF-8");
//            $message->setTemplate("apotheken-notification");
//            $message->setOption("important", true);

            $userString = $this->getUserSalutationString($user);
            
            $textContent =  $userString . ",<br>
            um Ihr Passwort für $this->_marketingURL zurückzusetzen, klicken Sie bitte auf den unten folgenden Link.<br><br>
            <a mc:disable-tracking href='" . $this->_baseUrl . "register/setback/". $user->getHash() ."'>Passwort zurücksetzen</a>";

//            $message->setGlobalVariables(
//                array(
//                    "title" => "Passwort zurücksetzen",
//                    "content" => $this->renderMailContent(
//                        $textContent ),
//                    "likeurl" => "http://www.apotheken-kritik.de",
//                    "email" => $this->_fromMailNoReply,
//                    "webversion" => "http://www.apotheken-kritik.de"
//                )
//            );

//            try {
//                $this->_mandrillTransport->send($message);
//            } catch(Exception $e) {
//                $e->getMessage();
//            }

            $title = "Passwort zurücksetzen";
            $subject = $title;
            $content = $this->renderMailContent($textContent);
            $this->sendMail($this->_fromMailNoReply, $user->getEmail(), $subject, $content, $title, true);

        }
    }
    
    protected function getUserSalutationString($user)
    {
        $salutation = $user->getSalutation();
        switch($salutation) {
            case 'Herr':
                $salutation = "Sehr geehrter ". $salutation;
                break;
            case 'Frau':
                $salutation = "Sehr geehrte ". $salutation;
                break;
            default:
                $salutation = "Sehr geehrte/r ";
                break;
        }

        $userString = $salutation . " " . $user->getTitle();
        $surname = $user->getSurname();
        $userString = $userString . " " . $surname;
//        if(!empty($surname))
//        {
//            $userString = $userString . " " . $surname;
//        }
//        else
//        {
//            $userString = $userString . " " . $user->getUsername();
//        }
        return $userString;
    }

    protected function sendCommentNotificationMail(Event $event)
    {
        $userFactory = new UserFactory($this->_serviceLocator, $this->_serviceLocator->get("eventBus"));
        /** @var \ReviewPharmacy\Model\ReviewPharmacy $review */
        $review = $event->getReview();
        /** @var \ReviewPharmacy\Model\Pharmacy $pharmacy */
        $pharmacy = $event->getRateableObject();
        $emailExists = false;
        $ownerExists = false;
        $owner = $userFactory->getUser($pharmacy->getOwner());
        $ownerEmail = $owner->getEmail();
        $pharmacyEmail = $pharmacy->getEmail();
        
        if (!empty($ownerEmail))
        {
            $ownerExists = true;
            $emailAddress = $ownerEmail;
        }
        else
        {
            $ownerExists = false;
            $emailAddress = $pharmacyEmail;
        }

        if (!empty($emailAddress))
        {
            $emailExists = true;
        }
        
        if($emailExists && $review->getCommentStatus() == CertifiedOrNullFeature::STATUS_CERTIFIED) {
            $salutation = "Sehr geehrte Damen und Herren";
            if ($ownerExists)
            {
                $salutation = $this->getUserSalutationString($owner);
            }
            $subject = "Neue Empfehlung auf $this->_marketingURL";
            $title = "Empfehlung";
            
            $content = $salutation . ",<br><br> auf $this->_marketingURL hat ein Benutzer "
                . "zu Ihrer Apotheke " . $pharmacy->getName() . " eine Empfehlung abgegeben."
//            . "zu Ihrer Apotheke " . $pharmacy->getName() . " folgende Bewertung verfasst: <br><br>"
//            . "<blockquote><i><q>" . $review->getComment() . "</q></i></blockquote>";
                . "<br><br>"
                . "Sie können die Empfehlung des Nutzers über nachfolgenden Link lesen: "
                . "<a mc:disable-tracking href='" . substr($this->_baseUrl, 0, -1) . $this->_showUrlViewHelper->__invoke(['id' => $pharmacy->getId(), "clientName" => $pharmacy->getName(),
                    "city" => $pharmacy->getCity()], ['fragment' => $review->getId()]) . "'>Empfehlung lesen</a><br><br>";
            if(!$ownerExists)
            {
                $content .= "Falls Sie noch nicht über einen Account auf $this->_marketingURL "
                    . "verfügen können Sie sich über nachfolgenden Link registrieren:<br><br>"
                    . "<a mc:disable-tracking href='" . $this->_baseUrl . "register"
                    . "'>Registrieren auf $this->_marketingURL</a><br><br>";
//                $content .= "<br><br>"
//                    . "Sie können die Bewertung des Nutzers über nachfolgenden Link lesen: "
//                    . "<a mc:disable-tracking href='" . $this->_baseUrl . "show/"
//                    . $pharmacy->getId() ."#" . $review->getId() . "'>Bewertung lesen</a><br><br>"
//                    . "Falls Sie noch nicht über einen Account auf apotheken-kritik.de "
//                    . "verfügen können Sie sich über nachfolgenden Link registrieren:<br><br>"
//                    . "<a mc:disable-tracking href='" . $this->_baseUrl . "register"
//                    . "'>Registrieren auf apotheken-kritik.de</a><br><br>";
            }
            else
            {
                //if($pharmacy->getPlanAttributeValue("review_answerable")){
                $content .= "Unter folgenden Link können Sie, falls Ihre Apotheke 
                    eine Premium-Apotheke ist, eine Antwort auf die Empfehlung verfassen:
                    <a mc:disable-tracking href='" . $this->_baseUrl . "masterdata/answer/" . $review->getId()
                    . "'>" . $this->translator->translate('Reply to recommendation'). "</a><br><br>";
                //}
            }
            
            $content .= "Auf $this->_marketingURL haben Sie die Möglichkeit im Basispaket kostenlos "
                . "die wichtigsten Informationen Ihrer Apotheke zu verwalten. Dazu gehören "
                . "unter anderem die Verwaltung der Stammdaten, die Angabe von Öffnungszeiten "
                . "und Notdiensten sowie die Möglichkeit ein "
                . "repräsentatives Bild Ihrer Apotheke zu hinterlegen.";

            $this->sendMail($this->_fromMailNoReply, $emailAddress, $subject, $content, $title, false);
        }
    }
}

Zerion Mini Shell 1.0