/**
  * Get storage pid from FlexForm, TypoScript or current page
  *
  * @return int
  */
 protected function getStoragePid()
 {
     $pid = (int) $this->settings['main.']['pid'];
     if (!empty($this->flexForm['main']['lDEF']['settings.flexform.main.pid']['vDEF'])) {
         $pid = (int) $this->flexForm['main']['lDEF']['settings.flexform.main.pid']['vDEF'];
     }
     if ($pid === 0) {
         $pid = (int) FrontendUtility::getCurrentPageIdentifier();
     }
     return $pid;
 }
 /**
  * Send the mail
  *
  * @param array $email Array with all needed mail information
  * @return bool Mail successfully sent
  */
 protected function sendTemplateEmail(array $email)
 {
     /** @var MailMessage $message */
     $message = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
     TypoScriptUtility::overwriteValueFromTypoScript($email['subject'], $this->overwriteConfiguration, 'subject');
     $message->setTo(array($email['receiverEmail'] => $email['receiverName']))->setFrom(array($email['senderEmail'] => $email['senderName']))->setSubject($email['subject'])->setCharset(FrontendUtility::getCharset());
     $message = $this->addCc($message);
     $message = $this->addBcc($message);
     $message = $this->addReturnPath($message);
     $message = $this->addReplyAddresses($message);
     $message = $this->addPriority($message);
     $message = $this->addAttachmentsFromUploads($message);
     $message = $this->addAttachmentsFromTypoScript($message);
     $message = $this->addHtmlBody($message, $email);
     $message = $this->addPlainBody($message, $email);
     $this->signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__ . 'BeforeSend', array($message, $email, $this->mail, $this->settings, $this->type));
     $message->send();
     $this->updateMail($email);
     return $message->isSent();
 }
 /**
  * Build image html tag
  *
  * @param string $pathAndFilename like "Image/icon.png"
  * @param string $alt
  * @return string
  */
 protected function buildImageMarkup($pathAndFilename, $alt = '0')
 {
     $imagePathAndFilename = FrontendUtility::getSubFolderOfCurrentUrl() . 'typo3conf/ext/powermail/Resources/Public/';
     $imagePathAndFilename .= $pathAndFilename;
     return '<img src="' . $imagePathAndFilename . '" alt="' . $alt . '" />';
 }
Beispiel #4
0
 /**
  * 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();
 }
 /**
  * Store Marketing Information in Session
  *        'refererDomain' => domain.org
  *        'referer' => http://domain.org/xyz/test.html
  *        'country' => Germany
  *        'mobileDevice' => 1
  *        'frontendLanguage' => 3
  *        'browserLanguage' => en-us
  *        'feUser' => userAbc
  *        'pageFunnel' => array(2, 5, 1)
  *
  * @param string $referer Referer
  * @param int $language Frontend Language Uid
  * @param int $pid Page Id
  * @param int $mobileDevice Is mobile device?
  * @return void
  */
 public static function storeMarketingInformation($referer = null, $language = 0, $pid = 0, $mobileDevice = 0)
 {
     $marketingInfo = self::getSessionValue('powermail_marketing');
     // initially create array with marketing info
     if (!is_array($marketingInfo)) {
         $marketingInfo = ['refererDomain' => FrontendUtility::getDomainFromUri($referer), 'referer' => $referer, 'country' => FrontendUtility::getCountryFromIp(), 'mobileDevice' => $mobileDevice, 'frontendLanguage' => $language, 'browserLanguage' => GeneralUtility::getIndpEnv('HTTP_ACCEPT_LANGUAGE'), 'pageFunnel' => [$pid]];
     } else {
         // add current pid to funnel
         $marketingInfo['pageFunnel'][] = $pid;
         // clean pagefunnel if has more than 256 entries
         if (count($marketingInfo['pageFunnel']) > 256) {
             $marketingInfo['pageFunnel'] = [$pid];
         }
     }
     // store in session
     self::setSessionValue('powermail_marketing', $marketingInfo, true);
 }
 /**
  * Get return URL from current request
  *
  * @return string
  * @todo remove condition for TYPO3 6.2 in upcoming major version
  */
 protected static function getReturnUrl()
 {
     if (GeneralUtility::compat_version('7.2')) {
         $uri = self::getModuleUrl(self::getModuleName(), self::getCurrentParameters());
     } else {
         $uri = rawurlencode(FrontendUtility::getSubFolderOfCurrentUrl() . GeneralUtility::getIndpEnv('TYPO3_SITE_SCRIPT'));
     }
     return $uri;
 }
