/** * 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 . '" />'; }
/** * 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; }
/** * 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; }
/** * 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); }