Merge remote-tracking branch 'remotes/origin/rel_3.x'

This commit is contained in:
Daniel Seifert 2020-11-12 08:59:45 +01:00
commit f7bc254223
Signed by: DanielS
GPG Key ID: 8A7C4C6ED1915C6F
16 changed files with 302 additions and 518 deletions

BIN
.gitattributes vendored Normal file

Binary file not shown.

View File

@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file.
--- ---
## 3.0.0.0 (2020-11-11)
### Changed
- Modul verwendbar in OXID 6.2, deprecated Code bestmöglich entfernt
- Anzeige von Anfragemails entfernt, da dazugehöriges Modul nicht weiter entwickelt wird
---
## 2.0.1.0 (2019-10-21) ## 2.0.1.0 (2019-10-21)
### Changed ### Changed
- Mails können auch Dreingabeartikel regenerieren und darstellen - Mails können auch Dreingabeartikel regenerieren und darstellen

BIN
README.md

Binary file not shown.

View File

@ -1,41 +1,43 @@
{ {
"name": "d3/devhelper", "name": "d3/devhelper",
"description": "Manipulate shop standard processes for easier development", "description": "Manipulate shop standard processes for easier development",
"type": "oxideshop-module", "type": "oxideshop-module",
"keywords": [ "keywords": [
"oxid", "oxid",
"modules", "modules",
"eShop", "eShop",
"d3", "d3",
"devhelper", "devhelper",
"developer", "developer",
"development", "development",
"tools" "tools",
], "template",
"authors": [ "e-mail",
{ "thankyou"
"name": "D3 Data Development (Inh. Thomas Dartsch)", ],
"email": "info@shopmodule.com", "authors": [
"homepage": "http://www.d3data.de" {
} "name": "D3 Data Development (Inh. Thomas Dartsch)",
], "email": "info@shopmodule.com",
"homepage": "https://www.oxidmodule.com/", "homepage": "https://www.d3data.de"
"license": [ }
"proprietary" ],
], "homepage": "https://www.oxidmodule.com/",
"extra": { "license": [
"oxideshop": { "proprietary"
"source-directory": "/src", ],
"target-directory": "d3/devhelper" "extra": {
} "oxideshop": {
}, "source-directory": "/src",
"require": { "target-directory": "d3/devhelper"
"php": ">=5.6", }
"oxid-esales/oxideshop-metapackage-ce": "~6.0.0 || ~6.1.0" },
}, "require": {
"autoload": { "oxid-esales/oxideshop-ce": "6.5 - 6.5"
"psr-4": { },
"D3\\Devhelper\\": "../../../source/modules/d3/devhelper" "autoload": {
} "psr-4": {
} "D3\\Devhelper\\": "../../../source/modules/d3/devhelper"
} }
}
}

View File

@ -4,6 +4,7 @@ namespace D3\Devhelper\Application\Controller;
use D3\Devhelper\Modules\Application\Controller as ModuleController; use D3\Devhelper\Modules\Application\Controller as ModuleController;
use D3\Devhelper\Modules\Core as ModuleCore; use D3\Devhelper\Modules\Core as ModuleCore;
use Exception;
use OxidEsales\Eshop\Application\Controller\FrontendController; use OxidEsales\Eshop\Application\Controller\FrontendController;
use OxidEsales\Eshop\Application\Controller\ThankYouController; use OxidEsales\Eshop\Application\Controller\ThankYouController;
use OxidEsales\Eshop\Application\Model\User; use OxidEsales\Eshop\Application\Model\User;
@ -12,7 +13,6 @@ use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\UserException; use OxidEsales\Eshop\Core\Exception\UserException;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
/** /**
* This Software is the property of Data Development and is protected * This Software is the property of Data Development and is protected
@ -41,8 +41,8 @@ class d3dev extends FrontendController
protected function _authenticate () protected function _authenticate ()
{ {
try { try {
$sUser = Registry::get(Request::class)->getRequestEscapedParameter('usr'); $sUser = Registry::getRequest()->getRequestEscapedParameter('usr');
$sPassword = Registry::get(Request::class)->getRequestEscapedParameter('pwd'); $sPassword = Registry::getRequest()->getRequestEscapedParameter('pwd');
if ( !$sUser || !$sPassword ) { if ( !$sUser || !$sPassword ) {
$sUser = $_SERVER[ 'PHP_AUTH_USER' ]; $sUser = $_SERVER[ 'PHP_AUTH_USER' ];
@ -67,13 +67,10 @@ class d3dev extends FrontendController
} }
$oUser = oxNew( User::class ); $oUser = oxNew( User::class );
if ( !$sUser || !$sPassword || !$oUser->login( $sUser, $sPassword ) ) { if ( !$sUser || !$sPassword || !$oUser->login( $sUser, $sPassword ) ) {
/** @var UserException $oEx */ throw oxNew( UserException::class, 'EXCEPTION_USER_NOVALIDLOGIN' );
$oEx = oxNew( UserException::class, 'EXCEPTION_USER_NOVALIDLOGIN' );
throw $oEx;
} }
} }
catch ( \Exception $oEx ) { catch ( Exception $oEx ) {
$oShop = Registry::getConfig()->getActiveShop(); $oShop = Registry::getConfig()->getActiveShop();
header( 'WWW-Authenticate: Basic realm="' . $oShop->getFieldData('oxname') . '"' ); header( 'WWW-Authenticate: Basic realm="' . $oShop->getFieldData('oxname') . '"' );
header( 'HTTP/1.0 401 Unauthorized' ); header( 'HTTP/1.0 401 Unauthorized' );
@ -90,12 +87,12 @@ class d3dev extends FrontendController
header('Content-type: text/html; charset='.Registry::getLang()->translateString('charset')); header('Content-type: text/html; charset='.Registry::getLang()->translateString('charset'));
if (Registry::getConfig()->getActiveShop()->isProductiveMode() if (Registry::getConfig()->getActiveShop()->isProductiveMode()
|| false == Registry::getConfig()->getConfigParam('blD3DevShowOrderMailsInBrowser') || false == Registry::getConfig()->getConfigParam(ModuleCore\d3_dev_conf::OPTION_SHOWMAILSINBROWSER)
) { ) {
Registry::getUtils()->redirect(Registry::getConfig()->getShopUrl().'index.php?cl=start'); Registry::getUtils()->redirect(Registry::getConfig()->getShopUrl().'index.php?cl=start');
} }
$sTpl = Registry::get(Request::class)->getRequestEscapedParameter('type'); $sTpl = Registry::getRequest()->getRequestEscapedParameter('type');
/** @var ModuleController\d3_dev_thankyou $oThankyou */ /** @var ModuleController\d3_dev_thankyou $oThankyou */
$oThankyou = oxNew(ThankYouController::class); $oThankyou = oxNew(ThankYouController::class);
@ -106,27 +103,4 @@ class d3dev extends FrontendController
echo $oEmail->d3GetOrderMailContent($oOrder, $sTpl); echo $oEmail->d3GetOrderMailContent($oOrder, $sTpl);
die(); die();
} }
/**
* @throws DatabaseConnectionException
*/
public function showInquiryMailContent()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()
|| false == Registry::getConfig()->getConfigParam('blD3DevShowOrderMailsInBrowser')
) {
Registry::getUtils()->redirect(Registry::getConfig()->getShopUrl().'index.php?cl=start');
}
$sTpl = Registry::get(Request::class)->getRequestEscapedParameter('type');
/** @var ModuleController\d3_dev_thankyou $oThankyou */
$oThankyou = oxNew(ThankYouController::class);
$oOrder = $oThankyou->d3GetLastInquiry();
/** @var ModuleCore\d3_dev_oxemail $oEmail */
$oEmail = oxNew(Email::class);
echo $oEmail->d3GetInquiryMailContent($oOrder, $sTpl);
die();
}
} }

