piotrpolak/pepiscms

View on GitHub
pepiscms/application/classes/AbstractDashboardController.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

/**
 * PepisCMS
 *
 * Simple content management system
 *
 * @package             PepisCMS
 * @author              Piotr Polak
 * @copyright           Copyright (c) 2007-2018, Piotr Polak
 * @license             See license.txt
 * @link                http://www.polak.ro/
 */

defined('BASEPATH') or exit('No direct script access allowed');

abstract class AbstractDashboardController extends AdminController
{
    /**
     * @return array
     */
    protected function getDashboardElements()
    {
        $module_names = $this->modulerunner->getInstalledModulesNamesCached();
        $dashboard_elements = array();
        foreach ($module_names as $module_name) {
            $descriptor = $this->Module_model->getModuleDescriptor($module_name);
            if (!$descriptor) {
                continue;
            }

            $module_dashboard_elements = $this->getElements($descriptor);
            if (!is_array($module_dashboard_elements)) {
                continue;
            }

            foreach ($module_dashboard_elements as $module_dashboard_element) {
                if (isset($module_dashboard_element['controller'])) {
                    $module_dashboard_element['module'] = $module_dashboard_element['controller'];
                }

                $dashboard_elements[] = $module_dashboard_element;
            }
        }
        return $dashboard_elements;
    }

    /**
     * @param $dashboard_elements
     * @param $default_dashboard_element_group
     * @return array
     */
    protected function getDashboardElementsGrouped($dashboard_elements, $default_dashboard_element_group)
    {
        $dashboard_elements_grouped = array();
        foreach ($dashboard_elements as $dashboard_element) {
            if ($this->auth->isUserRoot() || !isset($dashboard_element['controller'])
                || SecurityManager::hasAccess($dashboard_element['controller'], $dashboard_element['method'],
                    isset($dashboard_element['module']) ? $dashboard_element['module'] : false)) {

                if (isset($dashboard_element['group']) && $dashboard_element['group']) {
                    $group = $dashboard_element['group'];
                } else {
                    $group = $default_dashboard_element_group;
                }

                if (!isset($dashboard_elements_grouped[$group])) {
                    $dashboard_elements_grouped[$group] = array();
                }

                $dashboard_elements_grouped[$group][] = $dashboard_element;
            }
        }
        return $dashboard_elements_grouped;
    }

    /**
     * @param ModuleDescriptableInterface $descriptor
     * @return mixed
     */
    protected abstract function getElements(ModuleDescriptableInterface $descriptor);
}