get_website_by_id( $id ); if ( MainWP_System_Utility::is_suspended_site( $website ) ) { throw new MainWP_Exception( 'ERROR', ' ' . esc_html__( 'Suspended site.', 'mainwp' ) ); //phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped } $information = self::upgrade_website( $website ); if ( is_array( $information ) ) { if ( isset( $information['upgrade'] ) && ( 'SUCCESS' === $information['upgrade'] ) ) { MainWP_DB::instance()->update_website_option( $website, 'wp_upgrades', wp_json_encode( array() ) ); do_action( 'mainwp_after_upgrade_wp_success', $website, $information ); return ''; } elseif ( isset( $information['upgrade'] ) ) { $errorMsg = ''; if ( 'LOCALIZATION' === $information['upgrade'] ) { $errorMsg = ' ' . esc_html__( 'No update found for the set locale.', 'mainwp' ); } elseif ( 'NORESPONSE' === $information['upgrade'] ) { $errorMsg = ' ' . esc_html__( 'No response from the child site server.', 'mainwp' ); } throw new MainWP_Exception( 'WPERROR', $errorMsg ); //phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped } elseif ( isset( $information['error'] ) ) { throw new MainWP_Exception( 'WPERROR', esc_html( $information['error'] ) ); } else { throw new MainWP_Exception( 'ERROR', ' ' . esc_html__( 'Invalid response from child site.', 'mainwp' ) ); } } } throw new MainWP_Exception( 'ERROR', ' ' . esc_html__( 'Site ID not found. Please reload the page and try again.', 'mainwp' ) ); } /** * Method upgrade_website() * * Update WP for site. * * @param object $website Child site object. * * @return mixed|false update result or false. * @throws MainWP_Exception Error message. * * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() */ public static function upgrade_website( $website ) { if ( MainWP_System_Utility::can_edit_website( $website ) ) { $wpcore_update_disabled_by = MainWP_System_Utility::disabled_wpcore_update_by( $website ); if ( ! empty( $wpcore_update_disabled_by ) ) { throw new MainWP_Exception( 'ERROR', $wpcore_update_disabled_by ); //phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped } /** * Action: mainwp_before_wp_update * * Fires before WP update. * * @since 4.1 */ do_action( 'mainwp_before_wp_update', $website ); $information = MainWP_Connect::fetch_url_authed( $website, 'upgrade' ); // logging feature. $error = ''; $success = false; if ( is_array( $information ) ) { if ( isset( $information['upgrade'] ) && ( 'SUCCESS' === $information['upgrade'] ) ) { $success = true; } elseif ( isset( $information['upgrade'] ) ) { $errorMsg = ''; if ( 'LOCALIZATION' === $information['upgrade'] ) { $error = esc_html__( 'No update found for the set locale.', 'mainwp' ); } elseif ( 'NORESPONSE' === $information['upgrade'] ) { $error = esc_html__( 'No response from the child site server.', 'mainwp' ); } } elseif ( isset( $information['error'] ) ) { $error = esc_html( $information['error'] ); } else { $error = esc_html__( 'Invalid response from child site.', 'mainwp' ); } } $output_array = array( 'old_version' => isset( $information['old_version'] ) ? $information['old_version'] : '', 'version' => isset( $information['version'] ) ? $information['version'] : '', 'success' => $success ? 1 : 0, 'error' => $error, ); mainwp_get_actions_handler_instance()->do_action_mainwp_install_actions( $website, 'updated', $output_array, 'core' ); /** * Action: mainwp_after_wp_update * * Fires after WP update. * * @since 4.1 */ do_action( 'mainwp_after_wp_update', $information, $website ); return $information; } return false; } /** * Add a plugin or theme to the ignor list. * * @param mixed $type plugin|theme. * @param mixed $slug Plugin or Theme Slug. * @param mixed $name Plugin or Theme Name. * @param mixed $id Child Site ID. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::update_website_values() * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit() */ public static function ignore_plugin_theme( $type, $slug, $name, $id ) { if ( isset( $id ) && MainWP_Utility::ctype_digit( $id ) ) { $website = MainWP_DB::instance()->get_website_by_id( $id ); if ( MainWP_System_Utility::can_edit_website( $website ) ) { $slug = urldecode( $slug ); if ( 'plugin' === $type ) { $decodedIgnoredPlugins = json_decode( $website->ignored_plugins, true ); if ( ! isset( $decodedIgnoredPlugins[ $slug ] ) ) { /** * Action: mainwp_before_plugin_ignore * * Fires before plugin ignore. * * @since 4.1 */ do_action( 'mainwp_before_plugin_ignore', $decodedIgnoredPlugins, $website ); $decodedIgnoredPlugins[ $slug ] = urldecode( $name ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_plugins' => wp_json_encode( $decodedIgnoredPlugins ) ) ); /** * Action: mainwp_after_plugin_ignore * * Fires after plugin ignore. * * @since 4.1 */ do_action( 'mainwp_after_plugin_ignore', $decodedIgnoredPlugins, $website ); } } elseif ( 'theme' === $type ) { $decodedIgnoredThemes = json_decode( $website->ignored_themes, true ); if ( ! isset( $decodedIgnoredThemes[ $slug ] ) ) { /** * Action: mainwp_before_theme_ignore * * Fires before theme ignore. * * @since 4.1 */ do_action( 'mainwp_before_theme_ignore', $decodedIgnoredThemes, $website ); $decodedIgnoredThemes[ $slug ] = urldecode( $name ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_themes' => wp_json_encode( $decodedIgnoredThemes ) ) ); /** * Action: mainwp_after_theme_ignore * * Fires after theme ignore. * * @since 4.1 */ do_action( 'mainwp_after_theme_ignore', $website, $decodedIgnoredThemes ); } } } } return 'success'; } /** * Remove a plugin or theme from the ignore list. * * @param mixed $type plugin|theme. * @param mixed $slug Plugin or Theme slug. * @param mixed $id Plugin or Theme name. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB::query() * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::update_website_values() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() * @uses \MainWP\Dashboard\MainWP_DB::free_result() * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit() */ public static function unignore_plugin_theme( $type, $slug, $id ) { if ( ! empty( $id ) ) { /** * Action: mainwp_before_plugin_theme_unignore * * Fires after plugin/theme unignore. * * @since 4.1 */ do_action( 'mainwp_before_plugin_theme_unignore', $type, $slug, $id ); if ( '_ALL_' === $id ) { $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user() ); while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) { if ( 'plugin' === $type ) { /** * Action: mainwp_before_plugin_unignore * * Fires before plugin unignore. * * @since 4.1 */ do_action( 'mainwp_before_plugin_unignore', array(), $website ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_plugins' => wp_json_encode( array() ) ) ); /** * Action: mainwp_after_plugin_unignore * * Fires after plugin unignore. * * @since 4.1 */ do_action( 'mainwp_after_plugin_unignore', array(), $website ); } elseif ( 'theme' === $type ) { /** * Action: mainwp_before_theme_unignore * * Fires before theme unignore. * * @since 4.1 */ do_action( 'mainwp_before_theme_unignore', array(), $website ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_themes' => wp_json_encode( array() ) ) ); /** * Action: mainwp_after_theme_unignore * * Fires after theme unignore. * * @since 4.1 */ do_action( 'mainwp_after_theme_unignore', array(), $website ); } } MainWP_DB::free_result( $websites ); } elseif ( MainWP_Utility::ctype_digit( $id ) ) { $website = MainWP_DB::instance()->get_website_by_id( $id ); if ( MainWP_System_Utility::can_edit_website( $website ) ) { $slug = urldecode( $slug ); if ( 'plugin' === $type ) { $decodedIgnoredPlugins = json_decode( $website->ignored_plugins, true ); if ( isset( $decodedIgnoredPlugins[ $slug ] ) ) { /** * Action: mainwp_before_plugin_unignore * * Fires before plugin unignore. * * @since 4.1 */ do_action( 'mainwp_before_plugin_unignore', $decodedIgnoredPlugins, $website ); unset( $decodedIgnoredPlugins[ $slug ] ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_plugins' => wp_json_encode( $decodedIgnoredPlugins ) ) ); /** * Action: mainwp_after_plugin_unignore * * Fires after plugin unignore. * * @since 4.1 */ do_action( 'mainwp_after_plugin_unignore', $decodedIgnoredPlugins, $website ); } } elseif ( 'theme' === $type ) { $decodedIgnoredThemes = json_decode( $website->ignored_themes, true ); if ( isset( $decodedIgnoredThemes[ $slug ] ) ) { /** * Action: mainwp_before_theme_unignore * * Fires before theme unignore. * * @since 4.1 */ do_action( 'mainwp_before_theme_unignore', $decodedIgnoredThemes, $website ); unset( $decodedIgnoredThemes[ $slug ] ); MainWP_DB::instance()->update_website_values( $website->id, array( 'ignored_themes' => wp_json_encode( $decodedIgnoredThemes ) ) ); /** * Action: mainwp_after_theme_unignore * * Fires after theme unignore. * * @since 4.1 */ do_action( 'mainwp_after_theme_unignore', $decodedIgnoredThemes, $website ); } } } } } return 'success'; } /** * Method ignore_plugins_themes() * * Ignore Plugins or Themes. * * @param string $type Plugin or theme. * @param string $slug Plugin or tempheme slug. * @param string $name Plugin or theme name. * * @return string 'success'. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::update_user_extension() */ public static function ignore_plugins_themes( $type, $slug, $name ) { $slug = urldecode( $slug ); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); if ( 'plugin' === $type ) { $decodedIgnoredPlugins = json_decode( $userExtension->ignored_plugins, true ); if ( ! is_array( $decodedIgnoredPlugins ) ) { $decodedIgnoredPlugins = array(); } $decodedIgnoredPlugins[ $slug ] = urldecode( $name ); MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'ignored_plugins' => wp_json_encode( $decodedIgnoredPlugins ), ) ); } elseif ( 'theme' === $type ) { $decodedIgnoredThemes = json_decode( $userExtension->ignored_themes, true ); if ( ! is_array( $decodedIgnoredThemes ) ) { $decodedIgnoredThemes = array(); } $decodedIgnoredThemes[ $slug ] = urldecode( $name ); MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'ignored_themes' => wp_json_encode( $decodedIgnoredThemes ), ) ); } return 'success'; } /** * Unignore Plugins or Themes. * * @param mixed $type plugin|themes. * @param mixed $slug Plugin or Themes slug. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::update_user_extension() */ public static function unignore_plugins_themes( $type, $slug ) { $slug = urldecode( $slug ); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); if ( 'plugin' === $type ) { if ( '_ALL_' === $slug ) { $decodedIgnoredPlugins = array(); } else { $decodedIgnoredPlugins = json_decode( $userExtension->ignored_plugins, true ); if ( ! is_array( $decodedIgnoredPlugins ) ) { $decodedIgnoredPlugins = array(); } if ( isset( $decodedIgnoredPlugins[ $slug ] ) ) { unset( $decodedIgnoredPlugins[ $slug ] ); } } MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'ignored_plugins' => wp_json_encode( $decodedIgnoredPlugins ), ) ); } elseif ( 'theme' === $type ) { if ( '_ALL_' === $slug ) { $decodedIgnoredThemes = array(); } else { $decodedIgnoredThemes = json_decode( $userExtension->ignored_plugins, true ); if ( ! is_array( $decodedIgnoredThemes ) ) { $decodedIgnoredThemes = array(); } if ( isset( $decodedIgnoredThemes[ $slug ] ) ) { unset( $decodedIgnoredThemes[ $slug ] ); } } MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'ignored_themes' => wp_json_encode( $decodedIgnoredThemes ), ) ); } return 'success'; } /** * Unignor abandoned plugins or themes. * * @param mixed $type plugin|themes. * @param mixed $slug Plugin or Themes slug. * @param mixed $id Child Site ID. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB::query() * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_DB::update_website_option() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() * @uses \MainWP\Dashboard\MainWP_DB::free_result() * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit() */ public static function unignore_abandoned_plugin_theme( $type, $slug, $id ) { if ( isset( $id ) ) { if ( '_ALL_' === $id ) { $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user() ); while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) { if ( 'plugin' === $type ) { MainWP_DB::instance()->update_website_option( $website, 'plugins_outdate_dismissed', wp_json_encode( array() ) ); } elseif ( 'theme' === $type ) { MainWP_DB::instance()->update_website_option( $website, 'themes_outdate_dismissed', wp_json_encode( array() ) ); } } MainWP_DB::free_result( $websites ); } elseif ( MainWP_Utility::ctype_digit( $id ) ) { $website = MainWP_DB::instance()->get_website_by_id( $id ); if ( MainWP_System_Utility::can_edit_website( $website ) ) { $slug = urldecode( $slug ); if ( 'plugin' === $type ) { $decodedIgnoredPlugins = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $decodedIgnoredPlugins = ! empty( $decodedIgnoredPlugins ) ? json_decode( $decodedIgnoredPlugins, true ) : array(); if ( isset( $decodedIgnoredPlugins[ $slug ] ) ) { unset( $decodedIgnoredPlugins[ $slug ] ); MainWP_DB::instance()->update_website_option( $website, 'plugins_outdate_dismissed', wp_json_encode( $decodedIgnoredPlugins ) ); } } elseif ( 'theme' === $type ) { $decodedIgnoredThemes = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $decodedIgnoredThemes = ! empty( $decodedIgnoredThemes ) ? json_decode( $decodedIgnoredThemes, true ) : array(); if ( isset( $decodedIgnoredThemes[ $slug ] ) ) { unset( $decodedIgnoredThemes[ $slug ] ); MainWP_DB::instance()->update_website_option( $website, 'themes_outdate_dismissed', wp_json_encode( $decodedIgnoredThemes ) ); } } } } } return 'success'; } /** * Unignore abandoned plugins or themes. * * @param mixed $type plugin|theme. * @param mixed $slug Plugin or Themes slug. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::update_user_extension() */ public static function unignore_abandoned_plugins_themes( $type, $slug ) { $slug = urldecode( $slug ); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); if ( 'plugin' === $type ) { if ( '_ALL_' === $slug ) { $decodedIgnoredPlugins = array(); } else { $decodedIgnoredPlugins = json_decode( $userExtension->dismissed_plugins, true ); if ( ! is_array( $decodedIgnoredPlugins ) ) { $decodedIgnoredPlugins = array(); } if ( isset( $decodedIgnoredPlugins[ $slug ] ) ) { unset( $decodedIgnoredPlugins[ $slug ] ); } } MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'dismissed_plugins' => wp_json_encode( $decodedIgnoredPlugins ), ) ); } elseif ( 'theme' === $type ) { if ( '_ALL_' === $slug ) { $decodedIgnoredThemes = array(); } else { $decodedIgnoredThemes = json_decode( $userExtension->dismissed_themes, true ); if ( ! is_array( $decodedIgnoredThemes ) ) { $decodedIgnoredThemes = array(); } if ( isset( $decodedIgnoredThemes[ $slug ] ) ) { unset( $decodedIgnoredThemes[ $slug ] ); } } MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'dismissed_themes' => wp_json_encode( $decodedIgnoredThemes ), ) ); } return 'success'; } /** * Dismis Plugin or Theme. * * @param mixed $type plugin|theme. * @param mixed $slug Plugin or Theme slug. * @param mixed $name Plugin or Theme name. * @param mixed $id Child Site ID. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit() */ public static function dismiss_plugin_theme( $type, $slug, $name, $id ) { if ( isset( $id ) && MainWP_Utility::ctype_digit( $id ) ) { $website = MainWP_DB::instance()->get_website_by_id( $id ); if ( MainWP_System_Utility::can_edit_website( $website ) ) { $slug = urldecode( $slug ); if ( 'plugin' === $type ) { $decodedDismissedPlugins = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $decodedDismissedPlugins = ! empty( $decodedDismissedPlugins ) ? json_decode( $decodedDismissedPlugins, true ) : array(); if ( ! isset( $decodedDismissedPlugins[ $slug ] ) ) { $decodedDismissedPlugins[ $slug ] = urldecode( $name ); MainWP_DB::instance()->update_website_option( $website, 'plugins_outdate_dismissed', wp_json_encode( $decodedDismissedPlugins ) ); } } elseif ( 'theme' === $type ) { $decodedDismissedThemes = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $decodedDismissedThemes = ! empty( $decodedDismissedThemes ) ? json_decode( $decodedDismissedThemes, true ) : array(); if ( ! isset( $decodedDismissedThemes[ $slug ] ) ) { $decodedDismissedThemes[ $slug ] = urldecode( $name ); MainWP_DB::instance()->update_website_option( $website, 'themes_outdate_dismissed', wp_json_encode( $decodedDismissedThemes ) ); } } } } return 'success'; } /** * Dismiss plugins or themes. * * @param mixed $type plugin|theme. * @param mixed $slug Plugin or Theme slug. * @param mixed $name Plugin or Theme name. * * @return string success. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::update_user_extension() */ public static function dismiss_plugins_themes( $type, $slug, $name ) { $slug = urldecode( $slug ); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); if ( 'plugin' === $type ) { $decodedDismissedPlugins = json_decode( $userExtension->dismissed_plugins, true ); if ( ! is_array( $decodedDismissedPlugins ) ) { $decodedDismissedPlugins = array(); } $decodedDismissedPlugins[ $slug ] = urldecode( $name ); MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'dismissed_plugins' => wp_json_encode( $decodedDismissedPlugins ), ) ); } elseif ( 'theme' === $type ) { $decodedDismissedThemes = json_decode( $userExtension->dismissed_themes, true ); if ( ! is_array( $decodedDismissedThemes ) ) { $decodedDismissedThemes = array(); } $decodedDismissedThemes[ $slug ] = urldecode( $name ); MainWP_DB_Common::instance()->update_user_extension( array( 'userid' => null, 'dismissed_themes' => wp_json_encode( $decodedDismissedThemes ), ) ); } return 'success'; } /** * Method upgrade_plugin_theme_translation() * * Upgrade plugin or theme translations. * * @param int $id Child site ID. * @param string $type Plugin or theme. * @param array $list_items List of theme or plugin names seperated by comma. * * @return array * @throws MainWP_Exception Error messages. * * @uses \MainWP\Dashboard\MainWP_Connect::fetch_url_authed() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_Exception * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit() */ public static function upgrade_plugin_theme_translation( $id, $type, $list_items ) { // phpcs:ignore -- complex method. if ( isset( $id ) && MainWP_Utility::ctype_digit( $id ) ) { $website = MainWP_DB::instance()->get_website_by_id( $id, false, array( 'premium_upgrades' ) ); // to fix loading premium_upgrades. if ( MainWP_System_Utility::is_suspended_site( $website ) ) { throw new MainWP_Exception( 'ERROR', esc_html__( 'Suspended site.', 'mainwp' ), 'SUSPENDED_SITE' ); } $result = self::update_plugin_theme_translation( $website, $type, $list_items ); if ( is_array( $result ) ) { $return_results = array(); // logging feature. $_type = ''; if ( 'plugin' === $type || 'theme' === $type ) { $_type = $type; } elseif ( 'translation' === $type ) { $_type = 'trans'; } if ( ! empty( $_type ) && isset( $result['other_data'] ) ) { // ok. $output_array = $result['other_data']; // updated_data: plugins,themes,trans. mainwp_get_actions_handler_instance()->do_action_mainwp_install_actions( $website, 'updated', $output_array, $_type ); } $undefined = true; if ( isset( $result['upgrades_error'] ) ) { foreach ( $result['upgrades_error'] as $k => $v ) { $return_results['result_error'][ rawurlencode( $k ) ] = esc_html( $v ); } } if ( isset( $result['upgrades'] ) ) { if ( isset( $result['upgrades'] ) ) { foreach ( $result['upgrades'] as $k => $v ) { $return_results['result'][ rawurlencode( $k ) ] = $v; } } if ( 'plugin' === $type ) { if ( ! empty( $website->plugin_upgrades ) ) { $plugin_upgrades = json_decode( $website->plugin_upgrades, true ); if ( is_array( $plugin_upgrades ) ) { $updated = false; if ( isset( $return_results['result'] ) && is_array( $return_results['result'] ) && ! empty( $return_results['result'] ) ) { foreach ( $return_results['result'] as $k => $v ) { $k = rawurldecode( $k ); if ( isset( $plugin_upgrades[ $k ] ) ) { unset( $plugin_upgrades[ $k ] ); // updated. $updated = true; } } } if ( $updated ) { MainWP_DB::instance()->update_website_values( $id, array( 'plugin_upgrades' => wp_json_encode( $plugin_upgrades ) ) ); } } } if ( isset( $return_results['result'] ) && is_array( $return_results['result'] ) && ! empty( $return_results['result'] ) ) { $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' ); $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array(); if ( is_array( $decodedPremiumUpgrades ) && ! empty( $decodedPremiumUpgrades ) ) { $updated = false; foreach ( $return_results['result'] as $k => $v ) { $k = rawurldecode( $k ); if ( isset( $decodedPremiumUpgrades[ $k ] ) ) { unset( $decodedPremiumUpgrades[ $k ] ); // updated. $updated = true; } } if ( $updated ) { MainWP_DB::instance()->update_website_option( $website, 'premium_upgrades', wp_json_encode( $decodedPremiumUpgrades ) ); } } } } return $return_results; } elseif ( isset( $result['error'] ) ) { throw new MainWP_Exception( 'WPERROR', esc_html( $result['error'] ) ); } elseif ( isset( $result['notices'] ) ) { $noti = $result['notices']; if ( ! empty( $noti ) && is_string( $noti ) ) { throw new MainWP_Exception( $noti, '', 'MAINWP_NOTICE' ); //phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped } } if ( $undefined ) { throw new MainWP_Exception( 'ERROR', esc_html__( 'Invalid response retured from the child site. Please try again.', 'mainwp' ) ); } } } throw new MainWP_Exception( 'ERROR', esc_html__( 'Site ID not found. Please reload the page and try again.', 'mainwp' ) ); } /** * Method update_plugin_theme_translation() * * Upgrade plugin or theme translations. * * @param int $website Child site object. * @param string $type Plugin or theme. * @param array $list_items List of theme or plugin names seperated by comma. * * @return array|false update result or false. * @throws \Exception Error message. * * @uses \MainWP\Dashboard\MainWP_System_Utility * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website() */ public static function update_plugin_theme_translation( $website, $type, $list_items ) { if ( MainWP_System_Utility::can_edit_website( $website ) ) { /** * Action: mainwp_before_plugin_theme_translation_update * * Fires before plugin/theme/translation update actions. * * @since 4.1 */ do_action( 'mainwp_before_plugin_theme_translation_update', $type, $list_items, $website ); $information = MainWP_Connect::fetch_url_authed( $website, ( 'translation' === $type ? 'upgradetranslation' : 'upgradeplugintheme' ), array( 'type' => $type, 'list' => urldecode( $list_items ), ), true ); /** * Action: mainwp_after_plugin_theme_translation_update * * Fires before plugin/theme/translation update actions. * * @since 4.1 */ do_action( 'mainwp_after_plugin_theme_translation_update', $information, $type, $list_items, $website ); return $information; } return false; } /** * Get plugin or theme slugs. * * @param int $id Child Site ID. * @param string $type plugin|theme. * * @return array List of plugins or themes. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB::query() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() */ public static function get_plugin_theme_slugs( $id, $type ) { // phpcs:ignore -- complex method. Current complexity is the only way to achieve desired results, pull request solutions appreciated. $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $sql = MainWP_DB::instance()->get_sql_website_by_id( $id ); $websites = MainWP_DB::instance()->query( $sql ); $website = MainWP_DB::fetch_object( $websites ); $slugs = array(); if ( 'plugin' === $type ) { if ( $website->is_ignorePluginUpdates ) { return ''; } $plugin_upgrades = json_decode( $website->plugin_upgrades, true ); $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' ); $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array(); if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'plugin' === $premiumUpgrade['type'] ) { if ( ! is_array( $plugin_upgrades ) ) { $plugin_upgrades = array(); } $premiumUpgrade = array_filter( $premiumUpgrade ); $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade ); } } } $ignored_plugins = json_decode( $website->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins ); } $ignored_plugins = json_decode( $userExtension->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins ); } if ( is_array( $plugin_upgrades ) ) { foreach ( $plugin_upgrades as $slug => $plugin_upgrade ) { $slugs[] = rawurlencode( $slug ); } } } elseif ( 'theme' === $type ) { if ( $website->is_ignoreThemeUpdates ) { return ''; } $theme_upgrades = json_decode( $website->theme_upgrades, true ); $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' ); $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array(); if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'theme' === $premiumUpgrade['type'] ) { if ( ! is_array( $theme_upgrades ) ) { $theme_upgrades = array(); } $theme_upgrades[ $crrSlug ] = $premiumUpgrade; } } } $ignored_themes = json_decode( $website->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes ); } $ignored_themes = json_decode( $userExtension->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes ); } if ( is_array( $theme_upgrades ) ) { foreach ( $theme_upgrades as $slug => $theme_upgrade ) { $slugs[] = $slug; } } } elseif ( 'translation' === $type ) { $translation_upgrades = json_decode( $website->translation_upgrades, true ); if ( is_array( $translation_upgrades ) ) { foreach ( $translation_upgrades as $translation_upgrade ) { $slugs[] = $translation_upgrade['slug']; } } } return implode( ',', $slugs ); } }