From 0af9718425219851433de2a8783802ac2dba6983 Mon Sep 17 00:00:00 2001 From: David Stone Date: Tue, 30 Sep 2025 14:06:59 -0600 Subject: [PATCH 1/4] activates vue in the wizard and performs the plugin activation for recommended plugins --- .../class-setup-wizard-admin-page.php | 6 + inc/admin-pages/class-wizard-admin-page.php | 1 + inc/class-credits.php | 2 +- .../class-recommended-plugins-installer.php | 115 ++++++++++++-- lang/ultimate-multisite.pot | 141 +++++++++++------- 5 files changed, 197 insertions(+), 68 deletions(-) diff --git a/inc/admin-pages/class-setup-wizard-admin-page.php b/inc/admin-pages/class-setup-wizard-admin-page.php index 495dc72ac..e5d9a21b8 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'] = [ 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-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/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/lang/ultimate-multisite.pot b/lang/ultimate-multisite.pot index 53a2ddaf8..6adc6cd43 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:05:06+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 @@ -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 "" @@ -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 @@ -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 From adcf78f340530ba355aa46ae0ce3b12076e96774 Mon Sep 17 00:00:00 2001 From: David Stone Date: Tue, 30 Sep 2025 14:17:27 -0600 Subject: [PATCH 2/4] Update domain --- composer.json | 2 +- inc/admin-pages/class-addons-admin-page.php | 2 +- inc/class-addon-repository.php | 4 ++-- inc/class-newsletter.php | 4 ++-- inc/stuff.php | 8 ++++---- lang/ultimate-multisite.pot | 10 +++++----- readme.txt | 12 ++++++------ sunrise.php | 2 +- ultimate-multisite.php | 4 ++-- views/base/addons.php | 4 ++-- views/ui/branding/footer.php | 2 +- views/wizards/setup/ready.php | 2 +- 12 files changed, 28 insertions(+), 28 deletions(-) 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/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-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/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 6adc6cd43..dd0b49f30 100644 --- a/lang/ultimate-multisite.pot +++ b/lang/ultimate-multisite.pot @@ -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 @@ -7720,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 @@ -19220,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. @@ -19242,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 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 @@
-

+

@@ -74,7 +74,7 @@
  • - +
diff --git a/views/ui/branding/footer.php b/views/ui/branding/footer.php index a7237b301..4a4f9f4fd 100644 --- a/views/ui/branding/footer.php +++ b/views/ui/branding/footer.php @@ -52,7 +52,7 @@
  • - • Support + • Support
  • diff --git a/views/wizards/setup/ready.php b/views/wizards/setup/ready.php index ab60c469f..9a9adba59 100644 --- a/views/wizards/setup/ready.php +++ b/views/wizards/setup/ready.php @@ -29,7 +29,7 @@

    - %s', esc_html__('The Support Page', 'ultimate-multisite'))); ?> + %s', esc_html__('The Support Page', 'ultimate-multisite'))); ?>

    From 6e83a39cc7745f3f7abb2abb8e27e1dec96ad6ce Mon Sep 17 00:00:00 2001 From: David Stone Date: Tue, 30 Sep 2025 14:52:48 -0600 Subject: [PATCH 3/4] add all the js to get vue working in the wizard --- .../class-setup-wizard-admin-page.php | 43 +++++++++++++++++++ inc/class-wp-ultimo.php | 7 +-- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/inc/admin-pages/class-setup-wizard-admin-page.php b/inc/admin-pages/class-setup-wizard-admin-page.php index e5d9a21b8..d8e14b89d 100644 --- a/inc/admin-pages/class-setup-wizard-admin-page.php +++ b/inc/admin-pages/class-setup-wizard-admin-page.php @@ -900,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( @@ -917,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/class-wp-ultimo.php b/inc/class-wp-ultimo.php index e0c8bc69d..c529f95b9 100644 --- a/inc/class-wp-ultimo.php +++ b/inc/class-wp-ultimo.php @@ -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. * From 683a269e1c434a058ae4dd5c6130435f5feb75f4 Mon Sep 17 00:00:00 2001 From: David Stone Date: Tue, 30 Sep 2025 19:25:02 -0600 Subject: [PATCH 4/4] Prep for release --- inc/class-wp-ultimo.php | 2 +- lang/ultimate-multisite.pot | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/class-wp-ultimo.php b/inc/class-wp-ultimo.php index c529f95b9..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. diff --git a/lang/ultimate-multisite.pot b/lang/ultimate-multisite.pot index dd0b49f30..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-30T20:05:06+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"