PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.2.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.2.2
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 / class / class-mainwp-common-handler.php

class-mainwp-common-handler.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.2.2, at class/class-mainwp-common-handler.php

235 lines 9.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Common Handler
4 *
5 * This class handles the common functions.
6 *
7 * @package MainWP/Dashboard
8 */
9
10 namespace MainWP\Dashboard;
11
12 /**
13 * Class MainWP_Common_Handler
14 *
15 * @package MainWP\Dashboard
16 */
17 class MainWP_Common_Handler { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
18
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;
25
26 /**
27 * Method instance()
28 *
29 * Create public static instance.
30 *
31 * @static
32 * @return static::$instance
33 */
34 public static function instance() {
35 if ( null === static::$instance ) {
36 static::$instance = new self();
37 }
38 return static::$instance;
39 }
40
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 -- NOSONAR - complex function.
49 $is_staging = 'no';
50
51 $db_updater_count = false;
52 $total_plugin_db_upgrades = 0;
53 $supported_db_updater_plugins = array();
54
55 $get_fields = array( 'premium_upgrades', 'favi_icon', 'ignored_wp_upgrades' );
56 $custom_fields = apply_filters( 'mainwp_available_updates_count_custom_fields_data', array(), 'updates_count' );
57
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 }
63
64 $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, $get_fields, $is_staging );
65
66 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
67
68 $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
69 if ( ! is_array( $decodedIgnoredCores ) ) {
70 $decodedIgnoredCores = array();
71 }
72
73 $websites = MainWP_DB::instance()->query( $sql );
74
75 $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
76
77 $total_wp_upgrades = 0;
78 $total_plugin_upgrades = 0;
79 $total_translation_upgrades = 0;
80 $total_theme_upgrades = 0;
81
82 MainWP_DB::data_seek( $websites, 0 );
83
84 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
85 $wp_upgrades = ! empty( $website->wp_upgrades ) ? json_decode( $website->wp_upgrades, true ) : array();
86 $ignored_core_upgrades = ! empty( $website->ignored_wp_upgrades ) ? json_decode( $website->ignored_wp_upgrades, true ) : array();
87
88 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' ) ) {
89 $wp_upgrades = array();
90 }
91
92 if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
93 ++$total_wp_upgrades;
94 }
95
96 $translation_upgrades = json_decode( $website->translation_upgrades, true );
97
98 $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
99 if ( $website->is_ignorePluginUpdates ) {
100 $plugin_upgrades = array();
101 }
102
103 $theme_upgrades = json_decode( $website->theme_upgrades, true );
104 if ( $website->is_ignoreThemeUpdates ) {
105 $theme_upgrades = array();
106 }
107
108 $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
109 $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
110
111 if ( is_array( $decodedPremiumUpgrades ) ) {
112 foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
113 $premiumUpgrade['premium'] = true;
114
115 if ( 'plugin' === $premiumUpgrade['type'] ) {
116 if ( ! is_array( $plugin_upgrades ) ) {
117 $plugin_upgrades = array();
118 }
119 if ( ! $website->is_ignorePluginUpdates ) {
120
121 $premiumUpgrade = array_filter( $premiumUpgrade );
122 if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
123 $plugin_upgrades[ $crrSlug ] = array();
124 }
125
126 $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
127 }
128 } elseif ( 'theme' === $premiumUpgrade['type'] ) {
129 if ( ! is_array( $theme_upgrades ) ) {
130 $theme_upgrades = array();
131 }
132 if ( ! $website->is_ignoreThemeUpdates ) {
133 $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
134 }
135 }
136 }
137 }
138
139 if ( is_array( $translation_upgrades ) ) {
140 $total_translation_upgrades += count( $translation_upgrades );
141 }
142
143 if ( is_array( $plugin_upgrades ) ) {
144 $ignored_plugins = json_decode( $website->ignored_plugins, true );
145 if ( is_array( $ignored_plugins ) ) {
146 $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
147 }
148
149 $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
150 if ( is_array( $ignored_plugins ) ) {
151 $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
152 }
153
154 $total_plugin_upgrades += count( $plugin_upgrades );
155 }
156
157 if ( is_array( $theme_upgrades ) ) {
158 $ignored_themes = json_decode( $website->ignored_themes, true );
159 if ( is_array( $ignored_themes ) ) {
160 $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
161 }
162
163 $ignored_themes = json_decode( $userExtension->ignored_themes, true );
164 if ( is_array( $ignored_themes ) ) {
165 $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
166 }
167
168 $total_theme_upgrades += count( $theme_upgrades );
169 }
170
171 if ( $db_updater_count ) {
172
173 $plugin_db_upgrades = ! empty( $website->plugin_db_upgrades ) ? json_decode( $website->plugin_db_upgrades, true ) : array();
174 if ( $website->is_ignorePluginUpdates ) {
175 $plugin_db_upgrades = array();
176 }
177
178 if ( is_array( $plugin_db_upgrades ) && ! $website->is_ignorePluginUpdates ) {
179 $_ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
180 if ( is_array( $_ignored_plugins ) ) {
181 $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
182 }
183
184 $_ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
185 if ( is_array( $_ignored_plugins ) ) {
186 $plugin_db_upgrades = array_diff_key( $plugin_db_upgrades, $_ignored_plugins );
187 }
188
189 // supported the WC plugin.
190 if ( is_array( $plugin_db_upgrades ) ) {
191 foreach ( $supported_db_updater_plugins as $supp_slug ) {
192 if ( isset( $plugin_db_upgrades[ $supp_slug ] ) ) {
193 ++$total_plugin_db_upgrades;
194 }
195 }
196 }
197 }
198 }
199 }
200
201 // WP Upgrades part.
202 $total_upgrades = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades;
203
204 // to fix incorrect total updates.
205 if ( $mainwp_show_language_updates ) {
206 $total_upgrades += $total_translation_upgrades;
207 $data = array(
208 'total' => $total_upgrades,
209 'wp' => $total_wp_upgrades,
210 'plugins' => $total_plugin_upgrades,
211 'themes' => $total_theme_upgrades,
212 'translations' => $total_translation_upgrades,
213 );
214 } else {
215 $data = array(
216 'total' => $total_upgrades,
217 'wp' => $total_wp_upgrades,
218 'plugins' => $total_plugin_upgrades,
219 'themes' => $total_theme_upgrades,
220 'translations' => 0,
221 );
222 }
223
224 if ( $db_updater_count ) {
225 $data['db_updater_count'] = $total_plugin_db_upgrades;
226 $data['total'] += $total_plugin_db_upgrades;
227 }
228 MainWP_DB::free_result( $websites );
229
230 return $data;
231 }
232 }
233
234 // End of class.
235