application/modules/mod_stats/controllers/CategoriesController.php
<?php
/**
* Class CategoriesController for mod_stats module
* @uses ControllerBase
* @author DevImageCms
* @copyright (c) 2014, ImageCMS
* @package ImageCMSModule
*/
class CategoriesController extends ControllerBase
{
protected $params;
public function __construct($some) {
parent::__construct($some);
$this->controller->load->model('categories_model');
$this->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',
'category_id' => isset($_GET['category_id']) ? $_GET['category_id'] : 0,
'includeChilds' => (bool) isset($_GET['include_childs']) ? 1 : 0,
];
}
/**
* Render template and set data
*/
public function brandsInCategories() {
$this->assetManager
->setData('categories', $firstLevelCategories)
->renderAdmin('categories/brandsInCategories');
}
/**
* Render categories attendance template with data
*/
public function attendance() {
$this->controller->load->model('categories_model');
$categories = $this->controller->categories_model->getCategoriesList();
array_unshift($categories, ['id' => 0, 'name' => lang('First level categories', 'mod_stats'), 'full_path_ids' => []]);
$data = array_merge(['categories' => $categories], $this->params);
$this->renderAdmin('attendance', $data);
}
/**
* Get data for categories attendance chart
*/
public function getCategoriesAttendanceData() {
$this->controller->import('traits/DateIntervalTrait.php');
$this->controller->load->model('attendance_model');
$this->controller->load->model('categories_model');
$categoriesLabels = $this->controller->categories_model->getCategoriesList($this->params['category_id']);
$categoriesIds = [];
foreach ($categoriesLabels as $categoryData) {
$categoriesIds[$categoryData['id']] = [$categoryData['id']];
}
if ($this->params['includeChilds'] == TRUE) {
$productsModel = $this->controller->load->model('products_model');
foreach ($categoriesIds as $categoryId => $categoryIdCopy) {
$subCaregories = $productsModel->getSubcategoriesIds($categoryId);
$subCaregories[] = $categoryId;
$categoriesIds[$categoryId] = $subCaregories;
}
}
$categories = $this->controller->attendance_model->getCategoriesAttendance($this->params, $categoriesIds);
$labels = [];
foreach ($categoriesLabels as $categoryData) {
$labels[$categoryData['id']] = $categoryData['name'];
}
$categoriesAttendance = [];
foreach ($categories as $categoryId => $attendanceData) {
$oneCategoryAttendanceValues = [];
foreach ($attendanceData as $attendanceDataDateRow) {
$oneCategoryAttendanceValues[] = [
'x' => $attendanceDataDateRow['unix_date'] * 1000,
'y' => $attendanceDataDateRow['users_count'] * 1,
];
}
$categoriesAttendance[] = [
'key' => $labels[$categoryId],
'values' => $oneCategoryAttendanceValues,
];
}
echo json_encode($categoriesAttendance);
}
/**
* Prepare and return data for chart "brands in categories"
*/
public function getBrandsInCategoriesCharData() {
$params = [
'categoryId' => isset($_GET['ci']) ? $_GET['ci'] : 20,
];
// Get children categories ids
$childCategoriesIds = $this->controller->categories_model->getAllChildCategoriesIds($params['categoryId']);
// Get brands in category
$categories = $this->controller->categories_model->getBrandsIdsAndCount($childCategoriesIds);
$chartData = parent::prepareDataForStaticChart($categories);
echo json_encode($chartData);
}
}