291 lines
7.8 KiB
PHP
291 lines
7.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This module is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This module is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* For further informations, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @link http://www.oxidmodule.com
|
|
* @link http://www.shopmodule.com
|
|
* @link http://www.aikme.de
|
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch) & aikme GmbH
|
|
*/
|
|
|
|
class d3_thankyou_googleanalytics extends d3_thankyou_googleanalytics_parent
|
|
{
|
|
private $_sModCfgId = 'd3_googleanalytics';
|
|
|
|
public $aD3GAWeekendDays = array(
|
|
6, // Samstag
|
|
7, // Sonntag
|
|
);
|
|
|
|
/**
|
|
* Format Tag-Monat (jeweils mit führenden Nullen)
|
|
* @var array
|
|
*/
|
|
public $aD3GAfixFeastDays = array(
|
|
'01-01', // Neujahr
|
|
'01-05', // Tag der Arbeit
|
|
'03-10', // Tag der deutschen Einheit
|
|
'25-12', // 1. Weihnachtsfeiertag
|
|
'26-12', // 2. Weihnachtsfeiertag
|
|
);
|
|
|
|
protected $_blD3GADateChanged = false;
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
public function isNewCustomer()
|
|
{
|
|
$iIsNewCustomer = oxRegistry::getSession()->getVariable("iD3GANewCustomer");
|
|
oxRegistry::getSession()->deleteVariable("iD3GANewCustomer");
|
|
|
|
return $iIsNewCustomer;
|
|
}
|
|
|
|
/**
|
|
* @param $sGACode
|
|
*/
|
|
public function logCode($sGACode)
|
|
{
|
|
\D3\ModCfg\Application\Model\Configuration\d3_cfg_mod::get($this->_sModCfgId)->d3getLog()->log(
|
|
\D3\ModCfg\Application\Model\Log\d3log::NOTICE,
|
|
__CLASS__,
|
|
__FUNCTION__,
|
|
__LINE__,
|
|
'GA TrackingCode',
|
|
$sGACode
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return oxcountry
|
|
*/
|
|
public function d3GAGetUserCountry()
|
|
{
|
|
$sCountryId = $this->getOrder()->getFieldData('oxbillcountryid');
|
|
/** @var oxcountry $oCountry */
|
|
$oCountry = oxNew('oxcountry');
|
|
$oCountry->load($sCountryId);
|
|
|
|
return $oCountry;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function d3GAgetEstimatedShippingDate()
|
|
{
|
|
startProfile(__METHOD__);
|
|
$iTimeStamp = $this->_d3GAgetEstimatedDate('iEstShippingTimeValue', time());
|
|
stopProfile(__METHOD__);
|
|
|
|
return $iTimeStamp;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function d3GAgetEstimatedDeliveryDate()
|
|
{
|
|
startProfile(__METHOD__);
|
|
$iShippingDate = $this->d3GAgetEstimatedShippingDate();
|
|
$iTimeStamp = $this->_d3GAgetEstimatedDate('iEstDeliveryTimeValue', $iShippingDate);
|
|
stopProfile(__METHOD__);
|
|
|
|
return $iTimeStamp;
|
|
}
|
|
|
|
/**
|
|
* @param string $sModCfgVarName
|
|
* @param int $iTimestamp
|
|
*
|
|
* @return int
|
|
*/
|
|
protected function _d3GAgetEstimatedDate($sModCfgVarName, $iTimestamp)
|
|
{
|
|
// change shipping time for not on stock articles
|
|
if ($sModCfgVarName == 'iEstShippingTimeValue' && $this->hasOutOfStockArticles()) {
|
|
$sModCfgVarName = 'iEstShippingTimeValueOutOfStock';
|
|
}
|
|
|
|
$iTimeValue = \D3\ModCfg\Application\Model\Configuration\d3_cfg_mod::get($this->_sModCfgId)->getValue($sModCfgVarName);
|
|
|
|
for ($i = 0; $i < $iTimeValue; $i++) {
|
|
$iTimestamp += 86400;
|
|
|
|
// check, if transportation day is a working day, else transportation has a break
|
|
do {
|
|
$this->_blD3GADateChanged = false;
|
|
$iTimestamp = $this->_d3GAskipIdlePeriod($iTimestamp);
|
|
} while ($this->_blD3GADateChanged === true);
|
|
}
|
|
|
|
return $iTimestamp;
|
|
}
|
|
|
|
/**
|
|
* @param $iTimestamp
|
|
*
|
|
* @return int
|
|
*/
|
|
protected function _d3GAskipIdlePeriod($iTimestamp)
|
|
{
|
|
startProfile(__METHOD__);
|
|
$iWeekday = date('N', $iTimestamp);
|
|
|
|
if (in_array($iWeekday, $this->aD3GAWeekendDays)) {
|
|
$iOffset = 8 - $iWeekday;
|
|
$iTimestamp += $iOffset * 86400;
|
|
$this->_blD3GADateChanged = true;
|
|
}
|
|
|
|
stopProfile(__METHOD__);
|
|
|
|
return $this->_d3GAskipFeastDays($iTimestamp);
|
|
}
|
|
|
|
/**
|
|
* @param $iTimestamp
|
|
*
|
|
* @return int
|
|
*/
|
|
protected function _d3GAskipFeastDays($iTimestamp)
|
|
{
|
|
startProfile(__METHOD__);
|
|
|
|
while (in_array(date('d-m', $iTimestamp), $this->aD3GAfixFeastDays)) {
|
|
$iTimestamp += 86400;
|
|
$this->_blD3GADateChanged = true;
|
|
}
|
|
|
|
stopProfile(__METHOD__);
|
|
|
|
return $iTimestamp;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function d3GAhasBackorderPreorder()
|
|
{
|
|
return $this->hasOutOfStockArticles() ? 'Y' : 'N';
|
|
}
|
|
|
|
/**
|
|
* @param oxorderarticle $oOrderArticle
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function _d3GAhasArticleBackorderPreorder(oxorderarticle $oOrderArticle)
|
|
{
|
|
/** @var oxarticle $oArticle */
|
|
$oArticle = $oOrderArticle->getArticle();
|
|
|
|
if ($oArticle->getFieldData('oxstockflag') != 4 // Fremdlager
|
|
&& $oOrderArticle->getFieldData('oxamount') > $oOrderArticle->getFieldData('oxstock')
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function d3GAhasDigitalGoods()
|
|
{
|
|
/** @var oxorderarticle $oOrderArticle */
|
|
foreach ($this->getOrder()->getOrderArticles() as $oOrderArticle) {
|
|
if ($this->_d3GAhasArticleDigitalGoods($oOrderArticle)) {
|
|
return 'Y';
|
|
}
|
|
};
|
|
|
|
return 'N';
|
|
}
|
|
|
|
/**
|
|
* @param oxorderarticle $oOrderArticle
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function _d3GAhasArticleDigitalGoods(oxorderarticle $oOrderArticle)
|
|
{
|
|
/** @var oxarticle $oArticle */
|
|
$oArticle = $oOrderArticle->getArticle();
|
|
$oArticleFileList = $oArticle->getArticleFiles();
|
|
|
|
if ($oArticle->getFieldData('oxisdownloadable')
|
|
&& $oArticleFileList->count()
|
|
) {
|
|
if ($this->_d3GAhasArticlePurchasedDownload($oArticleFileList)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param oxList $oArticleFileList
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function _d3GAhasArticlePurchasedDownload(oxList $oArticleFileList)
|
|
{
|
|
/** @var oxfile $oArticleFile */
|
|
foreach ($oArticleFileList->getArray() as $oArticleFile) {
|
|
if ($oArticleFile->getFieldData('oxpurchasedonly')) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param oxorderarticle $oOrderArticle
|
|
*
|
|
* @return string
|
|
*/
|
|
public function d3GAgetProductId($oOrderArticle)
|
|
{
|
|
switch (\D3\ModCfg\Application\Model\Configuration\d3_cfg_mod::get($this->_sModCfgId)->getValue('sD3GATSShoppingArtId')) {
|
|
case 'oxartnum':
|
|
return $oOrderArticle->getFieldData('oxartnum');
|
|
case 'oxid':
|
|
return $oOrderArticle->getFieldData('oxartid');
|
|
};
|
|
|
|
return $oOrderArticle->getFieldData(\D3\ModCfg\Application\Model\Configuration\d3_cfg_mod::get($this->_sModCfgId)->getValue('sD3GATSShoppingArtId'));
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function hasOutOfStockArticles()
|
|
{
|
|
if (oxRegistry::getConfig()->getConfigParam('blUseStock')) {
|
|
foreach ($this->getOrder()->getOrderArticles() as $oOrderArticle) {
|
|
if ($this->_d3GAhasArticleBackorderPreorder($oOrderArticle)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|