View File

@ -16,27 +16,33 @@
namespace D3\Devhelper\Modules\Application\Controller namespace D3\Devhelper\Modules\Application\Controller
{ {
class d3_dev_thankyou_parent extends \OxidEsales\Eshop\Application\Controller\ThankYouController {} use OxidEsales\Eshop\Application\Controller\ThankYouController;
class d3_dev_thankyou_parent extends ThankYouController {}
} }
namespace D3\Devhelper\Modules\Application\Model namespace D3\Devhelper\Modules\Application\Model
{ {
class d3_dev_oxorder_parent extends \OxidEsales\Eshop\Application\Model\Order {} use OxidEsales\Eshop\Application\Controller\OrderController;
use OxidEsales\Eshop\Application\Model\Basket;
use OxidEsales\Eshop\Application\Model\BasketItem;
use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\Eshop\Application\Model\OrderArticle;
class d3_dev_d3inquiry_parent extends d3inquiry {} class d3_dev_oxorder_parent extends Order {}
class d3_dev_d3inquiryarticle_parent extends d3inquiryarticle {} class d3_dev_oxorderarticle_parent extends OrderArticle {}
class d3_dev_oxorderarticle_parent extends \OxidEsales\Eshop\Application\Model\OrderArticle {} class d3_dev_oxbasket_parent extends Basket {}
class d3_dev_oxbasket_parent extends \OxidEsales\Eshop\Application\Model\Basket {} class d3_dev_oxbasketitem_parent extends BasketItem {}
class d3_dev_oxbasketitem_parent extends \OxidEsales\Eshop\Application\Model\BasketItem {} class d3_dev_order_parent extends OrderController {}
class d3_dev_order_parent extends \OxidEsales\Eshop\Application\Controller\OrderController {}
} }
namespace D3\Devhelper\Modules\Core namespace D3\Devhelper\Modules\Core
{ {
class d3_dev_oxemail_parent extends \OxidEsales\Eshop\Core\Email {} use OxidEsales\Eshop\Core\Email;
class d3_dev_oxemail_parent extends Email {}
} }

View File

