diff --git a/copy_this/modules/d3/d3dev/IntelliSenseHelper.php b/copy_this/modules/d3/d3dev/IntelliSenseHelper.php new file mode 100644 index 0000000..abe55d0 --- /dev/null +++ b/copy_this/modules/d3/d3dev/IntelliSenseHelper.php @@ -0,0 +1,47 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_thankyou_parent extends thankyou {} + +/** + * Class d3_dev_oxorder_parent + */ +class d3_dev_oxorder_parent extends oxorder {} + +/** + * Class d3_dev_oxorderarticle + */ +class d3_dev_oxorderarticle_parent extends oxOrderArticle {} + +/** + * Class d3_dev_oxemail_parent + */ +class d3_dev_oxemail_parent extends oxemail {} + +/** + * Class d3_dev_order_parent + */ +class d3_dev_order_parent extends order {} + +/** + * Class d3_dev_oxbasket_parent + */ +class d3_dev_oxbasket_parent extends oxbasket {} + +/** + * Class d3_dev_oxbasketitem_parent + */ +class d3_dev_oxbasketitem_parent extends oxBasketItem {} \ No newline at end of file diff --git a/copy_this/modules/d3/d3dev/controllers/d3dev.php b/copy_this/modules/d3/d3dev/controllers/d3dev.php new file mode 100644 index 0000000..f961181 --- /dev/null +++ b/copy_this/modules/d3/d3dev/controllers/d3dev.php @@ -0,0 +1,38 @@ + + * @link http://www.oxidmodule.com + */ + +class d3dev extends oxUBase +{ + public function showOrderMailContent() + { + if (oxRegistry::getConfig()->getActiveShop()->isProductiveMode() + || false == oxRegistry::getConfig()->getConfigParam('blD3DevShowOrderMailsInBrowser') + ) { + oxRegistry::getUtils()->redirect(oxRegistry::getConfig()->getShopUrl().'index.php?cl=start'); + } + + $sTpl = oxRegistry::getConfig()->getRequestParameter('type'); + + /** @var d3_dev_thankyou $oThankyou */ + $oThankyou = oxNew('thankyou'); + $oOrder = $oThankyou->d3GetLastOrder(); + + /** @var d3_dev_oxemail $oEmail */ + $oEmail = oxNew('oxemail'); + echo $oEmail->d3GetOrderMailContent($oOrder, $sTpl); + die(); + } +} diff --git a/copy_this/modules/d3/d3dev/metadata.php b/copy_this/modules/d3/d3dev/metadata.php new file mode 100644 index 0000000..d6dc5c3 --- /dev/null +++ b/copy_this/modules/d3/d3dev/metadata.php @@ -0,0 +1,82 @@ + 'd3dev', + 'title' => + (class_exists('d3utils') ? d3utils::getInstance()->getD3Logo() : 'D³') . + ' TPL Development Tool', + 'description' => array( + 'de' => ' +

Sicherheitshinweis