Beispiel #7
0
 /**
  * Extend dataType with TSConfig
  *
  * @param string $fieldType
  * @param array $types
  * @return array
  */
 protected function extendTypeArrayWithTypoScriptTypes($fieldType, array $types)
 {
     $typoScript = BackendUtility::getPagesTSconfig(FrontendUtility::getCurrentPageIdentifier());
     $configuration = $typoScript['tx_powermail.']['flexForm.'];
     if (!empty($configuration['type.']['addFieldOptions.'][$fieldType . '.']['dataType'])) {
         $types[$fieldType] = (int) $configuration['type.']['addFieldOptions.'][$fieldType . '.']['dataType'];
     }
     return $types;
 }
 /**
  * Get value from current logged in Frontend User
  *
  * @return string
  */
 protected function getFromFrontendUser()
 {
     $value = '';
     if ($this->getField()->getFeuserValue()) {
         $value = FrontendUtility::getPropertyFromLoggedInFrontendUser($this->getField()->getFeuserValue());
     }
     return $value;
 }
 /**
  * Query for Pi2
  *
  * @param array $settings TypoScript Settings
  * @param array $piVars Plugin Variables
  * @return QueryResult
  */
 public function findListBySettings($settings, $piVars)
 {
     $query = $this->createQuery();
     /**
      * FILTER start
      */
     $and = [$query->greaterThan('uid', 0)];
     // FILTER: form
     if ((int) $settings['main']['form'] > 0) {
         $and[] = $query->equals('form', $settings['main']['form']);
     }
     // FILTER: pid
     if ((int) $settings['main']['pid'] > 0) {
         $and[] = $query->equals('pid', $settings['main']['pid']);
     }
     // FILTER: delta
     if ((int) $settings['list']['delta'] > 0) {
         $and[] = $query->greaterThan('crdate', time() - $settings['list']['delta']);
     }
     // FILTER: showownonly
     if ($settings['list']['showownonly']) {
         $and[] = $query->equals('feuser', FrontendUtility::getPropertyFromLoggedInFrontendUser());
     }
     // FILTER: abc
     if (isset($piVars['filter']['abc'])) {
         $and[] = $query->equals('answers.field', $settings['search']['abc']);
         $and[] = $query->like('answers.value', $piVars['filter']['abc'] . '%');
     }
     // FILTER: field
     if (isset($piVars['filter'])) {
         // fulltext
         $filter = [];
         if (!empty($piVars['filter']['_all'])) {
             $filter[] = $query->like('answers.value', '%' . $piVars['filter']['_all'] . '%');
         }
         // single field search
         foreach ((array) $piVars['filter'] as $field => $value) {
             if (is_numeric($field) && !empty($value)) {
                 $filterAnd = [$query->equals('answers.field', $field), $query->like('answers.value', '%' . $value . '%')];
                 $filter[] = $query->logicalAnd($filterAnd);
             }
         }
         if (count($filter) > 0) {
             // switch between AND and OR
             if (!empty($settings['search']['logicalRelation']) && strtolower($settings['search']['logicalRelation']) === 'and') {
                 $and[] = $query->logicalAnd($filter);
             } else {
                 $and[] = $query->logicalOr($filter);
             }
         }
     }
     // FILTER: create constraint
     $constraint = $query->logicalAnd($and);
     $query->matching($constraint);
     // sorting
     $query->setOrderings(['crdate' => QueryInterface::ORDER_DESCENDING]);
     // set limit
     if ((int) $settings['list']['limit'] > 0) {
         $query->setLimit((int) $settings['list']['limit']);
     }
     $mails = $query->execute();
     return $mails;
 }
Beispiel #10
0
 /**
  * Assign variables
  *
  * @return void
  */
 protected function assignMultipleActions()
 {
     if (empty($this->settings['single']['pid'])) {
         $this->settings['single']['pid'] = FrontendUtility::getCurrentPageIdentifier();
     }
     if (empty($this->settings['list']['pid'])) {
         $this->settings['list']['pid'] = FrontendUtility::getCurrentPageIdentifier();
     }
     if (empty($this->settings['edit']['pid'])) {
         $this->settings['edit']['pid'] = FrontendUtility::getCurrentPageIdentifier();
     }
     $this->view->assign('singlePid', $this->settings['single']['pid']);
     $this->view->assign('listPid', $this->settings['list']['pid']);
     $this->view->assign('editPid', $this->settings['edit']['pid']);
 }
 /**
  * Prepare variables for assignment in spam notifications
  *
  * @param Mail $mail
  * @return array
  */
 protected function getVariablesForSpamNotification(Mail $mail)
 {
     return array('mail' => $mail, 'pid' => FrontendUtility::getCurrentPageIdentifier(), 'calculatedMailSpamFactor' => $this->getCalculatedMailSpamFactor(true), 'messages' => $this->getMessages(), 'ipAddress' => !ConfigurationUtility::isDisableIpLogActive() ? GeneralUtility::getIndpEnv('REMOTE_ADDR') : '', 'time' => new \DateTime());
 }
 /**
  * Check if logged in User is allowed to edit
  *
  * @param Mail $mail
  * @param array $settings TypoScript and FlexForm Settings
  * @return bool
  */
 public function render($mail, $settings = array())
 {
     return FrontendUtility::isAllowedToEdit($settings, $mail);
 }
 /**
  * Test for getSubFolderOfCurrentUrl()
  *
  * @param bool $leadingSlash will be prepended
  * @param bool $trailingSlash will be appended
  * @param string $host
  * @param string $url
  * @param string $expectedResult
  * @return void
  * @dataProvider getSubFolderOfCurrentUrlReturnsStringDataProvider
  * @test
  */
 public function getSubFolderOfCurrentUrlReturnsString($leadingSlash, $trailingSlash, $host, $url, $expectedResult)
 {
     $result = FrontendUtility::getSubFolderOfCurrentUrl($leadingSlash, $trailingSlash, $host, $url);
     $this->assertSame($expectedResult, $result);
 }