@ -3,15 +3,16 @@
namespace D3\Devhelper\Modules\Application\Controller; namespace D3\Devhelper\Modules\Application\Controller;
// .../?cl=thankyou[&d3orderid=23] // .../?cl=thankyou[&d3orderid=23]
use D3\Devhelper\Modules\Application\Model\d3_dev_d3inquiry;
use D3\Devhelper\Modules\Application\Model\d3_dev_oxorder; use D3\Devhelper\Modules\Application\Model\d3_dev_oxorder;
use D3\Devhelper\Modules\Core\d3_dev_conf;
use Exception;
use OxidEsales\Eshop\Application\Model\Order; use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\Eshop\Application\Model\User; use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\UserException; use OxidEsales\Eshop\Core\Exception\UserException;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request; use oxOrder;
/** /**
* This Software is the property of Data Development and is protected * This Software is the property of Data Development and is protected
@ -40,29 +41,54 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
parent::init(); parent::init();
if (Registry::get(Request::class)->getRequestEscapedParameter("d3dev") if (Registry::getRequest()->getRequestEscapedParameter("d3dev")
&& false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode() && false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode()
&& Registry::getConfig()->getConfigParam('blD3DevAvoidDelBasket') && Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_PREVENTDELBASKET)
) { ) {
Registry::getSession()->setVariable( 'sess_challenge', $sSessChallenge ); Registry::getSession()->setVariable( 'sess_challenge', $sSessChallenge );
} }
if (Registry::get(Request::class)->getRequestEscapedParameter("d3dev") if ($this->d3DevCanShowThankyou()) {
&& false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode()
&& Registry::getConfig()->getConfigParam('blD3DevShowThankyou')
) {
$this->_d3authenticate(); $this->_d3authenticate();
$oOrder = $this->d3GetLastOrder(); $oOrder = $this->d3GetLastOrder();
$oBasket = $oOrder->d3DevGetOrderBasket(); $this->_oBasket = $oOrder->d3DevGetOrderBasket();
$this->_oBasket = $oBasket;
} }
} }
/**
* @return bool
*/
public function d3DevCanShowThankyou()
{
return Registry::getRequest()->getRequestEscapedParameter("d3dev")
&& false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode()
&& Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_SHOWTHANKYOU);
}
/**
* @return string
*/
public function render()
{
$currentClass = '';
if ($this->d3DevCanShowThankyou()) {
$currentClass = $this->getViewConfig()->getViewConfigParam('cl');
}
$ret = parent::render();
if ($this->d3DevCanShowThankyou()) {
$this->getViewConfig()->setViewConfigParam('cl', $currentClass);
}
return $ret;
}
protected function _d3authenticate () protected function _d3authenticate ()
{ {
try { try {
$sUser = Registry::get(Request::class)->getRequestEscapedParameter( 'usr'); $sUser = Registry::getRequest()->getRequestEscapedParameter( 'usr');
$sPassword = Registry::get(Request::class)->getRequestEscapedParameter('pwd'); $sPassword = Registry::getRequest()->getRequestEscapedParameter('pwd');
if ( !$sUser || !$sPassword ) { if ( !$sUser || !$sPassword ) {
$sUser = $_SERVER[ 'PHP_AUTH_USER' ]; $sUser = $_SERVER[ 'PHP_AUTH_USER' ];
@ -93,7 +119,7 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
throw $oEx; throw $oEx;
} }
} }
catch ( \Exception $oEx ) { catch ( Exception $oEx ) {
$oShop = Registry::getConfig()->getActiveShop(); $oShop = Registry::getConfig()->getActiveShop();
header( 'WWW-Authenticate: Basic realm="{' . $oShop->getFieldData('oxname') . '"' ); header( 'WWW-Authenticate: Basic realm="{' . $oShop->getFieldData('oxname') . '"' );
header( 'HTTP/1.0 401 Unauthorized' ); header( 'HTTP/1.0 401 Unauthorized' );
@ -102,7 +128,7 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
} }
/** /**
* @return bool|d3_dev_oxorder|\oxOrder * @return bool|d3_dev_oxorder|oxOrder
* @throws DatabaseConnectionException * @throws DatabaseConnectionException
* @throws DatabaseErrorException * @throws DatabaseErrorException
*/ */
@ -111,12 +137,18 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
$oOrder = parent::getOrder(); $oOrder = parent::getOrder();
if ((false == $oOrder || !$oOrder->getFieldData('oxordernr')) if ((false == $oOrder || !$oOrder->getFieldData('oxordernr'))
&& Registry::get(Request::class)->getRequestEscapedParameter("d3dev") && $this->d3DevCanShowThankyou()
&& false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode()
&& Registry::getConfig()->getConfigParam('blD3DevShowThankyou')
) { ) {
$this->_oOrder = $this->d3GetLastOrder(); try {
$oOrder = $this->_oOrder; $this->_oOrder = $this->d3GetLastOrder();
$oOrder = $this->_oOrder;
if (!$oOrder || !$oOrder->getFieldData('oxordernr')) {
throw oxNew(\RuntimeException::class, 'unknown order');
}
} catch (Exception $e) {
die($e->getMessage());
}
} }
return $oOrder; return $oOrder;
@ -139,21 +171,4 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
return $oOrder; return $oOrder;
} }
/**
* @return bool|d3_dev_d3inquiry
* @throws DatabaseConnectionException
*/
public function d3GetLastInquiry()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()) {
return false;
}
/** @var d3_dev_d3inquiry $oInquiry */
$oInquiry = oxNew('d3inquiry');
$oInquiry->d3getLastInquiry();
return $oInquiry;
}
} }

View File

