Files
newwalls.pl/modules/ps_metrics/controllers/admin/AdminAjaxDashboardController.php
2024-12-17 13:43:22 +01:00

205 lines
6.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\Module\Ps_metrics\Data\TipsCardsData;
use PrestaShop\Module\Ps_metrics\Helper\JsonHelper;
use PrestaShop\Module\Ps_metrics\Helper\ToolsHelper;
use PrestaShop\Module\Ps_metrics\Kpi\ConversionKpi;
use PrestaShop\Module\Ps_metrics\Kpi\KpiManager;
use PrestaShop\Module\Ps_metrics\Kpi\KpiStrategyInterface;
use PrestaShop\Module\Ps_metrics\Kpi\OrdersKpi;
use PrestaShop\Module\Ps_metrics\Kpi\RevenuesKpi;
use PrestaShop\Module\Ps_metrics\Kpi\TotalKpi;
use PrestaShop\Module\Ps_metrics\Kpi\VisitsKpi;
use PrestaShop\Module\Ps_metrics\Module\DashboardModules;
use PrestaShop\Module\Ps_metrics\Validation\RetrieveData;
class AdminAjaxDashboardController extends ModuleAdminController
{
const DEFAULT_DATA_TYPE = '';
const DEFAULT_DATE_RANGE = '{startDate: "", endDate: ""}';
const DEFAULT_GRANULARITY = 'days';
/**
* @var Ps_metrics
*/
public $module;
/**
* Load JsonHelper to avoid jsonEncode issues on AjaxDie
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* ajaxProcessGetExistingGoogleTags
*
* @return void
*/
public function ajaxProcessRetrieveData()
{
/** @var ToolsHelper $toolsHelper */
$toolsHelper = $this->module->getService('ps_metrics.helper.tools');
/** @var JsonHelper $jsonHelper */
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
/** @var KpiManager $kpiManager */
$kpiManager = $this->module->getService('ps_metrics.kpi.manager');
$dataType = $toolsHelper->getValue('type', self::DEFAULT_DATA_TYPE);
$kpi = $toolsHelper->getValue('type', self::DEFAULT_DATA_TYPE);
$dateRange = $jsonHelper->jsonDecode(
$toolsHelper->getValue('dateRange', self::DEFAULT_DATE_RANGE)
);
$granularity = $toolsHelper->getValue('granularity', self::DEFAULT_GRANULARITY);
$this->verifyRetrievedData($dataType, $dateRange, $granularity);
$kpiManager->setKpi($this->dictionaryKpi($kpi));
$kpiManager->getConfiguration()->setDateRange($dateRange);
$kpiManager->getConfiguration()->setGranularity($granularity);
$data = $kpiManager->present();
$this->ajaxDie($jsonHelper->jsonEncode($data));
}
/**
* Instantiate the correct KPI
*
* @param string $kpi
*
* @return KpiStrategyInterface
*/
private function dictionaryKpi($kpi)
{
$dictionary = [
'total' => function () {
/** @var TotalKpi $totalKpi */
$totalKpi = $this->module->getService('ps_metrics.kpi.total');
return $totalKpi;
},
'revenues' => function () {
/** @var RevenuesKpi $revenuesKpi */
$revenuesKpi = $this->module->getService('ps_metrics.kpi.revenues');
return $revenuesKpi;
},
'orders' => function () {
/** @var OrdersKpi $ordersKpi */
$ordersKpi = $this->module->getService('ps_metrics.kpi.orders');
return $ordersKpi;
},
'visits' => function () {
/** @var VisitsKpi $visitsKpi */
$visitsKpi = $this->module->getService('ps_metrics.kpi.visits');
return $visitsKpi;
},
'conversion' => function () {
/** @var ConversionKpi $conversionKpi */
$conversionKpi = $this->module->getService('ps_metrics.kpi.conversion');
return $conversionKpi;
},
];
return call_user_func($dictionary[$kpi]);
}
/**
* ajaxProcessRetrieveTipsCards
*
* @return void
*/
public function ajaxProcessRetrieveTipsCards()
{
/** @var JsonHelper $jsonHelper */
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
/** @var TipsCardsData $tipsCardsData */
$tipsCardsData = $this->module->getService('ps_metrics.data.tipscards');
$this->ajaxDie($jsonHelper->jsonEncode([
'tipsCards' => $tipsCardsData->getAll(),
]));
}
/**
* Toggle dashboard modules
*
* @return void
*/
public function ajaxProcessToggleDashboardModules()
{
/** @var DashboardModules $dashboardModule */
$dashboardModule = $this->module->getService('ps_metrics.module.dashboard.modules');
if ($dashboardModule->modulesIsEnabled()) {
$dashboardModule->disableModules();
} else {
$dashboardModule->enableModules();
}
/** @var JsonHelper $jsonHelper */
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
$this->ajaxDie($jsonHelper->jsonEncode([
'success' => true,
]));
}
/**
* Use AjaxDie if there's an error on ajaxProcessRetrieveData
*
* @param string $dataType
* @param array $dateRange
* @param string $granularity
*
* @return void
*/
private function verifyRetrievedData($dataType, array $dateRange, $granularity)
{
/** @var RetrieveData $serviceRetrieveData */
$serviceRetrieveData = $this->module->getService('ps_metrics.validation.retrievedata');
/** @var JsonHelper $jsonHelper */
$jsonHelper = $this->module->getService('ps_metrics.helper.json');
$dataTypeError = $serviceRetrieveData->dataType($dataType);
$dateRangeError = $serviceRetrieveData->dateRange($dateRange);
$granularityError = $serviceRetrieveData->granularity($granularity);
if (false === $dataTypeError || false === $dateRangeError || false === $granularityError) {
$this->ajaxDie($jsonHelper->jsonEncode([
'dataTypeError' => $dataTypeError,
'dateRangeError' => $dateRangeError,
'granularityError' => $granularityError,
]));
}
}
}