piotrpolak/pepiscms

View on GitHub
pepiscms/modules/logs/controllers/LogsWidget.php

Summary

Maintainability
A
1 hr
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');

/**
 * Example usage <?=$this->widget->create('logs', 'logs')->render( 'COLECTIONNAME', $this->formbuilder->getId(), 'Modifications' );
 */
class LogsWidget extends Widget
{

    public function __construct()
    {
        parent::__construct();
        $this->load->moduleLanguage('logs');
    }

    public function warnings($days_before)
    {
        $this->load->model('Log_model');
        $this->load->helper('date');

        $values = fill_date_spectrum_values($this->Log_model->getWarningStatistics($days_before), time(), $days_before);

        $this->load->library('Google_chart_helper');
        return $this->assign('values', $values)->display('warnings');
    }


    public function logs($collection, $resource_id = null, $title = false)
    {
        $where_conditions = array('collection' => $collection);

        if ($resource_id) {
            $where_conditions['resource_id'] = $resource_id;
        }

        $this->load->model('Log_model');
        $this->load->language('logs');

        if (!$title) {
            $title = $this->lang->line('logs_logs');
        }

        $this->load->library('DataGrid');
        $this->load->library('LogsRowFormattingUtility');

        $this->datagrid->setTitle($title)->setTable($this->Log_model->getTable(), $where_conditions)
            ->setItemsPerPage(400)
            ->setDefaultOrder('timestamp', 'desc')
            ->setOrderable(false)
            ->setBaseUrl(admin_url() . 'logs/mylogin')
            ->setRowCssClassFormattingFunction(array($this->logsrowformattingutility, '_datagrid_row_callback'));

        $module_name = 'logs';

        $definition = array(
            'timestamp' => array(),
            'message' => array(),
            'user_id' => array(
                'grid_formating_callback' => (SecurityManager::hasAccess('cms_users', 'edit', 'cms_users') ? array($this, '_datagrid_format_user_column') : false),
                'values' => $this->Generic_model->setTable($this->config->item('database_table_logs'))->getAssocPairs('user_id', 'user_email', $this->User_model->getTable()),
            ),
            'ip' => array()
        );

        // Getting translations and setting input groups
        foreach ($definition as $field => &$def) {
            $key = isset($def['field']) ? $def['field'] : $field;

            // Getting label
            if (!isset($def['label'])) {
                $def['label'] = $this->lang->line($module_name . '_' . $key);
            }
        }

        $this->datagrid->setDefinition($definition);

        return $this->datagrid->generate();
    }

    public function _datagrid_format_user_column($content, $line)
    {
        if ($line->user_id > 0) {
            return '<a href="' . module_url('cms_users') . 'edit/id-' . $line->user_id . '">' . $content . '</a>';
        } else {
            return 'N/A';
        }
    }
}