diff --git a/inc/admin/class-sunrise-admin-notice.php b/inc/admin/class-sunrise-admin-notice.php new file mode 100644 index 0000000..d4b9955 --- /dev/null +++ b/inc/admin/class-sunrise-admin-notice.php @@ -0,0 +1,189 @@ +get_wp_config_path(); + $can_write = is_writable($wp_config_path); + + ?> +
+

+

+ SUNRISE constant to be defined and set to true in your wp-config.php file.', 'wp-ultimo'); ?> + +

+ + +

+ + + +

+ + +

+ + +

+

+ define('SUNRISE', true); +

+

+ %s.', 'wp-ultimo'), + '$table_prefix' + ); ?> + +

+ +
+ __('Security check failed.', 'wp-ultimo') + )); + return; + } + + // Check if SUNRISE is already defined + if (defined('SUNRISE') && SUNRISE === true) { + wp_send_json_success(array( + 'message' => __('SUNRISE constant is already defined.', 'wp-ultimo') + )); + return; + } + + // Try to update wp-config.php + $result = WP_Config::get_instance()->inject_wp_config_constant('SUNRISE', true); + + if (is_wp_error($result)) { + wp_send_json_error(array( + 'message' => $result->get_error_message() + )); + return; + } + + if ($result === false) { + wp_send_json_error(array( + 'message' => __('Failed to update wp-config.php. Try adding the constant manually.', 'wp-ultimo') + )); + return; + } + + wp_send_json_success(array( + 'message' => __('SUNRISE constant added successfully! Reloading...', 'wp-ultimo') + )); + } + +} \ No newline at end of file diff --git a/inc/class-domain-mapping.php b/inc/class-domain-mapping.php index 739e849..2108871 100644 --- a/inc/class-domain-mapping.php +++ b/inc/class-domain-mapping.php @@ -39,6 +39,41 @@ class Domain_Mapping { */ public $original_url = null; + /** + * Initializes the Domain Mapping Class + * + * @since 2.0.0 + */ + public function __construct() { + + if ( ! \WP_Ultimo\Sunrise::should_startup()) { + return; + } + + // Make sure we got loaded in the sunrise stage. + add_filter('pre_get_site_by_path', array($this, 'pre_get_site_by_path'), 10, 4); + + add_action('template_redirect', array($this, 'disable_canonical_redirect'), 1); + + add_filter('network_site_url', array($this, 'network_site_url'), 10, 3); + + add_action('admin_init', array($this, 'load_sunrise_notification')); + + } + + /** + * Load the SUNRISE constant check and notification. + * + * @since 2.0.0 + * @return void + */ + public function load_sunrise_notification() { + if (is_network_admin()) { + require_once wu_path('inc/admin/class-sunrise-admin-notice.php'); + \WP_Ultimo\Admin\Sunrise_Admin_Notice::get_instance()->init(); + } + } + /** * Runs on singleton instantiation. * diff --git a/readme.txt b/readme.txt index 39b9228..3064264 100644 --- a/readme.txt +++ b/readme.txt @@ -6,19 +6,93 @@ License: GPLv2 License URI: http://www.gnu.org/licenses/gpl-2.0.html Contributors: aanduque, superdav42 -The Complete Network Solution. +The Complete Network Solution for transforming your WordPress Multisite into a Website as a Service (WaaS) platform. == Description == -WP Multisite WaaS +WP Multisite WaaS helps you transform your WordPress Multisite installation into a powerful Website as a Service (WaaS) platform. This plugin enables you to offer website creation, hosting, and management services to your customers through a streamlined interface. -The WordPress Multisite Website as a Service (Waas) plugin. Now community maintained. +Now community maintained. == Installation == -1. Upload 'wp-multisite-waas' to the '/wp-content/plugins/' directory -2. Activate the plugin through the 'Plugins' menu in WordPress -3. Follow the step by step Wizard to set the plugin up +There are two recommended ways to install WP Multisite WaaS: + += Method 1: Using the pre-packaged release (Recommended) = + +1. Download the latest release ZIP from the [Releases page](https://github.com/superdav42/wp-multisite-waas/releases) +2. Log in to your WordPress Network Admin dashboard +3. Navigate to Plugins > Add New > Upload Plugin +4. Choose the downloaded ZIP file and click "Install Now" +5. Network Activate the plugin through the 'Plugins' menu in WordPress +6. Follow the step by step Wizard to set the plugin up + += Method 2: Using Git and Composer (For developers) = + +This method requires command-line access to your server and familiarity with Git and Composer. + +1. Clone the repository to your plugins directory: + ``` + cd wp-content/plugins/ + git clone https://github.com/superdav42/wp-multisite-waas.git + cd wp-multisite-waas + ``` + +2. Install the required dependencies using Composer: + ``` + composer install + ``` + +3. Network Activate the plugin in your WordPress Network Admin dashboard +4. Follow the setup wizard to complete the installation + += Common Installation Issues = + +**"Failed opening required [...]/vendor/autoload_packages.php"** + +This error occurs when the required vendor files are missing. This typically happens when: +- You've downloaded the repository directly from GitHub without using a release package +- The composer dependencies haven't been installed + +Solution: Use the pre-packaged release from the [Releases page](https://github.com/superdav42/wp-multisite-waas/releases) or run `composer install` in the plugin directory. + +**"Cannot declare class ComposerAutoloaderInitWPUltimoDependencies, because the name is already in use"** + +This error usually occurs when updating from an older version of WP Ultimo or when multiple versions of the plugin are installed. + +Solution: Deactivate and remove any older versions of WP Ultimo or WP Multisite WaaS before activating the new version. + +**"Class 'WP_Ultimo\Database\Sites\Site_Query' not found"** + +This error can occur if the plugin's autoloader isn't properly loading all the necessary classes. + +Solution: Use the pre-packaged release from the [Releases page](https://github.com/superdav42/wp-multisite-waas/releases) which includes all required files. + += Domain Mapping Requirements = + +For domain mapping functionality to work properly, you must have the `SUNRISE` constant defined in your wp-config.php file: + +1. Open your wp-config.php file (located in your WordPress root directory) +2. Add the following line after the `$table_prefix` line: + ```php + define('SUNRISE', true); + ``` +3. Save the file + +If you don't add this constant, all mapped domains will redirect to your main site instead of the correct subsite. + +The plugin will display a notification in the Network Admin dashboard if the `SUNRISE` constant is not defined, with an option to add it automatically if your wp-config.php file is writable. + +== Requirements == + +- WordPress Multisite 5.3 or higher +- PHP 7.4.30 or higher +- MySQL 5.6 or higher +- HTTPS enabled (recommended for secure checkout) + +== Support == + +For support, please open an issue on the [GitHub repository](https://github.com/superdav42/wp-multisite-waas/issues). == Upgrade Notice == @@ -384,7 +458,7 @@ Version 2.0.20 - Released on 2022-09-30 * Added: Security mode to deactivate all plugins except WP Ultimo and mu-plugins at once and reactivate after disable; * Added: Allow customers to update the membership to plans and variations with different periods; * Added: Allow customers to select one of their sites when creating a new one; -* Added: Error message when customers access the “add user” page over users limit; +* Added: Error message when customers access the "add user" page over users limit; * Added: wu_return_url filter, allowing custom redirections after checkout process; * Improvement: New payments from manual gateway are now generated by current membership; * Improvement: Elementor compatibility on mapped sites; @@ -463,8 +537,8 @@ Version 2.0.15 - Released on 2022-06-15 * Added: Currency Saudi Riyal * Improvement: Removes unlisted countries from the billing address checkout field when using the "Restrict by country" option; * Improvement: Disables the "Restrict by country" toggle when saving the form without allowed countries; -* Improvement: Improves the addition of billing address fields by allowing the removal of fields through the “wu_billing_address_fields” filter and avoiding error in the use of this filter; -* Improvement: Checks if payment status is completed when building the cart to prevent error with Ultimo defining the cart as “retry”; +* Improvement: Improves the addition of billing address fields by allowing the removal of fields through the "wu_billing_address_fields" filter and avoiding error in the use of this filter; +* Improvement: Checks if payment status is completed when building the cart to prevent error with Ultimo defining the cart as "retry"; * Improvement: Verifies if the cart has a future value to be paid to better handle downgrades; * Improvement: Checks if subscription is not already cancelled on Stripe and Stripe Checkout gateways before trying to cancel; * Improvement: Improvement: Changes stripe.js handlers to better code readability and to follow Stripe recommendations; @@ -485,7 +559,7 @@ Version 2.0.15 - Released on 2022-06-15 * Fix: SSO not working on wp-admin page with mapped domains; * Fix: Stripe saved cards not working; * Fix: Downgrade cart not being correctly built when new plan is not free; -* Fix: Correctly define a cart as “retry” and postpone the payment verification when building it to prevent some errors on checkout validation process; +* Fix: Correctly define a cart as "retry" and postpone the payment verification when building it to prevent some errors on checkout validation process; * Fix: Get the enable multiple membership value config from settings value; * Fix: Allow updates with current plan on trial period; * Fix: Stripe Checkout gateway id with wrong value on get_or_create_customer method;