284 lines
9.7 KiB
PHP
284 lines
9.7 KiB
PHP
<?php
|
|
/**
|
|
* Copyright since 2007 PrestaShop SA and Contributors
|
|
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the Academic Free License version 3.0
|
|
* that is bundled with this package in the file LICENSE.md.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* https://opensource.org/licenses/AFL-3.0
|
|
* If you did not receive a copy of the license and are unable to
|
|
* obtain it through the world-wide-web, please send an email
|
|
* to license@prestashop.com so we can send you a copy immediately.
|
|
*
|
|
* @author PrestaShop SA and Contributors <contact@prestashop.com>
|
|
* @copyright Since 2007 PrestaShop SA and Contributors
|
|
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
|
|
*/
|
|
|
|
use PrestaShop\AccountsAuth\Service\PsBillingService;
|
|
use PrestaShop\Module\Ps_metrics\Api\AnalyticsApi;
|
|
use PrestaShop\Module\Ps_metrics\Cache\DataCache;
|
|
use PrestaShop\Module\Ps_metrics\Context\PrestaShopContext;
|
|
use PrestaShop\Module\Ps_metrics\Helper\JsonHelper;
|
|
use PrestaShop\Module\Ps_metrics\Helper\ToolsHelper;
|
|
use PrestaShop\Module\Ps_metrics\Module\DashboardModules;
|
|
use PrestaShop\Module\Ps_metrics\Module\Uninstall;
|
|
use PrestaShop\Module\Ps_metrics\Provider\AnalyticsAccountsListProvider;
|
|
use PrestaShop\Module\Ps_metrics\Provider\GoogleTagProvider;
|
|
use PrestaShop\Module\Ps_metrics\Provider\ShopsProvider;
|
|
use PrestaShop\Module\Ps_metrics\Repository\ConfigurationRepository;
|
|
use PrestaShop\Module\Ps_metrics\Validation\SelectAccountAnalytics;
|
|
|
|
class AdminAjaxSettingsController extends ModuleAdminController
|
|
{
|
|
/**
|
|
* @var Ps_metrics
|
|
*/
|
|
public $module;
|
|
|
|
/**
|
|
* Load JsonHelper to avoid jsonEncode issues on AjaxDie
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Get all existing Google Tags in Front End shop and retrieve them
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessGetExistingGoogleTags()
|
|
{
|
|
/** @var ConfigurationRepository $configurationRepository */
|
|
$configurationRepository = $this->module->getService('ps_metrics.repository.configuration');
|
|
|
|
/** @var ShopsProvider $shopsProvider */
|
|
$shopsProvider = $this->module->getService('ps_metrics.provider.shops');
|
|
|
|
/** @var PrestaShopContext $prestashopContext */
|
|
$prestashopContext = $this->module->getService('ps_metrics.context.prestashop');
|
|
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
/** @var GoogleTagProvider $googleTagProvider */
|
|
$googleTagProvider = $this->module->getService('ps_metrics.provider.googletag');
|
|
|
|
// If google Tag is already set as linked, we avoid to retrieve the Google Tag
|
|
// Only the PSL will tell us if we should retrieve TAGS again
|
|
if (true === $configurationRepository->getGoogleTagLinkedValue()) {
|
|
$this->ajaxDie('true');
|
|
}
|
|
|
|
$currentShop = $shopsProvider->getShopUrl($prestashopContext->getShopId());
|
|
$googleTagProvider->setBaseUrl($currentShop['url']);
|
|
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'analytics' => $googleTagProvider->findGoogleTagsAnalytics(),
|
|
'manager' => $googleTagProvider->findGoogleTagsManager(),
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Select a Google Account for psessentials
|
|
* Need webPropertyId and viewId. Returns 201 if done
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessSelectAccountAnalytics()
|
|
{
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
/** @var ToolsHelper $toolsHelper */
|
|
$toolsHelper = $this->module->getService('ps_metrics.helper.tools');
|
|
|
|
/** @var AnalyticsApi $apiAnalytics */
|
|
$apiAnalytics = $this->module->getService('ps_metrics.api.analytics');
|
|
|
|
/** @var SelectAccountAnalytics $serviceProcessSelectAccountAnalytics */
|
|
$serviceProcessSelectAccountAnalytics = $this->module->getService('ps_metrics.validation.processselectaccountanalytics');
|
|
|
|
$this->deleteExistingCache();
|
|
$validateData = $serviceProcessSelectAccountAnalytics->validate([
|
|
'webPropertyId' => $toolsHelper->getValue('webPropertyId'),
|
|
'viewId' => $toolsHelper->getValue('viewId'),
|
|
]);
|
|
|
|
if (false === $validateData) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
]));
|
|
}
|
|
$serviceResult = $apiAnalytics->setAccountSelection([
|
|
'webPropertyId' => $toolsHelper->getValue('webPropertyId'),
|
|
'viewId' => $toolsHelper->getValue('viewId'),
|
|
]);
|
|
|
|
if (false === $serviceResult) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
'googleAccount' => [],
|
|
]));
|
|
}
|
|
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => true,
|
|
'googleAccount' => [
|
|
'webPropertyId' => $toolsHelper->getValue('webPropertyId'),
|
|
'view_id' => $toolsHelper->getValue('viewId'),
|
|
'username' => $toolsHelper->getValue('username'),
|
|
'webPropertyName' => $toolsHelper->getValue('webPropertyName'),
|
|
],
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Google Analytics Logout must enable disabled modules, unsubscribe from PsEssentials
|
|
* Also, it must reset configuration's values
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessLogOut()
|
|
{
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
$this->deleteExistingCache();
|
|
|
|
/** @var Uninstall $uninstallGoogleAccount */
|
|
$uninstallGoogleAccount = $this->module->getService('ps_metrics.module.uninstall');
|
|
|
|
if (false === $uninstallGoogleAccount->unsubscribePsEssentials()) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
'googleLinked' => true,
|
|
]));
|
|
}
|
|
|
|
if (false === $uninstallGoogleAccount->resetConfigurationValues()) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
'googleLinked' => true,
|
|
]));
|
|
}
|
|
|
|
/** @var DashboardModules $dashboardModule */
|
|
$dashboardModule = $this->module->getService('ps_metrics.module.dashboard.modules');
|
|
$dashboardModule->enableModules();
|
|
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => true,
|
|
'googleLinked' => false,
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Google Analytics Logout must enable disabled modules, unsubscribe from PsEssentials
|
|
* Also, it must reset configuration's values
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessRefreshGA()
|
|
{
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
/** @var AnalyticsApi $apiAnalytics */
|
|
$apiAnalytics = $this->module->getService('ps_metrics.api.analytics');
|
|
|
|
$serviceResult = $apiAnalytics->refreshGA();
|
|
|
|
if (!empty($serviceResult['error'])) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
'message' => $serviceResult['error'],
|
|
]));
|
|
}
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => true,
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Google Analytics Property List
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessListProperty()
|
|
{
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
/** @var AnalyticsAccountsListProvider $analyticsAccountListProvider */
|
|
$analyticsAccountListProvider = $this->module->getService('ps_metrics.provider.analyticsaccountslist');
|
|
|
|
$serviceResult = $analyticsAccountListProvider->getAccountsList();
|
|
if (empty($serviceResult)) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
'listProperty' => [],
|
|
'error' => 'No property list on this account',
|
|
]));
|
|
}
|
|
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => true,
|
|
'listProperty' => $serviceResult,
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Init Billing Free
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ajaxProcessBillingFree()
|
|
{
|
|
/** @var JsonHelper $jsonHelper */
|
|
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
|
|
|
|
$billingService = new PsBillingService();
|
|
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
|
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
|
|
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //whether ip is from proxy
|
|
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} else { //whether ip is from remote address
|
|
$ip_address = $_SERVER['REMOTE_ADDR'];
|
|
}
|
|
|
|
$result = $billingService->subscribeToFreePlan('ps_analytics', 'metrics-free', false, $ip_address);
|
|
|
|
if (empty($result)) {
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => false,
|
|
]));
|
|
}
|
|
|
|
$this->ajaxDie($jsonHelper->jsonEncode([
|
|
'success' => true,
|
|
'billing' => $result,
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* Delete metrics cache
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function deleteExistingCache()
|
|
{
|
|
/** @var DataCache $dataCache */
|
|
$dataCache = $this->module->getService('ps_metrics.cache.data');
|
|
|
|
return $dataCache->deleteAllCache();
|
|
}
|
|
}
|