PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.1
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 +83 -14 5.1.1 → 6.2.1 View file →
@@ -8,8 +8,13 @@
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
@@ -42,11 +47,25 @@
42 47 * Method sites_available_updates_count()
43 48 *
44 49 * Returns the number of available udpates for sites.
45 50 *
46 - * @return object $response An object that contains the return data and status of the API request.
51 + * @return mixed $response An object that contains the return data and status of the API request.
47 52 */
48 53 public function sites_available_updates_count() { // phpcs:ignore -- NOSONAR - complex function.
54 +
55 + $cache_group = MainWP_Cache_Helper::CGR_UPDATES;
56 +
57 + $cache_key = MainWP_Cache_Helper::get_cache_key( 'updates_count', $cache_group );
58 +
59 + $cache_values = MainWP_Cache_Helper::instance()->get_cache(
60 + $cache_key,
61 + $cache_group
62 + );
63 +
64 + if ( is_array( $cache_values ) ) {
65 + return $cache_values;
66 + }
67 +
49 68 $is_staging = 'no';
50 69
51 70 $db_updater_count = false;
52 71 $total_plugin_db_upgrades = 0;
@@ -51,9 +70,9 @@
51 70 $db_updater_count = false;
52 71 $total_plugin_db_upgrades = 0;
53 72 $supported_db_updater_plugins = array();
54 73
55 - $get_fields = array( 'premium_upgrades', 'favi_icon' );
74 + $get_fields = array( 'premium_upgrades', 'favi_icon', 'ignored_wp_upgrades', 'ignored_trans_updates' );
56 75 $custom_fields = apply_filters( 'mainwp_available_updates_count_custom_fields_data', array(), 'updates_count' );
57 76
58 77 if ( is_array( $custom_fields ) && 1 === count( $custom_fields ) && in_array( 'plugin_db_upgrades', $custom_fields ) ) {
59 78 $get_fields = array_merge( $get_fields, $custom_fields );
@@ -60,13 +79,19 @@
60 79 $db_updater_count = true;
61 80 $supported_db_updater_plugins = apply_filters( 'mainwp_database_updater_supported_plugins', array() );
62 81 }
63 82
64 - $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, $get_fields, $is_staging );
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' ) );
65 84
66 85 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
67 - $websites = MainWP_DB::instance()->query( $sql );
68 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 + }
91 +
92 + $websites = MainWP_DB::instance()->query( $sql );
93 +
69 94 $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
70 95
71 96 $total_wp_upgrades = 0;
72 97 $total_plugin_upgrades = 0;
@@ -75,12 +100,12 @@
75 100
76 101 MainWP_DB::data_seek( $websites, 0 );
77 102
78 103 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
79 - $wp_upgrades = MainWP_DB::instance()->get_website_option( $website, 'wp_upgrades' );
80 - $wp_upgrades = ! empty( $wp_upgrades ) ? json_decode( $wp_upgrades, true ) : array();
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();
81 106
82 - if ( $website->is_ignoreCoreUpdates ) {
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' ) ) {
83 108 $wp_upgrades = array();
84 109 }
85 110
86 111 if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
@@ -88,8 +113,12 @@
88 113 }
89 114
90 115 $translation_upgrades = json_decode( $website->translation_upgrades, true );
91 116
117 + if ( ! empty( $website->ignored_trans_updates ) ) {
118 + $translation_upgrades = array();
119 + }
120 +
92 121 $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
93 122 if ( $website->is_ignorePluginUpdates ) {
94 123 $plugin_upgrades = array();
95 124 }
@@ -113,9 +142,9 @@
113 142 if ( ! $website->is_ignorePluginUpdates ) {
114 143
115 144 $premiumUpgrade = array_filter( $premiumUpgrade );
116 145 if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
117 - $plugin_upgrades[ $crrSlug ] = array();
146 + continue;
118 147 }
119 148
120 149 $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
121 150 }
@@ -136,14 +165,14 @@
136 165
137 166 if ( is_array( $plugin_upgrades ) ) {
138 167 $ignored_plugins = json_decode( $website->ignored_plugins, true );
139 168 if ( is_array( $ignored_plugins ) ) {
140 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
169 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
141 170 }
142 171
143 172 $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
144 173 if ( is_array( $ignored_plugins ) ) {
145 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
174 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
146 175 }
147 176
148 177 $total_plugin_upgrades += count( $plugin_upgrades );
149 178 }
@@ -150,14 +179,14 @@
150 179
151 180 if ( is_array( $theme_upgrades ) ) {
152 181 $ignored_themes = json_decode( $website->ignored_themes, true );
153 182 if ( is_array( $ignored_themes ) ) {
154 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
183 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
155 184 }
156 185
157 186 $ignored_themes = json_decode( $userExtension->ignored_themes, true );
158 187 if ( is_array( $ignored_themes ) ) {
159 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
188 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
160 189 }
161 190
162 191 $total_theme_upgrades += count( $theme_upgrades );
163 192 }
@@ -171,14 +200,14 @@
171 200
172 201 if ( is_array( $plugin_db_upgrades ) && ! $website->is_ignorePluginUpdates ) {
173 202 $_ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
174 203 if ( is_array( $_ignored_plugins ) ) {
175 - $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
204 + $plugin_db_upgrades = $this->get_not_ignored_updates_plugins_db( $plugin_db_upgrades, $_ignored_plugins );
176 205 }
177 206
178 207 $_ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
179 208 if ( is_array( $_ignored_plugins ) ) {
180 - $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
209 + $plugin_db_upgrades = $this->get_not_ignored_updates_plugins_db( $plugin_db_upgrades, $_ignored_plugins );
181 210 }
182 211
183 212 // supported the WC plugin.
184 213 if ( is_array( $plugin_db_upgrades ) ) {
@@ -220,9 +249,49 @@
220 249 $data['total'] += $total_plugin_db_upgrades;
221 250 }
222 251 MainWP_DB::free_result( $websites );
223 252
253 + // set cache.
254 + MainWP_Cache_Helper::add_cache( $cache_key, $cache_group, $data );
255 +
224 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;
225 294 }
226 295 }
227 296
228 297 // End of class.