application/modules/mod_stats/controllers/OrdersController.php
<?php
/**
* Class OrdersController for mod_stats module
* @uses ControllerBase
* @author DevImageCms
* @copyright (c) 2014, ImageCMS
* @package ImageCMSModule
*/
class OrdersController extends ControllerBase
{
private $dataRemap;
public function __construct($some) {
parent::__construct($some);
$this->controller->import('traits/DateIntervalTrait.php');
$this->controller->load->model('orders_model');
$this->controller->import('classes/ChartDataRemap.php');
$this->dataRemap = new ChartDataRemap();
}
/**
* Prints template for charts
*/
public function charts() {
// Set default view type
$result = $this->controller->orders_model->getOrdersInfo(
[
'dateFrom' => isset($_GET['from']) ? $_GET['from'] : '2005-05-05',
'dateTo' => isset($_GET['to']) ? $_GET['to'] : date('Y-m-d'),
'interval' => isset($_GET['group']) ? $_GET['group'] : 'day',
]
);
$this->renderAdmin(
'charts',
[
'data' => $result,
'viewType' => $viewType,
'show_by' => !empty($_GET['show_by']) ? $_GET['show_by'] : 'Price',
]
);
}
public function getChartDataPrice() {
$this->outputChart(
[
'price_sum' => lang('Price', 'mod_stats'),
]
);
}
public function getChartDataCount() {
$this->outputChart(
[
'orders_count' => lang('Orders', 'mod_stats'),
'products_count' => lang('Products', 'mod_stats'),
'paid' => lang('Paid', 'mod_stats'),
'delivered' => lang('Delivered', 'mod_stats'),
]
);
}
/**
* @param array $lines
*/
private function outputChart(array $lines) {
$result = $this->controller->orders_model->getOrdersInfo(
[
'dateFrom' => isset($_GET['from']) ? $_GET['from'] : '2005-05-05',
'dateTo' => isset($_GET['to']) ? $_GET['to'] : date('Y-m-d'),
'interval' => isset($_GET['group']) ? $_GET['group'] : 'day',
]
);
$countsData = [];
foreach ($result as $i => $row) {
foreach ($row as $field => $value) {
if (array_key_exists($field, $lines)) {
$countsData[$field][] = [
'date' => $result[$i]['date'],
'x' => $result[$i]['unix_date'] * 1000,
'y' => $value,
];
}
}
}
$this->controller->import('classes/ZeroFiller');
$chartData = [];
foreach ($countsData as $labelKey => $valuesArray) {
$chartData[] = [
'key' => $lines[$labelKey],
//'values' => $valuesArray,// without filling zeros
'values' => ZeroFiller::fill($valuesArray, 'x', 'y', isset($_GET['group']) ? $_GET['group'] : 'day'),
];
}
echo json_encode($chartData);
}
/**
* Render template for statuses
*/
public function info() {
$result = $this->controller->orders_model->getOrdersInfo(
[
'dateFrom' => isset($_GET['from']) ? $_GET['from'] : '2005-05-05',
'dateTo' => isset($_GET['to']) ? $_GET['to'] : date('Y-m-d'),
'interval' => isset($_GET['group']) ? $_GET['group'] : 'day',
]
);
$this->assetManager
->setData('result', $result)
->renderAdmin('orders/info');
}
/**
* Template for users
*/
public function users() {
// getting all data
$data = $this->controller->orders_model->getUsers(
[
'dateFrom' => isset($_GET['from']) ? $_GET['from'] : '20014-01-01',
'dateTo' => isset($_GET['to']) ? $_GET['to'] : date('Y-m-d'),
'interval' => isset($_GET['group']) ? $_GET['group'] : 'day',
'username' => isset($_GET['username']) ? $_GET['username'] : NULL,
'order_id' => isset($_GET['order_id']) ? $_GET['order_id'] : NULL,
]
);
// adding links and some data
$count_data = count($data);
for ($i = 0; $i < $count_data; $i++) {
$orderIds = explode(',', $data[$i]['orders_ids']);
$orderLinks = '';
foreach ($orderIds as $oId) {
$oId = trim($oId);
$orderLinks .= "<a href='/admin/components/run/shop/orders/edit/{$oId}'>{$oId}</a>,";
}
$data[$i]['orders_ids'] = trim($orderLinks, ',');
if (!in_array($data[$i]['username'], ['-', '0'])) {
$data[$i]['username'] = "<a href='/admin/components/run/shop/users/edit/{$data[$i]['user_id']}'>{$data[$i]['username']}</a>";
}
$data[$i]['unpaid'] = $data[$i]['orders_count'] - $data[$i]['paid'];
}
$this->renderAdmin(
'users',
[
'data' => $data,
'viewType' => $viewType,
'chartField' => isset($_GET['chart_field']) ? $_GET['chart_field'] : 'orders_count',
]
);
}
/**
* Output json data for usres chart
*/
public function getUsersChartData() {
$params = [
'dateFrom' => isset($_GET['from']) ? $_GET['from'] : '2005-05-05',
'dateTo' => isset($_GET['to']) ? $_GET['to'] : date('Y-m-d'),
'interval' => isset($_GET['group']) ? $_GET['group'] : 'day',
];
$field = isset($_GET['chart_field']) ? $_GET['chart_field'] : 'orders_count';
$data = $this->controller->orders_model->getUsers($params);
$chartData = [];
foreach ($data as $user) {
$chartData[] = [
'key' => $user['username'],
'y' => (int) $user[$field],
];
}
echo json_encode($chartData);
}
}