PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.2
6.2.2 6.2.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 All 155 releases
← All changes | class/class-mainwp-common-handler.php +239 -172 5.0.3 → 6.2.2 View file →
@@ -8,223 +8,290 @@
8 8 */
9 9
10 10 namespace MainWP\Dashboard;
11 11
12 +// Exit if accessed directly.
13 +if ( ! defined( 'ABSPATH' ) ) {
14 + exit;
15 +}
16 +
12 17 /**
13 18 * Class MainWP_Common_Handler
14 19 *
15 20 * @package MainWP\Dashboard
16 21 */
17 -class MainWP_Common_Handler {
22 +class MainWP_Common_Handler { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
18 23
19 - /**
20 - * Protected static variable to hold the single instance of the class.
21 - *
22 - * @var mixed Default null
23 - */
24 - private static $instance = null;
24 + /**
25 + * Protected static variable to hold the single instance of the class.
26 + *
27 + * @var mixed Default null
28 + */
29 + private static $instance = null;
25 30
26 - /**
27 - * Method instance()
28 - *
29 - * Create public static instance.
30 - *
31 - * @static
32 - * @return self::$instance
33 - */
34 - public static function instance() {
35 - if ( null === self::$instance ) {
36 - self::$instance = new self();
37 - }
38 - return self::$instance;
39 - }
31 + /**
32 + * Method instance()
33 + *
34 + * Create public static instance.
35 + *
36 + * @static
37 + * @return static::$instance
38 + */
39 + public static function instance() {
40 + if ( null === static::$instance ) {
41 + static::$instance = new self();
42 + }
43 + return static::$instance;
44 + }
40 45
41 - /**
42 - * Method sites_available_updates_count()
43 - *
44 - * Returns the number of available udpates for sites.
45 - *
46 - * @return object $response An object that contains the return data and status of the API request.
47 - */
48 - public function sites_available_updates_count() { // phpcs:ignore -- complex function.
49 - $is_staging = 'no';
46 + /**
47 + * Method sites_available_updates_count()
48 + *
49 + * Returns the number of available udpates for sites.
50 + *
51 + * @return mixed $response An object that contains the return data and status of the API request.
52 + */
53 + public function sites_available_updates_count() { // phpcs:ignore -- NOSONAR - complex function.
50 54
51 - $db_updater_count = false;
52 - $total_plugin_db_upgrades = 0;
53 - $supported_db_updater_plugins = array();
55 + $cache_group = MainWP_Cache_Helper::CGR_UPDATES;
54 56
55 - $get_fields = array( 'premium_upgrades', 'favi_icon' );
56 - $custom_fields = apply_filters( 'mainwp_available_updates_count_custom_fields_data', array(), 'updates_count' );
57 + $cache_key = MainWP_Cache_Helper::get_cache_key( 'updates_count', $cache_group );
57 58
58 - if ( is_array( $custom_fields ) && 1 === count( $custom_fields ) && in_array( 'plugin_db_upgrades', $custom_fields ) ) {
59 - $get_fields = array_merge( $get_fields, $custom_fields );
60 - $db_updater_count = true;
61 - $supported_db_updater_plugins = apply_filters( 'mainwp_database_updater_supported_plugins', array() );
62 - }
59 + $cache_values = MainWP_Cache_Helper::instance()->get_cache(
60 + $cache_key,
61 + $cache_group
62 + );
63 63
64 - $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, $get_fields, $is_staging );
64 + if ( is_array( $cache_values ) ) {
65 + return $cache_values;
66 + }
65 67
66 - $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, $get_fields, $is_staging );
68 + $is_staging = 'no';
67 69
68 - $userExtension = MainWP_DB_Common::instance()->get_user_extension();
69 - $websites = MainWP_DB::instance()->query( $sql );
70 + $db_updater_count = false;
71 + $total_plugin_db_upgrades = 0;
72 + $supported_db_updater_plugins = array();
70 73
71 - $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
74 + $get_fields = array( 'premium_upgrades', 'favi_icon', 'ignored_wp_upgrades', 'ignored_trans_updates' );
75 + $custom_fields = apply_filters( 'mainwp_available_updates_count_custom_fields_data', array(), 'updates_count' );
72 76
73 - $total_wp_upgrades = 0;
74 - $total_plugin_upgrades = 0;
75 - $total_translation_upgrades = 0;
76 - $total_theme_upgrades = 0;
77 + if ( is_array( $custom_fields ) && 1 === count( $custom_fields ) && in_array( 'plugin_db_upgrades', $custom_fields ) ) {
78 + $get_fields = array_merge( $get_fields, $custom_fields );
79 + $db_updater_count = true;
80 + $supported_db_updater_plugins = apply_filters( 'mainwp_database_updater_supported_plugins', array() );
81 + }
77 82
78 - MainWP_DB::data_seek( $websites, 0 );
83 + $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, $get_fields, $is_staging, array( 'connected' => 'yes' ) );
79 84
80 - while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
81 - $wp_upgrades = MainWP_DB::instance()->get_website_option( $website, 'wp_upgrades' );
82 - $wp_upgrades = ! empty( $wp_upgrades ) ? json_decode( $wp_upgrades, true ) : array();
85 + $userExtension = MainWP_DB_Common::instance()->get_user_extension();
83 86
84 - if ( $website->is_ignoreCoreUpdates ) {
85 - $wp_upgrades = array();
86 - }
87 + $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
88 + if ( ! is_array( $decodedIgnoredCores ) ) {
89 + $decodedIgnoredCores = array();
90 + }
87 91
88 - if ( is_array( $wp_upgrades ) && count( $wp_upgrades ) > 0 ) {
89 - ++$total_wp_upgrades;
90 - }
92 + $websites = MainWP_DB::instance()->query( $sql );
91 93
92 - $translation_upgrades = json_decode( $website->translation_upgrades, true );
94 + $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
93 95
94 - $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
95 - if ( $website->is_ignorePluginUpdates ) {
96 - $plugin_upgrades = array();
97 - }
96 + $total_wp_upgrades = 0;
97 + $total_plugin_upgrades = 0;
98 + $total_translation_upgrades = 0;
99 + $total_theme_upgrades = 0;
98 100
99 - $theme_upgrades = json_decode( $website->theme_upgrades, true );
100 - if ( $website->is_ignoreThemeUpdates ) {
101 - $theme_upgrades = array();
102 - }
101 + MainWP_DB::data_seek( $websites, 0 );
103 102
104 - $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
105 - $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
103 + while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
104 + $wp_upgrades = ! empty( $website->wp_upgrades ) ? json_decode( $website->wp_upgrades, true ) : array();
105 + $ignored_core_upgrades = ! empty( $website->ignored_wp_upgrades ) ? json_decode( $website->ignored_wp_upgrades, true ) : array();
106 106
107 - if ( is_array( $decodedPremiumUpgrades ) ) {
108 - foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
109 - $premiumUpgrade['premium'] = true;
107 + if ( $website->is_ignoreCoreUpdates || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core' ) || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core' ) ) {
108 + $wp_upgrades = array();
109 + }
110 110
111 - if ( 'plugin' === $premiumUpgrade['type'] ) {
112 - if ( ! is_array( $plugin_upgrades ) ) {
113 - $plugin_upgrades = array();
114 - }
115 - if ( ! $website->is_ignorePluginUpdates ) {
111 + if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
112 + ++$total_wp_upgrades;
113 + }
116 114
117 - $premiumUpgrade = array_filter( $premiumUpgrade );
118 - if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
119 - $plugin_upgrades[ $crrSlug ] = array();
120 - }
115 + $translation_upgrades = json_decode( $website->translation_upgrades, true );
121 116
122 - $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
123 - }
124 - } elseif ( 'theme' === $premiumUpgrade['type'] ) {
125 - if ( ! is_array( $theme_upgrades ) ) {
126 - $theme_upgrades = array();
127 - }
128 - if ( ! $website->is_ignoreThemeUpdates ) {
129 - $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
130 - }
131 - }
132 - }
133 - }
117 + if ( ! empty( $website->ignored_trans_updates ) ) {
118 + $translation_upgrades = array();
119 + }
134 120
135 - if ( is_array( $translation_upgrades ) ) {
136 - $total_translation_upgrades += count( $translation_upgrades );
137 - }
121 + $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
122 + if ( $website->is_ignorePluginUpdates ) {
123 + $plugin_upgrades = array();
124 + }
138 125
139 - if ( is_array( $plugin_upgrades ) ) {
140 - $ignored_plugins = json_decode( $website->ignored_plugins, true );
141 - if ( is_array( $ignored_plugins ) ) {
142 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
143 - }
126 + $theme_upgrades = json_decode( $website->theme_upgrades, true );
127 + if ( $website->is_ignoreThemeUpdates ) {
128 + $theme_upgrades = array();
129 + }
144 130
145 - $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
146 - if ( is_array( $ignored_plugins ) ) {
147 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
148 - }
131 + $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
132 + $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
149 133
150 - $total_plugin_upgrades += count( $plugin_upgrades );
151 - }
134 + if ( is_array( $decodedPremiumUpgrades ) ) {
135 + foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
136 + $premiumUpgrade['premium'] = true;
152 137
153 - if ( is_array( $theme_upgrades ) ) {
154 - $ignored_themes = json_decode( $website->ignored_themes, true );
155 - if ( is_array( $ignored_themes ) ) {
156 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
157 - }
138 + if ( 'plugin' === $premiumUpgrade['type'] ) {
139 + if ( ! is_array( $plugin_upgrades ) ) {
140 + $plugin_upgrades = array();
141 + }
142 + if ( ! $website->is_ignorePluginUpdates ) {
158 143
159 - $ignored_themes = json_decode( $userExtension->ignored_themes, true );
160 - if ( is_array( $ignored_themes ) ) {
161 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
162 - }
144 + $premiumUpgrade = array_filter( $premiumUpgrade );
145 + if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
146 + continue;
147 + }
163 148
164 - $total_theme_upgrades += count( $theme_upgrades );
165 - }
149 + $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
150 + }
151 + } elseif ( 'theme' === $premiumUpgrade['type'] ) {
152 + if ( ! is_array( $theme_upgrades ) ) {
153 + $theme_upgrades = array();
154 + }
155 + if ( ! $website->is_ignoreThemeUpdates ) {
156 + $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
157 + }
158 + }
159 + }
160 + }
166 161
167 - if ( $db_updater_count ) {
162 + if ( is_array( $translation_upgrades ) ) {
163 + $total_translation_upgrades += count( $translation_upgrades );
164 + }
168 165
169 - $plugin_db_upgrades = ! empty( $website->plugin_db_upgrades ) ? json_decode( $website->plugin_db_upgrades, true ) : array();
170 - if ( $website->is_ignorePluginUpdates ) {
171 - $plugin_db_upgrades = array();
172 - }
166 + if ( is_array( $plugin_upgrades ) ) {
167 + $ignored_plugins = json_decode( $website->ignored_plugins, true );
168 + if ( is_array( $ignored_plugins ) ) {
169 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
170 + }
173 171
174 - if ( is_array( $plugin_db_upgrades ) && ! $website->is_ignorePluginUpdates ) {
175 - $_ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
176 - if ( is_array( $_ignored_plugins ) ) {
177 - $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
178 - }
172 + $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
173 + if ( is_array( $ignored_plugins ) ) {
174 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
175 + }
179 176
180 - $_ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
181 - if ( is_array( $_ignored_plugins ) ) {
182 - $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
183 - }
177 + $total_plugin_upgrades += count( $plugin_upgrades );
178 + }
184 179
185 - // supported the WC plugin.
186 - if ( is_array( $plugin_db_upgrades ) ) {
187 - foreach ( $supported_db_updater_plugins as $supp_slug ) {
188 - if ( isset( $plugin_db_upgrades[ $supp_slug ] ) ) {
189 - ++$total_plugin_db_upgrades;
190 - }
191 - }
192 - }
193 - }
194 - }
195 - }
180 + if ( is_array( $theme_upgrades ) ) {
181 + $ignored_themes = json_decode( $website->ignored_themes, true );
182 + if ( is_array( $ignored_themes ) ) {
183 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
184 + }
196 185
197 - // WP Upgrades part.
198 - $total_upgrades = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades;
186 + $ignored_themes = json_decode( $userExtension->ignored_themes, true );
187 + if ( is_array( $ignored_themes ) ) {
188 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
189 + }
199 190
200 - // to fix incorrect total updates.
201 - if ( $mainwp_show_language_updates ) {
202 - $total_upgrades += $total_translation_upgrades;
203 - $data = array(
204 - 'total' => $total_upgrades,
205 - 'wp' => $total_wp_upgrades,
206 - 'plugins' => $total_plugin_upgrades,
207 - 'themes' => $total_theme_upgrades,
208 - 'translations' => $total_translation_upgrades,
209 - );
210 - } else {
211 - $data = array(
212 - 'total' => $total_upgrades,
213 - 'wp' => $total_wp_upgrades,
214 - 'plugins' => $total_plugin_upgrades,
215 - 'themes' => $total_theme_upgrades,
216 - 'translations' => 0,
217 - );
218 - }
191 + $total_theme_upgrades += count( $theme_upgrades );
192 + }
219 193
220 - if ( $db_updater_count ) {
221 - $data['db_updater_count'] = $total_plugin_db_upgrades;
222 - $data['total'] += $total_plugin_db_upgrades;
223 - }
224 - MainWP_DB::free_result( $websites );
194 + if ( $db_updater_count ) {
225 195
226 - return $data;
227 - }
196 + $plugin_db_upgrades = ! empty( $website->plugin_db_upgrades ) ? json_decode( $website->plugin_db_upgrades, true ) : array();
197 + if ( $website->is_ignorePluginUpdates ) {
198 + $plugin_db_upgrades = array();
199 + }
200 +
201 + if ( is_array( $plugin_db_upgrades ) && ! $website->is_ignorePluginUpdates ) {
202 + $_ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
203 + if ( is_array( $_ignored_plugins ) ) {
204 + $plugin_db_upgrades = $this->get_not_ignored_updates_plugins_db( $plugin_db_upgrades, $_ignored_plugins );
205 + }
206 +
207 + $_ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
208 + if ( is_array( $_ignored_plugins ) ) {
209 + $plugin_db_upgrades = $this->get_not_ignored_updates_plugins_db( $plugin_db_upgrades, $_ignored_plugins );
210 + }
211 +
212 + // supported the WC plugin.
213 + if ( is_array( $plugin_db_upgrades ) ) {
214 + foreach ( $supported_db_updater_plugins as $supp_slug ) {
215 + if ( isset( $plugin_db_upgrades[ $supp_slug ] ) ) {
216 + ++$total_plugin_db_upgrades;
217 + }
218 + }
219 + }
220 + }
221 + }
222 + }
223 +
224 + // WP Upgrades part.
225 + $total_upgrades = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades;
226 +
227 + // to fix incorrect total updates.
228 + if ( $mainwp_show_language_updates ) {
229 + $total_upgrades += $total_translation_upgrades;
230 + $data = array(
231 + 'total' => $total_upgrades,
232 + 'wp' => $total_wp_upgrades,
233 + 'plugins' => $total_plugin_upgrades,
234 + 'themes' => $total_theme_upgrades,
235 + 'translations' => $total_translation_upgrades,
236 + );
237 + } else {
238 + $data = array(
239 + 'total' => $total_upgrades,
240 + 'wp' => $total_wp_upgrades,
241 + 'plugins' => $total_plugin_upgrades,
242 + 'themes' => $total_theme_upgrades,
243 + 'translations' => 0,
244 + );
245 + }
246 +
247 + if ( $db_updater_count ) {
248 + $data['db_updater_count'] = $total_plugin_db_upgrades;
249 + $data['total'] += $total_plugin_db_upgrades;
250 + }
251 + MainWP_DB::free_result( $websites );
252 +
253 + // set cache.
254 + MainWP_Cache_Helper::add_cache( $cache_key, $cache_group, $data );
255 +
256 + return $data;
257 + }
258 +
259 +
260 + /**
261 + * Method get_not_ignored_updates_plugins_db().
262 + *
263 + * To compatible with new ignored update info.
264 + *
265 + * @param array $updates Update info.
266 + * @param array $ignored Ignored update info.
267 + * @param int $count_ignored Count ignored updates.
268 + *
269 + * @return array $updates Not ignored updates info.
270 + */
271 + public function get_not_ignored_updates_plugins_db( $updates, $ignored, &$count_ignored = 0 ) { //phpcs:ignore -- NOSONAR - complexity.
272 + if ( ! is_array( $updates ) || ! is_array( $ignored ) ) {
273 + return $updates;
274 + }
275 + $new_updates = array();
276 + foreach ( $updates as $slug => $dbup_info ) {
277 + if ( isset( $ignored[ $slug ] ) ) {
278 + if ( is_string( $ignored[ $slug ] ) ) {
279 + ++$count_ignored;
280 + // old ignored info.
281 + continue; // ignored update.
282 + } elseif ( is_array( $ignored[ $slug ] ) && ! empty( $ignored[ $slug ]['ignored_versions'] ) ) {
283 + $ignored_vers = is_array( $ignored[ $slug ]['ignored_versions'] ) ? $ignored[ $slug ]['ignored_versions'] : array();
284 + $cur_version = is_array( $dbup_info ) && isset( $dbup_info['version'] ) ? $dbup_info['version'] : '';
285 + if ( in_array( 'all_versions', $ignored_vers ) || ( ! empty( $cur_version ) && in_array( $cur_version, $ignored_vers ) ) ) {
286 + ++$count_ignored;
287 + continue; // ignored update.
288 + }
289 + }
290 + }
291 + $new_updates[ $slug ] = $dbup_info;
292 + }
293 + return $new_updates;
294 + }
228 295 }
229 296
230 297 // End of class.