27 Commits

Author SHA1 Message Date
b374688479 make installable in OXID 6.5.2 2023-05-12 10:31:40 +02:00
7785181e4c make installable in OXID 6.3.1 2021-08-19 15:47:44 +02:00
67a046476f fix readme file encoding 2021-04-28 22:50:58 +02:00
ea982a89d0 adjust version informations 2021-04-28 22:43:55 +02:00
3d52203d94 fix prepared statement combination 2021-04-28 22:41:03 +02:00
564ddd891d prevent getting faulty config instance in composer installation 2021-04-28 16:14:29 +02:00
09fa1bce31 make installable in OXID 6.3 2021-04-28 15:58:16 +02:00
622b2c7e57 exclude orders from foreign shops and unset user ids 2020-11-24 23:05:30 +01:00
1379b76f2d make installable in OXID 6.2.3 2020-11-24 20:47:59 +01:00
da08b322f4 change license 2020-11-12 09:09:56 +01:00
d2599a57b6 add version list 2020-11-12 08:55:37 +01:00
767750a09a remove inquiry mail viewer 2020-11-12 08:50:36 +01:00
eac41bc94d change fox OXID 6.2 explicit 2020-11-11 23:59:40 +01:00
d1c1ba90b8 update for OXID 6.2 2020-11-11 22:29:10 +01:00
11d4227874 make dev helper installable in OXID 6.2 2020-11-11 11:43:32 +01:00
3635f3c7e9 change module title logo (D3) source to external asset 2020-06-16 10:05:31 +02:00
b0b0c93691 fix non https url in composer.json 2020-06-08 10:07:01 +02:00
a4fa041154 change line endings for easy patching 2020-05-25 10:14:56 +02:00
ccb48a73c1 change dependency to oxid-esales/oxideshop-ce 2020-04-07 20:49:44 +02:00
f59d6b4cc7 fix typo 2019-10-22 10:21:46 +02:00
81e730ca8f change special chars in README 2019-10-21 08:56:21 +02:00
c899d09f77 make changelog more precise 2019-10-21 08:47:56 +02:00
0f4561d6f6 change README to utf-8 2019-10-18 22:13:16 +02:00
62a534d42f change version in metadata and changelog 2019-10-18 22:08:52 +02:00
ef589ee8a3 prevent thankyou redirect in case of missing order 2019-10-16 15:16:33 +02:00
bf9bd60921 in case of mail redirect changed some more informations to the redirection address 2019-10-16 14:59:57 +02:00
73f38afc7f adjust displayed mails to show bundle articles 2019-10-16 14:56:55 +02:00
16 changed files with 508 additions and 545 deletions

BIN
.gitattributes vendored Normal file

Binary file not shown.

View File

@ -1,22 +1,57 @@
# Changelog
All notable changes to this project will be documented in this file.
## Unreleased
---
## 1.2.0.0
## 3.0.0.1 (2021-04-28)
### Changed
- Modul verwendbar in OXID 6.3
### Fixed
- falsche prepared statement Kombination korrigiert
---
## 3.0.0.0 (2020-11-11)
### Changed
- Modul verwendbar in OXID 6.2, deprecated Code bestm<74>glich entfernt
- Anzeige von Anfragemails entfernt, da dazugeh<65>riges Modul nicht weiter entwickelt wird
---
## 2.0.1.0 (2019-10-21)
### Changed
- Mails k<>nnen auch Dreingabeartikel regenerieren und darstellen
- weitere Mailinformationen werden f<>r Mailumleitung ge<67>ndert
### Fixed
- verhindert Thankyou Redirect, wenn keine Order geladen wurde
- Debugging von Mails mit Dreingabebestellungen l<>scht diese Discounts in der gesamten Bestellung
---
## 2.0.0.0 (2018-02-23)
### Added
- verf<72>gbar f<>r OXID 6
- Installation via Composer
---
## 1.2.0.0 (2017-11-21)
### Added
- Mail-Anzeige fordert zus<75>tzlich Authentfikation mit einem Shopadmin-Konto
- Seitenencoding definiert
### Changed
- Dokumentation erg<72>nzt
## 1.1.0.0
---
## 1.1.0.0 (2017-05-31)
### Added
- Mailversand <20>bers Shopframework wird blockiert oder
- Mails werden an alternative Mailadresse umgeleitet
## 1.0.0.0
---
## 1.0.0.0 (2015-12-16)
### Added
- unterbindet das L<>schen des Warenkorbs nach Bestellabschluss
- Thankyou ist ohne Bestellabschluss aufrufbar (unter Angabe der Bestellnummer auch f<>r eine bestimmte Bestellung)

