diff --git a/src/Modules/Core/d3_oxemail_points.php b/src/Modules/Core/d3_oxemail_points.php
index 40d6da5..9301acf 100644
--- a/src/Modules/Core/d3_oxemail_points.php
+++ b/src/Modules/Core/d3_oxemail_points.php
@@ -1,433 +1,896 @@
-1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
-?>
-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
\ No newline at end of file
+ / Markus Gärtner
+ * @copyright (C) 2013, D3 Data Development
+ * @see http://www.shopmodule.com
+ */
+
+namespace D3\Points\Modules\Core;
+
+use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
+use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
+use D3\ModCfg\Application\Model\Log\d3log;
+use OxidEsales\Eshop\Application\Model\Order;
+use OxidEsales\Eshop\Application\Model\Shop;
+use OxidEsales\Eshop\Application\Model\Remark;
+use OxidEsales\Eshop\Application\Model\Basket;
+use OxidEsales\Eshop\Application\Model\Payment;
+use OxidEsales\Eshop\Application\Model\Content;
+use OxidEsales\Eshop\Core\Config;
+use OxidEsales\Eshop\Core\Module\Module;
+use OxidEsales\Eshop\Core\Request;
+use OxidEsales\Eshop\Core\UtilsView;
+use OxidEsales\Eshop\Core\Registry;
+use OxidEsales\Eshop\Application\Model\VoucherSerie;
+use OxidEsales\Eshop\Application\Model\Voucher;
+use OxidEsales\Eshop\Application\Model\User;
+use OxidEsales\Eshop\Application\Model\Article;
+use D3\Points\Application\Model\d3points;
+
+/**
+ * Class d3_oxemail_points
+ *
+ * @package D3\Points\Modules\Application\Core
+ */
+class d3_oxemail_points extends d3_oxemail_points_parent
+{
+ /**
+ * Email-Templats for automatic Payout
+ *
+ * @var string
+ */
+ protected $_sd3_email_pointsautovoucher_html_tpl = 'd3_email_pointsautovoucher_html.tpl';
+
+ protected $_sd3_email_pointsautovoucher_plain_tpl = 'd3_email_pointsautovoucher_plain.tpl';
+
+ protected $_sd3_email_pointsautovoucher_subj_tpl = 'd3_email_pointsautovoucher_subj.tpl';
+
+ /**
+ * Email-Templates for mail with points from Order
+ *
+ * @var string
+ */
+ protected $_sd3_email_d3_email_orderpoints_html_tpl = 'd3_email_orderpoints_html.tpl';
+
+ protected $_sd3_email_d3_email_orderpoints_plain_tpl = 'd3_email_orderpoints_plain.tpl';
+
+ protected $_sd3_email_d3_email_orderpoints_subj_tpl = 'd3_email_orderpoints_subj.tpl';
+
+ /**
+ * Email-Templates for Reminder
+ *
+ * @var String
+ */
+ protected $_sd3_email_remindpoints_html_tpl = 'd3_email_remindpoints_html.tpl';
+
+ protected $_sd3_email_remindpoints_plain_tpl = 'd3_email_remindpoints_plain.tpl';
+
+ protected $_sd3_email_remindpoints_subj_tpl = 'd3_email_remindpoints_subj.tpl';
+
+ /**
+ * Email-Template for new Voucher, if is created
+ *
+ * @var String
+ */
+ protected $_sd3_email_pointsvoucher_html_tpl = 'd3_email_pointsvoucher_html.tpl';
+
+ protected $_sd3_email_pointsvoucher_plain_tpl = 'd3_email_pointsvoucher_plain.tpl';
+
+ protected $_sd3_email_pointsvoucher_subj_tpl = 'd3_email_pointsvoucher_subj.tpl';
+
+ /**
+ * Email Templates for new Points at Review or Rating
+ *
+ * @var String
+ */
+ protected $_sd3_email_reviewpoints_html_tpl = 'd3_email_reviewpoints_html.tpl';
+
+ protected $_sd3_email_reviewpoints_plain_tpl = 'd3_email_reviewpoints_plain.tpl';
+
+ protected $_sd3_email_reviewpoints_subj_tpl = 'd3_email_reviewpoints_subj.tpl';
+
+ /**
+ * Email Templates for storno points
+ *
+ * @var String
+ */
+ protected $_sd3_email_stornopoints_html_tpl = 'd3_email_stornopoints_html.tpl';
+
+ protected $_sd3_email_stornopoints_plain_tpl = 'd3_email_stornopoints_plain.tpl';
+
+ protected $_sd3_email_stornopoints_subj_tpl = 'd3_email_stornopoints_subj.tpl';
+
+ /**
+ * Email Templates for manuel points from admin
+ *
+ * @var string
+ */
+ protected $_sd3_email_manuelpoints_html_tpl = 'd3_email_manuelpoints_html.tpl';
+
+ protected $_sd3_email_manuelpoints_plain_tpl = 'd3_email_manuelpoints_plain.tpl';
+
+ protected $_sd3_email_manuelpoints_subj_tpl = 'd3_email_manuelpoints_subj.tpl';
+
+ private $_sModId = 'd3points';
+
+ /**
+ * Mail with VoucherCode
+ * after voucher is created by user
+ * write Remark
+ *
+ * @param User $oUser
+ * @param Voucher $oVoucher
+ * @param $iLang integer
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\EshopCommunity\Application\Model\oxObjectException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3SendPointsVoucherMail(User $oUser, Voucher $oVoucher, $iLang = 0)
+ {
+ //sets language of shop
+ $iCurrLang = $iLang;
+
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+
+ $this->setUser($oUser);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+ $this->setViewData("user", $oUser);
+ $this->setViewData("voucher", $oVoucher);
+ $this->setViewData("voucherserie", $oVoucher->getSerie());
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ $sTemplate = $this->_sd3_email_pointsvoucher_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_pointsvoucher_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_pointsvoucher_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+ // add user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * Send ReminderMails
+ * automatic by cronjob, write Remark
+ *
+ * @param User $oUser
+ * @param $iLang integer
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3SendRemindPointsMail(User $oUser, $iLang = 0)
+ {
+ $blSend = false;
+
+ //sets language of shop
+ $iCurrLang = $iLang;
+
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+
+ $this->setUser($oUser);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+ $this->setViewData("user", $oUser);
+ $this->setViewData("points", $oUser->iUserPointSum);
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ $sTemplate = $this->_sd3_email_remindpoints_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_remindpoints_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_remindpoints_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+
+ // add user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * Mail with points, first mail
+ * write Remark
+ *
+ * @param $oOrder
+ * @param $iLang integer
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ function d3SendPointsCreatedMail($oOrder, $iLang = 0)
+ {
+ //sets language of shop
+ $iCurrLang = $iLang;
+
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+
+ #$oUser = $oOrder->getOrderUser();
+ $oUser = $oOrder->d3getOrderUser();
+ $this->setUser($oUser);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+ $this->setViewData("order", $oOrder);
+ #$this->setViewData( "point", $oPoint);
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ $sTemplate = $this->_sd3_email_d3_email_orderpoints_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_d3_email_orderpoints_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_d3_email_orderpoints_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oOrder->getFieldData('oxbillemail');
+ }
+
+ $sFullName = $oOrder->getFieldData('oxbillfname') . " " . $oOrder->getFieldData('oxbilllname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+ // add user history
+ $this->d3WriteRemark($this->getAltBody(), $oOrder->getOrderUser()->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * Send Mail with Points for Rating or Review
+ * write Remark
+ *
+ * @param Article $oProduct
+ * @param User $oUser user object
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ function d3SendPointsForReviewMail(Article $oProduct, User $oUser)
+ {
+ $blSend = false;
+
+ //sets language of shop
+ $iLang = Registry::get(Config::class)->getActiveShop()->getLanguage();
+ $iCurrLang = $iLang;
+
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+
+ $this->setUser($oUser);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+ $this->setViewData("user", $oUser);
+ $this->setViewData("product", $oProduct);
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ $sTemplate = $this->_sd3_email_reviewpoints_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_reviewpoints_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_reviewpoints_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+
+ // add to user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * Mail for automatic created Voucher
+ * write Remark
+ *
+ * @param User $oUser
+ * @param Voucher $oVoucher
+ * @param integer
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\EshopCommunity\Application\Model\oxObjectException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3SendPointsAutoVoucherMail(User $oUser, Voucher $oVoucher, $iLang = 0)
+ {
+ //sets language of shop
+ $iCurrLang = $iLang;
+ //TODO Sprache testen
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+
+ $this->setUser($oUser);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+ $this->setViewData("user", $oUser);
+ $this->setViewData("voucher", $oVoucher);
+ $this->setViewData("voucherserie", $oVoucher->getSerie());
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ $sTemplate = $this->_sd3_email_pointsautovoucher_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_pointsautovoucher_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_pointsautovoucher_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+
+ // add to user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * Send Mail to user after Points are canceled
+ * write mail into history
+ * $oPoint->sOrderComment
+ * $oPoint->iOrderPoints
+ * $oPoint->iUserPointSum
+ *
+ * @param d3_oxorder_d3points $oOrder
+ * @param d3points $oPoint
+ * @param integer $iLang
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3SendStornoMail(d3_oxorder_d3points $oOrder, d3points $oPoint, $iLang = 0)
+ {
+ //sets language of shop
+ $iCurrLang = $iLang;
+
+ // shop info
+ $oShop = $this->_getShop($iCurrLang);
+ //TODO Sprache testen
+
+ #$oUser = $oOrder->getOrderUser();
+ $oUser = $oOrder->d3getOrderUser();
+
+ $oShop = $this->_getShop($iCurrLang);
+
+ $this->_setMailParams($oShop);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+
+ $this->setUser($oUser);
+ $this->setViewData("order", $oOrder);
+ $this->setViewData("points", $oPoint);
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ //create messages
+ $oLang = Registry::getLang();
+
+ // dodger #1469 - we need to patch security here as we do not use standard template dir, so smarty stops working
+ $aStore['INCLUDE_ANY'] = $oSmarty->security_settings['INCLUDE_ANY'];
+ //V send email in order language
+ $iOldTplLang = $oLang->getTplLanguage();
+ $iOldBaseLang = $oLang->getTplLanguage();
+ $oLang->setTplLanguage($iCurrLang);
+ $oLang->setBaseLanguage($iCurrLang);
+
+ $oSmarty->security_settings['INCLUDE_ANY'] = true;
+ Registry::get(Config::class)->setAdminMode(false);
+
+ $sTemplate = $this->_sd3_email_stornopoints_html_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_stornopoints_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $sTemplate = $this->_sd3_email_stornopoints_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ Registry::get(Config::class)->setAdminMode(true);
+ $oLang->setTplLanguage($iOldTplLang);
+ $oLang->setBaseLanguage($iOldBaseLang);
+ // set it back
+ $oSmarty->security_settings['INCLUDE_ANY'] = $aStore['INCLUDE_ANY'];
+
+ //TestModus
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAddress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAddress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAddress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+
+ // add to user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+
+ return $blSend;
+ }
+
+ /**
+ * @param User $oUser
+ * @param d3points $oPoint
+ * @param int $iLang
+ *
+ * @return bool
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \Exception
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws \d3\points\Application\Model\Exception
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3SendMailForManuelPoints(User $oUser, d3points $oPoint, $iLang = 0)
+ {
+ $myConfig = Registry::get(Config::class);
+ //sets language of shop
+ $iCurrLang = $iLang;
+
+ $oShop = $this->_getShop();
+
+ $this->_setMailParams($oShop);
+ // create messages
+ /** @var \smarty $oSmarty */
+ $oSmarty = $this->_getSmarty();
+
+ $this->setUser($oUser);
+ $this->setViewData("points", $oPoint);
+
+ // Process view data array through oxoutput processor
+ $this->_processViewArray();
+
+ //create messages
+ $oLang = Registry::getLang();
+
+ // dodger #1469 - we need to patch security here as we do not use standard template dir, so smarty stops working
+ $aStore['INCLUDE_ANY'] = $oSmarty->security_settings['INCLUDE_ANY'];
+ //V send email in order language
+ $iOldTplLang = $oLang->getTplLanguage();
+ $iOldBaseLang = $oLang->getTplLanguage();
+
+ $oLang->setTplLanguage($iCurrLang);
+ $oLang->setBaseLanguage($iCurrLang);
+
+ $oSmarty->security_settings['INCLUDE_ANY'] = true;
+ $myConfig->setAdminMode(false);
+
+ // template paths are registered in metadata
+ $sTemplate = $this->_sd3_email_manuelpoints_html_tpl;
+
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ // template paths are registered in metadata
+ $sTemplate = $this->_sd3_email_manuelpoints_plain_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setAltBody($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ // template paths are registered in metadata
+ $sTemplate = $this->_sd3_email_manuelpoints_subj_tpl;
+ if ($oSmarty->template_exists($sTemplate)) {
+ $this->setSubject($oSmarty->fetch($sTemplate));
+ } else {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, __CLASS__, __FUNCTION__, __LINE__);
+ }
+
+ $myConfig->setAdminMode(true);
+ $oLang->setTplLanguage($iOldTplLang);
+ $oLang->setBaseLanguage($iOldBaseLang);
+ // set it back
+ $oSmarty->security_settings['INCLUDE_ANY'] = $aStore['INCLUDE_ANY'];
+
+ if ($this->getModCfg()->hasTestMode()) {
+ $sEMailAdress = $this->d3GetEMAILSTEST();
+ } else {
+ $sEMailAdress = $oUser->getFieldData('oxusername');
+ }
+
+ $sFullName = $oUser->getFieldData('oxfname') . " " . $oUser->getFieldData('oxlname');
+
+ $this->setRecipient($sEMailAdress, $sFullName);
+ $this->setFrom($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+ $this->setReplyTo($oShop->oxshops__oxinfoemail->value, $oShop->oxshops__oxname->getRawValue());
+
+ if ($this->d3GetEMAILSBCC()) {
+ $this->AddBCC($this->d3GetEMAILSBCC());
+ }
+
+ $blSend = $this->send();
+
+ // add to user history
+ $this->d3WriteRemark($this->getAltBody(), $oUser->getId(), "r");
+ return $blSend;
+ }
+
+ /**
+ * Write to d3log, display message if debug is set
+ *
+ * @param string $sTemplate
+ * @param string $sClass
+ * @param string $sFunction
+ * @param string $sLine
+ *
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3WriteMessageIfTemplateNotExist($sTemplate, $sClass, $sFunction, $sLine)
+ {
+ $this->getModCfg()->d3getLog()->Log(
+ d3log::EMERGENCY,
+ $sClass,
+ $sFunction,
+ $sLine,
+ "Template: " . $sTemplate . " not found"
+ );
+ if ($this->getModCfg()->hasDebugMode()) {
+ echo "Template: " . $sTemplate . " not found";
+ }
+ }
+
+ /**
+ * @deprecated since v4.1.1.1, remove in oxid v6
+ *
+ * @param $sTemplate
+ * @param $sClass
+ * @param $sFunction
+ * @param $sLine
+ *
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3WriteMesssageIfTemplateNotExist($sTemplate, $sClass, $sFunction, $sLine)
+ {
+ $this->d3WriteMessageIfTemplateNotExist($sTemplate, $sClass, $sFunction, $sLine);
+ }
+
+ /**
+ * Create Remarkt
+ *
+ * @param String $sMessage
+ * @param String $sUserId
+ * @param String $sType
+ *
+ * @return bool
+ * @throws \d3\points\Application\Model\Exception
+ * @throws \Exception
+ */
+ public function d3WriteRemark($sMessage, $sUserId, $sType = 'r')
+ {
+ /* @var $od3points d3points */
+ $od3points = oxnew(d3points::class);
+
+ return $od3points->d3WriteRemark($sMessage, $sUserId, $sType);
+ }
+
+ /**
+ * Get Mail for Test-Modus
+ *
+ * @return string
+ * @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ * @throws \OxidEsales\Eshop\Core\Exception\StandardException
+ * @throws d3_cfg_mod_exception
+ */
+ public function d3GetEMAILSTEST()
+ {
+ if ($this->getModCfg()->getValue('d3points_EMAILS_TEST') != '') {
+ return $this->getModCfg()->getValue('d3points_EMAILS_TEST');
+ }
+
+ $sMessage = 'Testmodus is active, but no mailaddress ist set. Us instead Infomailaddress.';
+ $this->getModCfg()->d3getLog()->Log(
+ d3log::WARNING,
+ __CLASS__,
+ __FUNCTION__,
+ __LINE__,
+ 'Testmodus, but not Mailaddress',
+ $sMessage
+ );
+
+ if ($this->getModCfg()->hasDebugMode()) {
+ echo $sMessage - PHP_EOL;
+ }
+
+ $oShop = $this->_getShop();
+
+ return $oShop->oxshops__oxinfoemail->value;
+ }
+
+ /**
+ * Return BCC-Mail
+ *
+ * @return string
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ */
+ public function d3GetEMAILSBCC()
+ {
+ return $this->getModCfg()->getValue('d3points_EMAILS_BCC');
+ }
+
+ /**
+ * @return d3_cfg_mod
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ */
+ public function getModCfg()
+ {
+ return d3_cfg_mod::get($this->_sModId);
+ }
+}
diff --git a/src/Modules/Core/d3_oxviewconfig_points.php b/src/Modules/Core/d3_oxviewconfig_points.php
index 11fff51..8ad6764 100644
--- a/src/Modules/Core/d3_oxviewconfig_points.php
+++ b/src/Modules/Core/d3_oxviewconfig_points.php
@@ -1,33 +1,66 @@
-1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
-?>
-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
-kY2+QghULm==
\ No newline at end of file
+ / Markus Gärtner
+ * @copyright (C) 2011, D3 Data Development
+ * @see http://www.shopmodule.com
+ * $Rev:: $:
+ * $Author:: $:
+ * $Date:: $:
+ */
+
+namespace D3\Points\Modules\Core;
+
+use OxidEsales\Eshop\Core\Theme;
+use D3\Points\Application\Model\d3points;
+
+/**
+ * Class d3_oxviewconfig_points
+ *
+ * @package D3\Points\Modules\Application\Core
+ */
+class d3_oxviewconfig_points extends d3_oxviewconfig_points_parent
+{
+ /**
+ * Gibt die Summe der aktuellen Bonuspunkte zurück
+ *
+ * @return int
+ * @throws \Doctrine\DBAL\DBALException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
+ * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
+ */
+ public function d3getPointsTotalSum()
+ {
+ $oUser = $this->getUser();
+ if (!$oUser) {
+ return 0;
+ }
+
+ /* @var $oD3UserPoints d3points */
+ $oD3UserPoints = oxNew(d3points::class);
+
+ return $oD3UserPoints->d3GetTotalSumPoints($oUser->getId());
+ }
+
+ /**
+ * @return mixed
+ * @throws \OxidEsales\Eshop\Core\Exception\SystemComponentException
+ */
+ public function d3GetParentThemeId()
+ {
+ /** @var d3_oxtheme_modcfg $oTheme */
+ $oTheme = oxNew(Theme::class);
+ return $oTheme->d3GetParentThemeId();
+ }
+
+}
\ No newline at end of file