@ -1,179 +0,0 @@
<?php
namespace D3\Devhelper\Modules\Application\Model;
use OxidEsales\Eshop\Application\Model\Basket;
use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright © Data Development, Thomas Dartsch
* @author Data Development - Daniel Seifert <info@shopmodule.com>
* @link http://www.oxidmodule.com
*/
class d3_dev_d3inquiry extends d3_dev_d3inquiry_parent
{
protected $_oOrderBasket = null;
/**
* @return d3_dev_oxbasket
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function d3DevGetOrderBasket()
{
/** @var Basket $oBasket */
$this->_getInquiryBasket();
// unsetting bundles
$oOrderArticles = $this->getInquiryArticles();
foreach ($oOrderArticles as $sItemId => $oItem) {
if ($oItem->isBundle()) {
$oOrderArticles->offsetUnset($sItemId);
}
}
// add this order articles to basket and recalculate basket
$oBasket = $this->_addInquiryArticlesToBasket($this->getInquiryUser(), $oOrderArticles);
// recalculating basket
$oBasket->calculateBasket(true);
$oBasket->d3ClearBasketItemArticles();
return $oBasket;
}
/**
* @return string
* @throws DatabaseConnectionException
*/
public function d3getLastInquiryId()
{
$inquiryNr = (int) Registry::get(Request::class)->getRequestEscapedParameter('d3inquirynr');
$sWhere = 1;
if ($inquiryNr) {
$sWhere = ' oxinquirynr = ' . $inquiryNr;
}
$sSelect = "SELECT oxid FROM ".getViewName('d3inquiry')." WHERE ".$sWhere." ORDER BY oxinquirydate DESC LIMIT 1";
return DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getOne($sSelect);
}
/**
* @throws DatabaseConnectionException
*/
public function d3getLastInquiry()
{
$this->load($this->d3getLastInquiryId());
//$this->_d3AddVouchers();
}
/**
* @return Basket
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getBasket()
{
$oBasket = parent::getBasket();
if (false == $oBasket && Registry::getConfig()->getActiveView()->getClassKey() == 'd3dev') {
$oBasket = $this->d3DevGetOrderBasket();
}
return $oBasket;
}
/**
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
protected function _d3AddVouchers()
{
$sSelect = "SELECT oxid FROM oxvouchers WHERE oxorderid = ". DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->quote($this->getId()).";";
$aResult = DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getAll($sSelect);
foreach ($aResult as $aFields) {
$oVoucher = oxNew('oxvoucher');
$oVoucher->load($aFields['oxid']);
$this->_aVoucherList[$oVoucher->getId()] = $oVoucher;
}
}
/**
* Returns basket object filled up with discount, delivery, wrapping and all other info
*
* @param bool $blStockCheck perform stock check or not (default true)
*
* @return Basket
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
protected function _getInquiryBasket($blStockCheck = true)
{
/** @var Basket _oOrderBasket */
$this->_oOrderBasket = oxNew(Basket::class);
$this->_oOrderBasket->enableSaveToDataBase(false);
//setting recalculation mode
$this->_oOrderBasket->setCalculationModeNetto($this->isNettoMode());
// setting stock check mode
$this->_oOrderBasket->setStockCheckMode($blStockCheck);
// setting virtual basket user
$this->_oOrderBasket->setBasketUser($this->getInquiryUser());
// transferring order id
$this->_oOrderBasket->setInquiryId($this->getId());
// setting basket currency order uses
$aCurrencies = Registry::getConfig()->getCurrencyArray();
foreach ($aCurrencies as $oCur) {
if ($oCur->name == $this->getFieldData('oxcurrency')) {
$oBasketCur = $oCur;
break;
}
}
// setting currency
$this->_oOrderBasket->setBasketCurrency($oBasketCur);
// set basket card id and message
$this->_oOrderBasket->setCardId($this->getFieldData('oxcardid'));
$this->_oOrderBasket->setCardMessage($this->getFieldData('oxcardtext'));
if ($this->_blReloadDiscount) {
$oDb = DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC);
// disabling availability check
$this->_oOrderBasket->setSkipVouchersChecking(true);
// add previously used vouchers
$sQ = 'select oxid from oxvouchers where oxorderid = ' . $oDb->quote($this->getId());
$aVouchers = $oDb->getAll($sQ);
foreach ($aVouchers as $aVoucher) {
$this->_oOrderBasket->addVoucher($aVoucher['oxid']);
}
} else {
$this->_oOrderBasket->setDiscountCalcMode(false);
$this->_oOrderBasket->setVoucherDiscount($this->getFieldData('oxvoucherdiscount'));
$this->_oOrderBasket->setTotalDiscount($this->getFieldData('oxdiscount'));
}
return $this->_oOrderBasket;
}
}

View File

@ -1,42 +0,0 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright © Data Development, Thomas Dartsch
* @author Data Development - Daniel Seifert <info@shopmodule.com>
* @link http://www.oxidmodule.com
*/
namespace D3\Devhelper\Modules\Application\Model;
use OxidEsales\Eshop\Application\Model\ArticleList;
class d3_dev_d3inquiryarticle extends d3_dev_d3inquiryarticle_parent
{
/**
* @return null|ArticleList
*/
public function getCustomerAlsoBoughtThisProducts()
{
$oArticle = $this->getArticle();
return $oArticle->getCustomerAlsoBoughtThisProducts();
}
/**
* Returns true if ordered product is bundle
*
* @return bool
*/
public function isBundle()
{
return ( bool ) $this->getFieldData('oxisbundle');
}
}

View File

