imagecms/ImageCMS

View on GitHub
application/modules/mod_stats/controllers/CategoriesController.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?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);
    }

}