src/EventListener/MediaUserListener.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Pimcore\Event\Model\ElementEventInterface;
  4. use Pimcore\Model\DataObject\MediaUser;
  5. use Pimcore\Model\DataObject\Region;
  6. use Pimcore\Model\Document\Email;
  7. use Pimcore\Model\WebsiteSetting;
  8. use Pimcore\Tool;
  9. class MediaUserListener
  10. {
  11.     protected $websiteSettingDefaultRegistrationCompleded null;
  12.     public function postUpdateAction(ElementEventInterface $e) {
  13.         $object $e->getElement();
  14.         $onlyVersionSave $e->hasArgument('saveVersionOnly');
  15.         if(!$onlyVersionSave && $object instanceof MediaUser) {
  16.             if($object->getSendRegistrationCompletedMail() && $object->isPublished() && $object->getConfirmed()) {
  17.                 $region null;
  18.                 $websiteSettingRegion WebsiteSetting::getByName('mainRegion');
  19.                 if ($websiteSettingRegion && $websiteSettingRegion->getData()) {
  20.                     $region $websiteSettingRegion->getData();
  21.                 }
  22.                 if($mailDoc $this->getMailDoc(true$region)) {
  23.                     if($mailDoc instanceof Email) {
  24.                         $notification = new \Pimcore\Mail();
  25.                         $params = [
  26.                             'title'             => $object->getTitle(),
  27.                             'firstname'         => $object->getFirstname(),
  28.                             'lastname'          => $object->getLastname(),
  29.                         ];
  30.                         $params['items'] = array_keys($params);
  31.                         $notification->setDocument($mailDoc);
  32.                         $notification->setParams($params);
  33.                         $notification->addTo($object->getEmail());
  34.                         $notification->send();
  35.                         $object->setSendRegistrationCompletedMail(false);
  36.                         if($region) {
  37.                             $this->addRegionToUser($object$region);
  38.                         }
  39.                     }
  40.                 }
  41.             }
  42.             if(!empty($object->getFurtherRegionsBlock())) {
  43.                 foreach ($object->getFurtherRegionsBlock() as $furtherRegionBlockElement) {
  44.                     $registrationConfirmed $furtherRegionBlockElement['confirmedFurtherRegion']->getData();
  45.                     $sendRegistrationCompletedMail $furtherRegionBlockElement['sendRegistrationCompletedMailFurtherRegion']->getData();
  46.                     if($registrationConfirmed && $sendRegistrationCompletedMail && $object->isPublished() ) {
  47.                         $region $furtherRegionBlockElement['region']->getData();
  48.                         if($mailDoc $this->getMailDoc(false$region)) {
  49.                             $notification = new \Pimcore\Mail();
  50.                             $params = [
  51.                                 'title'             => $object->getTitle(),
  52.                                 'firstname'         => $object->getFirstname(),
  53.                                 'lastname'          => $object->getLastname(),
  54.                             ];
  55.                             $params['items'] = array_keys($params);
  56.                             $notification->setDocument($mailDoc);
  57.                             $notification->setParams($params);
  58.                             $notification->addTo($object->getEmail());
  59.                             $notification->send();
  60.                             $furtherRegionBlockElement['sendRegistrationCompletedMailFurtherRegion']->setData(false);
  61.                             $this->addRegionToUser($object$region);
  62.                         }
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.     }
  68.     private function getMailDoc(bool $isMainRegion, ?Region $region null) {
  69.         $config $region?->getSiteConfig();
  70.         if (!$config) { //set region to null, if main region should be used
  71.             $websiteSettingConfig WebsiteSetting::getByName('DefaultSiteConfig');
  72.             if ($websiteSettingConfig && $websiteSettingConfig->getData()) {
  73.                 $config $websiteSettingConfig->getData();
  74.             }
  75.         }
  76.         if($config && $config->getPressRegistrationConfirmMail('de')) {
  77.             return $config->getPressRegistrationConfirmMail('de');
  78.         }
  79.         // if no config or no mail in config use fallback
  80.         if(empty($this->websiteSettingDefaultRegistrationCompleded)) {
  81.             $websiteSetting WebsiteSetting::getByName('pressUserRegistrationCompletedMail');
  82.             if($websiteSetting && $websiteSetting->getData()) {
  83.                 $this->websiteSettingDefaultRegistrationCompleded $websiteSetting->getData();
  84.             }
  85.         }
  86.         if($this->websiteSettingDefaultRegistrationCompleded) {
  87.             return $this->websiteSettingDefaultRegistrationCompleded;
  88.         }
  89.     }
  90.     private function addRegionToUser(MediaUser $userRegion $region)
  91.     {
  92.         $regions $user->getRegisteredRegions();
  93.         foreach ($regions as $registeredRegion) {
  94.             if ($registeredRegion->getId() == $region->getId()) {
  95.                 return; // already registered
  96.             }
  97.         }
  98.         $regions[] = $region;
  99.         $user->setRegisteredRegions($regions);
  100.     }
  101. }