diff --git a/composer.json b/composer.json
index d6cea7266..c1f966573 100644
--- a/composer.json
+++ b/composer.json
@@ -1,6 +1,6 @@
{
"name": "devstone/ultimate-multisite",
- "url": "https://MultisiteUltimate.com",
+ "url": "https://UltimateMultisite.com",
"description": "The Multisite Website as a Service (WaaS) plugin.",
"version": "2.4.5",
"authors": [
diff --git a/inc/admin-pages/class-addons-admin-page.php b/inc/admin-pages/class-addons-admin-page.php
index 39ed115ba..6819cbe2e 100644
--- a/inc/admin-pages/class-addons-admin-page.php
+++ b/inc/admin-pages/class-addons-admin-page.php
@@ -371,7 +371,7 @@ public function get_menu_title() {
* @return array Modified arguments.
*/
public function add_auth_headers_to_download($args, $url) {
- if (strpos($url, 'multisiteultimate.com') !== false) {
+ if (strpos($url, 'ultimatemultisite.com') !== false) {
$access_token = get_transient('wu-access-token');
if ($access_token) {
if (! isset($args['headers'])) {
diff --git a/inc/admin-pages/class-setup-wizard-admin-page.php b/inc/admin-pages/class-setup-wizard-admin-page.php
index 495dc72ac..d8e14b89d 100644
--- a/inc/admin-pages/class-setup-wizard-admin-page.php
+++ b/inc/admin-pages/class-setup-wizard-admin-page.php
@@ -18,6 +18,7 @@
use WP_Ultimo\Installers\Recommended_Plugins_Installer;
use WP_Ultimo\Logger;
use WP_Ultimo\Requirements;
+use WP_Ultimo\Settings;
/**
* Ultimate Multisite Dashboard Admin Page.
@@ -472,6 +473,11 @@ public function get_sections() {
'description' => __('Before we move on, let\'s configure the basic settings of your network, shall we?', 'ultimate-multisite'),
'handler' => [$this, 'handle_save_settings'],
'fields' => [$this, 'get_general_settings'],
+ 'html_attr' => [
+ 'data-on-load' => 'remove_block_ui',
+ 'data-wu-app' => 'general',
+ 'data-state' => wp_json_encode(wu_array_map_keys('wu_replace_dashes', Settings::get_instance()->get_all_with_defaults(true))),
+ ],
];
$sections['defaults'] = [
@@ -894,6 +900,42 @@ public function register_scripts(): void {
wp_register_script('wu-functions', wu_get_asset('functions.js', 'js'), ['jquery'], \WP_Ultimo::VERSION, true);
+ /*
+ * Localize selectizer
+ */
+ wp_localize_script(
+ 'wu-functions',
+ 'wu_selectizer',
+ [
+ 'ajaxurl' => wu_ajax_url('init'),
+ ]
+ );
+
+ wp_localize_script(
+ 'wu-functions',
+ 'wu_settings',
+ [
+ 'currency' => wu_get_setting('currency_symbol', 'USD'),
+ 'currency_symbol' => wu_get_currency_symbol(),
+ 'currency_position' => wu_get_setting('currency_position', '%s %v'),
+ 'decimal_separator' => wu_get_setting('decimal_separator', '.'),
+ 'thousand_separator' => wu_get_setting('thousand_separator', ','),
+ 'precision' => wu_get_setting('precision', 2),
+ 'use_container' => get_user_setting('wu_use_container', false),
+ 'disable_image_zoom' => wu_get_setting('disable_image_zoom', false),
+ ]
+ );
+
+ wp_localize_script(
+ 'wu-functions',
+ 'wu_ticker',
+ [
+ 'server_clock_offset' => (wu_get_current_time('timestamp') - time()) / 60 / 60, // phpcs:ignore
+ 'moment_clock_timezone_name' => wp_date('e'),
+ 'moment_clock_timezone_offset' => wp_date('Z'),
+ ]
+ );
+
wp_register_script('wubox', wu_get_asset('wubox.js', 'js'), ['wu-functions'], \WP_Ultimo::VERSION, true);
wp_localize_script(
@@ -911,6 +953,13 @@ public function register_scripts(): void {
);
wp_add_inline_script('wu-setup-wizard-extra', 'document.addEventListener("DOMContentLoaded", () => wu_initialize_imagepicker());', 'after');
+
+ // All these just so the toggle of footer credits shows the other options.
+ wp_register_script('wu-vue', wu_get_asset('lib/vue.js', 'js'), [], wu_get_version(), true);
+ wp_register_script('wu-money-mask', wu_get_asset('lib/v-money.js', 'js'), ['wu-vue'], wu_get_version(), true);
+ wp_register_script('wu-input-mask', wu_get_asset('lib/vue-the-mask.js', 'js'), ['wu-vue'], wu_get_version(), true);
+ wp_register_script('wu-vue-apps', wu_get_asset('vue-apps.js', 'js'), ['wu-functions', 'wu-vue', 'wu-money-mask', 'wu-input-mask', 'wp-hooks'], wu_get_version(), true);
+ wp_enqueue_script('wu-vue-apps');
}
wp_enqueue_script('wu-setup-wizard-extra', wu_get_asset('setup-wizard-extra.js', 'js'), ['jquery', 'wu-fields', 'wu-functions', 'wubox'], wu_get_version(), true);
diff --git a/inc/admin-pages/class-wizard-admin-page.php b/inc/admin-pages/class-wizard-admin-page.php
index 5d39c90e1..342287334 100644
--- a/inc/admin-pages/class-wizard-admin-page.php
+++ b/inc/admin-pages/class-wizard-admin-page.php
@@ -344,6 +344,7 @@ public function default_view() {
'views' => 'admin-pages/fields',
'classes' => 'wu-widget-list wu-striped wu-m-0 wu-mt-2 wu--mb-6 wu--mx-6',
'field_wrapper_classes' => 'wu-w-full wu-box-border wu-items-center wu-flex wu-justify-between wu-px-6 wu-py-4 wu-m-0 wu-border-t wu-border-l-0 wu-border-r-0 wu-border-b-0 wu-border-gray-300 wu-border-solid',
+ 'html_attr' => $section['html_attr'] ?? [],
]
);
diff --git a/inc/class-addon-repository.php b/inc/class-addon-repository.php
index bbc12f007..7804cb286 100644
--- a/inc/class-addon-repository.php
+++ b/inc/class-addon-repository.php
@@ -226,7 +226,7 @@ public function save_access_token($code, $redirect_url) {
set_transient('wu-access-token', $response['access_token'], $response['expires_in']);
wu_save_option('wu-refresh-token', $response['refresh_token']);
wp_admin_notice(
- __('Successfully connected your site to MultisiteUltimate.com.', 'ultimate-multisite'),
+ __('Successfully connected your site to UltimateMultisite.com.', 'ultimate-multisite'),
[
'type' => 'success',
'dismissible' => true,
@@ -234,7 +234,7 @@ public function save_access_token($code, $redirect_url) {
);
} else {
wp_admin_notice(
- __('Failed to authenticate with MultisiteUltimate.com.', 'ultimate-multisite'),
+ __('Failed to authenticate with UltimateMultisite.com.', 'ultimate-multisite'),
[
'type' => 'error',
'dismissible' => true,
diff --git a/inc/class-credits.php b/inc/class-credits.php
index b107890f0..f7e2b5e49 100644
--- a/inc/class-credits.php
+++ b/inc/class-credits.php
@@ -63,7 +63,7 @@ public function register_settings(): void {
'credits_enable',
[
'title' => __('Show Footer Credits', 'ultimate-multisite'),
- 'desc' => __('Adds a small "Powered By..." message in admin and front-end footers.', 'ultimate-multisite'),
+ 'desc' => __('Adds a small "Powered By..." message in the footer of customer and template sites.', 'ultimate-multisite'),
'type' => 'toggle',
'default' => 0,
],
diff --git a/inc/class-newsletter.php b/inc/class-newsletter.php
index 1cd70de65..76360a6e7 100644
--- a/inc/class-newsletter.php
+++ b/inc/class-newsletter.php
@@ -66,7 +66,7 @@ public function maybe_update_newsletter_subscription($settings, $settings_to_sav
if ( isset($settings_to_save[ self::SETTING_FIELD_SLUG ]) && $settings_to_save[ self::SETTING_FIELD_SLUG ] && $settings_to_save[ self::SETTING_FIELD_SLUG ] !== $saved_settings[ self::SETTING_FIELD_SLUG ] ) {
$response = wp_remote_post(
- 'https://multisiteultimate.com/wp-json/newsletter/v2/subscribers',
+ 'https://ultimatemultisite.com/wp-json/newsletter/v2/subscribers',
[
'method' => 'PUT',
'body' => wp_json_encode(
@@ -86,7 +86,7 @@ public function maybe_update_newsletter_subscription($settings, $settings_to_sav
);
} elseif ( empty($settings_to_save[ self::SETTING_FIELD_SLUG ]) && ! empty($saved_settings[ self::SETTING_FIELD_SLUG ]) ) {
$response = wp_remote_post(
- 'https://multisiteultimate.com/wp-json/newsletter/v2/subscribers',
+ 'https://ultimatemultisite.com/wp-json/newsletter/v2/subscribers',
[
'method' => 'PUT',
'body' => wp_json_encode(
diff --git a/inc/class-wp-ultimo.php b/inc/class-wp-ultimo.php
index e0c8bc69d..4628da821 100644
--- a/inc/class-wp-ultimo.php
+++ b/inc/class-wp-ultimo.php
@@ -31,7 +31,7 @@ final class WP_Ultimo {
* @since 2.1.0
* @var string
*/
- const VERSION = '2.4.4';
+ const VERSION = '2.4.5';
/**
* Core log handle for Ultimate Multisite.
@@ -153,7 +153,9 @@ public function init(): void {
*/
$this->settings = WP_Ultimo\Settings::get_instance();
+ // These must be loaded here so the settings are in the setup wizard.
WP_Ultimo\Newsletter::get_instance();
+ \WP_Ultimo\Credits::get_instance();
/*
* Check if the Ultimate Multisite requirements are present.
@@ -610,11 +612,6 @@ function () {
*/
\WP_Ultimo\Whitelabel::get_instance();
- /*
- * Optional Footer Credits (opt-in, defaults OFF)
- */
- \WP_Ultimo\Credits::get_instance();
-
/*
* Adds support to multiple accounts.
*
diff --git a/inc/installers/class-recommended-plugins-installer.php b/inc/installers/class-recommended-plugins-installer.php
index f8eae9c5f..b464a009c 100644
--- a/inc/installers/class-recommended-plugins-installer.php
+++ b/inc/installers/class-recommended-plugins-installer.php
@@ -53,12 +53,24 @@ public function get_steps() {
'checked' => true,
];
+ $steps[ 'activate_plugin_' . $user_switching_slug ] = [
+ 'done' => $this->is_plugin_active($user_switching_slug),
+ 'title' => __('Activate User Switching', 'ultimate-multisite'),
+ 'description' => __('Activate the User Switching plugin.', 'ultimate-multisite'),
+ 'pending' => __('Pending', 'ultimate-multisite'),
+ 'installing' => __('Activating User Switching...', 'ultimate-multisite'),
+ 'success' => __('Activated!', 'ultimate-multisite'),
+ 'help' => 'https://wordpress.org/plugins/user-switching/',
+ 'checked' => true,
+ ];
+
return $steps;
}
/**
* Handle AJAX for our plugin install steps. Matches slugs starting with
* `install_plugin_` and installs from WordPress.org by plugin slug.
+ * Also handles `activate_plugin_` steps to activate plugins.
*
* @since 2.0.0
*
@@ -69,20 +81,36 @@ public function get_steps() {
*/
public function handle($status, $installer, $wizard) {
- if (strpos($installer, 'install_plugin_') !== 0) {
- return; // Not ours.
+ if (str_starts_with($installer, 'install_plugin_')) {
+ $plugin_slug = substr($installer, strlen('install_plugin_'));
+
+ try {
+ $result = $this->install_wporg_plugin($plugin_slug);
+
+ if (is_wp_error($result)) {
+ return;
+ }
+ } catch (\Throwable $e) {
+ wu_log_add(\WP_Ultimo::LOG_HANDLE, $e->getMessage(), LogLevel::ERROR);
+ }
+
+ return;
}
- $plugin_slug = substr($installer, strlen('install_plugin_'));
+ if (str_starts_with($installer, 'activate_plugin_')) {
+ $plugin_slug = substr($installer, strlen('activate_plugin_'));
- try {
- $result = $this->install_wporg_plugin($plugin_slug);
+ try {
+ $result = $this->activate_plugin($plugin_slug);
- if (is_wp_error($result)) {
- return;
+ if (is_wp_error($result)) {
+ return;
+ }
+ } catch (\Throwable $e) {
+ wu_log_add(\WP_Ultimo::LOG_HANDLE, $e->getMessage(), LogLevel::ERROR);
}
- } catch (\Throwable $e) {
- wu_log_add(\WP_Ultimo::LOG_HANDLE, $e->getMessage(), LogLevel::ERROR);
+
+ return;
}
}
@@ -97,7 +125,7 @@ protected function is_plugin_installed($plugin_slug) {
$installed = get_plugins();
foreach ($installed as $file => $data) {
- if (strpos($file, $plugin_slug . '/') === 0) {
+ if (str_starts_with($file, $plugin_slug . '/')) {
return true;
}
}
@@ -105,6 +133,42 @@ protected function is_plugin_installed($plugin_slug) {
return false;
}
+ /**
+ * Determine if a plugin is active by slug.
+ *
+ * @since 2.0.0
+ * @param string $plugin_slug Plugin slug (e.g. 'user-switching').
+ * @return bool
+ */
+ protected function is_plugin_active($plugin_slug) {
+ $plugin_file = $this->get_plugin_file($plugin_slug);
+
+ if (! $plugin_file) {
+ return false;
+ }
+
+ return is_plugin_active($plugin_file);
+ }
+
+ /**
+ * Get the plugin file path for a given slug.
+ *
+ * @since 2.0.0
+ * @param string $plugin_slug Plugin slug (e.g. 'user-switching').
+ * @return string|false Plugin file path or false if not found.
+ */
+ protected function get_plugin_file($plugin_slug) {
+ $installed = get_plugins();
+
+ foreach ($installed as $file => $data) {
+ if (str_starts_with($file, $plugin_slug . '/')) {
+ return $file;
+ }
+ }
+
+ return false;
+ }
+
/**
* Install a plugin from WordPress.org by slug.
*
@@ -164,4 +228,35 @@ protected function install_wporg_plugin($plugin_slug) {
return true;
}
+
+ /**
+ * Activate a plugin by slug.
+ *
+ * @since 2.0.0
+ * @param string $plugin_slug Plugin slug (e.g. 'user-switching').
+ * @return bool|\WP_Error
+ */
+ protected function activate_plugin($plugin_slug) {
+
+ // Get the plugin file path.
+ $plugin_file = $this->get_plugin_file($plugin_slug);
+
+ if (! $plugin_file) {
+ return new \WP_Error('plugin-not-found', __('Plugin not found.', 'ultimate-multisite'));
+ }
+
+ // If already active, succeed early.
+ if (is_plugin_active($plugin_file)) {
+ return true;
+ }
+
+ // Activate the plugin.
+ $result = activate_plugin($plugin_file);
+
+ if (is_wp_error($result)) {
+ return $result;
+ }
+
+ return true;
+ }
}
diff --git a/inc/stuff.php b/inc/stuff.php
index a81c4f423..27c8227e9 100644
--- a/inc/stuff.php
+++ b/inc/stuff.php
@@ -1,5 +1,5 @@
'A3mbUD7luXjl6AuqHEQwdThkR0JsTjdQSTdWeGxUenpzRGExVDFoT0lSZlNadERUU0sxSUtjRlU3OHhnZmVVY2hJNTR5amlBaThXUytOTmE=',
- 1 => 'DYz6uNb8q+kH+xXPS0A0VzJTb2g1UWd1QUVIZlBFOXRuVHVyNEhrclBVL0tFcG8vaUM3Q2RCNlAxQVdtZkpuWVdOdnBUTWdTQkVsVk5ZU1U=',
-);
+return array (
+ 0 => 'ekmN3BXJCSjIWYaZzdR8sUtwRnRBemd1Z08ySVB2Z3I2NTNJS0FSREExNzhJYlloRDhTMlhldjR6UHc1RTFKM1Exam5pOG1RV2V2NHlyNk0=',
+ 1 => '4r+6L3n+zDRa6Leurkn4jUFpMGlkeG9LaHdBbE9HamZrNVlLNHdYRzhYVnJNSWI5T0d2SVVxdWNWWlVOSmVxTVhoWElvVjlOcU9rRnF6UFI=',
+);
\ No newline at end of file
diff --git a/lang/ultimate-multisite.pot b/lang/ultimate-multisite.pot
index 53a2ddaf8..41345e9d9 100644
--- a/lang/ultimate-multisite.pot
+++ b/lang/ultimate-multisite.pot
@@ -9,7 +9,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2025-09-30T19:05:49+00:00\n"
+"POT-Creation-Date: 2025-09-30T20:49:53+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: ultimate-multisite\n"
@@ -18,8 +18,8 @@ msgstr ""
#: ultimate-multisite.php
#: inc/admin-pages/class-dashboard-admin-page.php:551
#: inc/admin-pages/class-migration-alert-admin-page.php:103
-#: inc/admin-pages/class-setup-wizard-admin-page.php:309
-#: inc/admin-pages/class-setup-wizard-admin-page.php:669
+#: inc/admin-pages/class-setup-wizard-admin-page.php:310
+#: inc/admin-pages/class-setup-wizard-admin-page.php:675
#: inc/admin-pages/class-top-admin-nav-menu.php:55
#: inc/class-credits.php:155
#: inc/class-credits.php:199
@@ -31,7 +31,7 @@ msgstr ""
#. Plugin URI of the plugin
#: ultimate-multisite.php
-msgid "https://multisiteultimate.com"
+msgid "https://ultimatemultisite.com"
msgstr ""
#. Description of the plugin
@@ -1418,6 +1418,7 @@ msgstr ""
#: inc/installers/class-migrator.php:278
#: inc/installers/class-migrator.php:383
#: inc/installers/class-recommended-plugins-installer.php:49
+#: inc/installers/class-recommended-plugins-installer.php:60
#: inc/list-tables/class-membership-list-table.php:301
#: inc/list-tables/class-payment-list-table.php:208
#: inc/list-tables/class-payment-list-table.php:266
@@ -2841,7 +2842,7 @@ msgid "Testing Integration"
msgstr ""
#: inc/admin-pages/class-hosting-integration-wizard-admin-page.php:154
-#: inc/admin-pages/class-setup-wizard-admin-page.php:505
+#: inc/admin-pages/class-setup-wizard-admin-page.php:511
#: views/dashboard-widgets/thank-you.php:281
msgid "Ready!"
msgstr ""
@@ -3441,7 +3442,7 @@ msgid "Add Membership"
msgstr ""
#: inc/admin-pages/class-migration-alert-admin-page.php:92
-#: inc/admin-pages/class-setup-wizard-admin-page.php:461
+#: inc/admin-pages/class-setup-wizard-admin-page.php:462
msgid "Migration"
msgstr ""
@@ -4338,186 +4339,186 @@ msgstr ""
msgid "Save Settings"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:244
+#: inc/admin-pages/class-setup-wizard-admin-page.php:245
msgid "Permission denied."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:298
-#: inc/admin-pages/class-setup-wizard-admin-page.php:348
+#: inc/admin-pages/class-setup-wizard-admin-page.php:299
+#: inc/admin-pages/class-setup-wizard-admin-page.php:349
msgid "Installation"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:309
+#: inc/admin-pages/class-setup-wizard-admin-page.php:310
msgid "Ultimate Multisite Install"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:322
+#: inc/admin-pages/class-setup-wizard-admin-page.php:323
msgid "Welcome"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:326
+#: inc/admin-pages/class-setup-wizard-admin-page.php:327
msgid "...and thanks for choosing Ultimate Multisite!"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:327
+#: inc/admin-pages/class-setup-wizard-admin-page.php:328
msgid "This quick setup wizard will make sure your server is correctly setup, help you configure your new network, and migrate data from previous Ultimate Multisite versions if necessary."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:328
+#: inc/admin-pages/class-setup-wizard-admin-page.php:329
msgid "You will also have the option of importing default content. It should take 10 minutes or less!"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:331
+#: inc/admin-pages/class-setup-wizard-admin-page.php:332
#: inc/compat/class-legacy-shortcodes.php:388
msgid "Get Started →"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:335
+#: inc/admin-pages/class-setup-wizard-admin-page.php:336
msgid "Pre-install Checks"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:336
+#: inc/admin-pages/class-setup-wizard-admin-page.php:337
msgid "Now it is time to see if this machine has what it takes to run Ultimate Multisite well!"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:337
-#: inc/admin-pages/class-setup-wizard-admin-page.php:350
-#: inc/admin-pages/class-setup-wizard-admin-page.php:480
-#: inc/admin-pages/class-setup-wizard-admin-page.php:494
+#: inc/admin-pages/class-setup-wizard-admin-page.php:338
+#: inc/admin-pages/class-setup-wizard-admin-page.php:351
+#: inc/admin-pages/class-setup-wizard-admin-page.php:486
+#: inc/admin-pages/class-setup-wizard-admin-page.php:500
msgid "Go to the Next Step →"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:337
+#: inc/admin-pages/class-setup-wizard-admin-page.php:338
msgid "Check Again"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:349
+#: inc/admin-pages/class-setup-wizard-admin-page.php:350
msgid "Now, let's update your database and install the Sunrise.php file, which are necessary for the correct functioning of Ultimate Multisite."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:350
-#: inc/admin-pages/class-setup-wizard-admin-page.php:480
-#: inc/admin-pages/class-setup-wizard-admin-page.php:494
+#: inc/admin-pages/class-setup-wizard-admin-page.php:351
+#: inc/admin-pages/class-setup-wizard-admin-page.php:486
+#: inc/admin-pages/class-setup-wizard-admin-page.php:500
msgid "Install"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:373
+#: inc/admin-pages/class-setup-wizard-admin-page.php:374
msgid "Migrate!"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:375
+#: inc/admin-pages/class-setup-wizard-admin-page.php:376
msgid "No errors found during dry run! Now it is time to actually migrate!
We strongly recommend creating a backup of your database before moving forward with the migration."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:378
+#: inc/admin-pages/class-setup-wizard-admin-page.php:379
msgid "Run Check"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:380
+#: inc/admin-pages/class-setup-wizard-admin-page.php:381
msgid "It seems that you were running Ultimate Multisite 1.X on this network. This migrator will convert the data from the old version to the new one."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:380
+#: inc/admin-pages/class-setup-wizard-admin-page.php:381
msgid "First, let's run a test migration to see if we can spot any potential errors."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:407
+#: inc/admin-pages/class-setup-wizard-admin-page.php:408
msgid "The dry run test detected issues during the test migration. Please, contact our support team to get help migrating from 1.X to version 2."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:411
+#: inc/admin-pages/class-setup-wizard-admin-page.php:412
msgid "Try Again!"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:413
+#: inc/admin-pages/class-setup-wizard-admin-page.php:414
msgid "List of errors detected:"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:417
+#: inc/admin-pages/class-setup-wizard-admin-page.php:418
msgid "Download migration error log"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:429
+#: inc/admin-pages/class-setup-wizard-admin-page.php:430
msgid "Rollback to version 1.10.13"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:471
+#: inc/admin-pages/class-setup-wizard-admin-page.php:472
msgid "Your Company"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:472
+#: inc/admin-pages/class-setup-wizard-admin-page.php:473
msgid "Before we move on, let's configure the basic settings of your network, shall we?"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:478
+#: inc/admin-pages/class-setup-wizard-admin-page.php:484
msgid "Default Content"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:479
+#: inc/admin-pages/class-setup-wizard-admin-page.php:485
msgid "Starting from scratch can be scarry, specially when first starting out. In this step, you can create default content to have a starting point for your network. Everything can be customized later."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:492
+#: inc/admin-pages/class-setup-wizard-admin-page.php:498
msgid "Recommended Plugins"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:493
+#: inc/admin-pages/class-setup-wizard-admin-page.php:499
msgid "Optionally install helpful plugins. We will install them one by one and report progress."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:603
+#: inc/admin-pages/class-setup-wizard-admin-page.php:609
msgid "A server error happened while processing this item."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:642
+#: inc/admin-pages/class-setup-wizard-admin-page.php:648
msgid "PHP"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:651
+#: inc/admin-pages/class-setup-wizard-admin-page.php:657
msgid "WordPress"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:663
+#: inc/admin-pages/class-setup-wizard-admin-page.php:669
msgid "WordPress Multisite"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:665
+#: inc/admin-pages/class-setup-wizard-admin-page.php:671
msgid "Installed & Activated"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:671
+#: inc/admin-pages/class-setup-wizard-admin-page.php:677
msgid "Bypassed via filter"
msgstr ""
#. Translators: The plugin is network wide active, the string is for each plugin possible.
-#: inc/admin-pages/class-setup-wizard-admin-page.php:671
+#: inc/admin-pages/class-setup-wizard-admin-page.php:677
#: inc/admin/class-network-usage-columns.php:127
msgid "Network Activated"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:675
+#: inc/admin-pages/class-setup-wizard-admin-page.php:681
msgid "WordPress Cron"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:677
+#: inc/admin-pages/class-setup-wizard-admin-page.php:683
#: inc/integrations/host-providers/class-base-host-provider.php:195
msgid "Activated"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:768
+#: inc/admin-pages/class-setup-wizard-admin-page.php:774
msgid "Ultimate Multisite installation is incomplete. The sunrise.php file is missing. Please complete the setup to ensure proper functionality."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:773
+#: inc/admin-pages/class-setup-wizard-admin-page.php:779
msgid "Complete Setup"
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:889
+#: inc/admin-pages/class-setup-wizard-admin-page.php:895
#: inc/class-scripts.php:196
msgid "Select an Image."
msgstr ""
-#: inc/admin-pages/class-setup-wizard-admin-page.php:890
+#: inc/admin-pages/class-setup-wizard-admin-page.php:896
#: inc/class-scripts.php:197
msgid "Use this image"
msgstr ""
@@ -7719,11 +7720,11 @@ msgid "Failed to connect to the update server. Please try again later."
msgstr ""
#: inc/class-addon-repository.php:229
-msgid "Successfully connected your site to MultisiteUltimate.com."
+msgid "Successfully connected your site to UltimateMultisite.com."
msgstr ""
#: inc/class-addon-repository.php:237
-msgid "Failed to authenticate with MultisiteUltimate.com."
+msgid "Failed to authenticate with UltimateMultisite.com."
msgstr ""
#: inc/class-api.php:145
@@ -7817,7 +7818,7 @@ msgid "Show Footer Credits"
msgstr ""
#: inc/class-credits.php:66
-msgid "Adds a small \"Powered By...\" message in admin and front-end footers."
+msgid "Adds a small \"Powered By...\" message in the footer of customer and template sites."
msgstr ""
#: inc/class-credits.php:78
@@ -15555,14 +15556,34 @@ msgstr ""
msgid "Installed!"
msgstr ""
-#: inc/installers/class-recommended-plugins-installer.php:146
+#: inc/installers/class-recommended-plugins-installer.php:58
+msgid "Activate User Switching"
+msgstr ""
+
+#: inc/installers/class-recommended-plugins-installer.php:59
+msgid "Activate the User Switching plugin."
+msgstr ""
+
+#: inc/installers/class-recommended-plugins-installer.php:61
+msgid "Activating User Switching..."
+msgstr ""
+
+#: inc/installers/class-recommended-plugins-installer.php:62
+msgid "Activated!"
+msgstr ""
+
+#: inc/installers/class-recommended-plugins-installer.php:210
msgid "Unable to resolve plugin download link."
msgstr ""
-#: inc/installers/class-recommended-plugins-installer.php:162
+#: inc/installers/class-recommended-plugins-installer.php:226
msgid "Installation failed."
msgstr ""
+#: inc/installers/class-recommended-plugins-installer.php:245
+msgid "Plugin not found."
+msgstr ""
+
#. translators: %s is the name of a host provider (e.g. Cloudways, WPMUDev, Closte...).
#: inc/integrations/host-providers/class-base-host-provider.php:207
#, php-format
@@ -19199,7 +19220,7 @@ msgstr ""
#. translators: %1$s: the current user display name, %2$s: their password.
#: views/base/addons.php:69
#, php-format
-msgid "Connected to MultisiteUltimate.com as %1$s (%2$s)."
+msgid "Connected to UltimateMultisite.com as %1$s (%2$s)."
msgstr ""
#. translators: %1$s: the current user display name, %2$s: their password.
@@ -19221,7 +19242,7 @@ msgid "Connect your site"
msgstr ""
#: views/base/addons.php:77
-msgid "Connect your site to MultisiteUltimate.com"
+msgid "Connect your site to UltimateMultisite.com"
msgstr ""
#: views/base/addons.php:89
@@ -20645,6 +20666,12 @@ msgstr ""
msgid "Toggle Toolbox"
msgstr ""
+#. translators: %s hash of membership.
+#: views/ui/toolbox.php:66
+#, php-format
+msgid "Membership %s"
+msgstr ""
+
#. translators: %s is the integration name
#: views/wizards/host-integrations/activation.php:11
#, php-format
diff --git a/readme.txt b/readme.txt
index 0adc0cd7d..295d55e24 100644
--- a/readme.txt
+++ b/readme.txt
@@ -129,11 +129,11 @@ This plugin connects to several external services to provide its functionality.
= Plugin Updates and Add-ons =
**Ultimate Multisite Update Server**
-- Service: Official update server for the plugin and its add-ons (multisiteultimate.com)
+- Service: Official update server for the plugin and its add-ons (ultimatemultisite.com)
- Data sent: Site URL, plugin version, license keys, authentication tokens
- When: During plugin/add-on updates and license checks
-- Terms of Service: https://multisiteultimate.com/terms-of-service/
-- Privacy Policy: https://multisiteultimate.com/privacy-policy/
+- Terms of Service: https://ultimatemultisite.com/terms-of-service/
+- Privacy Policy: https://ultimatemultisite.com/privacy-policy/
= Payment Processing Services =
@@ -203,13 +203,13 @@ This plugin connects to several external services to provide its functionality.
= Newsletter and Analytics =
**Ultimate Multisite Newsletter Service**
-- Service: Newsletter subscription for product updates (multisiteultimate.com)
+- Service: Newsletter subscription for product updates (ultimatemultisite.com)
- Data sent: Company email, name, country information
- When: During initial plugin setup (optional)
- This is our own service for providing plugin updates and announcements
- You can opt out of this service during setup
-- Terms of Service: https://multisiteultimate.com/terms-of-service/
-- Privacy Policy: https://multisiteultimate.com/privacy-policy/
+- Terms of Service: https://ultimatemultisite.com/terms-of-service/
+- Privacy Policy: https://ultimatemultisite.com/privacy-policy/
All external service connections are clearly disclosed to users during setup, and most services are optional or can be configured based on your chosen hosting provider and payment methods.
diff --git a/sunrise.php b/sunrise.php
index 7a299be4a..eb2a7dbd7 100644
--- a/sunrise.php
+++ b/sunrise.php
@@ -2,7 +2,7 @@
// WP Ultimo Starts #
/**
* Ultimate Multisite Sunrise
- * Plugin URI: https://multisiteultimate.com
+ * Plugin URI: https://ultimatemultisite.com
* Version: 2.0.0.10
* License: GPLv2
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
diff --git a/ultimate-multisite.php b/ultimate-multisite.php
index 5daffa095..fad83384e 100644
--- a/ultimate-multisite.php
+++ b/ultimate-multisite.php
@@ -2,7 +2,7 @@
/**
* Plugin Name: Ultimate Multisite
* Description: Transform your WordPress Multisite into a Website as a Service (WaaS) platform supporting site cloning, re-selling, and domain mapping integrations with many hosting providers.
- * Plugin URI: https://multisiteultimate.com
+ * Plugin URI: https://ultimatemultisite.com
* Text Domain: ultimate-multisite
* Version: 2.4.5
* Author: Ultimate Multisite Community
@@ -66,7 +66,7 @@
define('WP_ULTIMO_PLUGIN_FILE', __FILE__);
}
if ( ! defined('MULTISITE_ULTIMATE_UPDATE_URL')) {
- define('MULTISITE_ULTIMATE_UPDATE_URL', 'https://multisiteultimate.com/');
+ define('MULTISITE_ULTIMATE_UPDATE_URL', 'https://ultimatemultisite.com/');
}
/**
* Require core file dependencies
diff --git a/views/base/addons.php b/views/base/addons.php
index d7b11a2c1..a9febac6d 100644
--- a/views/base/addons.php
+++ b/views/base/addons.php
@@ -66,7 +66,7 @@
- %s', esc_html__('The Support Page', 'ultimate-multisite'))); ?> + %s', esc_html__('The Support Page', 'ultimate-multisite'))); ?>