/** * Save mail on submit * * @param Mail $mail * @return void */ protected function saveMail(Mail &$mail = null) { $marketingInfos = SessionUtility::getMarketingInfos(); $mail->setPid(FrontendUtility::getStoragePage($this->settings['main']['pid']))->setSenderMail($this->mailRepository->getSenderMailFromArguments($mail))->setSenderName($this->mailRepository->getSenderNameFromArguments($mail))->setSubject($this->settings['receiver']['subject'])->setReceiverMail($this->settings['receiver']['email'])->setBody(DebugUtility::viewArray($this->mailRepository->getVariablesWithMarkersFromMail($mail)))->setSpamFactor(SessionUtility::getSpamFactorFromSession())->setTime(time() - SessionUtility::getFormStartFromSession($mail->getForm()->getUid(), $this->settings))->setUserAgent(GeneralUtility::getIndpEnv('HTTP_USER_AGENT'))->setMarketingRefererDomain($marketingInfos['refererDomain'])->setMarketingReferer($marketingInfos['referer'])->setMarketingCountry($marketingInfos['country'])->setMarketingMobileDevice($marketingInfos['mobileDevice'])->setMarketingFrontendLanguage($marketingInfos['frontendLanguage'])->setMarketingBrowserLanguage($marketingInfos['browserLanguage'])->setMarketingPageFunnel($marketingInfos['pageFunnel']); if (FrontendUtility::isLoggedInFrontendUser()) { $mail->setFeuser($this->userRepository->findByUid(FrontendUtility::getPropertyFromLoggedInFrontendUser('uid'))); } if (!ConfigurationUtility::isDisableIpLogActive()) { $mail->setSenderIp(GeneralUtility::getIndpEnv('REMOTE_ADDR')); } if ($this->settings['main']['optin'] || $this->settings['db']['hidden']) { $mail->setHidden(true); } foreach ($mail->getAnswers() as $answer) { $answer->setPid(FrontendUtility::getStoragePage($this->settings['main']['pid'])); } $this->mailRepository->add($mail); $this->persistenceManager->persistAll(); }
/** * Create Email Body * * @param array $email Array with all needed mail information * @return bool */ protected function createEmailBody($email) { $standaloneView = TemplateUtility::getDefaultStandAloneView(); $standaloneView->getRequest()->setControllerName('Form'); $standaloneView->setTemplatePathAndFilename(TemplateUtility::getTemplatePath($email['template'] . '.html')); $standaloneView->setLayoutRootPaths(TemplateUtility::getTemplateFolders('layout')); $standaloneView->setPartialRootPaths(TemplateUtility::getTemplateFolders('partial')); // variables $variablesWithMarkers = $this->mailRepository->getVariablesWithMarkersFromMail($this->mail); $standaloneView->assignMultiple($variablesWithMarkers); $standaloneView->assignMultiple($this->mailRepository->getLabelsWithMarkersFromMail($this->mail)); $standaloneView->assignMultiple(array('variablesWithMarkers' => ArrayUtility::htmlspecialcharsOnArray($variablesWithMarkers), 'powermail_all' => TemplateUtility::powermailAll($this->mail, 'mail', $this->settings, $this->type), 'powermail_rte' => $email['rteBody'], 'marketingInfos' => SessionUtility::getMarketingInfos(), 'mail' => $this->mail, 'email' => $email, 'settings' => $this->settings)); if (!empty($email['variables'])) { $standaloneView->assignMultiple($email['variables']); } $this->signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__ . 'BeforeRender', array($standaloneView, $email, $this->mail, $this->settings)); $body = $standaloneView->render(); $this->mail->setBody($body); return $body; }
/** * action create * * @param \S3b0\ProjectRegistration\Domain\Model\Dto\ProjectPersonsDto $dto * @ignorevalidation $dto * * @dontverifyrequesthash * * @return void */ public function createAction(Model\Dto\ProjectPersonsDto $dto) { // Add endUser to personRepository $this->personRepository->add($dto->getEndUser()); // Add registrant to personRepository (if not existing feUser reference) if ($dto->getRegistrant()->getFeUser() instanceof \Ecom\EcomToolbox\Domain\Model\User) { $registrant = $this->personRepository->findOneByFeUser($dto->getRegistrant()->getFeUser()); if ($registrant instanceof Model\Person) { $this->updateRegistrantIfFeUserRecordDiffers($registrant); $dto->setRegistrant($registrant); } else { $dto->setRegistrant(new Model\Person($dto->getRegistrant()->getFeUser())); $this->personRepository->add($dto->getRegistrant()); } } else { if ($registrant = $this->personRepository->findOneByMandatoryFields($dto->getRegistrant())) { $dto->setRegistrant($registrant); } else { $this->personRepository->add($dto->getRegistrant()); } } /** * Persist Persons in order to get corresponding uid to link to in Project * * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager $persistenceManager */ $persistenceManager = CoreUtility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class); $persistenceManager->persistAll(); // Add property values $propertyValues = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); if (is_array($dto->getPropertyValues()) && count($dto->getPropertyValues())) { foreach ($dto->getPropertyValues() as $propertyValue) { if (($value = $this->productPropertyValueRepository->findByUid($propertyValue)) instanceof Model\ProductPropertyValue) { $propertyValues->attach($value); } } } $project = $dto->getProject(); $project->setDateOfExpiry(); $project->setRegistrant($dto->getRegistrant()); $project->setEndUser($dto->getEndUser()); $project->setPropertyValues($propertyValues); // Persist Project to get the uid to use as Project# in emails $this->projectRepository->add($project); $persistenceManager->persistAll(); $noReply = null; if ($this->settings['mail']['noReplyEmail'] && CoreUtility\GeneralUtility::validEmail($this->settings['mail']['noReplyEmail'])) { $noReply = [$this->settings['mail']['noReplyEmail'] => $this->settings['mail']['noReplyName'] ?: $this->settings['mail']['senderName']]; } $addressees = $this->getAddressees(true, $project->getAddressee()) ?: CoreUtility\MailUtility::getSystemFrom(); $carbonCopyReceivers = []; if ($this->settings['mail']['carbonCopy']) { foreach (explode(',', $this->settings['mail']['carbonCopy']) as $carbonCopyReceiver) { $tokens = CoreUtility\GeneralUtility::trimExplode(' ', $carbonCopyReceiver, true, 2); if (CoreUtility\GeneralUtility::validEmail($tokens[0])) { $carbonCopyReceivers[$tokens[0]] = $tokens[1]; } } } /** @var \TYPO3\CMS\Core\Mail\MailMessage $mailToSender */ $mailToSender = CoreUtility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class); $mailToSender->setContentType('text/html'); /** * Email to sender */ $mailToSender->setFrom($noReply ?: CoreUtility\MailUtility::getSystemFrom())->setTo([$dto->getRegistrant()->getEmail() => $dto->getRegistrant()->getName()])->setSubject($this->settings['mail']['projectRegisteredConfirmationSubject'] ?: (Lang::translate('mail_project_registered_confirmation_subject', $this->extensionName) ?: 'Your project registration request'))->setBody($this->getStandAloneTemplate(CoreUtility\ExtensionManagementUtility::siteRelPath(CoreUtility\GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)) . 'Resources/Private/Templates/Email/ProjectRegisteredConfirmation.html', ['settings' => $this->settings, 'submitted' => $dto, 'addressees' => $this->getAddressees()]))->send(); /** @var \TYPO3\CMS\Core\Mail\MailMessage $mailToSender */ $mailToReceiver = CoreUtility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Mail\MailMessage::class); $mailToReceiver->setContentType('text/html'); /** * Email to receiver (notification mail) */ if ($this->settings['mail']['noReplyEmail'] && CoreUtility\GeneralUtility::validEmail($this->settings['mail']['noReplyEmail'])) { $from = [$this->settings['mail']['noReplyEmail'] => ($this->settings['mail']['noReplyName'] ?: $this->settings['mail']['senderName']) . ' - project registration']; } else { $from = ['*****@*****.**' => 'ecom instruments GmbH - project registration']; } $mailToReceiver->setTo($addressees)->setCc($carbonCopyReceivers)->setFrom($from)->setSubject(($this->settings['mail']['projectRegisteredInfoSubject'] ?: (Lang::translate('mail_project_registered_info_subject', $this->extensionName) ?: 'New project registration submitted')) . ($dto->getRegistrant()->getFeUserGroups() && in_array($this->settings['certifiedUsersUserGroup'], $dto->getRegistrant()->getFeUserGroups()) ? ' » ' . Lang::translate('user_certified', $this->extensionName) : ' » ' . Lang::translate('user_default', $this->extensionName)) . " #{$project->getUid()}")->setBody($this->getStandAloneTemplate(CoreUtility\ExtensionManagementUtility::siteRelPath(CoreUtility\GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName)) . 'Resources/Private/Templates/Email/ProjectRegisteredInfo.html', ['settings' => $this->settings, 'submitted' => $dto, 'addressees' => $this->getAddressees(), 'marketingInformation' => SessionUtility::getMarketingInfos()]))->send(); $this->internalRedirect('submitted', ['project' => $dto->getProject()]); }