View File

@ -1,29 +1,35 @@
# TPL Development Helper
# TPL Development Helper
## VersionsĂĽbersicht:
* 3.x - OXID 6.2 bis 6.3
* 2.x - OXID 6.0 bis 6.1
* 1.x - bis OXID 4.10 / 5.3
## Installation
composer require d3/devhelper
composer require d3/devhelper:"^3.0"
## Features
### Entwicklungswerkzeug zur Kontrolle schwer zug<EFBFBD>nglicher Shopinhalte
### Entwicklungswerkzeug zur Kontrolle schwer zugänglicher Shopinhalte
Diese Tool soll bei t<EFBFBD>glichen Entwicklungsaufgaben im OXID eShop helfen, die (systembedingt) vom Shopsystem erschwert werden.
Diese Tool soll bei täglichen Entwicklungsaufgaben im OXID eShop helfen, die (systembedingt) vom Shopsystem erschwert werden.
* Mailversand (<EFBFBD>bers Shopframework) <EFBFBD>bers Shopframework wird blockiert __oder__
* Mails (<EFBFBD>bers Shopframework) werden an alternative Mailadresse umgeleitet
(Das Tool setzt direkt an der oxemail::_sendMail()-Methode an und kann damit __jeden__ Mailversand kontrollieren, der <EFBFBD>bers Framework l<EFBFBD>uft. Man muss nicht X verschiedene Module <EFBFBD>berwachen und hat auch Kontrolle <EFBFBD>ber Mailerweiterungen, die keinen Stage-Einsatz vorsehen.)
* unterbindet das L<EFBFBD>schen des Warenkorbs nach Bestellabschluss
* Thankyou-Seite ist auch ohne Bestellabschluss aufrufbar (unter Angabe der Bestellnummer auch f<EFBFBD>r eine bestimmte Bestellung)
* Bestellbest<EFBFBD>tigungsmails und sind im Browser darstellbar (unter Angabe der Bestellnummer auch f<EFBFBD>r eine bestimmte Bestellung)
* Mailversand (ĂĽbers Shopframework) ĂĽbers Shopframework wird blockiert __oder__
* Mails (ĂĽbers Shopframework) werden an alternative Mailadresse umgeleitet
(Das Tool setzt direkt an der oxemail::_sendMail()-Methode an und kann damit __jeden__ Mailversand kontrollieren, der übers Framework läuft. Man muss nicht X verschiedene Module überwachen und hat auch Kontrolle über Mailerweiterungen, die keinen Stage-Einsatz vorsehen.)
* unterbindet das Löschen des Warenkorbs nach Bestellabschluss
* Thankyou-Seite ist auch ohne Bestellabschluss aufrufbar (unter Angabe der Bestellnummer auch fĂĽr eine bestimmte Bestellung)
* Bestellbestätigungsmails und sind im Browser darstellbar (unter Angabe der Bestellnummer auch für eine bestimmte Bestellung)
## Sicherheitshinweis
Da hiermit gezielt Mails der Shopbestellungen angezeigt werden k<EFBFBD>nnen, ist das Modul mit entsprechender Vorsicht zu verwenden. Die H<EFBFBD>rden f<EFBFBD>r die Anzeige der Mails sind daher absichtlich sehr hoch gesetzt. Vor der Verwendung sind Einstellungen zu <EFBFBD>ndern. Denken Sie unbedingt daran, diese Einstellungen im Anschluss wieder zur<EFBFBD>ckzusetzen. Sonst sind Kunden- und Bestelldaten frei abrufbar. Wir <EFBFBD>bernehmen f<EFBFBD>r daraus resultierenden Sch<EFBFBD>den keine Haftung.
Da hiermit gezielt Mails der Shopbestellungen angezeigt werden können, ist das Modul mit entsprechender Vorsicht zu verwenden. Die Hürden für die Anzeige der Mails sind daher absichtlich sehr hoch gesetzt. Vor der Verwendung sind Einstellungen zu ändern. Denken Sie unbedingt daran, diese Einstellungen im Anschluss wieder zurückzusetzen. Sonst sind Kunden- und Bestelldaten frei abrufbar. Wir übernehmen für daraus resultierenden Schäden keine Haftung.
## Verwendung
Um unser Tool verwenden zu k<EFBFBD>nnen, folgen Sie bitte diesen Schritten:
Um unser Tool verwenden zu können, folgen Sie bitte diesen Schritten:
1. Produktivmodus entfernen
@ -33,14 +39,14 @@ Um unser Tool verwenden zu k
![Adminbereich -> Erweiterungen -> Module -> TPL Development Tool -> Aktivieren](docs/step2.jpg "Modul aktivieren")
3. In den Einstellungen die gew<EFBFBD>nschten Funktionen freischalten
3. In den Einstellungen die gewĂĽnschten Funktionen freischalten
![Adminbereich -> Erweiterungen -> Module -> TPL Development Tool -> Einstell.](docs/step3.jpg "gew<EFBFBD>nschte Funktionen freischalten")
![Adminbereich -> Erweiterungen -> Module -> TPL Development Tool -> Einstell.](docs/step3.jpg "gewĂĽnschte Funktionen freischalten")
4. <EFBFBD>ber die Links im Tab <EFBFBD>Stamm<EFBFBD> k<EFBFBD>nnen Sie die betreffenden Seiten aufrufen. Vor der Darstellung wird ein Benutzername und Passwort abgefragt. Hierf<EFBFBD>r verwenden Sie die Anmeldedaten des Adminbereichs Ihres Shops.
4. Über die Links im Tab "Stamm" können Sie die betreffenden Seiten aufrufen. Vor der Darstellung wird ein Benutzername und Passwort abgefragt. Hierfür verwenden Sie die Anmeldedaten des Adminbereichs Ihres Shops.
5. An den E-Mail- und Thankyou-Links gibt es einen leeren Parameter, den Sie bei Bedarf mit einer Bestellnummer f<EFBFBD>llen k<EFBFBD>nnen. Dann wird statt der letzten Bestellung ganz gezielt eine andere Bestellung zur Darstellung verwendet.
5. An den E-Mail- und Thankyou-Links gibt es einen leeren Parameter, den Sie bei Bedarf mit einer Bestellnummer füllen können. Dann wird statt der letzten Bestellung ganz gezielt eine andere Bestellung zur Darstellung verwendet.
6. Beachten Sie unbedingt, dass Sie nach der Verwendung unbedingt das Modul wieder deaktivieren und den Produktivmodus wieder anschalten.
Ber<EFBFBD>cksichtigen Sie bei der Darstellung der E-Mails bitte, dass die Mailprogramme diese m<EFBFBD>glicherweise anders darstellen, als der Browser dies tut. Daher kann die Darstellung im Browser nur ein Anhaltspunkt sein.
Berücksichtigen Sie bei der Darstellung der E-Mails bitte, dass die Mailprogramme diese möglicherweise anders darstellen, als der Browser dies tut. Daher kann die Darstellung im Browser nur ein Anhaltspunkt sein.

