+ __('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;