@ -17,16 +17,19 @@
namespace D3\Devhelper\Modules\Application\Model; namespace D3\Devhelper\Modules\Application\Model;
use D3\Devhelper\Modules\Core\d3_dev_conf;
use oxArticleInputException;
use OxidEsales\Eshop\Application\Model\BasketItem; use OxidEsales\Eshop\Application\Model\BasketItem;
use OxidEsales\Eshop\Application\Model\OrderArticle; use OxidEsales\Eshop\Application\Model\OrderArticle;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use oxNoArticleException;
class d3_dev_oxbasket extends d3_dev_oxbasket_parent class d3_dev_oxbasket extends d3_dev_oxbasket_parent
{ {
public function deleteBasket() public function deleteBasket()
{ {
if (Registry::getConfig()->getActiveShop()->isProductiveMode() if (Registry::getConfig()->getActiveShop()->isProductiveMode()
|| false == Registry::getConfig()->getConfigParam('blD3DevAvoidDelBasket') || false == Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_PREVENTDELBASKET)
) { ) {
parent::deleteBasket(); parent::deleteBasket();
} }
@ -67,14 +70,14 @@ class d3_dev_oxbasket extends d3_dev_oxbasket_parent
/** /**
* @param OrderArticle $oOrderArticle * @param OrderArticle $oOrderArticle
* *
* @return |null * @return d3_dev_oxbasketitem|null
* @throws \oxArticleInputException * @throws oxArticleInputException
* @throws \oxNoArticleException * @throws oxNoArticleException
*/ */
public function d3addOrderArticleToBasket($oOrderArticle) public function d3addOrderArticleToBasket($oOrderArticle)
{ {
// adding only if amount > 0 // adding only if amount > 0
if ($oOrderArticle->oxorderarticles__oxamount->value > 0) { if ($oOrderArticle->getFieldData('oxamount') > 0) {
$this->_isForOrderRecalculation = true; $this->_isForOrderRecalculation = true;
$sItemId = $oOrderArticle->getId(); $sItemId = $oOrderArticle->getId();
@ -83,7 +86,7 @@ class d3_dev_oxbasket extends d3_dev_oxbasket_parent
$oBasketItem = oxNew( BasketItem::class); $oBasketItem = oxNew( BasketItem::class);
$oBasketItem->initFromOrderArticle($oOrderArticle); $oBasketItem->initFromOrderArticle($oOrderArticle);
$oBasketItem->d3ConvertToArticleObject(); $oBasketItem->d3ConvertToArticleObject();
$oBasketItem->setWrapping($oOrderArticle->oxorderarticles__oxwrapid->value); $oBasketItem->setWrapping($oOrderArticle->getFieldData('oxwrapid'));
$oBasketItem->setBundle($oOrderArticle->isBundle()); $oBasketItem->setBundle($oOrderArticle->isBundle());
$this->_aBasketContents[$sItemId] = $oBasketItem; $this->_aBasketContents[$sItemId] = $oBasketItem;

View File

@ -16,11 +16,13 @@
namespace D3\Devhelper\Modules\Application\Model; namespace D3\Devhelper\Modules\Application\Model;
use oxArticleInputException;
use OxidEsales\Eshop\Application\Model\Article; use OxidEsales\Eshop\Application\Model\Article;
use OxidEsales\Eshop\Application\Model\OrderArticle; use OxidEsales\Eshop\Application\Model\OrderArticle;
use OxidEsales\Eshop\Core\Exception\ArticleException; use OxidEsales\Eshop\Core\Exception\ArticleException;
use OxidEsales\Eshop\Core\Exception\ArticleInputException; use OxidEsales\Eshop\Core\Exception\ArticleInputException;
use OxidEsales\Eshop\Core\Exception\NoArticleException; use OxidEsales\Eshop\Core\Exception\NoArticleException;
use oxNoArticleException;
class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent
{ {
@ -48,8 +50,8 @@ class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent
} }
/** /**
* @throws \oxArticleInputException * @throws oxArticleInputException
* @throws \oxNoArticleException * @throws oxNoArticleException
*/ */
public function d3ConvertToArticleObject() public function d3ConvertToArticleObject()
{ {

View File

@ -17,13 +17,16 @@
namespace D3\Devhelper\Modules\Application\Model; namespace D3\Devhelper\Modules\Application\Model;
use oxarticleinputexception;
use OxidEsales\Eshop\Application\Model\Basket;
use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\Eshop\Application\Model\Voucher; use OxidEsales\Eshop\Application\Model\Voucher;
use OxidEsales\Eshop\Core\DatabaseProvider; use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Model\ListModel; use OxidEsales\Eshop\Core\Model\ListModel;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request; use oxnoarticleexception;
class d3_dev_oxorder extends d3_dev_oxorder_parent class d3_dev_oxorder extends d3_dev_oxorder_parent
{ {
@ -53,15 +56,16 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
*/ */
public function d3getLastOrderId() public function d3getLastOrderId()
{ {
$orderNr = (int) Registry::get(Request::class)->getRequestEscapedParameter('d3ordernr'); $orderNr = (int) Registry::getRequest()->getRequestEscapedParameter('d3ordernr');
$sWhere = 1; $sWhere = 1;
if ($orderNr) { if ($orderNr) {
$sWhere = ' oxordernr = ' . DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->quote($orderNr); $sWhere = ' oxordernr = ? ';
} }
$parameters = [$orderNr];
$sSelect = "SELECT oxid FROM ".getViewName('oxorder')." WHERE ".$sWhere." ORDER BY oxorderdate DESC LIMIT 1"; $sSelect = "SELECT oxid FROM ".oxNew(Order::class)->getViewName()." WHERE ".$sWhere." ORDER BY oxorderdate DESC LIMIT 1";
return DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getOne($sSelect); return DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getOne($sSelect, $parameters);
} }
/** /**
@ -75,7 +79,7 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
} }
/** /**
* @return d3_dev_oxbasket|\OxidEsales\Eshop\Application\Model\Basket * @return d3_dev_oxbasket|Basket
*/ */
public function getBasket() public function getBasket()
{ {
@ -94,9 +98,12 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
*/ */
protected function _d3AddVouchers() protected function _d3AddVouchers()
{ {
$sSelect = "SELECT oxid FROM oxvouchers WHERE oxorderid = ".DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->quote($this->getId()).";"; $sSelect = "SELECT oxid FROM ".oxNew(Voucher::class)->getViewName()." WHERE oxorderid = ?";
$aResult = DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getAll($sSelect); $aResult = DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getAll(
$sSelect,
[$this->getId()]
);
foreach ($aResult as $aFields) { foreach ($aResult as $aFields) {
$oVoucher = oxNew(Voucher::class); $oVoucher = oxNew(Voucher::class);
@ -110,6 +117,8 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
* *
* @param d3_dev_oxbasket $oBasket basket object * @param d3_dev_oxbasket $oBasket basket object
* @param ListModel $aOrderArticles order articles * @param ListModel $aOrderArticles order articles
* @throws oxArticleInputException
* @throws oxNoArticleException
*/ */
protected function _d3AddOrderArticlesToBasket($oBasket, $aOrderArticles) protected function _d3AddOrderArticlesToBasket($oBasket, $aOrderArticles)
{ {

View File

@ -27,6 +27,9 @@ class d3_dev_oxorderarticle extends d3_dev_oxorderarticle_parent
{ {
$oArticle = $this->getArticle(); $oArticle = $this->getArticle();
return $oArticle->getCustomerAlsoBoughtThisProducts(); /** @var ArticleList $artList */
$artList = $oArticle->getCustomerAlsoBoughtThisProducts();
return $artList;
} }
} }

View File

@ -0,0 +1,29 @@
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright © Data Development, Thomas Dartsch
* @author Data Development - Daniel Seifert <info@shopmodule.com>
* @link http://www.oxidmodule.com
*/
namespace D3\Devhelper\Modules\Core;
class d3_dev_conf
{
const OPTION_PREVENTDELBASKET = 'blD3DevAvoidDelBasket';
const OPTION_SHOWTHANKYOU = 'blD3DevShowThankyou';
const OPTION_SHOWMAILSINBROWSER = 'blD3DevShowOrderMailsInBrowser';
const OPTION_BLOCKMAIL = 'blD3DevBlockMails';
const OPTION_REDIRECTMAIL = 'sD3DevRedirectMail';
}

View File

@ -20,6 +20,9 @@ namespace D3\Devhelper\Modules\Core;
use D3\Devhelper\Modules\Application\Model as ModuleModel; use D3\Devhelper\Modules\Application\Model as ModuleModel;
use OxidEsales\Eshop\Core\Exception\StandardException; use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRendererBridgeInterface;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRendererInterface;
class d3_dev_oxemail extends d3_dev_oxemail_parent class d3_dev_oxemail extends d3_dev_oxemail_parent
{ {
@ -49,7 +52,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$sTpl = $this->_sOrderUserTemplate; $sTpl = $this->_sOrderUserTemplate;
} }
$myConfig = $this->getConfig(); $myConfig = Registry::getConfig();
$oShop = $this->_getShop(); $oShop = $this->_getShop();
@ -78,81 +81,47 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$this->setSmtp($oShop); $this->setSmtp($oShop);
// create messages // create messages
/** @var \Smarty $oSmarty */
$oSmarty = $this->_getSmarty();
$this->setViewData("order", $oOrder); $this->setViewData("order", $oOrder);
// Process view data array through oxoutput processor // Process view data array through oxoutput processor
$this->_processViewArray(); $this->_processViewArray();
return $oSmarty->fetch($myConfig->getTemplatePath($sTpl, false)); $renderer = $this->getRenderer();
return $renderer->renderTemplate($myConfig->getTemplatePath($sTpl, false), $this->getViewData());
} }
/** /**
* @param ModuleModel\d3_dev_d3inquiry $oInquiry * required because private in Email class
* Templating instance getter
* *
* @param $sType * @return TemplateRendererInterface
*
* @return mixed|string
*/ */
public function d3GetInquiryMailContent($oInquiry, $sType ) protected function getRenderer()
{ {
if (Registry::getConfig()->getActiveShop()->isProductiveMode()) { $bridge = ContainerFactory::getInstance()->getContainer()
return ''; ->get(TemplateRendererBridgeInterface::class);
$bridge->setEngine($this->_getSmarty());
return $bridge->getTemplateRenderer();
}
/**
* @param $aRecInfo
* @param array $aCc
* @return array
*/
public function d3ChangeRecipient($aRecInfo, array $aCc): array
{
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1] . " (" . $aRecInfo[0] . ")";
$aRecInfo[0] = $sNewRecipient;
$aCc[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aCc[] = $aRecInfo;
} }
return $aCc;
switch (strtolower($sType)) {
case 'owner_html':
$sTpl = $this->_sInquiryOwnerTemplate;
break;
case 'owner_plain':
$sTpl = $this->_sInquiryOwnerPlainTemplate;
break;
case 'user_plain':
$sTpl = $this->_sInquiryUserPlainTemplate;
break;
case 'user_html':
default:
$sTpl = $this->_sInquiryUserTemplate;
}
$myConfig = $this->getConfig();
$oShop = $this->_getShop();
// cleanup
$this->_clearMailer();
// add user defined stuff if there is any
$oInquiry = $this->_addUserInfoOrderEMail($oInquiry);
$oUser = $oInquiry->getInquiryUser();
$this->setUser($oUser);
// send confirmation to shop owner
// send not pretending from order user, as different email domain rise spam filters
$this->setFrom($oShop->getFieldData('oxowneremail'));
$oLang = Registry::getLang();
$iOrderLang = $oLang->getObjectTplLanguage();
// if running shop language is different from admin lang. set in config
// we have to load shop in config language
if ($oShop->getLanguage() != $iOrderLang) {
$oShop = $this->_getShop($iOrderLang);
}
$this->setSmtp($oShop);
// create messages
/** @var \Smarty $oSmarty */
$oSmarty = $this->_getSmarty();
$this->setViewData("inquiry", $oInquiry);
// Process view data array through oxoutput processor
$this->_processViewArray();
return $oSmarty->fetch($myConfig->getTemplatePath($sTpl, false));
} }
/** /**
@ -178,20 +147,35 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
return true; return true;
} }
/**
* @return bool
* @throws StandardException
*/
protected function sendMail()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()) {
return parent::sendMail();
}
$this->d3clearRecipients();
$this->d3clearReplies();
$this->d3clearReplyTo();
$this->d3clearCC();
$this->d3clearBCC();
if (count($this->getRecipient())) {
return parent::sendMail();
}
return true;
}
public function d3clearRecipients() public function d3clearRecipients()
{ {
$aRecipients = array(); $aRecipients = array();
if (is_array($this->_aRecipients) && count($this->_aRecipients)) { if (is_array($this->_aRecipients) && count($this->_aRecipients)) {
foreach ($this->_aRecipients as $aRecInfo) { foreach ($this->_aRecipients as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0])) $aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aRecipients[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aRecipients[] = $aRecInfo;
}
} }
} }
$this->_aRecipients = $aRecipients; $this->_aRecipients = $aRecipients;
@ -202,15 +186,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$aRecipients = array(); $aRecipients = array();
if (is_array($this->_aReplies) && count($this->_aReplies)) { if (is_array($this->_aReplies) && count($this->_aReplies)) {
foreach ($this->_aReplies as $aRecInfo) { foreach ($this->_aReplies as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0])) $aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aRecipients[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aRecipients[] = $aRecInfo;
}
} }
} }
$this->_aReplies = $aRecipients; $this->_aReplies = $aRecipients;
@ -221,15 +197,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$aRecipients = array(); $aRecipients = array();
if (is_array($this->ReplyTo) && count($this->ReplyTo)) { if (is_array($this->ReplyTo) && count($this->ReplyTo)) {
foreach ($this->ReplyTo as $aRecInfo) { foreach ($this->ReplyTo as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0])) $aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aRecipients[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aRecipients[] = $aRecInfo;
}
} }
} }
$this->ReplyTo = $aRecipients; $this->ReplyTo = $aRecipients;
@ -240,15 +208,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$aCc = array(); $aCc = array();
if (is_array($this->cc) && count($this->cc)) { if (is_array($this->cc) && count($this->cc)) {
foreach ($this->cc as $aRecInfo) { foreach ($this->cc as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0])) $aCc = $this->d3ChangeRecipient($aRecInfo, $aCc);
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aCc[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aCc[] = $aRecInfo;
}
} }
} }
@ -260,15 +220,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$aCc = array(); $aCc = array();
if (is_array($this->bcc) && count($this->bcc)) { if (is_array($this->bcc) && count($this->bcc)) {
foreach ($this->bcc as $aRecInfo) { foreach ($this->bcc as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0])) $aCc = $this->d3ChangeRecipient($aRecInfo, $aCc);
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aCc[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aCc[] = $aRecInfo;
}
} }
} }
@ -282,10 +234,10 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
*/ */
public function getNewRecipient($sMailAddress) public function getNewRecipient($sMailAddress)
{ {
if (Registry::getConfig()->getConfigParam('blD3DevBlockMails')) { if (Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_BLOCKMAIL)) {
return false; return false;
} elseif (Registry::getConfig()->getConfigParam('sD3DevRedirectMail')) { } elseif (Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_REDIRECTMAIL)) {
return trim(Registry::getConfig()->getConfigParam('sD3DevRedirectMail')); return trim(Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_REDIRECTMAIL));
} }
return $sMailAddress; return $sMailAddress;