View File

@ -1,41 +1,43 @@
{
"name": "d3/devhelper",
"description": "Manipulate shop standard processes for easier development",
"type": "oxideshop-module",
"keywords": [
"oxid",
"modules",
"eShop",
"d3",
"devhelper",
"developer",
"development",
"tools"
],
"authors": [
{
"name": "D3 Data Development (Inh. Thomas Dartsch)",
"email": "info@shopmodule.com",
"homepage": "http://www.d3data.de"
}
],
"homepage": "https://www.oxidmodule.com/",
"license": [
"proprietary"
],
"extra": {
"oxideshop": {
"source-directory": "/src",
"target-directory": "d3/devhelper"
}
},
"require": {
"php": ">=5.6",
"oxid-esales/oxideshop-metapackage-ce": "~6.0.0 || ~6.1.0"
},
"autoload": {
"psr-4": {
"D3\\Devhelper\\": "../../../source/modules/d3/devhelper"
}
}
}
{
"name": "d3/devhelper",
"description": "Manipulate shop standard processes for easier development",
"type": "oxideshop-module",
"keywords": [
"oxid",
"modules",
"eShop",
"d3",
"devhelper",
"developer",
"development",
"tools",
"template",
"e-mail",
"thankyou"
],
"authors": [
{
"name": "D3 Data Development (Inh. Thomas Dartsch)",
"email": "info@shopmodule.com",
"homepage": "https://www.d3data.de"
}
],
"homepage": "https://www.oxidmodule.com/",
"license": [
"GPL-3.0-or-later"
],
"extra": {
"oxideshop": {
"source-directory": "/src",
"target-directory": "d3/devhelper"
}
},
"require": {
"oxid-esales/oxideshop-ce": "6.5 - 6.14"
},
"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\Core as ModuleCore;
use Exception;
use OxidEsales\Eshop\Application\Controller\FrontendController;
use OxidEsales\Eshop\Application\Controller\ThankYouController;
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\UserException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
/**
* This Software is the property of Data Development and is protected
@ -41,8 +41,8 @@ class d3dev extends FrontendController
protected function _authenticate ()
{
try {
$sUser = Registry::get(Request::class)->getRequestEscapedParameter('usr');
$sPassword = Registry::get(Request::class)->getRequestEscapedParameter('pwd');
$sUser = Registry::getRequest()->getRequestEscapedParameter('usr');
$sPassword = Registry::getRequest()->getRequestEscapedParameter('pwd');
if ( !$sUser || !$sPassword ) {
$sUser = $_SERVER[ 'PHP_AUTH_USER' ];
@ -67,13 +67,10 @@ class d3dev extends FrontendController
}
$oUser = oxNew( User::class );
if ( !$sUser || !$sPassword || !$oUser->login( $sUser, $sPassword ) ) {
/** @var UserException $oEx */
$oEx = oxNew( UserException::class, 'EXCEPTION_USER_NOVALIDLOGIN' );
throw $oEx;
throw oxNew( UserException::class, 'EXCEPTION_USER_NOVALIDLOGIN' );
}
}
catch ( \Exception $oEx ) {
catch ( Exception $oEx ) {
$oShop = Registry::getConfig()->getActiveShop();
header( 'WWW-Authenticate: Basic realm="' . $oShop->getFieldData('oxname') . '"' );
header( 'HTTP/1.0 401 Unauthorized' );
@ -90,12 +87,12 @@ class d3dev extends FrontendController
header('Content-type: text/html; charset='.Registry::getLang()->translateString('charset'));
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');
}
$sTpl = Registry::get(Request::class)->getRequestEscapedParameter('type');
$sTpl = Registry::getRequest()->getRequestEscapedParameter('type');
/** @var ModuleController\d3_dev_thankyou $oThankyou */
$oThankyou = oxNew(ThankYouController::class);
@ -106,27 +103,4 @@ class d3dev extends FrontendController
echo $oEmail->d3GetOrderMailContent($oOrder, $sTpl);
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
{
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
{
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 \OxidEsales\Eshop\Application\Controller\OrderController {}
class d3_dev_order_parent extends OrderController {}
}
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;
// .../?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\Core\d3_dev_conf;
use Exception;
use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\UserException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use oxOrder;
/**
* This Software is the property of Data Development and is protected
@ -40,24 +41,54 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
parent::init();
Registry::getSession()->setVariable('sess_challenge', $sSessChallenge);
if (Registry::get(Request::class)->getRequestEscapedParameter("d3dev")
if (Registry::getRequest()->getRequestEscapedParameter("d3dev")
&& false == (bool) Registry::getConfig()->getActiveShop()->isProductiveMode()
&& Registry::getConfig()->getConfigParam('blD3DevShowThankyou')
&& Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_PREVENTDELBASKET)
) {
Registry::getSession()->setVariable( 'sess_challenge', $sSessChallenge );
}
if ($this->d3DevCanShowThankyou()) {
$this->_d3authenticate();
$oOrder = $this->d3GetLastOrder();
$oBasket = $oOrder->d3DevGetOrderBasket();
$this->_oBasket = $oBasket;
$this->_oBasket = $oOrder->d3DevGetOrderBasket();
}
}
/**
* @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 ()
{
try {
$sUser = Registry::get(Request::class)->getRequestEscapedParameter( 'usr');
$sPassword = Registry::get(Request::class)->getRequestEscapedParameter('pwd');
$sUser = Registry::getRequest()->getRequestEscapedParameter( 'usr');
$sPassword = Registry::getRequest()->getRequestEscapedParameter('pwd');
if ( !$sUser || !$sPassword ) {
$sUser = $_SERVER[ 'PHP_AUTH_USER' ];
@ -88,7 +119,7 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
throw $oEx;
}
}
catch ( \Exception $oEx ) {
catch ( Exception $oEx ) {
$oShop = Registry::getConfig()->getActiveShop();
header( 'WWW-Authenticate: Basic realm="{' . $oShop->getFieldData('oxname') . '"' );
header( 'HTTP/1.0 401 Unauthorized' );
@ -96,6 +127,33 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
}
}
/**
* @return bool|d3_dev_oxorder|oxOrder
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getOrder()
{
$oOrder = parent::getOrder();
if ((false == $oOrder || !$oOrder->getFieldData('oxordernr'))
&& $this->d3DevCanShowThankyou()
) {
try {
$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 bool|d3_dev_oxorder
* @throws DatabaseConnectionException
@ -113,21 +171,4 @@ class d3_dev_thankyou extends d3_dev_thankyou_parent
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 © D³ Data Development, Thomas Dartsch
* @author DÂł 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 © D³ Data Development, Thomas Dartsch
* @author DÂł 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

@ -1,9 +1,5 @@
<?php
namespace D3\Devhelper\Modules\Application\Model;
use OxidEsales\Eshop\Core\Registry;
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
@ -19,12 +15,21 @@ use OxidEsales\Eshop\Core\Registry;
* @link http://www.oxidmodule.com
*/
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\OrderArticle;
use OxidEsales\Eshop\Core\Registry;
use oxNoArticleException;
class d3_dev_oxbasket extends d3_dev_oxbasket_parent
{
public function deleteBasket()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()
|| false == Registry::getConfig()->getConfigParam('blD3DevAvoidDelBasket')
|| false == Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_PREVENTDELBASKET)
) {
parent::deleteBasket();
}
@ -61,4 +66,37 @@ class d3_dev_oxbasket extends d3_dev_oxbasket_parent
}
}
}
/**
* @param OrderArticle $oOrderArticle
*
* @return d3_dev_oxbasketitem|null
* @throws oxArticleInputException
* @throws oxNoArticleException
*/
public function d3addOrderArticleToBasket($oOrderArticle)
{
// adding only if amount > 0
if ($oOrderArticle->getFieldData('oxamount') > 0) {
$this->_isForOrderRecalculation = true;
$sItemId = $oOrderArticle->getId();
//inserting new
/** @var d3_dev_oxbasketitem $oBasketItem */
$oBasketItem = oxNew( BasketItem::class);
$oBasketItem->initFromOrderArticle($oOrderArticle);
$oBasketItem->d3ConvertToArticleObject();
$oBasketItem->setWrapping($oOrderArticle->getFieldData('oxwrapid'));
$oBasketItem->setBundle($oOrderArticle->isBundle());
$this->_aBasketContents[$sItemId] = $oBasketItem;
//calling update method
$this->onUpdate();
return $this->_aBasketContents[$sItemId];
}
return null;
}
}

