Completed
Push — master ( 9a01d9...c990d6 )
by frank
08:32
created

classes/autoptimizeToolbar.php (1 issue)

Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
class autoptimizeToolbar
4
{
5
    public function __construct()
6
    {
7
        // If Cache is not available we don't add the Autoptimize Toolbar
8
        if( ! autoptimizeCache::cacheavail() ) {
9
            return;
10
        }
11
        // Load admin toolbar feature once WordPress, all plugins, and the theme are fully loaded and instantiated.
12
        add_action( 'wp_loaded', array( $this, 'load_toolbar' ) );
13
    }
14
15
    public function load_toolbar()
16
    {
17
        // Check permissions and that toolbar is not hidden via filter
18
        if ( current_user_can( 'manage_options' ) && apply_filters( 'autoptimize_filter_toolbar_show', true ) ) {
19
            // Create a handler for the AJAX toolbar requests
20
            add_action( 'wp_ajax_autoptimize_delete_cache', array( $this, 'delete_cache' ) );
21
22
            // Load custom styles, scripts and menu only when needed
23
            if ( is_admin_bar_showing() ) {
24
                if ( is_admin() ) {
25
                    // in the case of back-end
26
                    add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
27
                } else {
28
                    // in the case of front-end
29
                    add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
30
                }
31
                // Add the Autoptimize Toolbar to the Admin bar
32
                add_action( 'admin_bar_menu', array( $this, 'add_toolbar' ), 100 );
33
            }
34
        }
35
    }
36
37
    public function add_toolbar()
38
    {
39
        global $wp_admin_bar;
40
41
        // Retrieve the Autoptimize Cache Stats information
42
        $stats = autoptimizeCache::stats();
43
44
        // Set the Max Size recommended for cache files
45
        $max_size = apply_filters( 'autoptimize_filter_cachecheck_maxsize', 512 * 1024 * 1024 );
46
47
        // Retrieve the current Total Files in cache
48
        $files = $stats[0];
49
        // Retrieve the current Total Size of the cache
50
        $bytes = $stats[1];
51
52
        $size = $this->format_filesize($bytes);
53
54
        // We calculated the percentage of cache used
55
        $percentage = ceil( $bytes / $max_size * 100 );
56
        if ( $percentage > 100 ) {
57
            $percentage = 100;
58
        }
59
        // We define the type of color indicator for the current state of cache size.
60
        // "green" if the size is less than 80% of the total recommended
61
        // "orange" if over 80%
62
        // "red" if over 100%
63
        $color = ( $percentage == 100 ) ? 'red' : ( ( $percentage > 80 ) ? 'orange' : 'green' );
64
65
        // Create or add new items into the Admin Toolbar.
66
        // Main Autoptimize node
67
        $wp_admin_bar->add_node( array(
68
            'id'    => 'autoptimize',
69
            'title' => '<span class="ab-icon"></span><span class="ab-label">' . __( "Autoptimize", 'autoptimize' ) . '</span>',
70
            'href'  => admin_url( 'options-general.php?page=autoptimize' ),
71
            'meta'  => array( 'class' => 'bullet-' . $color )
72
        ));
73
74
        // Cache Info node
75
        $wp_admin_bar->add_node( array(
76
            'id'     => 'autoptimize-cache-info',
77
            'title'  => '<p>' . __( "Cache Info", 'autoptimize' ) . '</p>' .
78
                   '<div class="autoptimize-radial-bar" percentage="' . $percentage . '">' .
79
                   '<div class="circle">'.
80
                   '<div class="mask full"><div class="fill bg-' . $color . '"></div></div>'.
81
                   '<div class="mask half"><div class="fill bg-' . $color . '"></div></div>'.
82
                   '<div class="shadow"></div>'.
83
                   '</div>'.
84
                   '<div class="inset"><div class="percentage"><div class="numbers ' . $color . '">' . $percentage . '%</div></div></div>'.
85
                   '</div>' .
86
                   '<table>' .
87
                   '<tr><td>' . __( "Size", 'autoptimize' ) . ':</td><td class="size ' . $color . '">' . $size . '</td></tr>' .
88
                   '<tr><td>' . __( "Files", 'autoptimize' ) . ':</td><td class="files white">' . $files . '</td></tr>' .
89
                   '</table>',
90
            'parent' => 'autoptimize'
91
        ));
92
93
        // Delete Cache node
94
        $wp_admin_bar->add_node( array(
95
            'id'     => 'autoptimize-delete-cache',
96
            'title'  => __( "Delete Cache", 'autoptimize' ),
97
            'parent' => 'autoptimize'
98
        ));
99
    }
100
101
    public function delete_cache()
102
    {
103
        check_ajax_referer( 'ao_delcache_nonce', 'nonce' );
104
        $result = false;
105
        if ( current_user_can( 'manage_options' ) )
106
        {
107
            // We call the function for cleaning the Autoptimize cache
108
            $result = autoptimizeCache::clearall();
109
        }
110
        wp_send_json( $result );
111
    }
112
113
    public function enqueue_scripts()
114
    {
115
        // Autoptimize Toolbar Styles
116
        wp_enqueue_style( 'autoptimize-toolbar', plugins_url( '/static/toolbar.css', __FILE__ ), array(), time(), 'all' );
117
        // Autoptimize Toolbar Javascript
118
        wp_enqueue_script( 'autoptimize-toolbar', plugins_url( '/static/toolbar.js', __FILE__ ), array( 'jquery' ), time(), true );
119
        // Localizes a registered script with data for a JavaScript variable. (We need this for the AJAX work properly in the front-end mode)
120
        wp_localize_script( 'autoptimize-toolbar', 'autoptimize_ajax_object', array(
121
            'ajaxurl' => admin_url( 'admin-ajax.php' ),
122
            'error_msg' => sprintf( __( 'Your Autoptimize cache might not have been purged successfully, please check on the <a href=%s>Autoptimize settings page</a>.', 'autoptimize' ), admin_url( 'options-general.php?page=autoptimize' ) . ' style="white-space:nowrap;"' ),
123
            'dismiss_msg' => __( 'Dismiss this notice.' ),
124
            'nonce' => wp_create_nonce( 'ao_delcache_nonce' )
125
        ) );
126
    }
127
128
    public function format_filesize($bytes, $decimals = 2)
129
    {
130
        $units = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' );
131
        for ($i = 0; ($bytes / 1024) > 0.9; $i++, $bytes /= 1024) {}
0 ignored issues
show
This for loop is empty and can be removed.

This check looks for for loops that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

Consider removing the loop.

Loading history...
132
        return sprintf( "%1.{$decimals}f %s", round( $bytes, $decimals ), $units[$i] );
133
    }
134
}
135