'Yatra Downloads', 'yatra-2checkout/yatra-2checkout.php' => 'Yatra 2Checkout', 'yatra-authorizenet/yatra-authorizenet.php' => 'Yatra AuthorizeNet', 'yatra-availability-conditions/yatra-availability-conditions.php' => 'Yatra Availability Conditions', 'yatra-google-calendar/yatra-google-calendar.php' => 'Yatra Google Calendar', 'yatra-partial-payment/yatra-partial-payment.php' => 'Yatra Partial Payment', 'yatra-razorpay/yatra-razorpay.php' => 'Yatra Razorpay', 'yatra-review/yatra-review.php' => 'Yatra Review', 'yatra-services/yatra-services.php' => 'Yatra Services', 'yatra-square/yatra-square.php' => 'Yatra Square', 'yatra-stripe/yatra-stripe.php' => 'Yatra Stripe' ]; /** * Mapping of old plugins to Yatra Pro features */ private $plugin_to_feature_mapping = [ 'yatra-downloads/yatra-downloads.php' => 'downloads', 'yatra-2checkout/yatra-2checkout.php' => 'payment_gateways', 'yatra-authorizenet/yatra-authorizenet.php' => 'payment_gateways', 'yatra-availability-conditions/yatra-availability-conditions.php' => 'availability_conditions', 'yatra-google-calendar/yatra-google-calendar.php' => 'google_calendar', 'yatra-partial-payment/yatra-partial-payment.php' => 'partial_payment', 'yatra-razorpay/yatra-razorpay.php' => 'payment_gateways', 'yatra-review/yatra-review.php' => 'review_ratings', 'yatra-services/yatra-services.php' => 'services', 'yatra-square/yatra-square.php' => 'payment_gateways', 'yatra-stripe/yatra-stripe.php' => 'payment_gateways' ]; /** * Constructor */ public function __construct() { add_action('admin_init', array($this, 'check_compatibility')); add_action('admin_notices', array($this, 'show_compatibility_notice')); add_action('wp_ajax_yatra_enable_feature_and_deactivate', array($this, 'handle_enable_feature_and_deactivate')); add_action('wp_ajax_yatra_go_to_features', array($this, 'handle_go_to_features')); add_action('wp_ajax_yatra_activate_pro', array($this, 'handle_activate_pro')); add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts')); } /** * Check if any old plugins are active * * @return array Array of active old plugins */ public function get_active_old_plugins() { $active_plugins = get_option('active_plugins', array()); $active_old_plugins = array(); foreach ($this->old_plugins as $plugin) { if (in_array($plugin, $active_plugins)) { $active_old_plugins[] = $plugin; } } return $active_old_plugins; } /** * Check if all old plugins are deactivated * * @return bool True if all old plugins are deactivated */ public function are_all_old_plugins_deactivated() { $active_old_plugins = $this->get_active_old_plugins(); return empty($active_old_plugins); } /** * Get plugin display name * * @param string $plugin_file Plugin file path * @return string Plugin display name */ public function get_plugin_display_name($plugin_file) { return isset($this->plugin_names[$plugin_file]) ? $this->plugin_names[$plugin_file] : $plugin_file; } /** * Check compatibility on admin init */ public function check_compatibility() { // Only show notice if there are active old plugins if (!$this->are_all_old_plugins_deactivated()) { add_action('admin_notices', array($this, 'show_compatibility_notice')); } } /** * Show compatibility notice */ public function show_compatibility_notice() { $active_old_plugins = $this->get_active_old_plugins(); if (empty($active_old_plugins)) { return; } $plugin_names = array(); foreach ($active_old_plugins as $plugin) { $plugin_names[] = $this->get_plugin_display_name($plugin); } $plugin_list = implode(', ', $plugin_names); $plugin_count = count($active_old_plugins); $yatra_pro_status = $this->get_yatra_pro_status(); // Different messages based on Yatra Pro status if ($yatra_pro_status['needs_installation']) { $message = sprintf( /* translators: %s: comma-separated list of legacy Yatra add-on plugin names that now ship with Yatra Pro 2.0. */ _n( 'The following plugin has been integrated into Yatra Pro 2.0.0 and onwards: %s. To use these features, you need to install Yatra Pro 2.0.0. Note: Updates for this plugin will only be available in Yatra Pro from now onwards.', 'The following plugins have been integrated into Yatra Pro 2.0.0 and onwards: %s. To use these features, you need to install Yatra Pro 2.0.0. Note: Updates for these plugins will only be available in Yatra Pro from now onwards.', $plugin_count, 'yatra' ), $plugin_list ); } elseif ($yatra_pro_status['needs_activation']) { $message = sprintf( /* translators: %s: comma-separated list of legacy Yatra add-on plugin names that now ship with Yatra Pro 2.0. */ _n( 'The following plugin has been integrated into Yatra Pro 2.0.0 and onwards: %s. Please activate Yatra Pro 2.0.0 to use these features. Note: Updates for this plugin will only be available in Yatra Pro from now onwards.', 'The following plugins have been integrated into Yatra Pro 2.0.0 and onwards: %s. Please activate Yatra Pro 2.0.0 to use these features. Note: Updates for these plugins will only be available in Yatra Pro from now onwards.', $plugin_count, 'yatra' ), $plugin_list ); } elseif ($yatra_pro_status['needs_upgrade']) { $message = sprintf( /* translators: %s: comma-separated list of legacy Yatra add-on plugin names that now ship with Yatra Pro 2.0. */ _n( 'The following plugin has been integrated into Yatra Pro 2.0.0 and onwards: %s. Please upgrade Yatra Pro to version 2.0.0 or higher to use these features. Note: Updates for this plugin will only be available in Yatra Pro from now onwards.', 'The following plugins have been integrated into Yatra Pro 2.0.0 and onwards: %s. Please upgrade Yatra Pro to version 2.0.0 or higher to use these features. Note: Updates for these plugins will only be available in Yatra Pro from now onwards.', $plugin_count, 'yatra' ), $plugin_list ); } else { $message = sprintf( /* translators: %s: comma-separated list of legacy Yatra add-on plugin names that now ship with Yatra Pro 2.0. */ _n( 'The following plugin has been integrated into Yatra Pro 2.0.0 and onwards: %s. Please make sure you have updated Yatra Pro to version 2.0.0, enable the related features, and deactivate this plugin. Note: Updates for this plugin will only be available in Yatra Pro from now onwards.', 'The following plugins have been integrated into Yatra Pro 2.0.0 and onwards: %s. Please make sure you have updated Yatra Pro to version 2.0.0, enable the related features, and deactivate these plugins. Note: Updates for these plugins will only be available in Yatra Pro from now onwards.', $plugin_count, 'yatra' ), $plugin_list ); } ?>

old_plugins; } /** * Get plugin names mapping (for reference) * * @return array Array of plugin file to display name mapping */ public function get_plugin_names() { return $this->plugin_names; } /** * Check if a specific plugin is active * * @param string $plugin_file Plugin file path * @return bool True if plugin is active */ public function is_plugin_active($plugin_file) { $active_plugins = get_option('active_plugins', array()); return in_array($plugin_file, $active_plugins); } /** * Get compatibility status * * @return array Array with compatibility information */ public function get_compatibility_status() { $active_old_plugins = $this->get_active_old_plugins(); return array( 'is_compatible' => $this->are_all_old_plugins_deactivated(), 'active_old_plugins' => $active_old_plugins, 'active_old_plugins_count' => count($active_old_plugins), 'all_old_plugins' => $this->old_plugins, 'plugin_names' => $this->plugin_names ); } /** * Enqueue scripts and styles */ public function enqueue_scripts() { if (!$this->are_all_old_plugins_deactivated()) { $this->inline_scripts(); } } /** * Output inline scripts */ private function inline_scripts() { $processing_text = esc_js(__('Processing...', 'yatra')); $deactivating_text = esc_js(__('Deactivating plugins and enabling features...', 'yatra')); $enable_text = esc_js(__('Enable Feature & Deactivate', 'yatra')); $error_text = esc_js(__('An error occurred. Please try again.', 'yatra')); $activating_text = esc_js(__('Activating...', 'yatra')); $activating_pro_text = esc_js(__('Activating Yatra Pro...', 'yatra')); $activate_pro_text = esc_js(__('Activate Yatra Pro', 'yatra')); ?> __('You do not have permission to perform this action.', 'yatra'))); } $active_old_plugins = $this->get_active_old_plugins(); if (empty($active_old_plugins)) { wp_send_json_error(array('message' => __('No old plugins found to deactivate.', 'yatra'))); } // Check Yatra Pro status $yatra_pro_status = $this->get_yatra_pro_status(); if ($yatra_pro_status['needs_installation']) { wp_send_json_error(array('message' => __('Yatra Pro is not installed. Please install and activate Yatra Pro 2.0.0 first.', 'yatra'))); } if ($yatra_pro_status['needs_activation']) { wp_send_json_error(array('message' => __('Yatra Pro is not activated. Please activate Yatra Pro 2.0.0 first.', 'yatra'))); } if ($yatra_pro_status['needs_upgrade']) { wp_send_json_error(array('message' => __('Please upgrade Yatra Pro to version 2.0.0 or higher to use this feature.', 'yatra'))); } if (!$yatra_pro_status['is_compatible']) { wp_send_json_error(array('message' => __('Yatra Pro 2.0.0 is required but not properly configured.', 'yatra'))); } $deactivated_plugins = array(); $enabled_features = array(); // Deactivate old plugins foreach ($active_old_plugins as $plugin) { if (is_plugin_active($plugin)) { deactivate_plugins($plugin); $deactivated_plugins[] = $this->get_plugin_display_name($plugin); } } // Enable corresponding features in Yatra Pro foreach ($active_old_plugins as $plugin) { if (isset($this->plugin_to_feature_mapping[$plugin])) { $feature = $this->plugin_to_feature_mapping[$plugin]; $this->enable_yatra_pro_feature($feature); $enabled_features[] = $feature; } } $message = sprintf( /* translators: %d: number of legacy add-on plugins that were deactivated. */ __('Successfully deactivated %d plugin(s) and enabled corresponding features in Yatra Pro 2.0.0. The page will reload shortly.', 'yatra'), count($deactivated_plugins) ); wp_send_json_success(array('message' => $message)); } /** * Handle Go to Features AJAX request */ public function handle_go_to_features() { // Verify nonce if (!wp_verify_nonce($_POST['nonce'], 'yatra_go_to_features')) { wp_die('Security check failed'); } // Check Yatra Pro status $yatra_pro_status = $this->get_yatra_pro_status(); if ($yatra_pro_status['needs_installation']) { wp_send_json_error(array('message' => __('Yatra Pro is not installed. Please install and activate Yatra Pro 2.0.0 first.', 'yatra'))); } if ($yatra_pro_status['needs_activation']) { wp_send_json_error(array('message' => __('Yatra Pro is not activated. Please activate Yatra Pro 2.0.0 first.', 'yatra'))); } if ($yatra_pro_status['needs_upgrade']) { wp_send_json_error(array('message' => __('Please upgrade Yatra Pro to version 2.0.0 or higher to access the features page.', 'yatra'))); } if (!$yatra_pro_status['is_compatible']) { wp_send_json_error(array('message' => __('Yatra Pro 2.0.0 is required but not properly configured.', 'yatra'))); } // Redirect to Yatra Pro features page $redirect_url = admin_url('admin.php?page=yatra-pro-features'); wp_send_json_success(array('redirect_url' => $redirect_url)); } /** * Handle Activate Yatra Pro AJAX request */ public function handle_activate_pro() { // Verify nonce if (!wp_verify_nonce($_POST['nonce'], 'yatra_activate_pro')) { wp_die('Security check failed'); } // Check if user has permission if (!current_user_can('activate_plugins')) { wp_send_json_error(array('message' => __('You do not have permission to perform this action.', 'yatra'))); } // Check if Yatra Pro is installed if (!$this->is_yatra_pro_installed()) { wp_send_json_error(array('message' => __('Yatra Pro is not installed. Please install Yatra Pro first.', 'yatra'))); } // Check if Yatra Pro is already activated if ($this->is_yatra_pro_activated()) { wp_send_json_error(array('message' => __('Yatra Pro is already activated.', 'yatra'))); } // Activate Yatra Pro $plugin_file = 'yatra-pro/yatra-pro.php'; $result = activate_plugin($plugin_file); if (is_wp_error($result)) { /* translators: %s: WordPress activation error message returned by activate_plugin(). */ wp_send_json_error(array('message' => sprintf(__('Failed to activate Yatra Pro: %s', 'yatra'), $result->get_error_message()))); } // Check if activation was successful if (!is_plugin_active($plugin_file)) { wp_send_json_error(array('message' => __('Yatra Pro activation failed. Please try again.', 'yatra'))); } $message = __('Yatra Pro has been successfully activated! The page will reload shortly.', 'yatra'); wp_send_json_success(array('message' => $message)); } /** * Get Yatra Pro version * * @return string|false Yatra Pro version or false if not found */ private function get_yatra_pro_version() { if (!function_exists('get_plugin_data')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $plugin_file = 'yatra-pro/yatra-pro.php'; if (is_plugin_active($plugin_file)) { $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file); return isset($plugin_data['Version']) ? $plugin_data['Version'] : false; } return false; } /** * Check if Yatra Pro is installed * * @return bool True if Yatra Pro is installed */ private function is_yatra_pro_installed() { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $plugins = get_plugins(); return isset($plugins['yatra-pro/yatra-pro.php']); } /** * Check if Yatra Pro is activated * * @return bool True if Yatra Pro is activated */ private function is_yatra_pro_activated() { return is_plugin_active('yatra-pro/yatra-pro.php'); } /** * Get Yatra Pro installation status * * @return array Array with installation status information */ private function get_yatra_pro_status() { $is_installed = $this->is_yatra_pro_installed(); $is_activated = $this->is_yatra_pro_activated(); $version = $this->get_yatra_pro_version(); return array( 'is_installed' => $is_installed, 'is_activated' => $is_activated, 'version' => $version, 'is_compatible' => $is_activated && $version && version_compare($version, '2.0.0', '>='), 'needs_installation' => !$is_installed, 'needs_activation' => $is_installed && !$is_activated, 'needs_upgrade' => $is_activated && $version && version_compare($version, '2.0.0', '<') ); } /** * Enable Yatra Pro feature * * @param string $feature Feature name to enable * @return bool True if feature was enabled successfully */ private function enable_yatra_pro_feature($feature) { // Get current enabled features $enabled_features = get_option('yatra_pro_enabled_features', array()); // Add the feature if not already enabled if (!in_array($feature, $enabled_features)) { $enabled_features[] = $feature; update_option('yatra_pro_enabled_features', $enabled_features); } // Also enable specific feature settings if needed switch ($feature) { case 'downloads': update_option('yatra_pro_downloads_enabled', 'yes'); break; case 'payment_gateways': update_option('yatra_pro_payment_gateways_enabled', 'yes'); break; case 'availability_conditions': update_option('yatra_pro_availability_conditions_enabled', 'yes'); break; case 'google_calendar': update_option('yatra_pro_google_calendar_enabled', 'yes'); break; case 'partial_payment': update_option('yatra_pro_partial_payment_enabled', 'yes'); break; case 'review_ratings': update_option('yatra_pro_review_ratings_enabled', 'yes'); break; case 'services': update_option('yatra_pro_services_enabled', 'yes'); break; } return true; } /** * Get plugin to feature mapping * * @return array Array of plugin to feature mapping */ public function get_plugin_to_feature_mapping() { return $this->plugin_to_feature_mapping; } } // Initialize the compatibility checker new Yatra_Pro_Compatibility();