View File

@ -16,6 +16,14 @@
namespace D3\Devhelper\Modules\Application\Model;
use oxArticleInputException;
use OxidEsales\Eshop\Application\Model\Article;
use OxidEsales\Eshop\Application\Model\OrderArticle;
use OxidEsales\Eshop\Core\Exception\ArticleException;
use OxidEsales\Eshop\Core\Exception\ArticleInputException;
use OxidEsales\Eshop\Core\Exception\NoArticleException;
use oxNoArticleException;
class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent
{
public function d3ClearArticle()
@ -25,9 +33,9 @@ class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent
/**
* @return string
* @throws \OxidEsales\Eshop\Core\Exception\ArticleException
* @throws \OxidEsales\Eshop\Core\Exception\ArticleInputException
* @throws \OxidEsales\Eshop\Core\Exception\NoArticleException
* @throws ArticleException
* @throws ArticleInputException
* @throws NoArticleException
*/
public function getTitle()
{
@ -40,4 +48,19 @@ class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent
return $this->_sTitle;
}
/**
* @throws oxArticleInputException
* @throws oxNoArticleException
*/
public function d3ConvertToArticleObject()
{
$oEmbeddedArticle = $this->getArticle();
if ($oEmbeddedArticle instanceof OrderArticle) {
$oArticle = oxNew(Article::class);
$oArticle->load($oEmbeddedArticle->getFieldData('oxartid'));
$this->_oArticle = $oArticle;
}
}
}

