PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.1
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / modules / logs / widgets / widget-log-graph-plugins-widget.php

widget-log-graph-plugins-widget.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 6.1, at modules/logs/widgets/widget-log-graph-plugins-widget.php

212 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Logs Widget
4 *
5 * Displays the Logs Info.
6 *
7 * @package MainWP/Dashboard
8 * @version 4.6
9 */
10
11 namespace MainWP\Dashboard\Module\Log;
12
13 use MainWP\Dashboard\MainWP_DB;
14 use MainWP\Dashboard\MainWP_Utility;
15 use MainWP\Dashboard\MainWP_UI;
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 /**
23 * Class Log_Graph_Plugins_Widget
24 *
25 * Displays the Logs info.
26 */
27 class Log_Graph_Plugins_Widget {
28
29 /**
30 * Protected static variable to hold the single instance of the class.
31 *
32 * @var mixed Default null
33 */
34 protected static $instance = null;
35
36 /**
37 * Return the single instance of the class.
38 *
39 * @return mixed $instance The single instance of the class.
40 */
41 public static function instance() {
42 if ( is_null( static::$instance ) ) {
43 static::$instance = new self();
44 }
45 return static::$instance;
46 }
47
48
49 /**
50 * Method get_class_name()
51 *
52 * @return string __CLASS__ Class name.
53 */
54 public static function get_class_name() {
55 return __CLASS__;
56 }
57
58 /**
59 * Method render()
60 */
61 public function render() {
62 $this->render_widget();
63 }
64
65
66 /**
67 * Render client overview Info.
68 */
69 public function render_widget() {
70 $sites_count = MainWP_DB::instance()->get_websites_count();
71 ?>
72 <div class="mainwp-widget-header">
73 <h2 class="ui header handle-drag">
74 <?php esc_html_e( 'Site Plugin Status Breakdown', 'mainwp' ); ?>
75 <div class="sub header">
76 <?php esc_html_e( 'Total number of plugins per site, differentiated by active (blue) and inactive (green) status for quick assessment.', 'mainwp' ); ?>
77 </div>
78 </h2>
79 </div>
80
81 <div class="mainwp-widget-insights-card mainwp-scrolly-overflow">
82 <?php
83 /**
84 * Action: mainwp_logs_widget_top
85 *
86 * Fires at the top of the widget.
87 *
88 * @since 4.6
89 */
90 do_action( 'mainwp_logs_widget_top', 'status' );
91 ?>
92 <div id="mainwp-message-zone" style="display:none;" class="ui message"></div>
93 <?php
94 MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' );
95 if ( 0 < intval( $sites_count ) ) {
96 $this->render_widget_content();
97 } else {
98 MainWP_UI::render_empty_element_placeholder( __( 'No Plugin Data', 'mainwp' ), '<a href="admin.php?page=managesites&do=new">' . __( 'Start connecting your sites now', 'mainwp' ) . '</a>', '<em data-emoji=":bar_chart:" class="medium"></em>' );
99 }
100 ?>
101 <?php
102 /**
103 * Action: mainwp_logs_widget_bottom
104 *
105 * Fires at the bottom of the widget.
106 *
107 * @since 4.6
108 */
109 do_action( 'mainwp_logs_widget_bottom', 'status' );
110 ?>
111 </div>
112 <div class="mainwp-widget-footer ui four columns stackable grid">
113 <div class="column">
114 </div>
115 <div class="column">
116 </div>
117 </div>
118 <?php
119 }
120
121 /**
122 * Method render_widget_content()
123 */
124 public function render_widget_content() {
125 $wp_plugins = array();
126 $wpsite_fields = array( 'id', 'name', 'plugins' );
127 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user_by_params( array( 'select_wp_fields' => $wpsite_fields ) ) );
128 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
129 $plugins = ! empty( $website->plugins ) ? json_decode( $website->plugins, 1 ) : array();
130 if ( ! is_array( $plugins ) ) {
131 $plugins = array();
132 }
133 $active = MainWP_Utility::get_sub_array_having( $plugins, 'active', 1 );
134 $inactive = MainWP_Utility::get_sub_array_having( $plugins, 'active', 0 );
135
136 if ( ! isset( $wp_plugins[ $website->id ] ) ) {
137 $wp_plugins[ $website->id ] = array();
138 }
139
140 $wp_plugins[ $website->id ]['active'] = count( $active );
141 $wp_plugins[ $website->id ]['inactive'] = count( $inactive );
142 $wp_plugins[ $website->id ]['name'] = $website->name;
143 }
144 MainWP_DB::free_result( $websites );
145
146 ?>
147 <div id="mainwp-module-log-chart-plugins-wrapper" ></div>
148
149 <script type="text/javascript">
150 jQuery( document ).ready( function() {
151 let options = {
152 chart: {
153 type: 'bar',
154 stacked: true,
155 height: '100%',
156 },
157 plotOptions: {
158 bar: {
159 horizontal: true
160 }
161 },
162 series: [ {
163 name: 'Active Plugins',
164 data: [
165 <?php foreach ( $wp_plugins as $value ) : ?>
166 {
167 x: '<?php echo esc_js( $value['name'] ) . '"'; ?>',
168 y: <?php echo intval( $value['active'] ); ?>,
169 fillColor: "#18a4e0",
170 },
171 <?php endforeach; ?>
172 ]
173 }, {
174 name: 'Inactive Plugins',
175 data: [
176 <?php foreach ( $wp_plugins as $value ) : ?>
177 {
178 x: '<?php echo esc_js( $value['name'] ) . '"'; ?>',
179 y: <?php echo intval( $value['inactive'] ); ?>,
180 },
181 <?php endforeach; ?>
182 ]
183 }
184 ],
185 xaxis: {
186 labels: {
187 style: {
188 colors: '#999999',
189 }
190 }
191 },
192 yaxis: {
193 labels: {
194 style: {
195 colors: '#999999',
196 }
197 }
198 },
199 tooltip: {
200 theme: 'dark'
201 },
202 }
203 let plugin = new ApexCharts(document.querySelector("#mainwp-module-log-chart-plugins-wrapper"), options);
204 setTimeout(() => {
205 plugin.render();
206 }, 1000);
207 } );
208 </script>
209 <?php
210 }
211 }
212