Seditio Source
Root |
./othercms/b2evolution_7.2.3/inc/dashboard/dashboard.ctrl.php
<?php
/**
 * This file implements the UI controller for the dashboard.
 *
 * b2evolution - {@link http://b2evolution.net/}
 * Released under GNU GPL License - {@link http://b2evolution.net/about/gnu-gpl-license}
 *
 * @license GNU GPL v2 - {@link http://b2evolution.net/about/gnu-gpl-license}
 *
 * @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
 *
 * @package admin
 *
 * @todo add 5 plugin hooks. Will be widgetized later (same as SkinTag became Widgets)
 */
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );


// load dashboard functions
load_funcs( 'dashboard/model/_dashboard.funcs.php' );

/**
 * @var User
 */
global $current_User;

global
$blog;


if( empty(
$_GET['blog'] ) )
{
// Use dashboard for selected blog only from GET request
   
$blog = 0;
    unset(
$Blog, $Collection );
}

param_action();

// Site dashboard
$AdminUI->set_path( 'site', 'dashboard' );

$AdminUI->breadcrumbpath_init( false );
$AdminUI->breadcrumbpath_add( TB_('Site'), $admin_url.'?ctrl=dashboard' );
$AdminUI->breadcrumbpath_add( TB_('Site Dashboard'), $admin_url.'?ctrl=dashboard' );

// Set an url for manual page:
$AdminUI->set_page_manual_link( 'site-dashboard' );

// Load jquery UI to animate background color on change comment status and to transfer a comment to recycle bin
require_js_defer( '#jqueryUI#' );

// Load the appropriate blog navigation styles (including calendar, comment forms...):
require_css( $AdminUI->get_template( 'blog_base.css' ) ); // Default styles for the blog navigation
// Colorbox (a lightweight Lightbox alternative) allows to zoom on images and do slideshows with groups of images:
require_js_helper( 'colorbox' );

// Include files to work with charts
require_js_defer( '#easypiechart#' );
require_css( 'ext:jquery/easy-pie-chart/css/jquery.easy-pie-chart.css' );

// Init JS to autcomplete the user logins
init_autocomplete_login_js( 'rsc_url', $AdminUI->get_template( 'autocomplete_plugin' ) );

// Display <html><head>...</head> section! (Note: should be done early if actions do not redirect)
$AdminUI->disp_html_head();

// Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions)
$AdminUI->disp_body_top();

// We're on the GLOBAL tab...
$AdminUI->disp_payload_begin();

$collection_count = get_table_count( 'T_blogs' );
if(
check_user_perm( 'blogs', 'create' ) && $collection_count === 0 )
{
   
// Display welcome panel:
   
$AdminUI->disp_view( 'collections/views/_welcome_demo_content.view.php' );
}

$AdminUI->disp_payload_end();

/*
 * Administrative tasks
 */