View File

@ -1,16 +1,5 @@
<?php
namespace D3\Devhelper\Modules\Application\Model;
use OxidEsales\Eshop\Application\Model\OrderArticle;
use OxidEsales\Eshop\Application\Model\Voucher;
use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Model\ListModel;
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.
@ -26,6 +15,19 @@ use OxidEsales\Eshop\Core\Request;
* @link http://www.oxidmodule.com
*/
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\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Model\ListModel;
use OxidEsales\Eshop\Core\Registry;
use oxnoarticleexception;
class d3_dev_oxorder extends d3_dev_oxorder_parent
{
/**
@ -36,18 +38,9 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
/** @var d3_dev_oxbasket $oBasket */
$oBasket = $this->_getOrderBasket();
// unsetting bundles
/** @var ListModel $oOrderArticles */
$oOrderArticles = $this->getOrderArticles();
foreach ($oOrderArticles as $sItemId => $oItem) {
/** @var $oItem OrderArticle */
if ($oItem->isBundle()) {
$oOrderArticles->offsetUnset($sItemId);
}
}
// add this order articles to basket and recalculate basket
$this->_addOrderArticlesToBasket($oBasket, $oOrderArticles);
$this->_d3AddOrderArticlesToBasket($oBasket, $this->getOrderArticles());
// recalculating basket
$oBasket->calculateBasket(true);
$oBasket->d3ClearBasketItemArticles();
@ -63,15 +56,20 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
*/
public function d3getLastOrderId()
{
$orderNr = (int) Registry::get(Request::class)->getRequestEscapedParameter('d3ordernr');
$orderNr = (int) Registry::getRequest()->getRequestEscapedParameter('d3ordernr');
$sWhere = 1;
$parameters = [];
if ($orderNr) {
$sWhere = ' oxordernr = ' . $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 ".
"oxuserid != '' AND ".
"oxshopid = ".Registry::getConfig()->getShopId()." AND ".
$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);
}
/**
@ -85,7 +83,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()
{
@ -104,9 +102,12 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
*/
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) {
$oVoucher = oxNew(Voucher::class);
@ -114,4 +115,23 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent
$this->_aVoucherList[$oVoucher->getId()] = $oVoucher;
}
}
/**
* Adds order articles back to virtual basket. Needed for recalculating order.
*
* @param d3_dev_oxbasket $oBasket basket object
* @param ListModel $aOrderArticles order articles
* @throws oxArticleInputException
* @throws oxNoArticleException
*/
protected function _d3AddOrderArticlesToBasket($oBasket, $aOrderArticles)
{
// if no order articles, return empty basket
if (count($aOrderArticles) > 0) {
//adding order articles to basket
foreach ($aOrderArticles as $oOrderArticle) {
$oBasket->d3addOrderArticleToBasket($oOrderArticle);
}
}
}
}