+ + Jede dieser Optionen muss aus Sicherheitsgründen unter "Einstell." aktiviert werden. Weiterhin darf der Shop nicht im Produktivmodus betrieben werden.', + 'en' => ''), + // 'thumbnail' => 'picture.png', + 'version' => '0.1', + 'author' => 'D³ Data Development (Inh.: Thomas Dartsch)', + 'email' => 'support@shopmodule.com', + 'url' => 'http://www.oxidmodule.com/', + 'extend' => array( + 'thankyou' => 'd3/d3dev/modules/controllers/d3_dev_thankyou', + 'oxorder' => 'd3/d3dev/modules/models/d3_dev_oxorder', + 'oxorderarticle' => 'd3/d3dev/modules/models/d3_dev_oxorderarticle', + 'oxemail' => 'd3/d3dev/modules/models/d3_dev_oxemail', + 'oxbasket' => 'd3/d3dev/modules/models/d3_dev_oxbasket', + 'oxbasketitem' => 'd3/d3dev/modules/models/d3_dev_oxbasketitem', + ), + 'files' => array( + 'd3dev' => 'd3/d3dev/controllers/d3dev.php', + ), + 'templates' => array( + ), + 'events' => array( + ), + 'blocks' => array( + ), + 'settings' => array( + array( + 'group' => 'd3dev_order', + 'name' => 'blD3DevAvoidDeleteBasketInThankyou', + 'type' => 'bool', + 'value' => 'false' + ), + array( + 'group' => 'd3dev_order', + 'name' => 'blD3DevShowThankyouWithoutAsociatedOrder', + 'type' => 'bool', + 'value' => 'false' + ), + array( + 'group' => 'd3dev_mail', + 'name' => 'blD3DevShowOrderMailsInBrowser', + 'type' => 'bool', + 'value' => 'false' + ), + ), +); diff --git a/copy_this/modules/d3/d3dev/modules/controllers/d3_dev_thankyou.php b/copy_this/modules/d3/d3dev/modules/controllers/d3_dev_thankyou.php new file mode 100644 index 0000000..b809fad --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/controllers/d3_dev_thankyou.php @@ -0,0 +1,51 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_thankyou extends d3_dev_thankyou_parent +{ + public function init() + { + parent::init(); + + if (oxRegistry::getConfig()->getRequestParameter('d3dev') + && false == oxRegistry::getConfig()->getActiveShop()->isProductiveMode() + && oxRegistry::getConfig()->getConfigParam('blD3DevShowThankyouWithoutAsociatedOrder') + ) { + $oOrder = $this->d3GetLastOrder(); + $oBasket = $oOrder->d3DevGetOrderBasket(); + $this->_oBasket = $oBasket; + } + } + + /** + * @return d3_dev_oxorder + */ + public function d3GetLastOrder() + { + if (oxRegistry::getConfig()->getActiveShop()->isProductiveMode()) { + return false; + } + + /** @var d3_dev_oxorder $oOrder */ + $oOrder = oxNew('oxorder'); + $oOrder->d3getLastOrder(); + + return $oOrder; + } +} diff --git a/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasket.php b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasket.php new file mode 100644 index 0000000..7ac9e4b --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasket.php @@ -0,0 +1,37 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_oxbasket extends d3_dev_oxbasket_parent +{ + public function deleteBasket() + { + if (oxRegistry::getConfig()->getActiveShop()->isProductiveMode() + || false == oxRegistry::getConfig()->getConfigParam('blD3DevAvoidDeleteBasketInThankyou') + ) { + parent::deleteBasket(); + } + + // else do nothing; + } + + public function d3ClearBasketItemArticles() + { + /** @var d3_dev_oxbasketitem $oBasketItem */ + foreach ($this->_aBasketContents as $oBasketItem) { + $oBasketItem->d3ClearArticle(); + } + } +} diff --git a/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasketitem.php b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasketitem.php new file mode 100644 index 0000000..03e0c65 --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxbasketitem.php @@ -0,0 +1,23 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent +{ + public function d3ClearArticle() + { + $this->_oArticle = null; + } +} diff --git a/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxemail.php b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxemail.php new file mode 100644 index 0000000..d5b3ce1 --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxemail.php @@ -0,0 +1,82 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_oxemail extends d3_dev_oxemail_parent +{ + /** + * @param d3_dev_oxorder $oOrder + * + * @return mixed|string + */ + public function d3GetOrderMailContent($oOrder, $sType) + { + if (oxRegistry::getConfig()->getActiveShop()->isProductiveMode()) { + return ''; + } + + switch (strtolower($sType)) { + case 'owner_html': + $sTpl = $this->_sOrderOwnerTemplate; + break; + case 'owner_plain': + $sTpl = $this->_sOrderOwnerPlainTemplate; + break; + case 'user_plain': + $sTpl = $this->_sOrderUserPlainTemplate; + break; + case 'user_html': + default: + $sTpl = $this->_sOrderUserTemplate; + } + + $myConfig = $this->getConfig(); + + $oShop = $this->_getShop(); + + // cleanup + $this->_clearMailer(); + + // add user defined stuff if there is any + $oOrder = $this->_addUserInfoOrderEMail($oOrder); + + $oUser = $oOrder->getOrderUser(); + $this->setUser($oUser); + + // send confirmation to shop owner + // send not pretending from order user, as different email domain rise spam filters + $this->setFrom($oShop->oxshops__oxowneremail->value); + + $oLang = oxRegistry::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 + $oSmarty = $this->_getSmarty(); + $this->setViewData("order", $oOrder); + + // Process view data array through oxoutput processor + $this->_processViewArray(); + + return $oSmarty->fetch($myConfig->getTemplatePath($sTpl, false)); + } +} diff --git a/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorder.php b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorder.php new file mode 100644 index 0000000..447d40f --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorder.php @@ -0,0 +1,81 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_oxorder extends d3_dev_oxorder_parent +{ + /** + * @return d3_dev_oxbasket + */ + public function d3DevGetOrderBasket() + { + /** @var d3_dev_oxbasket $oBasket */ + $oBasket = $this->_getOrderBasket(); + + // unsetting bundles + $oOrderArticles = $this->getOrderArticles(); + foreach ($oOrderArticles as $sItemId => $oItem) { + if ($oItem->isBundle()) { + $oOrderArticles->offsetUnset($sItemId); + } + } + + // add this order articles to basket and recalculate basket + $this->_addOrderArticlesToBasket($oBasket, $oOrderArticles); + + // recalculating basket + $oBasket->calculateBasket(true); + $oBasket->d3ClearBasketItemArticles(); + + $this->_oPayment = $this->_setPayment($oBasket->getPaymentId()); + + return $oBasket; + } + + /** + * @return string + */ + public function d3getLastOrderId() + { + if (oxRegistry::getConfig()->getRequestParameter('d3ordernr')) { + $sWhere = ' oxordernr = ' . (int) oxRegistry::getConfig()->getRequestParameter('d3ordernr'); + } else { + $sWhere = 1; + } + + $sSelect = "SELECT oxid FROM ".getViewName('oxorder')." WHERE ".$sWhere." ORDER BY oxorderdate DESC LIMIT 1"; + + return oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getOne($sSelect); + } + + public function d3getLastOrder() + { + $this->load($this->d3getLastOrderId()); + } + + /** + * @return oxBasket + */ + public function getBasket() + { + $oBasket = parent::getBasket(); + + if (false == $oBasket && oxRegistry::getConfig()->getActiveView()->getClassName() == 'd3dev') { + $oBasket = $this->d3DevGetOrderBasket(); + } + + return $oBasket; + } +} diff --git a/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorderarticle.php b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorderarticle.php new file mode 100644 index 0000000..24a9ee6 --- /dev/null +++ b/copy_this/modules/d3/d3dev/modules/models/d3_dev_oxorderarticle.php @@ -0,0 +1,28 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_dev_oxorderarticle extends d3_dev_oxorderarticle_parent +{ + /** + * @return array + */ + public function getCustomerAlsoBoughtThisProducts() + { + $oArticle = $this->getArticle(); + + return $oArticle->getCustomerAlsoBoughtThisProducts(); + } +} diff --git a/copy_this/modules/d3/d3dev/views/admin/de/d3dev_lang.php b/copy_this/modules/d3/d3dev/views/admin/de/d3dev_lang.php new file mode 100644 index 0000000..0b4bf94 --- /dev/null +++ b/copy_this/modules/d3/d3dev/views/admin/de/d3dev_lang.php @@ -0,0 +1,49 @@ + + * @link http://www.oxidmodule.com + */ + +$sLangName = "Deutsch"; + +// ------------------------------- +// RESOURCE IDENTITFIER = STRING +// ------------------------------- +$aLang = array( + //Navigation + 'charset' => 'ISO-8859-15', + + 'SHOP_MODULE_GROUP_d3dev_order' => 'Bestellungsablauf manipulieren', + 'SHOP_MODULE_blD3DevAvoidDeleteBasketInThankyou' => 'Warenkorb wird nach Bestellabschluss nicht geleert', + 'HELP_SHOP_MODULE_blD3DevAvoidDeleteBasketInThankyou' => 'Damit kann auf der Bestellbestätigungsseite '. + '(Thankyou) durch den "zurück"-Button in den Warenkorb Schritt 4 gewechselt werden und die Bestellung erneut '. + 'abgeschickt werden. Eine erneute Bestückung des Warenkorbs ist nicht nötig. Beim erneuten Absenden wird '. + 'jeweils eine weitere Bestellung angelegt werden. Eventuell verwendete Gutscheine müssen so eingestellt '. + 'werden, dass diese mehrfach verwendet werden können.', + 'SHOP_MODULE_blD3DevShowThankyouWithoutAsociatedOrder' => 'Thankyou-Seite kann auch ohne Bestellung '. + 'aufgerufen werden', + 'HELP_SHOP_MODULE_blD3DevShowThankyouWithoutAsociatedOrder' => 'Ohne abgesendete Bestellung läßt sich die '. + 'Thankyou-Seite im Standardshop nicht aufrufen. Diese Option stellt dies für Entwicklungszwecke zur '. + 'Verfügung.
Den Link zum Seitenaufruf haben wir hier im Stamm-Tab hinterlegt. Die Seite öffnet sich in '. + 'einem neuen Browserfenster.
Für die Anzeige wird die letzte vorliegende Bestellung geladen. Über den '. + 'Parameter "d3ordernr=X" kann eine bestimmten Bestellung vorgegeben werden.', + + 'SHOP_MODULE_GROUP_d3dev_mail' => 'Mailanzeige', + 'SHOP_MODULE_blD3DevShowOrderMailsInBrowser' => 'Bestellbestätigungsmails können im Browser '. + 'angezeigt werden', + 'HELP_SHOP_MODULE_blD3DevShowOrderMailsInBrowser' => 'Die Links zu den '. + 'jeweiligen Mails sind im Stamm-Tab aufgelistet.
Für die Anzeige wird ohne Angabe der Bestellnummer die '. + 'letzte vorliegende Bestellung geladen. Über den Parameter "d3ordernr=X" kann eine bestimmten Bestellung '. + 'vorgegeben werden.', +); diff --git a/setup+doku/changelog.txt b/setup+doku/changelog.txt new file mode 100644 index 0000000..141ade5 --- /dev/null +++ b/setup+doku/changelog.txt @@ -0,0 +1,4 @@ +=> 1.0.0.0 +- unterbindet das Löschen des Warenkorbs nach Bestellabschluss +- Thankyou ist ohne Bestellabschluss aufrufbar (unter Angabe der Bestellnummer auch für eine bestimmte Bestellung) +- Bestellbestätigungsmails sind im Browser darstellbar (unter Angabe der Bestellnummer auch für eine bestimmte Bestellung) \ No newline at end of file