getProperty('LOGIN_NO_WS') === null || $oServerConf->getProperty('LOGIN_NO_WS') === false) { $oServerConf->setProperty('LOGIN_NO_WS', true); } //searching .dat files in workspace folder $server_array = $_SERVER; $activeLicenseSetting = $oServerConf->getProperty('ACTIVE_LICENSE'); if ((isset($activeLicenseSetting[config("system.workspace")])) && (file_exists($activeLicenseSetting[config("system.workspace")]))) { $licenseFile = $activeLicenseSetting[config("system.workspace")]; } else { $activeLicense = $this->getActiveLicense(); $oServerConf->setProperty('ACTIVE_LICENSE', [config("system.workspace") => $activeLicense['LICENSE_PATH']]); $licenseFile = $activeLicense['LICENSE_PATH']; } $application = new license_application($licenseFile, false, true, false, true); $application->set_server_vars($server_array); $application->DATE_STRING = 'Y-m-d H:i:s'; $results = $application->validate(); $validStatus = [ 'OK', 'EXPIRED', 'TMINUS' ]; $this->result = $results['RESULT']; $this->features = []; $this->licensedfeatures = []; $this->licensedfeaturesList = []; if (in_array($this->result, $validStatus)) { $this->serial = "3ptta7Xko2prrptrZnSd356aqmPXvMrayNPFj6CLdaR1pWtrW6qPw9jV0OHjxrDGu8LVxtmSm9nP5kR23HRpdZWccpeui+bKkK°DoqCt2Kqgpq6Vg37s"; $info = []; $info['FIRST_NAME'] = $results['DATA']['FIRST_NAME']; $info['LAST_NAME'] = $results['DATA']['LAST_NAME']; $info['DOMAIN_WORKSPACE'] = $results['DATA']['DOMAIN_WORKSPACE']; $this->date = $results ['DATE']; $this->info = $info; $this->type = $results ['DATA']['TYPE']; $this->plan = isset($results ['DATA']['PLAN']) ? $results ['DATA']['PLAN'] : ""; $this->id = $results ['ID']; $this->expireIn = $this->getExpireIn(); $this->features = $this->result != 'TMINUS' ? isset($results ['DATA']['CUSTOMER_PLUGIN']) ? $results ['DATA']['CUSTOMER_PLUGIN'] : $this->getActiveFeatures() : []; $this->licensedfeatures = $this->result != 'TMINUS' ? (isset($results ['DATA']['CUSTOMER_LICENSED_FEATURES']) && is_array($results ['DATA']['CUSTOMER_LICENSED_FEATURES'])) ? $results ['DATA']['CUSTOMER_LICENSED_FEATURES'] : [] : []; $this->licensedfeaturesList = isset($results ['DATA']['LICENSED_FEATURES_LIST']) ? $results ['DATA']['LICENSED_FEATURES_LIST'] : null; $this->status = $this->getCurrentLicenseStatus(); if (isset($results ['LIC'])) { $resultsRegister = $results['LIC']; $this->server = $results['LIC']['SRV']; $this->file = $results['LIC']['FILE']; $this->workspace = isset($results['LIC']['WORKSPACE']) ? $results['LIC']['WORKSPACE'] : 'pmLicenseSrv'; $this->licenseSerial = (isset($results['LIC']['SERIAL'])) ? $results['LIC']['SERIAL'] : ''; $this->supportStartDate = (isset($results['DATA']['SUPPORT_START_DATE'])) ? $results['DATA']['SUPPORT_START_DATE'] : ''; $this->supportEndDate = (isset($results['DATA']['SUPPORT_END_DATE'])) ? $results['DATA']['SUPPORT_END_DATE'] : ''; $this->supportStartDate = date("Y-m-d H:i:s", strtotime($this->supportStartDate)); $this->supportEndDate = date("Y-m-d H:i:s", strtotime($this->supportEndDate)); $conf = new Configurations(); if (!empty(config("system.workspace")) && $conf->exists("ENVIRONMENT_SETTINGS")) { $this->supportStartDate = $conf->getSystemDate($this->supportStartDate); $this->supportEndDate = $conf->getSystemDate($this->supportEndDate); } else { $this->supportStartDate = G::getformatedDate($this->supportStartDate, 'M d, yyyy', SYS_LANG); $this->supportEndDate = G::getformatedDate($this->supportEndDate, 'M d, yyyy', SYS_LANG); } } else { $resultsRegister = []; $resultsRegister['ID'] = $results['DATA']['DOMAIN_WORKSPACE']; $this->server = null; $this->file = null; } // The HUMAN attribute varies according to the timezone configured in the server, therefore it does not need // to be considered in the comparison if the value was changed or not, it is only comparing with te "timestamp" if (isset($results['DATE']['HUMAN'])) { unset($results['DATE']['HUMAN']); } $resultsRegister['date'] = $results ['DATE']; $resultsRegister['info'] = $info; $resultsRegister['type'] = $results ['DATA'] ['TYPE']; if ($oServerConf->getProperty('LICENSE_INFO')) { $licInfoA = $oServerConf->getProperty('LICENSE_INFO'); // The HUMAN attribute varies according to the timezone configured in the server, therefore it does not need // to be considered in the comparison if the value was changed or not, it is only comparing with te "timestamp" if (isset($licInfoA[config("system.workspace")]['date']['HUMAN'])) { unset($licInfoA[config("system.workspace")]['date']['HUMAN']); } } else { $licInfoA = []; } if (empty($licInfoA[config("system.workspace")]) || ($licInfoA[config("system.workspace")] != $resultsRegister)) { $licInfoA[config("system.workspace")] = $resultsRegister; $oServerConf->setProperty('LICENSE_INFO', $licInfoA); } } if ($flagActivatePlugins) { $this->activateFeatures(); } } public static function getSingleton($flagActivatePlugins = true) { if (self::$instance == null) { self::$instance = new PmLicenseManager($flagActivatePlugins); } return self::$instance; } public function serializeInstance() { return serialize(self::$instance); } public function activateFeatures() { //Get a list of all Enterprise plugins and active/inactive them if (file_exists(PATH_PLUGINS . 'enterprise/data/default')) { if ($this->result == "OK") { //Disable if (file_exists(PATH_PLUGINS . 'enterprise/data/data')) { $oPluginRegistry = PluginRegistry::loadSingleton(); $aPlugins = unserialize(trim(file_get_contents(PATH_PLUGINS . 'enterprise/data/data'))); foreach ($aPlugins as $aPlugin) { $sClassName = substr($aPlugin ['sFilename'], 0, strpos($aPlugin ['sFilename'], '-')); require_once PATH_PLUGINS . $sClassName . '.php'; $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); $oPluginRegistry->disablePlugin($oDetails->getNamespace()); $oPluginRegistry->savePlugin($oDetails->getNamespace()); } unlink(PATH_PLUGINS . 'enterprise/data/data'); } //Enable $oPluginRegistry = PluginRegistry::loadSingleton(); $aPlugins = unserialize(trim(file_get_contents(PATH_PLUGINS . "enterprise/data/default"))); foreach ($aPlugins as $aPlugin) { if ($aPlugin ["bActive"]) { $sClassName = substr($aPlugin["sFilename"], 0, strpos($aPlugin["sFilename"], "-")); require_once(PATH_PLUGINS . $sClassName . ".php"); $oDetails = $oPluginRegistry->getPluginDetails($sClassName . ".php"); $oPluginRegistry->enablePlugin($oDetails->getNamespace()); $oPluginRegistry->savePlugin($oDetails->getNamespace()); } } if (file_exists(PATH_DATA_SITE . "ee")) { $aPlugins = unserialize(trim(file_get_contents(PATH_DATA_SITE . 'ee'))); $aDenied = []; foreach ($aPlugins as $aPlugin) { $sClassName = substr($aPlugin ['sFilename'], 0, strpos($aPlugin ['sFilename'], '-')); if (!(in_array($sClassName, $this->features))) { if (file_exists(PATH_PLUGINS . $sClassName . '.php')) { require_once PATH_PLUGINS . $sClassName . '.php'; $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); $oPluginRegistry->disablePlugin($oDetails->getNamespace()); $oPluginRegistry->savePlugin($oDetails->getNamespace()); $aDenied[] = $oDetails->getNamespace(); } } } if (!(empty($aDenied))) { if ((SYS_COLLECTION == "enterprise") && (SYS_TARGET == "pluginsList")) { G::SendMessageText("The following plugins were restricted due to your enterprise license: " . implode( ", ", $aDenied ), "INFO"); } } } } else { //Disable $oPluginRegistry = PluginRegistry::loadSingleton(); $aPlugins = unserialize(trim(file_get_contents(PATH_PLUGINS . 'enterprise/data/default'))); foreach ($aPlugins as $aPlugin) { $sClassName = substr($aPlugin ['sFilename'], 0, strpos($aPlugin ['sFilename'], '-')); //To avoid self disable if (($sClassName != "pmLicenseManager") && ($sClassName != "pmTrial") && ($sClassName != "enterprise")) { require_once PATH_PLUGINS . $sClassName . '.php'; $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); $oPluginRegistry->disablePlugin($oDetails->getNamespace()); } else { //Enable default and required plugins require_once PATH_PLUGINS . $sClassName . '.php'; $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); $oPluginRegistry->enablePlugin($oDetails->getNamespace()); } $oPluginRegistry->savePlugin($oDetails->getNamespace()); } if (file_exists(PATH_DATA_SITE . 'ee')) { $aPlugins = unserialize(trim(file_get_contents(PATH_DATA_SITE . 'ee'))); foreach ($aPlugins as $aPlugin) { $sClassName = substr($aPlugin ['sFilename'], 0, strpos($aPlugin ['sFilename'], '-')); if (strlen($sClassName) > 0) { if (!class_exists($sClassName)) { require_once PATH_PLUGINS . $sClassName . '.php'; } $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); if ($oDetails) { $oPluginRegistry->disablePlugin($oDetails->getNamespace()); $oPluginRegistry->savePlugin($oDetails->getNamespace()); } } } } } } } public function getCurrentLicenseStatus() { $result = []; switch ($this->result) { case 'OK': $result ['result'] = 'ok'; $result ['message'] = ""; break; case 'TMINUS': $result ['result'] = 'tminus'; $startDateA = explode(" ", $this->date['HUMAN']['START']); $result ['message'] = "License will be active on " . $startDateA[0]; break; case 'EXPIRED': $result ['result'] = 'expired'; $result ['message'] = "License Expired"; break; case 'ILLEGAL': $result ['result'] = 'illegal'; $result ['message'] = "Illegal License"; break; case 'ILLEGAL_LOCAL': $result ['result'] = 'illegal'; $result ['message'] = "Illegal Local License"; break; case 'INVALID': $result ['result'] = 'invalid'; $result ['message'] = "Invalid License"; break; case 'EMPTY': $result ['result'] = 'empty'; $result ['message'] = "Empty License"; if (defined('write_error')) { $result ['message'] = "Write error" . $result ['message']; } break; default: break; } return $result; } public function unSerializeInstance($serialized) { if (self::$instance == null) { self::$instance = new PluginRegistry(); } $instance = unserialize($serialized); self::$instance = $instance; } public function getExpireIn() { $status = $this->getCurrentLicenseStatus(); $expireIn = 0; if ($status ['result'] == 'ok') { if ($this->date ['END'] != "NEVER") { $expireIn = ceil(($this->date ['END'] - time()) / 60 / 60 / 24); } else { $expireIn = "NEVER"; } } return $expireIn; } public function getLicenseInfo() { $validStatus = [ 'ok', 'expired' ]; $status = $this->getCurrentLicenseStatus(); $infoText = ""; if (in_array($status ['result'], $validStatus)) { $start = explode(" ", $this->date ['HUMAN'] ['START']); $end = explode(" ", $this->date ['HUMAN'] ['END']); $infoText .= "" . "Issued to" . ": " . $this->info ['FIRST_NAME'] . " " . $this->info ['LAST_NAME'] . "
"; $infoText .= "" . G::LoadTranslation('ID_WORKSPACE') . ": " . $this->info ['DOMAIN_WORKSPACE'] . "
"; $infoText .= "" . G::LoadTranslation('ID_VALID_FROM') . " " . $start [0] . " " . G::LoadTranslation('ID_TO') . " " . $end [0] . ""; } if ($status ['message'] != "") { $infoText .= " - " . $status ['message'] . ""; } $info ['infoText'] = $infoText; $info ['infoLabel'] = $status ['message']; return $info; } public function getExpireInLabel() { $linkText = null; if ($this->getExpireIn() != "NEVER" && ((int)$this->getExpireIn() <= 30) && ((int)$this->getExpireIn() > 0)) { $infoO = $this->getLicenseInfo(); $infoText = $infoO['infoText']; $js = (EnterpriseUtils::skinIsUx() == 1) ? "Ext.MessageBox.show({title: '', msg: '$infoText', buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.INFO});" : "msgBox('$infoText');"; $linkText = $linkText . "" . G::LoadTranslation('ID_EXPIRES_IN') . " " . $this->getExpireIn() . " " . G::LoadTranslation('ID_DAYS') . ""; } else { if ($this->getExpireIn() != "NEVER" && (int)$this->getExpireIn() <= 0) { $infoO = $this->getLicenseInfo(); $infoText = $infoO['infoText']; $infoLabel = $infoO['infoLabel']; $js = (EnterpriseUtils::skinIsUx() == 1) ? "Ext.MessageBox.show({title: '', msg: '$infoText', buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.INFO});" : "msgBox('$infoText');"; $linkText = $linkText . "" . $infoLabel . ""; } } if (class_exists('pmTrialPlugin')) { $linkText = $linkText . " "; } if (isset($_SESSION["__ENTERPRISE_SYSTEM_UPDATE__"]) && $_SESSION["__ENTERPRISE_SYSTEM_UPDATE__"] == 1) { $aOnclick = "onclick=\"this.href='" . EnterpriseUtils::getUrlServerName() . "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/main?s=PMENTERPRISE';\""; if (EnterpriseUtils::skinIsUx() == 1) { $aOnclick = "onclick=\"Ext.ComponentMgr.get('mainTabPanel').setActiveTab('pm-option-setup'); Ext.ComponentMgr.get('pm-option-setup').setLocation(Ext.ComponentMgr.get('pm-option-setup').defaultSrc + 's=PMENTERPRISE', true); return (false);\""; } $linkText = $linkText . (($linkText != null) ? " | " : null) . "" . G::LoadTranslation('ID_UPGRADE_SYSTEM') . ""; } $linkText = ($linkText != null) ? $linkText . ((EnterpriseUtils::skinIsUx() == 1) ? null : " |") : null; return ($linkText); } public function validateLicense($path) { $application = new license_application($path, false, true, false, true, true); $results = $application->validate(false, false, "", "", "80", true); if ($results ['RESULT'] != 'OK') { return true; } else { return false; } } public function installLicense($path, $redirect = true, $includeExpired = true) { $application = new license_application($path, false, true, false, true, true); $results = $application->validate(false, false, "", "", "80", true); //if the result is ok then it is saved into DB $res = $results ['RESULT']; if ($res == 'EMPTY') { return false; } if (!$includeExpired) { if ($res == 'EXPIRED') { return false; } } if (($res != 'OK') && ($res != 'EXPIRED') && ($res != 'TMINUS')) { G::SendTemporalMessage('ID_ISNT_LICENSE', 'tmp-info', 'labels'); return false; } else { $oServerConf = ServerConf::getSingleton(); $oServerConf->setProperty('ACTIVE_LICENSE', [config("system.workspace") => $path]); $this->saveDataLicense($results, $path, $redirect); if ($redirect) { G::Header('location: ../enterprise/addonsStore'); } else { return true; } } } /* get Active License */ public function getActiveLicense() { //get license from database, table LICENSE_MANAGER try { $aRow = []; require_once("classes/model/LicenseManager.php"); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_USER); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_START); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_PATH); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_DATA); $oCriteria->add(LicenseManagerPeer::LICENSE_STATUS, 'ACTIVE'); $oDataset = LicenseManagerPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); } catch (Exception $e) { G::pr($e); } return $aRow; } public function lookForStatusLicense() { require_once("classes/model/LicenseManager.php"); //obtening info in a row that has ACTIVE status $oCtia = new Criteria('workflow'); $oCtia->add(LicenseManagerPeer::LICENSE_STATUS, 'ACTIVE'); $oDataset = LicenseManagerPeer::doSelectRS($oCtia); $oDataset->next(); $aRow = $oDataset->getRow(); $oCtiaA = new Criteria('workflow'); $oCtiaA->add(LicenseManagerPeer::LICENSE_UID, $aRow [0]); $oCtiaB = new Criteria('workflow'); $oCtiaB->add(LicenseManagerPeer::LICENSE_STATUS, 'INACTIVE'); BasePeer::doUpdate($oCtiaA, $oCtiaB, Propel::getConnection('workflow')); return 'ACTIVE'; } public function saveDataLicense($results, $path) { try { //getting info about file $LicenseUid = G::generateUniqueID(); $LicenseUser = $results ['DATA'] ['FIRST_NAME'] . ' ' . $results ['DATA'] ['LAST_NAME']; $LicenseStart = $results ['DATE'] ['START']; $LicenseEnd = $results ['DATE'] ['END']; $LicenseSpan = $results ['DATE'] ['SPAN']; $LicenseStatus = $this->lookForStatusLicense(); //we're looking for a status ACTIVE //getting the content from file $filter = new InputFilter(); $path = $filter->xssFilterHard($path, 'path'); $handle = fopen($path, "r"); $contents = fread($handle, filesize($path)); fclose($handle); $LicenseData = $contents; $LicensePath = $path; $LicenseWorkspace = isset($results['DATA']['DOMAIN_WORKSPACE']) ? $results['DATA']['DOMAIN_WORKSPACE'] : ''; $LicenseType = $results['DATA']['TYPE']; require_once("classes/model/LicenseManager.php"); //if exists the row in the database propel will update it, otherwise will insert. $tr = LicenseManagerPeer::retrieveByPK($LicenseUid); if (!(is_object($tr) && get_class($tr) == 'LicenseManager')) { $tr = new LicenseManager(); } $tr->setLicenseUid($LicenseUid); $tr->setLicenseUser($LicenseUser); $tr->setLicenseStart($LicenseStart); $tr->setLicenseEnd($LicenseEnd); $tr->setLicenseSpan($LicenseSpan); $tr->setLicenseStatus($LicenseStatus); $tr->setLicenseData($LicenseData); $tr->setLicensePath($LicensePath); $tr->setLicenseWorkspace($LicenseWorkspace); $tr->setLicenseType($LicenseType); $res = $tr->save(); Cache::forget(PmLicenseManager::CACHE_KEY . '.' . config("system.workspace")); } catch (Exception $e) { G::pr($e); } } public function getResultQry($sNameTable, $sfield, $sCondition) { try { require_once("classes/model/LicenseManager.php"); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_USER); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_START); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_PATH); $oCriteria->addSelectColumn(LicenseManagerPeer::LICENSE_DATA); $oCriteria->add(LicenseManagerPeer::LICENSE_STATUS, 'ACTIVE'); $oDataset = LicenseManagerPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); } catch (Exception $e) { G::pr($e); $aRow = []; } return $aRow; } public function getActiveFeatures() { if (file_exists(PATH_PLUGINS . 'enterprise/data/default')) { return []; } return unserialize(G::decrypt($this->serial, file_get_contents(PATH_PLUGINS . 'enterprise/data/default'))); } }