View File

@ -27,6 +27,9 @@ class d3_dev_oxorderarticle extends d3_dev_oxorderarticle_parent
{
$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 © D³ Data Development, Thomas Dartsch
* @author DÂł 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

@ -1,10 +1,5 @@
<?php
namespace D3\Devhelper\Modules\Core;
use D3\Devhelper\Modules\Application\Model as ModuleModel;
use OxidEsales\Eshop\Core\Registry;
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
@ -20,6 +15,15 @@ use OxidEsales\Eshop\Core\Registry;
* @link http://www.oxidmodule.com
*/
namespace D3\Devhelper\Modules\Core;
use D3\Devhelper\Modules\Application\Model as ModuleModel;
use OxidEsales\Eshop\Core\Exception\StandardException;
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
{
/**
@ -48,7 +52,7 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$sTpl = $this->_sOrderUserTemplate;
}
$myConfig = $this->getConfig();
$myConfig = Registry::getConfig();
$oShop = $this->_getShop();
@ -77,83 +81,53 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$this->setSmtp($oShop);
// create messages
/** @var \Smarty $oSmarty */
$oSmarty = $this->_getSmarty();
$this->setViewData("order", $oOrder);
// Process view data array through oxoutput processor
$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 mixed|string
* @return TemplateRendererInterface
*/
public function d3GetInquiryMailContent($oInquiry, $sType)
protected function getRenderer()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()) {
return '';
}
$bridge = ContainerFactory::getInstance()->getContainer()
->get(TemplateRendererBridgeInterface::class);
$bridge->setEngine($this->_getSmarty());
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));
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;
}
/**
* @return bool
* @throws StandardException
*/
protected function _sendMail()
{
if (Registry::getConfig()->getActiveShop()->isProductiveMode()) {
@ -161,6 +135,8 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
}
$this->d3clearRecipients();
$this->d3clearReplies();
$this->d3clearReplyTo();
$this->d3clearCC();
$this->d3clearBCC();
@ -171,39 +147,68 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
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()
{
$aRecipients = array();
if (is_array($this->_aRecipients) && count($this->_aRecipients)) {
foreach ($this->_aRecipients as $aRecInfo) {
if (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))
&& $sNewRecipient != $aRecInfo[0]
) {
$aRecInfo[1] = $aRecInfo[1]." (".$aRecInfo[0].")";
$aRecInfo[0] = $sNewRecipient;
$aRecipients[] = $aRecInfo;
} elseif (($sNewRecipient = $this->getNewRecipient($aRecInfo[0]))) {
$aRecipients[] = $aRecInfo;
}
$aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
}
}
$this->_aRecipients = $aRecipients;
}
public function d3clearReplies()
{
$aRecipients = array();
if (is_array($this->_aReplies) && count($this->_aReplies)) {
foreach ($this->_aReplies as $aRecInfo) {
$aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
}
}
$this->_aReplies = $aRecipients;
}
public function d3clearReplyTo()
{
$aRecipients = array();
if (is_array($this->ReplyTo) && count($this->ReplyTo)) {
foreach ($this->ReplyTo as $aRecInfo) {
$aRecipients = $this->d3ChangeRecipient($aRecInfo, $aRecipients);
}
}
$this->ReplyTo = $aRecipients;
}
public function d3clearCC()
{
$aCc = array();
if (is_array($this->cc) && count($this->cc)) {
foreach ($this->cc as $aRecInfo) {
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;
}
$aCc = $this->d3ChangeRecipient($aRecInfo, $aCc);
}
}
@ -215,27 +220,24 @@ class d3_dev_oxemail extends d3_dev_oxemail_parent
$aCc = array();
if (is_array($this->bcc) && count($this->bcc)) {
foreach ($this->bcc as $aRecInfo) {
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;
}
$aCc = $this->d3ChangeRecipient($aRecInfo, $aCc);
}
}
$this->bcc = $aCc;
}
/**
* @param $sMailAddress
*
* @return bool|string
*/
public function getNewRecipient($sMailAddress)
{
if (Registry::getConfig()->getConfigParam('blD3DevBlockMails')) {
if (Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_BLOCKMAIL)) {
return false;
} elseif (Registry::getConfig()->getConfigParam('sD3DevRedirectMail')) {
return trim(Registry::getConfig()->getConfigParam('sD3DevRedirectMail'));
} elseif (Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_REDIRECTMAIL)) {
return trim(Registry::getConfig()->getConfigParam(d3_dev_conf::OPTION_REDIRECTMAIL));
}
return $sMailAddress;

