Files
newwalls.pl/modules/ets_cfultimate/classes/AdminModuleAdapterController.php
2024-12-17 13:43:22 +01:00

226 lines
10 KiB
PHP

<?php
/**
* 2007-2021 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2021 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*/
if (!defined('_PS_VERSION_'))
exit;
class AdminModuleAdapterController extends ModuleAdminController
{
public $y_max_value = 0;
public $charts;
public function __construct()
{
$this->bootstrap = true;
parent::__construct();
}
public function initContent()
{
parent::initContent();
}
public function getMaxY($top)
{
$top = (int)$top;
if ($top < 10)
return ($top <= 5) ? $top + 1 : $top + 2;
elseif ($top < 100)
return ($top % 10 < 5) ? (floor($top / 10) + 1) * 10 : (floor($top / 10) + 2) * 10;
elseif ($top < 1000)
return ($top % 100 < 5) ? (floor($top / 100) + 1) * 100 : (floor($top / 100) + 2) * 100;
else
return ($top % 1000 < 5) ? (floor($top / 1000) + 1) * 1000 : (floor($top / 1000) + 1) * 1000;
}
public function getColor($num)
{
$hash = md5('color' . $num);
$rgb = array(
hexdec(Tools::substr($hash, 0, 2)), // r
hexdec(Tools::substr($hash, 2, 2)), // g
hexdec(Tools::substr($hash, 4, 2))); //b
return 'rgba(' . implode(',', $rgb) . ', %s)';
}
public function getCharts($ajax = false)
{
$this->y_max_value = 0;
$is_dashboard = Tools::getValue('controller') != 'AdminContactFormUltimateStatistics';
$labels = $messages = $views = $replies = $users = $years = array();
$months = Tools::dateMonths();
$max_year = date('Y');
$min_year = Db::getInstance()->getValue('SELECT MIN(YEAR(date_add)) FROM ' . _DB_PREFIX_ . 'ets_cfu_contact WHERE 1 ' . ((int)Tools::getValue('id_contact') ? ' AND id_contact=' . (int)Tools::getValue('id_contact') : ''));
$distance = ($max_year - $min_year);
if ($distance <= 0) {
$min_year = $max_year - 1;
}
if ($min_year) {
for ($i = $min_year; $i <= $max_year; $i++) {
$years[] = $i;
}
}
$sl_year = Tools::getValue('ets_cfu_years', ($distance < 5 ? date('Y') : false));
$sl_month = Tools::getValue('ets_cfu_months');
$args = array(
'year' => '',
'month' => '',
'day' => '',
'id_contact' => Tools::getValue('id_contact', false)
);
$filter = Tools::getValue('filter', ($is_dashboard ? ($distance >= 5 ? 'all' : 'year') : ''));
if (($filter == 'all' || (!$sl_year && !$is_dashboard)) && $years) {
foreach ($years as $year) {
$args['year'] = $labels[] = $year;
$messages[] = $this->getCountMessage($args);
$views[] = $this->getCountView($args);
$replies[] = $this->getCountReplies($args);
$users[] = $this->getCountUsers($args);
}
} elseif (($filter == 'year' || (!$sl_month && !$is_dashboard)) && $months) {
$args['year'] = ($sl_year ? $sl_year : date('Y'));
foreach ($months as $key => $month) {
$args['month'] = $labels[] = $key;
$messages[] = $this->getCountMessage($args);
$views[] = $this->getCountView($args);
$replies[] = $this->getCountReplies($args);
$users[] = $this->getCountUsers($args);
}
} elseif ($filter == 'month' || ($sl_month && $sl_year && !$is_dashboard)) {
$args['year'] = ($year = ($sl_year ? $sl_year : (int)date('Y')));
$args['month'] = ($month = ($sl_month ? $sl_month : (int)date('m')));
if (($days = function_exists('cal_days_in_month') ? cal_days_in_month(CAL_GREGORIAN, (int)$month, (int)$year) : (int)date('t', mktime(0, 0, 0, (int)$month, 1, (int)$year)))) {
for ($day = 1; $day <= $days; $day++) {
$args['day'] = $labels[] = $day;
$messages[] = $this->getCountMessage($args);
$views[] = $this->getCountView($args);
$replies[] = $this->getCountReplies($args);
$users[] = $this->getCountUsers($args);
}
}
}
$this->charts['mes'] += array(
'data' => $messages,
'color' => 'rgba(243, 166, 180, %s)'
);
$this->charts['vie'] += array(
'data' => $views,
'color' => 'rgba(108, 206, 216, %s)'
);
$this->charts['rep'] += array(
'data' => $replies,
'color' => 'rgba(251, 227, 185, %s)'
);
$this->charts['use'] += array(
'data' => $users,
'color' => 'rgba(111, 208, 136, %s)'
);
foreach ($this->charts as &$item) {
$item['backgroundColor'] = sprintf($item['color'], 0.3);
$item['borderColor'] = sprintf($item['color'], 1);
$item['borderWidth'] = 1;
$item['pointRadius'] = 2;
$item['fill'] = true;
}
$assigns = array(
'ets_cfu_years' => $years,
'ets_cfu_months' => $months,
'ets_cfu_line_chart' => array_values($this->charts),
'ets_cfu_lc_labels' => $labels,
'y_max_value' => $this->getMaxY($this->y_max_value),
'filter_active' => $filter,
'sl_year' => $sl_year,
'sl_month' => $sl_month,
'sl_contact' => (int)Tools::getValue('id_contact'),
);
if ($ajax) {
die(Tools::jsonEncode($assigns));
}
return $assigns;
}
public function getCountMessage($args = array())
{
$sql = '
SELECT COUNT(*) FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message m
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_shop cs ON (m.id_contact = cs.id_contact)
WHERE cs.id_contact is NOT NULL AND cs.id_shop = ' . (int)$this->context->shop->id
. (isset($args['id_contact']) && $args['id_contact'] ? ' AND cs.id_contact=' . (int)$args['id_contact'] : '')
. (isset($args['year']) && $args['year'] ? ' AND YEAR(m.date_add) ="' . pSQL($args['year']) . '"' : '')
. (isset($args['month']) && $args['month'] ? ' AND MONTH(m.date_add) ="' . pSQL($args['month']) . '"' : '')
. (isset($args['day']) && $args['day'] ? ' AND DAY(m.date_add) ="' . pSQL($args['day']) . '"' : '')
. (isset($args['read']) ? ' AND m.readed ="' . pSQL($args['read']) . '"' : '');
$result = (int)Db::getInstance()->getValue($sql);
if ($result > $this->y_max_value)
$this->y_max_value = $result;
return $result;
}
public function getCountView($args = array())
{
$sql = '
SELECT COUNT(*) FROM ' . _DB_PREFIX_ . 'ets_cfu_log l
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_shop cs ON (l.id_contact = cs.id_contact)
WHERE cs.id_contact is NOT NULL AND cs.id_shop=' . (int)$this->context->shop->id
. (isset($args['id_contact']) && $args['id_contact'] ? ' AND cs.id_contact=' . (int)$args['id_contact'] : '')
. (isset($args['year']) && $args['year'] ? ' AND YEAR(l.datetime_added) ="' . pSQL($args['year']) . '"' : '')
. (isset($args['month']) && $args['month'] ? ' AND MONTH(l.datetime_added) ="' . pSQL($args['month']) . '"' : '')
. (isset($args['day']) && $args['day'] ? ' AND DAY(l.datetime_added) ="' . pSQL($args['day']) . '"' : '');
$result = (int)Db::getInstance()->getValue($sql);
if ($result > $this->y_max_value)
$this->y_max_value = $result;
return $result;
}
public function getCountReplies($args = array())
{
$sql = 'SELECT COUNT(r.id_ets_cfu_message_reply) FROM ' . _DB_PREFIX_ . 'ets_cfu_message_reply r
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_message m ON (r.id_contact_message = m.id_contact_message)
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_shop cs ON (m.id_contact = cs.id_contact)
WHERE m.id_contact_message is NOT NULL AND cs.id_contact is NOT NULL AND cs.id_shop=' . (int)$this->context->shop->id . ''
. (isset($args['id_contact']) && $args['id_contact'] ? ' AND cs.id_contact=' . (int)$args['id_contact'] : '')
. (isset($args['year']) && $args['year'] ? ' AND YEAR(r.date_add) ="' . pSQL($args['year']) . '"' : '')
. (isset($args['month']) && $args['month'] ? ' AND MONTH(r.date_add) ="' . pSQL($args['month']) . '"' : '')
. (isset($args['day']) && $args['day'] ? ' AND DAY(r.date_add) ="' . pSQL($args['day']) . '"' : '');
$result = (int)Db::getInstance()->getValue($sql);
if ($result > $this->y_max_value)
$this->y_max_value = $result;
return $result;
}
public function getCountUsers($args = array())
{
$sql = '
SELECT COUNT(DISTINCT l.id_customer) FROM ' . _DB_PREFIX_ . 'ets_cfu_log l
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_shop cs ON (l.id_contact = cs.id_contact)
WHERE cs.id_contact is NOT NULL AND l.id_customer != 0 AND cs.id_shop = ' . (int)$this->context->shop->id
. (isset($args['id_contact']) && $args['id_contact'] ? ' AND cs.id_contact=' . (int)$args['id_contact'] : '')
. (isset($args['year']) && $args['year'] ? ' AND YEAR(l.datetime_added) ="' . pSQL($args['year']) . '"' : '')
. (isset($args['month']) && $args['month'] ? ' AND MONTH(l.datetime_added) ="' . pSQL($args['month']) . '"' : '')
. (isset($args['day']) && $args['day'] ? ' AND DAY(l.datetime_added) ="' . pSQL($args['day']) . '"' : '');
$result = (int)Db::getInstance()->getValue($sql);
if ($result > $this->y_max_value)
$this->y_max_value = $result;
return $result;
}
}