* @link https://www.oxidmodule.com */ namespace D3\Usermanager\Modules\Application\Model; use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; use D3\ModCfg\Application\Model\d3str; use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException; use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; use D3\ModCfg\Application\Model\Log\d3log; use D3\ModCfg\Application\Model\Shopcompatibility\d3ShopCompatibilityAdapterHandler; use D3\Usermanager\Application\Model\d3usermanager; use Doctrine\DBAL\DBALException; use Exception; use OxidEsales\Eshop\Application\Model\Content as Content; use OxidEsales\Eshop\Application\Model\Remark; use OxidEsales\Eshop\Application\Model\Shop as Shop; use OxidEsales\Eshop\Application\Model\User as User; use OxidEsales\Eshop\Core\Config; use OxidEsales\Eshop\Core\Email; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\StandardException; use OxidEsales\Eshop\Core\Module\Module as Module; use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\UtilsView; use Smarty; // @codeCoverageIgnoreStart if (false) { class_alias( Email::class, d3_email_usermanager_parent::class ); } // @codeCoverageIgnoreEnd class d3_oxemail_usermanager extends d3_oxemail_usermanager_parent { protected $_sUserManagerInfoTemplate = 'd3usermanager_info_html.tpl'; protected $_sUserManagerInfoPlainTemplate = 'd3usermanager_info_plain.tpl'; private $_sModId = 'd3usermanager'; /** @var d3usermanager */ public $oUserManager; /** * constructor */ public function __construct() { d3GetModCfgDIC()->setParameter('d3.usermanager.modcfgid', $this->_sModId); /** @var Config _oConfig */ $this->_oConfig = d3GetModCfgDIC()->get('d3ox.usermanager.'.Config::class); parent::__construct(); } /** * @param array $aUserManagerNotes * @return bool * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function d3sendUserManagerEmail($aUserManagerNotes) { startProfile(__METHOD__); $oShop = $this->_getShop(); /** @var Smarty $oSmarty */ $oSmarty = $this->_getSmarty(); $this->_setMailParams($oShop); $this->setViewData("aNotes", $aUserManagerNotes); $this->setViewData("shopTemplateDir", Registry::getConfig()->getTemplateDir(false)); $this->setViewData("oShop", $oShop); $oSmarty->template_dir = Registry::getConfig()->getTemplateDir(false); $this->_processViewArray(); $this->setBody($oSmarty->fetch($this->_sUserManagerInfoTemplate)); $this->setAltBody($oSmarty->fetch($this->_sUserManagerInfoPlainTemplate)); d3_cfg_mod::get($this->_sModId)->d3getLog()->log( d3log::NOTICE, __CLASS__, __FUNCTION__, __LINE__, 'send job execution info mail', $this->getBody() ); $sSubject = Registry::getLang()->translateString('D3_USERMANAGER_MAIL_USERSUBJECT', 0); $this->setSubject($sSubject); $sFullName = $oShop->__get('oxshops__oxname')->getRawValue(); $this->setRecipient($oShop->getFieldData('oxinfoemail'), $sFullName); $this->setReplyTo($oShop->getFieldData('oxinfoemail'), $oShop->__get('oxshops__oxname')->getRawValue()); $blSuccess = $this->send(); stopProfile(__METHOD__); return $blSuccess; } /** * @param $sOxId * @return User */ public function d3getUser($sOxId) { if (strstr($sOxId, '@@')) { $aOxId = explode('@@', $sOxId); $sOxId = $aOxId[0]; } /** @var $oUser User */ $oUser = oxNew(User::class); $oUser->load($sOxId); return $oUser; } /** * @param $sOxId * @return d3usermanager */ public function d3getUserManager($sOxId) { /** @var $oUser d3usermanager */ $oUserManager = d3GetModCfgDIC()->get(d3usermanager::class); $oUserManager->load($sOxId); return $oUser; } /** * @param d3usermanager $oUserManager * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ParameterNotFoundException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws Exception */ public function sendUserManagerMail(d3usermanager $oUserManager) { $this->oUserManager = $oUserManager; $aContent = $this->getUserManagerMailContent($oUserManager); $oShop = $this->_getShop(); $this->setBody($aContent['html']); $this->setAltBody($aContent['plain']); $this->setSubject($aContent['subject']); $this->_d3SetUserManagerReplyAddress($oUserManager, $oShop); $oRemark = $this->_d3SetUserManagerMailRecipients($oShop); $blSuccess = $this->send(); if ($blSuccess && $oRemark) { $oRemark->save(); } return $blSuccess; } /** * @param Shop $oShop * * @return null|Remark * @throws d3ParameterNotFoundException */ protected function _d3SetUserManagerMailRecipients(Shop $oShop) { $oRemark = null; if ($this->_d3hasUserManagerCustomerRecipient()) { $oRemark = $this->_d3sendUserManagerMailToCustomer($oShop); } elseif ($this->_d3hasUserManagerOwnerRecipient()) { $this->_d3sendUserManagerMailToOwner($oShop); } elseif ($this->_d3hasUserManagerCustomRecipient()) { $this->_d3sendUserManagerMailToCustom(); } return $oRemark; } /** * @param $sVarName * * @return mixed * @throws d3ParameterNotFoundException */ protected function _d3getUserManagerMailOption($sVarName) { $aEditedValues = $this->oUserManager->getEditedValues(); return $aEditedValues[$sVarName] === false || $aEditedValues[$sVarName] === null ? $this->oUserManager->getValue($sVarName) : $aEditedValues[$sVarName]; } /** * @return mixed * @throws d3ParameterNotFoundException */ protected function _d3hasUserManagerCustomerRecipient() { return $this->_d3getUserManagerMailOption('blSendMailToCustomer'); } /** * @return mixed * @throws d3ParameterNotFoundException */ protected function _d3hasUserManagerOwnerRecipient() { return $this->_d3getUserManagerMailOption('blSendMailToOwner'); } /** * @return mixed * @throws d3ParameterNotFoundException */ protected function _d3hasUserManagerCustomRecipient() { return $this->_d3getUserManagerMailOption('blSendMailToCustom'); } /** * @return mixed * @throws d3ParameterNotFoundException */ protected function _d3getUserManagerCustomRecipientList() { return $this->_d3getUserManagerMailOption('sSendMailToCustomAddress'); } /** * @return d3_cfg_mod * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function d3GetSet() { return d3_cfg_mod::get($this->_sModId); } /** * required for unit tests, can't mock getConfig method * @return Config * @throws Exception */ public function d3GetConfig() { /** @var Config $config */ $config = d3GetModCfgDIC()->get('d3ox.usermanager.'.Config::class); return $config; } /** * @param d3usermanager $oUserManager * @return array * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ParameterNotFoundException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function getUserManagerMailContent(d3usermanager $oUserManager) { $this->oUserManager = $oUserManager; $aContent = array(); $blTplFromAdmin = $oUserManager->getValue('sSendMailFromTheme') == 'admin'; Registry::getConfig()->setAdminMode($blTplFromAdmin); $oShop = $this->_getShop(); $this->_setMailParams($oShop); /** @var Smarty $oSmarty */ $oSmarty = $this->_getSmarty(); $this->setViewData("oShop", $oShop); $this->setViewData("oViewConf", $this->getViewConfig()); $this->setViewData("oUser", $oUserManager->getCurrentItem()); $this->setViewData("shopTemplateDir", Registry::getConfig()->getTemplateDir(false)); $this->setViewData("charset", Registry::getLang()->translateString("charset")); $this->setViewData("shop", $oShop); $this->setViewData("user", $oUserManager->getCurrentItem()); $oSmarty->template_dir = $this->getTemplateDir4UserManager($oUserManager); $this->_processViewArray(); if (false == $this->d3GetSet()->getLicenseConfigData('blUseMailSendOnly', 0)) { $oSmarty = $this->d3SendMailHook($oSmarty); } $aContent = $this->_d3GenerateUserManagerMailContent($aContent, $oSmarty); Registry::getConfig()->setAdminMode(true); return $aContent; } /** * @return Module * @throws Exception */ public function d3GetModule() { /** @var Module $module */ $module = d3GetModCfgDIC()->get('d3ox.usermanager.'.Module::class); return $module; } /** * @return d3str * @throws Exception */ public function getD3Str() { return d3GetModCfgDIC()->get(d3str::class); } /** * @return d3ShopCompatibilityAdapterHandler * @throws Exception */ public function d3GetShopCompatibilityAdapterHandler() { return d3GetModCfgDIC()->get(d3ShopCompatibilityAdapterHandler::class); } /** * @param d3usermanager $oUserManager * @return string * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws Exception */ public function getTemplateDir4UserManager($oUserManager) { if ($oUserManager->getValue('sSendMailFromTheme') == 'module') { $sModuleId = $oUserManager->getValue('sSendMailFromModulePath'); $sModulePath = $this->d3GetShopCompatibilityAdapterHandler()->call( 'oxmodule__getModuleFullPath', array($this->d3GetModule(), $sModuleId) ); $sPath = $this->getD3Str()->untrailingslashit($sModulePath); } else { $blAdmin = $oUserManager->getValue('sSendMailFromTheme') == 'admin'; $sPath = $this->d3GetConfig()->getTemplateDir($blAdmin); } return $sPath; } /** * @param Smarty $oSmarty * @return Smarty */ public function d3SendMailHook(Smarty $oSmarty) { // available objects: // oxEmail: $this // Smarty: $oSmarty // Usermanager profile: $this->oUserManager // oxuser: inside smarty return $oSmarty; } /** * @return Content * @throws Exception */ public function d3GetContent() { /** @var Content $content */ $content = d3GetModCfgDIC()->get('d3ox.usermanager.'.Content::class); return $content; } /** * @param $aContent * @param Smarty $oSmarty * * @return mixed * @throws d3ParameterNotFoundException * @throws Exception */ protected function _d3GenerateUserManagerMailContent($aContent, Smarty $oSmarty) { $aEditedValues = $this->oUserManager->getEditedValues(); $oLang = Registry::getLang(); $iUserLangId = $oLang->getTplLanguage(); $iCurrentBaseLang = $oLang->getBaseLanguage(); $oLang->setTplLanguage($iUserLangId); $oLang->setBaseLanguage($iUserLangId); if ($this->d3HasUserManagerEditorMailContent($aEditedValues)) { $aContent = $aEditedValues['mail']; } elseif ($this->oUserManager->getValue('sSendMailFromSource') == 'cms') { /** @var UtilsView $oUtilsView */ $oUtilsView = Registry::get(UtilsView::class); $oContent = $this->d3GetContent(); $oContent->setLanguage($iUserLangId); $oContent->load($this->oUserManager->getValue('sSendMailFromContentname')); $aContent['html'] = $oUtilsView->parseThroughSmarty( $oContent->getFieldData('oxcontent'), $oContent->getId() . 'oxcontent' ); $aContent['subject'] = $oContent->getFieldData('oxtitle'); $oContent->load($this->oUserManager->getValue('sSendMailFromContentnamePlain')); $aContent['plain'] = $oUtilsView->parseThroughSmarty( $oContent->getFieldData('oxcontent'), $oContent->getId() . 'oxcontent' ); } elseif ($this->oUserManager->getValue('sSendMailFromSource') == 'template') { $aContent['html'] = $oSmarty->fetch($this->oUserManager->getValue('sSendMailFromTemplatename')); $aContent['plain'] = $oSmarty->fetch($this->oUserManager->getValue('sSendMailFromTemplatenamePlain')); $aContent['subject'] = $oSmarty->fetch($this->oUserManager->getValue('sSendMailFromSubject')); } $oLang->setTplLanguage($iUserLangId); $oLang->setBaseLanguage($iCurrentBaseLang); return $aContent; } /** * @param $aEditedValues * * @return bool */ public function d3HasUserManagerEditorMailContent($aEditedValues) { return $this->isArrayEditorMailContent($aEditedValues) && $aEditedValues['mail']['subject'] && $aEditedValues['mail']['html'] && $aEditedValues['mail']['plain']; } /** * @param $aEditedValues * * @return bool */ public function isArrayEditorMailContent($aEditedValues) { return is_array($aEditedValues) && is_array($aEditedValues['mail']); } /** * @return Remark * @throws Exception */ public function d3GetRemark() { /** @var Remark $remark */ $remark = d3GetModCfgDIC()->get('d3ox.usermanager.'.Remark::class); return $remark; } /** * @param Shop $oShop * * @return Remark * @throws d3ParameterNotFoundException * @throws Exception */ protected function _d3sendUserManagerMailToCustomer(Shop $oShop) { $sFullName = $this->oUserManager->getCurrentItem()->__get('oxuser__oxfname')->getRawValue() . " " . $this->oUserManager->getCurrentItem()->__get('oxuser__oxlname')->getRawValue(); $this->setRecipient($this->oUserManager->getCurrentItem()->getFieldData('oxusername'), $sFullName); if ($this->_d3hasUserManagerOwnerRecipient()) { $this->addBCC($oShop->getFieldData('oxinfoemail'), $oShop->__get('oxshops__oxname')->getRawValue()); } if ($this->_d3HasUserManagerCustomMailAddresses()) { foreach ($this->_d3getUserManagerCustomMailAddressList() as $sMailAdr) { $this->addBCC(trim($sMailAdr), trim($sMailAdr)); } } // add user history $oRemark = $this->d3GetRemark(); $aRemarkContent = array( 'oxtext' => $this->getAltBody(), 'oxparentid' => $this->oUserManager->getCurrentItem()->getId(), 'oxtype' => 'o', ); $oRemark->assign($aRemarkContent); return $oRemark; } /** * @param Shop $oShop * @throws d3ParameterNotFoundException */ protected function _d3sendUserManagerMailToOwner(Shop $oShop) { $sFullName = $oShop->__get('oxshops__oxname')->getRawValue(); $this->setRecipient($oShop->getFieldData('oxinfoemail'), $sFullName); if ($this->_d3HasUserManagerCustomMailAddresses()) { foreach ($this->_d3getUserManagerCustomMailAddressList() as $sMailAdr) { $this->addBCC(trim($sMailAdr), trim($sMailAdr)); } } } /** * @throws d3ParameterNotFoundException */ protected function _d3sendUserManagerMailToCustom() { if ($this->_d3HasUserManagerCustomMailAddresses()) { foreach ($this->_d3getUserManagerCustomMailAddressList() as $sMailAdr) { $this->setRecipient(trim($sMailAdr), trim($sMailAdr)); } } } /** * @return array * @throws d3ParameterNotFoundException */ protected function _d3getUserManagerCustomMailAddressList() { $aMailAddressList = array(); foreach (explode(';', $this->_d3getUserManagerCustomRecipientList()) as $sAddress) { if (strlen(trim($sAddress))) { $aMailAddressList[] = $sAddress; } } return $aMailAddressList; } /** * @return bool * @throws d3ParameterNotFoundException */ public function _d3HasUserManagerCustomMailAddresses() { return $this->_d3hasUserManagerCustomRecipient() && $this->_d3getUserManagerCustomRecipientList(); } /** * @param d3usermanager $oUserManager * @param Shop $oShop */ protected function _d3SetUserManagerReplyAddress(d3usermanager $oUserManager, $oShop) { if (strlen(trim($oUserManager->getValue('sSendMailReplyAddress')))) { $this->setFrom(trim($oUserManager->getValue('sSendMailReplyAddress'))); $this->setReplyTo( trim($oUserManager->getValue('sSendMailReplyAddress')), $oShop->__get('oxshops__oxname')->getRawValue() ); } else { $this->setReplyTo($oShop->getFieldData('oxinfoemail'), $oShop->__get('oxshops__oxname')->getRawValue()); } } }