ModCfg/Application/Controller/Admin/Install/d3mod_activation.php

430 lignes
13 KiB
PHP

<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
namespace D3\ModCfg\Application\Controller\Admin\Install;
use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use D3\ModCfg\Application\Model\Constants;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Model\Install\d3install;
use D3\ModCfg\Application\Model\Shopcompatibility\d3shopversionconverter;
use D3\ModCfg\Application\Model\d3str;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use Doctrine\DBAL\Exception as DBALException;
use Exception;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\ShopVersion;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Application\Model\Shop;
final class d3mod_activation extends d3_cfg_mod_main
{
protected $_sNextStep = 'getActivationType';
protected $_sActivationType;
protected $_sThisTemplate = '@'.Constants::OXID_MODULE_ID.'/admin/install/activation';
protected $_blSubmitStatus = false;
protected $_sModSerial = '';
protected $_sNotSuccessMessage = '';
protected $_sValidTo = '';
/** @var d3_cfg_mod */
protected $_oModule;
/**
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function init()
{
parent::init();
$this->_oModule = d3_cfg_mod::get(Registry::get(Request::class)->getRequestEscapedParameter('modid'));
$this->_sActivationType = Registry::get(Request::class)->getRequestEscapedParameter('activationtype');
}
/**
* @return string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function render()
{
$this->addTplParam('oModule', d3_cfg_mod::get(Registry::get(Request::class)->getRequestEscapedParameter('modid')));
return parent::render();
}
/**
* @return mixed
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
*/
public function isLicenseRequired()
{
$blRet = true;
try {
$blRet = $this->_oModule->isLicenseRequired();
} catch (d3_cfg_mod_exception) {
}
return $blRet;
}
/**
* @param d3_cfg_mod $module
* @return string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
*/
public function getModTitle(d3_cfg_mod $module)
{
try {
$sModTitle = $module->getModTitle();
} catch (d3_cfg_mod_exception) {
$sModTitle = $module->getModBaseTitle();
}
return $sModTitle;
}
public function setStep1()
{
$this->_sNextStep = 'getActivationData';
}
/**
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws Exception
*/
public function setStep2()
{
$aLicData = [];
$this->_sNextStep = 'submitData';
$sKey = trim(Registry::get(Request::class)->getRequestEscapedParameter('licencekey'));
if ($this->getActivationType() == 'boughtoxidmodule'
&& strlen($sKey) > 32
) {
$this->_saveSerial($sKey);
$this->_saveActIdent('');
} else {
if ($this->getActivationType() == 'requestagain') {
$sKey = $this->_oModule->getActIdent();
}
/** @var d3shopversionconverter $oShopVersionConverter */
$oShopVersionConverter = oxNew(d3shopversionconverter::class);
$oLicServer = d3install::getInstance()->getFromLicenceServer();
$oLicServer->setParameter('sModId', $this->_oModule->d3GetModId());
$oLicServer->setParameter('sModVersion', $this->_oModule->getModVersion());
$oLicServer->setParameter('sDomain', $this->getSubmitLicenceDomain());
$oLicServer->setParameter('sShopEdition', $this->getSubmitShopEdition());
$oLicServer->setParameter('sShopId', $this->getSubmitLicenceShop()->getId());
$oLicServer->setParameter('sShopVersion', $oShopVersionConverter->fixVersionToDefaultEdition(
ShopVersion::getVersion()
));
if ($this->getActivationType() == 'usedemo') {
$aLicData = $oLicServer->getDemoLicence();
} elseif (
$this->getActivationType() == 'boughtoxidmodule' ||
$this->getActivationType() == 'requestagain'
) {
$oLicServer->setParameter('sActIdent', $sKey);
$aLicData = $oLicServer->getModuleLicence();
}
$this->_sModSerial = $aLicData['sSerial'];
$this->_blSubmitStatus = $aLicData['iError'];
$this->_sNotSuccessMessage = $aLicData['sErrMsg'];
$this->_sValidTo = $aLicData['sValidTo'];
if ($this->_blSubmitStatus === '0' && $this->_sModSerial) {
$this->_oModule->setSerial($this->_sModSerial);
$this->_saveActIdent($sKey);
$this->_oModule->save();
}
$this->_sActivationType = "";
}
}
/**
* @param $sLicKey
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
protected function _saveSerial($sLicKey)
{
$sModId = Registry::get(Request::class)->getRequestEscapedParameter('modid');
if ($sLicKey) {
d3_cfg_mod::get($sModId)->setSerial($sLicKey);
d3_cfg_mod::get($sModId)->save();
$this->_sNextStep = 'saveSerialSuccess';
}
}
/**
* @param $sActIdent
*
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
protected function _saveActIdent($sActIdent)
{
$sModId = Registry::get(Request::class)->getRequestEscapedParameter('modid');
if ($sActIdent) {
d3_cfg_mod::get($sModId)->setActIdent($sActIdent);
d3_cfg_mod::get($sModId)->save();
}
}
/**
* @return string
*/
public function getNextStep()
{
return $this->_sNextStep;
}
/**
* @return mixed
*/
public function getActivationType()
{
return $this->_sActivationType;
}
/**
* @return string
*/
public function getSubmitLicenceDomain()
{
$oD3Str = oxNew(d3str::class);
$aUrl = parse_url(strtolower(Registry::getConfig()->getConfigParam('sShopURL')));
if ($oD3Str->isIPNum($aUrl['host'])) {
$sRegDomain = $aUrl['host'];
} else {
$tld = $oD3Str->getTLD($aUrl['host']);
$sPattern = '@'.preg_quote('.'.$tld).'$@';
$sCustDomain = $tld ? preg_replace($sPattern, '', $aUrl['host']) : $aUrl['host'];
$aCustDomain = array_slice(explode('.', $sCustDomain), -1, 1);
$sRegDomain = $aCustDomain[0]. ($oD3Str->getTLD($aUrl['host']) ? '.'.$tld : '');
}
return $sRegDomain;
}
/**
* @return Shop
*/
public function getSubmitLicenceShop()
{
/** @var Shop $shop */
$shop = Registry::getConfig()->getActiveShop();
return $shop;
}
/**
* @param bool $blFull
* @return string
*/
public function getSubmitShopEdition($blFull = false)
{
if ($blFull) {
return Registry::getConfig()->getFullEdition();
} else {
/** @var d3shopversionconverter $oShopVersionConverter */
$oShopVersionConverter = oxNew(d3shopversionconverter::class);
return $oShopVersionConverter->fixEditionToDefaultEdition($this->getShopEdition());
}
}
/**
* @return string
*/
public function getModuleSerial()
{
return $this->_sModSerial;
}
/**
* @return bool
*/
public function getSubmitStatus()
{
return $this->_blSubmitStatus;
}
/**
* @return string
*/
public function getNotSuccessMessage()
{
$sIdent = "D3_CFG_MOD_ACTIVATION_ERR";
match ($this->getSubmitStatus()) {
'1' => $sIdent .= "MISSINGPARAMS",
'2' => $sIdent .= "UNKNOWNMODULE",
'3' => $sIdent .= "TOMUCHTESTLIC",
'4' => $sIdent .= "NOORDER",
'5' => $sIdent .= "WRONGEDITION",
'6' => $sIdent .= "DIFFERENTSHOPS",
'7' => $sIdent .= "NEWERMAJORVERSION",
default => Registry::getLang()->translateString($sIdent),
};
return Registry::getLang()->translateString($sIdent);
}
/**
* @return string
*/
public function getSubmitText()
{
$sTranslIdent = "D3_CFG_MOD_ACTIVATION_SUBMIT_NEXT";
switch ($this->getActivationType()) {
case "boughtoxidmodule":
case "requestagain":
$sTranslIdent = "D3_CFG_MOD_ACTIVATION_SUBMIT_ACTNOW";
break;
case "boughtforeign":
case "wantbuy":
case "notlisted":
$sTranslIdent = "D3_CFG_MOD_ACTIVATION_SUBMIT_BACK";
break;
case "usedemo":
$sTranslIdent = "D3_CFG_MOD_ACTIVATION_SUBMIT_SETDEMO";
break;
}
return Registry::getLang()->translateString($sTranslIdent);
}
/**
* @return string
*/
public function getLicenceExpireDate()
{
// unable to use date, because date in far future can't handle with php
$sDay = substr($this->_sValidTo, 8, 2);
$sMonth = substr($this->_sValidTo, 5, 2);
$sYear = substr($this->_sValidTo, 0, 4);
$sHour = substr($this->_sValidTo, 11, 2);
$sMinute = substr($this->_sValidTo, 14, 2);
$sSecond = substr($this->_sValidTo, 17, 2);
return "$sDay.$sMonth.$sYear $sHour:$sMinute:$sSecond";
}
/**
* @return bool
*/
public function hasNoExpiration()
{
if ($this->_sValidTo == '2099-12-31 23:59:59' ||
$this->_sValidTo == '2090-12-31 23:59:59'
) {
return true;
} else {
return false;
}
}
/**
* @return string
*/
public function getExpirationMessage()
{
if ($this->hasNoExpiration()) {
return Registry::getLang()->translateString("D3_CFG_MOD_ACTIVATION_SUBMIT_SUCCESS_NOEXP").
Registry::getLang()->translateString("D3_CFG_MOD_ACTIVATION_SUBMIT_SUCCESS_2");
} else {
return Registry::getLang()->translateString("D3_CFG_MOD_ACTIVATION_SUBMIT_SUCCESS_1")."<b>".
$this->getLicenceExpireDate()."</b>".
Registry::getLang()->translateString("D3_CFG_MOD_ACTIVATION_SUBMIT_SUCCESS_2");
}
}
/**
* @return bool|string
*/
public function getBgColor()
{
if (Registry::get(Request::class)->getRequestEscapedParameter('bgcolor')) {
return Registry::get(Request::class)->getRequestEscapedParameter('bgcolor');
}
return false;
}
/**
* @return string|false
*/
public function d3GetMenuItemTitle()
{
return false;
}
/**
* @return bool
*/
public function getIsOrderStep()
{
return false;
}
/**
* @return string
*/
public function getLink()
{
return '';
}
}