if( check_user_perm( 'options', 'edit' ) )
{
// We have some serious admin privilege:
    /**
     * @var AbstractSettings
     */
   
global $global_Cache;

   
// Begin payload block:
   
$AdminUI->disp_payload_begin();

    echo
'<div class="row browse"><div class="col-lg-12">';

   
// -- System stats -- //

   
$chart_data = array();
   
// Users
   
$chart_data[] = array(
           
'title' => TB_('Users'),
           
'value' => get_table_count( 'T_users' ),
           
'type'  => 'number',
        );

   
// Blogs
   
$chart_data[] = array(
           
'title' => TB_('Collections'),
           
'value' => $collection_count,
           
'type'  => 'number',
        );
   
$post_all_counter = get_table_count( 'T_items__item' );

   
// Posts
   
$chart_data[] = array(
           
'title' => TB_('Posts'),
           
'value' => $post_all_counter,
           
'type'  => 'number',
        );

   
// Slugs
   
$chart_data[] = array(
           
'title' => TB_('Slugs'),
           
'value' => get_table_count( 'T_slug' ),
           
'type'  => 'number',
        );
   
// Comments
   
$chart_data[] = array(
           
'title' => TB_('Comments'),
           
'value' => get_table_count( 'T_comments' ),
           
'type'  => 'number',
        );

   
// Files
   
$chart_data[] = array(
           
'title' => TB_('Files'),
           
'value' => get_table_count( 'T_files' ),
           
'type'  => 'number',
        );

   
// Conversations
   
$chart_data[] = array(
           
'title' => TB_('Conversations'),
           
'value' => get_table_count( 'T_messaging__thread' ),
           
'type'  => 'number',
        );

   
// Messages
   
$chart_data[] = array(
           
'title' => TB_('Messages'),
           
'value' => get_table_count( 'T_messaging__message' ),
           
'type'  => 'number',
        );

   
// Email Lists
   
$chart_data[] = array(
           
'title' => TB_('Email Lists'),
           
'value' => get_table_count( 'T_email__newsletter' ),
           
'type'  => 'number',
           
'max'   => 20,
        );

   
// Campaigns
   
$chart_data[] = array(
           
'title' => TB_('Campaigns'),
           
'value' => get_table_count( 'T_email__campaign' ),
           
'type'  => 'number',
           
'max'   => 10000,
        );

   
// Automations
   
$chart_data[] = array(
           
'title' => TB_('Automations'),
           
'value' => get_table_count( 'T_automation__automation' ),
           
'type'  => 'number',
           
'max'   => 20,
        );

   
$stat_item_Widget = new Widget( 'block_item' );

   
$stat_item_Widget->title = TB_('System metrics');
   
$stat_item_Widget->disp_template_replaced( 'block_start' );

   
display_charts( $chart_data );

   
$stat_item_Widget->disp_template_raw( 'block_end' );

   
//---- END OF - System stats ----//


   
$block_item_Widget = new Widget( 'block_item' );

   
$block_item_Widget->title = TB_('Updates from b2evolution.net');
   
$block_item_Widget->disp_template_replaced( 'block_start' );


   
// Note: hopefully, the updates will have been downloaded in the shutdown function of a previous page (including the login screen)
    // However if we have outdated info, we will load updates here.

    // Let's clear any remaining messages that should already have been displayed before...
   
$Messages->clear();

    if(
b2evonet_get_updates() !== NULL )
    {    
// Updates are allowed, display them:

        // Display info & error messages
       
$Messages->display();

       
$version_status_msg = $global_Cache->getx( 'version_status_msg' );
        if( !empty(
$version_status_msg) )
        {    
// We have managed to get updates (right now or in the past):
           
echo '<p>'.$version_status_msg.'</p>';
           
$extra_msg = $global_Cache->getx( 'extra_msg' );
            if( !empty(
$extra_msg) )
            {
                echo
'<p>'.$extra_msg.'</p>';
            }
        }

       
$block_item_Widget->disp_template_replaced( 'block_end' );

       
/*
        * DashboardAdminMain to be added here (anyone?)
        */
   
}
    else
    {
        echo
'<p>Updates from b2evolution.net are disabled!</p>';
        echo
'<p>You will <b>NOT</b> be alerted if you are running an insecure configuration.</p>';
    }

   
// Track just the first login into b2evolution to determine how many people installed manually vs automatic installs:
   
if( $current_User->ID == 1 && $UserSettings->get('first_login') == NULL )
    {
        echo
'This is the Admin\'s first ever login.';
        echo
'<img src="http://b2evolution.net/htsrv/track.php?key=first-ever-login" alt="" />';
       
// OK, done. Never do this again from now on:
       
$UserSettings->set('first_login', $localtimenow ); // We might actually display how long the system has been running somewhere
       
$UserSettings->dbupdate();
    }


   
/*
     * DashboardAdminSide to be added here (anyone?)
     */

   
echo '</div></div>';

   
// End payload block:
   
$AdminUI->disp_payload_end();
}

if( ! empty(
$chart_data ) )
{
// JavaScript to initialize charts
?>
<script>
jQuery( 'document' ).ready( function()
{
    var chart_params = {
        barColor: function(percent)
        {
            return get_color_by_percent( {r:97, g:189, b:79}, {r:242, g:214, b:0}, {r:255, g:171, b:74}, percent );
        },
        size: 75,
        trackColor: '#eee',
        scaleColor: false,
        lineCap: 'round',
        lineWidth: 6,
        animate: 700
    }
    jQuery( '.chart .number' ).easyPieChart( chart_params );
} );

function get_color_by_percent( color_from, color_middle, color_to, percent )
{
    function get_color_hex( start_color, end_color )
    {
        num = start_color + Math.round( ( end_color - start_color ) * ( percent / 100 ) );
        num = Math.min( num, 255 ); // not more than 255
        num = Math.max( num, 0 ); // not less than 0
        var str = num.toString( 16 );
        if( str.length < 2 )
        {
            str = "0" + str;
        }
        return str;
    }

    if( percent < 50 )
    {
        color_to = color_middle;
        percent *= 2;
    }
    else
    {
        color_from = color_middle;
        percent = ( percent - 50 ) * 2;
    }

    return "#" +
        get_color_hex( color_from.r, color_to.r ) +
        get_color_hex( color_from.g, color_to.g ) +
        get_color_hex( color_from.b, color_to.b );
}
</script>
<?php
}

// Display body bottom, debug info and close </html>:
$AdminUI->disp_global_footer();

?>