Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 58 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
| PluginUpgrader | |
0.00% |
0 / 58 |
|
0.00% |
0 / 2 |
156 | |
0.00% |
0 / 1 |
| upgrade_extended_yith_plugins | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
6 | |||
| upgrade_extended_yith_plugin | |
0.00% |
0 / 45 |
|
0.00% |
0 / 1 |
110 | |||
| 1 | <?php |
| 2 | namespace NewfoldLabs\WP\Module\Installer\Services; |
| 3 | |
| 4 | use NewfoldLabs\WP\Module\Installer\Data\Plugins; |
| 5 | use NewfoldLabs\WP\Module\PLS\Utilities\PLSUtility; |
| 6 | |
| 7 | /** |
| 8 | * Class PluginUpgrader |
| 9 | * |
| 10 | * This class is responsible for upgrading plugins. |
| 11 | */ |
| 12 | class PluginUpgrader { |
| 13 | |
| 14 | /** |
| 15 | * Tries to upgrade the extended YITH plugins to their corresponding premium versions. |
| 16 | * |
| 17 | * @return array |
| 18 | */ |
| 19 | public static function upgrade_extended_yith_plugins() { |
| 20 | // Define the list of extended YITH plugins to upgrade. |
| 21 | $yith_plugins_to_upgrade = array( |
| 22 | 'nfd_slug_yith_woocommerce_ajax_product_filter', |
| 23 | 'nfd_slug_yith_woocommerce_wishlist', |
| 24 | 'nfd_slug_yith_woocommerce_booking', |
| 25 | 'nfd_slug_yith_woocommerce_gift_cards', |
| 26 | 'nfd_slug_yith_woocommerce_customize_myaccount_page', |
| 27 | 'yith-woocommerce-ajax-search', |
| 28 | ); |
| 29 | |
| 30 | // Array to store the status of each plugin's upgrade process |
| 31 | $yith_plugins_upgrade_status = array(); |
| 32 | |
| 33 | foreach ( $yith_plugins_to_upgrade as $index => $extended_slug ) { |
| 34 | $upgrade_status = self::upgrade_extended_yith_plugin( $extended_slug ); |
| 35 | $yith_plugins_upgrade_status[ $extended_slug ] = $upgrade_status; |
| 36 | } |
| 37 | |
| 38 | return $yith_plugins_upgrade_status; |
| 39 | } |
| 40 | |
| 41 | /** |
| 42 | * Upgrades a single extended YITH plugin to its corresponding premium version. |
| 43 | * |
| 44 | * @param string $extended_slug The slug of the extended plugin. |
| 45 | * |
| 46 | * @return array Contains the status of the upgrade process with 'upgraded' and 'message' keys. |
| 47 | */ |
| 48 | public static function upgrade_extended_yith_plugin( $extended_slug ) { |
| 49 | // Define the list of extended YITH plugins and their corresponding premium versions. |
| 50 | $yith_plugins_to_upgrade = array( |
| 51 | 'nfd_slug_yith_woocommerce_ajax_product_filter' => 'yith-woocommerce-ajax-navigation', |
| 52 | 'nfd_slug_yith_woocommerce_wishlist' => 'yith-woocommerce-wishlist', |
| 53 | 'nfd_slug_yith_woocommerce_booking' => 'yith-woocommerce-booking', |
| 54 | 'nfd_slug_yith_woocommerce_gift_cards' => 'yith-woocommerce-gift-cards', |
| 55 | 'nfd_slug_yith_woocommerce_customize_myaccount_page' => 'yith-woocommerce-customize-myaccount-page', |
| 56 | 'yith-woocommerce-ajax-search' => 'yith-woocommerce-ajax-search', |
| 57 | ); |
| 58 | |
| 59 | // Initialize status array for the plugin upgrade process |
| 60 | $upgrade_status = array( |
| 61 | 'upgraded' => false, |
| 62 | 'message' => '', |
| 63 | ); |
| 64 | |
| 65 | // Get plugin status codes for comparison |
| 66 | $status_codes = Plugins::get_status_codes(); |
| 67 | |
| 68 | // Check if the extended plugin exists in the list |
| 69 | if ( ! isset( $yith_plugins_to_upgrade[ $extended_slug ] ) ) { |
| 70 | $upgrade_status['message'] = __( 'Invalid extended plugin slug provided.', 'wp-module-installer' ); |
| 71 | return $upgrade_status; |
| 72 | } |
| 73 | |
| 74 | // Get the corresponding premium plugin slug |
| 75 | $premium_slug = $yith_plugins_to_upgrade[ $extended_slug ]; |
| 76 | |
| 77 | // Get the status of the extended plugin |
| 78 | $extended_status = PluginInstaller::get_plugin_status( $extended_slug ); |
| 79 | |
| 80 | // Check if the extended plugin's status is unknown or not installed |
| 81 | if ( $status_codes['unknown'] === $extended_status ) { |
| 82 | $upgrade_status['message'] = __( 'Could not determine the status of the extended plugin.', 'wp-module-installer' ); |
| 83 | return $upgrade_status; |
| 84 | } |
| 85 | |
| 86 | if ( $status_codes['not_installed'] === $extended_status ) { |
| 87 | $upgrade_status['message'] = __( 'Extended plugin is not installed.', 'wp-module-installer' ); |
| 88 | return $upgrade_status; |
| 89 | } |
| 90 | |
| 91 | // Check if the premium plugin should be activated after installation |
| 92 | $should_activate = ( $status_codes['active'] === $extended_status ); |
| 93 | |
| 94 | // Deactivate the extended version of the plugin if the premium plugin needs to be activated |
| 95 | if ( $should_activate ) { |
| 96 | $deactivation_response = PluginInstaller::deactivate( $extended_slug ); |
| 97 | if ( is_wp_error( $deactivation_response ) ) { |
| 98 | $upgrade_status['message'] = __( 'Failed to deactivate the extended plugin: ', 'wp-module-installer' ) . $extended_slug; |
| 99 | return $upgrade_status; |
| 100 | } |
| 101 | } |
| 102 | |
| 103 | // Use the install_premium_plugin function to install and activate the premium plugin |
| 104 | $install_status = PluginInstaller::install_premium_plugin( $premium_slug, 'yith', $should_activate ); |
| 105 | if ( is_wp_error( $install_status ) ) { |
| 106 | $upgrade_status['message'] = $install_status->get_error_message(); |
| 107 | |
| 108 | // Reactivate the extended plugin if premium installation failed and it was deactivated |
| 109 | if ( $should_activate ) { |
| 110 | $reactivation_response = PluginInstaller::activate( $extended_slug ); |
| 111 | if ( is_wp_error( $reactivation_response ) ) { |
| 112 | $upgrade_status['message'] .= __( ' Also Failed to reactivate the extended plugin: ', 'wp-module-installer' ) . $extended_slug; |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | return $upgrade_status; |
| 117 | } |
| 118 | |
| 119 | // Mark as successfully upgraded |
| 120 | $upgrade_status['upgraded'] = true; |
| 121 | $upgrade_status['message'] = __( 'Successfully provisioned and installed: ', 'wp-module-installer' ) . $premium_slug; |
| 122 | |
| 123 | // Attempt to uninstall the extended version of the plugin |
| 124 | $uninstall_status = PluginUninstaller::uninstall( $extended_slug ); |
| 125 | if ( is_wp_error( $uninstall_status ) ) { |
| 126 | $upgrade_status['message'] = __( 'Successfully installed the premium plugin, but there was an error uninstalling the extended plugin. Manual cleanup may be required.', 'wp-module-installer' ); |
| 127 | return $upgrade_status; |
| 128 | } |
| 129 | |
| 130 | // Return the status of the upgrade process |
| 131 | return $upgrade_status; |
| 132 | } |
| 133 | } |