View File

@ -1,5 +1,21 @@
<?php <?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* http://www.shopmodule.com
*
* @copyright © Data Development, Thomas Dartsch
* @author Data Development - Daniel Seifert <info@shopmodule.com>
* @link http://www.oxidmodule.com
*/
use D3\Devhelper\Application\Controller\d3dev;
use D3\Devhelper\Modules\Core as ModuleCore; use D3\Devhelper\Modules\Core as ModuleCore;
use D3\Devhelper\Modules\Application\Controller as ModuleController; use D3\Devhelper\Modules\Application\Controller as ModuleController;
use D3\Devhelper\Modules\Application\Model as ModuleModel; use D3\Devhelper\Modules\Application\Model as ModuleModel;
@ -11,22 +27,22 @@ use OxidEsales\Eshop\Core\Registry;
/** /**
* Metadata version * Metadata version
*/ */
$sMetadataVersion = '2.0'; $sMetadataVersion = '2.1';
$sLogo = '<img src="https://logos.oxidmodule.com/d3logo.svg" alt="(D3)" style="height:1em;width:1em"> ';
$sStyle = class_exists(D3\Devhelper\Application\Controller\d3dev::class) ? "background-color: darkred; color: white; padding: 0 10px;" : "";
/** /**
* Module information * Module information
*/ */
$aModule = array( $aModule = array(
'id' => 'd3dev', 'id' => 'd3dev',
'title' => 'title' => [
(class_exists(D3\ModCfg\Application\Model\d3utils::class) ? D3\ModCfg\Application\Model\d3utils::getInstance()->getD3Logo() : 'D&sup3;') . 'de' => $sLogo . 'TPL Entwicklerwerkzeug',
' <span style="'.$sStyle.';">TPL Development Tool</span>', 'en' => $sLogo . 'TPL Development Tool'
'description' => array( ],
'description' => [
'de' => '<script type="text/javascript"><!-- 'de' => '<script type="text/javascript"><!--
function showNote() { function showNote() {
var _oElem = document.getElementById("secnote"); let _oElem = document.getElementById("secnote");
if (_oElem.style.display === "block") { if (_oElem.style.display === "block") {
_oElem.style.display = "none"; _oElem.style.display = "none";
} else { } else {
@ -44,72 +60,59 @@ $aModule = array(
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=owner_plain&d3ordernr=" target="_new">Order Owner Plain*</a></li>'. '<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=owner_plain&d3ordernr=" target="_new">Order Owner Plain*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_html&d3ordernr=" target="_new">Order User HTML*</a></li>'. '<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_html&d3ordernr=" target="_new">Order User HTML*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_plain&d3ordernr=" target="_new">Order User Plain*</a></li>'. '<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_plain&d3ordernr=" target="_new">Order User Plain*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showInquiryMailContent&type=owner_html&d3inquirynr=" target="_new">Inquiry Owner HTML*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showInquiryMailContent&type=owner_plain&d3inquirynr=" target="_new">Inquiry Owner Plain*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showInquiryMailContent&type=user_html&d3inquirynr=" target="_new">Inquiry User HTML*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showInquiryMailContent&type=user_plain&d3inquirynr=" target="_new">Inquiry User Plain*</a></li></ul>'.
'</li>'. '</li>'.
'<li>blockiert &uuml;bers Framework versendete Mails oder leitet diese um</li>'. '<li>blockiert &uuml;bers Framework versendete Mails oder leitet diese um</li>'.
'</ul><br>Jede dieser Optionen muss aus Sicherheitsgr&uuml;nden unter "Einstell." aktiviert werden. Weiterhin darf der Shop nicht im Produktivmodus betrieben werden.<br><br>'. '</ul><br>Jede dieser Optionen muss aus Sicherheitsgr&uuml;nden unter "Einstell." aktiviert werden. Weiterhin darf der Shop nicht im Produktivmodus betrieben werden.<br><br>'.
'* Ordernummer an URL erg&auml;nzen, wenn bestimmte Bestellungen angezeigt werden sollen', '* Ordernummer an URL erg&auml;nzen, wenn bestimmte Bestellungen angezeigt werden sollen',
'en' => ''), 'en' => ''],
'version' => '2.0.1.0', 'version' => '3.0.0.0',
'author' => 'D&sup3; Data Development (Inh.: Thomas Dartsch)', 'author' => 'D&sup3; Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com', 'email' => 'support@shopmodule.com',
'url' => 'http://www.oxidmodule.com/', 'url' => 'http://www.oxidmodule.com/',
'extend' => array( 'extend' => [
OxidController\ThankYouController::class => ModuleController\d3_dev_thankyou::class, OxidController\ThankYouController::class => ModuleController\d3_dev_thankyou::class,
OxidModel\Order::class => ModuleModel\d3_dev_oxorder::class, OxidModel\Order::class => ModuleModel\d3_dev_oxorder::class,
OxidModel\OrderArticle::class => ModuleModel\d3_dev_oxorderarticle::class, OxidModel\OrderArticle::class => ModuleModel\d3_dev_oxorderarticle::class,
OxidCore\Email::class => ModuleCore\d3_dev_oxemail::class, OxidCore\Email::class => ModuleCore\d3_dev_oxemail::class,
OxidModel\Basket::class => ModuleModel\d3_dev_oxbasket::class, OxidModel\Basket::class => ModuleModel\d3_dev_oxbasket::class,
OxidModel\BasketItem::class => ModuleModel\d3_dev_oxbasketitem::class, OxidModel\BasketItem::class => ModuleModel\d3_dev_oxbasketitem::class,
), ],
'controllers' => array( 'controllers' => [
'd3dev' => \D3\Devhelper\Application\Controller\d3dev::class, 'd3dev' => d3dev::class,
), ],
'templates' => array( 'templates' => [],
), 'events' => [],
'events' => array( 'blocks' => [],
), 'settings' => [
'blocks' => array( [
),
'settings' => array(
array(
'group' => 'd3dev_order', 'group' => 'd3dev_order',
'name' => 'blD3DevAvoidDelBasket', 'name' => ModuleCore\d3_dev_conf::OPTION_PREVENTDELBASKET,
'type' => 'bool', 'type' => 'bool',
'value' => 'false' 'value' => 'false'
), ],
array( [
'group' => 'd3dev_order', 'group' => 'd3dev_order',
'name' => 'blD3DevShowThankyou', 'name' => ModuleCore\d3_dev_conf::OPTION_SHOWTHANKYOU,
'type' => 'bool', 'type' => 'bool',
'value' => 'false' 'value' => 'false'
), ],
array( [
'group' => 'd3dev_mail', 'group' => 'd3dev_mail',
'name' => 'blD3DevShowOrderMailsInBrowser', 'name' => ModuleCore\d3_dev_conf::OPTION_SHOWMAILSINBROWSER,
'type' => 'bool', 'type' => 'bool',
'value' => 'false' 'value' => 'false'
), ],
array( [
'group' => 'd3dev_mailblock', 'group' => 'd3dev_mailblock',
'name' => 'blD3DevBlockMails', 'name' => ModuleCore\d3_dev_conf::OPTION_BLOCKMAIL,
'type' => 'bool', 'type' => 'bool',
'value' => 'false' 'value' => 'false'
), ],
array( [
'group' => 'd3dev_mailblock', 'group' => 'd3dev_mailblock',
'name' => 'sD3DevRedirectMail', 'name' => ModuleCore\d3_dev_conf::OPTION_REDIRECTMAIL,
'type' => 'str', 'type' => 'str',
'value' => 'd3test1@shopmodule.com' 'value' => 'd3test1@shopmodule.com'
), ],
), ],
); );
if (class_exists('d3inquiry')) {
$aModule['extend']['d3inquiry'] = ModuleModel\d3_dev_d3inquiry::class;
$aModule['extend']['d3inquiryarticle'] = ModuleModel\d3_dev_d3inquiryarticle::class;
}