* @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")."". $this->getLicenceExpireDate()."". 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 ''; } }