View File

@ -1,5 +1,21 @@
<?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 <20> D<> Data Development, Thomas Dartsch
* @author D<> 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\Application\Controller as ModuleController;
use D3\Devhelper\Modules\Application\Model as ModuleModel;
@ -11,22 +27,25 @@ use OxidEsales\Eshop\Core\Registry;
/**
* 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;" : "";
$shopUrl = function_exists('oxNew') ? Registry::getConfig()->getCurrentShopUrl(false) : '../';
/**
* Module information
*/
$aModule = array(
'id' => 'd3dev',
'title' =>
(class_exists(D3\ModCfg\Application\Model\d3utils::class) ? D3\ModCfg\Application\Model\d3utils::getInstance()->getD3Logo() : 'D&sup3;') .
' <span style="'.$sStyle.';">TPL Development Tool</span>',
'description' => array(
'title' => [
'de' => $sLogo . 'TPL Entwicklerwerkzeug',
'en' => $sLogo . 'TPL Development Tool'
],
'description' => [
'de' => '<script type="text/javascript"><!--
function showNote() {
var _oElem = document.getElementById("secnote");
let _oElem = document.getElementById("secnote");
if (_oElem.style.display === "block") {
_oElem.style.display = "none";
} else {
@ -37,80 +56,66 @@ $aModule = array(
<p style="background-color: darkred; padding: 5px;"><a href="#" style="text-decoration: underline; color: white;" onclick="showNote(); return false;"><b>Sicherheitshinweis</b></a></p>
<p style="display: none; background-color: darkred; color: white; padding: 5px;" id="secnote">Diese Shoperweiterung stellt Entwicklungshilfen zur Verf&uuml;gung, die im Livebetrieb sicherheitskritisch sein k&ouml;nnen. Es k&ouml;nnen Kunden- und Bestelldaten ausgelesen und auch Shopfunktionen manipuliert werden. Aktivieren Sie diese Erweiterung daher nur in einem Umfeld, in dem Sie Missbrauch ausschlie&szligen k&ouml;nnen. F&uuml;r entstandene Sch&auml;den lehnen wir jede Haftung ab.</p>
<ul><li>unterbindet L&ouml;schen des Warenkorbs nach Bestellabschluss</li>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=thankyou&d3dev=1&d3ordernr=" target="_new">Thankyou-Seite ist ohne Bestellung aufrufbar*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.$shopUrl.'index.php?cl=thankyou&d3dev=1&d3ordernr=" target="_new">Thankyou-Seite ist ohne Bestellung aufrufbar*</a></li>'.
'<li>Mail-Templates k&ouml;nnen im Browser ausgegeben werden'.
'<ul>'.
'<li><a style="text-decoration: underline;" href="'.Registry::getConfig()->getCurrentShopUrl(false).'index.php?cl=d3dev&fnc=showOrderMailContent&type=owner_html&d3ordernr=" target="_new">Order Owner HTML*</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_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><a style="text-decoration: underline;" href="'.$shopUrl.'index.php?cl=d3dev&fnc=showOrderMailContent&type=owner_html&d3ordernr=" target="_new">Order Owner HTML*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.$shopUrl.'index.php?cl=d3dev&fnc=showOrderMailContent&type=owner_plain&d3ordernr=" target="_new">Order Owner Plain*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.$shopUrl.'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_html&d3ordernr=" target="_new">Order User HTML*</a></li>'.
'<li><a style="text-decoration: underline;" href="'.$shopUrl.'index.php?cl=d3dev&fnc=showOrderMailContent&type=user_plain&d3ordernr=" target="_new">Order User Plain*</a></li>'.
'</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>'.
'* Ordernummer an URL erg&auml;nzen, wenn bestimmte Bestellungen angezeigt werden sollen',
'en' => ''),
// 'thumbnail' => 'picture.png',
'version' => '2.0.0.0',
'en' => ''],
'version' => '3.0.0.1',
'author' => 'D&sup3; Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com',
'url' => 'http://www.oxidmodule.com/',
'extend' => array(
'extend' => [
OxidController\ThankYouController::class => ModuleController\d3_dev_thankyou::class,
OxidModel\Order::class => ModuleModel\d3_dev_oxorder::class,
OxidModel\OrderArticle::class => ModuleModel\d3_dev_oxorderarticle::class,
OxidCore\Email::class => ModuleCore\d3_dev_oxemail::class,
OxidModel\Basket::class => ModuleModel\d3_dev_oxbasket::class,
OxidModel\BasketItem::class => ModuleModel\d3_dev_oxbasketitem::class,
),
'controllers' => array(
'd3dev' => \D3\Devhelper\Application\Controller\d3dev::class,
),
'templates' => array(
),
'events' => array(
),
'blocks' => array(
),
'settings' => array(
array(
],
'controllers' => [
'd3dev' => d3dev::class,
],
'templates' => [],
'events' => [],
'blocks' => [],
'settings' => [
[
'group' => 'd3dev_order',
'name' => 'blD3DevAvoidDelBasket',
'name' => ModuleCore\d3_dev_conf::OPTION_PREVENTDELBASKET,
'type' => 'bool',
'value' => 'false'
),
array(
],
[
'group' => 'd3dev_order',
'name' => 'blD3DevShowThankyou',
'name' => ModuleCore\d3_dev_conf::OPTION_SHOWTHANKYOU,
'type' => 'bool',
'value' => 'false'
),
array(
],
[
'group' => 'd3dev_mail',
'name' => 'blD3DevShowOrderMailsInBrowser',
'name' => ModuleCore\d3_dev_conf::OPTION_SHOWMAILSINBROWSER,
'type' => 'bool',
'value' => 'false'
),
array(
],
[
'group' => 'd3dev_mailblock',
'name' => 'blD3DevBlockMails',
'name' => ModuleCore\d3_dev_conf::OPTION_BLOCKMAIL,
'type' => 'bool',
'value' => 'false'
),
array(
],
[
'group' => 'd3dev_mailblock',
'name' => 'sD3DevRedirectMail',
'name' => ModuleCore\d3_dev_conf::OPTION_REDIRECTMAIL,
'type' => 'str',
'value' => 'd3test1@shopmodule.com'
),
),
],
],
);
if (class_exists('d3inquiry')) {
$aModule['extend']['d3inquiry'] = ModuleModel\d3_dev_d3inquiry::class;
$aModule['extend']['d3inquiryarticle'] = ModuleModel\d3_dev_d3inquiryarticle::class;
}