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 +249 -132 4.6.0.1 → 6.2.2 View file →
@@ -8,173 +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';
50 - $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, array( 'premium_upgrades', 'favi_icon' ), $is_staging );
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.
51 54
52 - $userExtension = MainWP_DB_Common::instance()->get_user_extension();
53 - $websites = MainWP_DB::instance()->query( $sql );
55 + $cache_group = MainWP_Cache_Helper::CGR_UPDATES;
54 56
55 - $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
57 + $cache_key = MainWP_Cache_Helper::get_cache_key( 'updates_count', $cache_group );
56 58
57 - $total_wp_upgrades = 0;
58 - $total_plugin_upgrades = 0;
59 - $total_translation_upgrades = 0;
60 - $total_theme_upgrades = 0;
59 + $cache_values = MainWP_Cache_Helper::instance()->get_cache(
60 + $cache_key,
61 + $cache_group
62 + );
61 63
62 - MainWP_DB::data_seek( $websites, 0 );
64 + if ( is_array( $cache_values ) ) {
65 + return $cache_values;
66 + }
63 67
64 - while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
65 - $wp_upgrades = MainWP_DB::instance()->get_website_option( $website, 'wp_upgrades' );
66 - $wp_upgrades = ! empty( $wp_upgrades ) ? json_decode( $wp_upgrades, true ) : array();
68 + $is_staging = 'no';
67 69
68 - if ( $website->is_ignoreCoreUpdates ) {
69 - $wp_upgrades = array();
70 - }
70 + $db_updater_count = false;
71 + $total_plugin_db_upgrades = 0;
72 + $supported_db_updater_plugins = array();
71 73
72 - if ( is_array( $wp_upgrades ) && count( $wp_upgrades ) > 0 ) {
73 - ++$total_wp_upgrades;
74 - }
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' );
75 76
76 - $translation_upgrades = json_decode( $website->translation_upgrades, true );
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 - $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
79 - if ( $website->is_ignorePluginUpdates ) {
80 - $plugin_upgrades = array();
81 - }
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' ) );
82 84
83 - $theme_upgrades = json_decode( $website->theme_upgrades, true );
84 - if ( $website->is_ignoreThemeUpdates ) {
85 - $theme_upgrades = array();
86 - }
85 + $userExtension = MainWP_DB_Common::instance()->get_user_extension();
87 86
88 - $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
89 - $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
87 + $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
88 + if ( ! is_array( $decodedIgnoredCores ) ) {
89 + $decodedIgnoredCores = array();
90 + }
90 91
91 - if ( is_array( $decodedPremiumUpgrades ) ) {
92 - foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
93 - $premiumUpgrade['premium'] = true;
92 + $websites = MainWP_DB::instance()->query( $sql );
94 93
95 - if ( 'plugin' === $premiumUpgrade['type'] ) {
96 - if ( ! is_array( $plugin_upgrades ) ) {
97 - $plugin_upgrades = array();
98 - }
99 - if ( ! $website->is_ignorePluginUpdates ) {
94 + $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
100 95
101 - $premiumUpgrade = array_filter( $premiumUpgrade );
102 - if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
103 - $plugin_upgrades[ $crrSlug ] = array();
104 - }
96 + $total_wp_upgrades = 0;
97 + $total_plugin_upgrades = 0;
98 + $total_translation_upgrades = 0;
99 + $total_theme_upgrades = 0;
105 100
106 - $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
107 - }
108 - } elseif ( 'theme' === $premiumUpgrade['type'] ) {
109 - if ( ! is_array( $theme_upgrades ) ) {
110 - $theme_upgrades = array();
111 - }
112 - if ( ! $website->is_ignoreThemeUpdates ) {
113 - $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
114 - }
115 - }
116 - }
117 - }
101 + MainWP_DB::data_seek( $websites, 0 );
118 102
119 - if ( is_array( $translation_upgrades ) ) {
120 - $total_translation_upgrades += count( $translation_upgrades );
121 - }
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();
122 106
123 - if ( is_array( $plugin_upgrades ) ) {
124 - $ignored_plugins = json_decode( $website->ignored_plugins, true );
125 - if ( is_array( $ignored_plugins ) ) {
126 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
127 - }
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 + }
128 110
129 - $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
130 - if ( is_array( $ignored_plugins ) ) {
131 - $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
132 - }
111 + if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
112 + ++$total_wp_upgrades;
113 + }
133 114
134 - $total_plugin_upgrades += count( $plugin_upgrades );
135 - }
115 + $translation_upgrades = json_decode( $website->translation_upgrades, true );
136 116
137 - if ( is_array( $theme_upgrades ) ) {
138 - $ignored_themes = json_decode( $website->ignored_themes, true );
139 - if ( is_array( $ignored_themes ) ) {
140 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
141 - }
117 + if ( ! empty( $website->ignored_trans_updates ) ) {
118 + $translation_upgrades = array();
119 + }
142 120
143 - $ignored_themes = json_decode( $userExtension->ignored_themes, true );
144 - if ( is_array( $ignored_themes ) ) {
145 - $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
146 - }
121 + $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
122 + if ( $website->is_ignorePluginUpdates ) {
123 + $plugin_upgrades = array();
124 + }
147 125
148 - $total_theme_upgrades += count( $theme_upgrades );
149 - }
150 - }
126 + $theme_upgrades = json_decode( $website->theme_upgrades, true );
127 + if ( $website->is_ignoreThemeUpdates ) {
128 + $theme_upgrades = array();
129 + }
151 130
152 - // WP Upgrades part.
153 - $total_upgrades = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades;
131 + $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
132 + $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
154 133
155 - // to fix incorrect total updates.
156 - if ( $mainwp_show_language_updates ) {
157 - $total_upgrades += $total_translation_upgrades;
158 - $data = array(
159 - 'total' => $total_upgrades,
160 - 'wp' => $total_wp_upgrades,
161 - 'plugins' => $total_plugin_upgrades,
162 - 'themes' => $total_theme_upgrades,
163 - 'translations' => $total_translation_upgrades,
164 - );
165 - } else {
166 - $data = array(
167 - 'total' => $total_upgrades,
168 - 'wp' => $total_wp_upgrades,
169 - 'plugins' => $total_plugin_upgrades,
170 - 'themes' => $total_theme_upgrades,
171 - );
172 - }
134 + if ( is_array( $decodedPremiumUpgrades ) ) {
135 + foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
136 + $premiumUpgrade['premium'] = true;
173 137
174 - MainWP_DB::free_result( $websites );
138 + if ( 'plugin' === $premiumUpgrade['type'] ) {
139 + if ( ! is_array( $plugin_upgrades ) ) {
140 + $plugin_upgrades = array();
141 + }
142 + if ( ! $website->is_ignorePluginUpdates ) {
175 143
176 - return $data;
177 - }
144 + $premiumUpgrade = array_filter( $premiumUpgrade );
145 + if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
146 + continue;
147 + }
148 +
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 + }
161 +
162 + if ( is_array( $translation_upgrades ) ) {
163 + $total_translation_upgrades += count( $translation_upgrades );
164 + }
165 +
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 + }
171 +
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 + }
176 +
177 + $total_plugin_upgrades += count( $plugin_upgrades );
178 + }
179 +
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 + }
185 +
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 + }
190 +
191 + $total_theme_upgrades += count( $theme_upgrades );
192 + }
193 +
194 + if ( $db_updater_count ) {
195 +
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 + }
178 295 }
179 296
180 297 // End of class.