Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions inc/site-exporter/class-main-site-promoter.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public function promote($source_blog_id, $args = []) {

$main_site_id = wu_get_main_site_id();
$main_url = get_site_url($main_site_id);
$main_title = get_blog_option($main_site_id, 'blogname');
$source_url = get_site_url($source_blog_id);
$source_title = get_blog_option($source_blog_id, 'blogname');
$backups = [];
Expand Down Expand Up @@ -118,7 +119,7 @@ public function promote($source_blog_id, $args = []) {
return new \WP_Error('main_site_promotion_failed', __('The source site could not be copied into the main site.', 'ultimate-multisite'));
}

$this->restore_main_identity($main_site_id, $main_url, $source_title, (bool) $args['preserve_main_title']);
$this->restore_main_identity($main_site_id, $main_url, $main_title, $source_title, (bool) $args['preserve_main_title']);

wp_cache_flush();
clean_blog_cache($main_site_id);
Expand Down Expand Up @@ -270,18 +271,19 @@ private function export_site($site_id, array $options) {
*
* @param int $main_site_id Main site blog ID.
* @param string $main_url Main site URL.
* @param string $main_title Original main site title.
* @param string $source_title Source site title.
* @param bool $preserve_main_title Whether to preserve the current main title.
* @param bool $preserve_main_title Whether to preserve the original main title.
* @return void
*/
private function restore_main_identity($main_site_id, $main_url, $source_title, $preserve_main_title) {
private function restore_main_identity($main_site_id, $main_url, $main_title, $source_title, $preserve_main_title) {

update_blog_option($main_site_id, 'home', $main_url);
update_blog_option($main_site_id, 'siteurl', $main_url);

if (! $preserve_main_title) {
update_blog_option($main_site_id, 'blogname', $source_title);
}
$title_to_use = $preserve_main_title ? $main_title : $source_title;

update_blog_option($main_site_id, 'blogname', $title_to_use);
}

/**
Expand Down
75 changes: 75 additions & 0 deletions tests/WP_Ultimo/Site_Exporter/Main_Site_Promoter_Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,81 @@ public function test_promote_restores_main_url_identity(): void {
$this->assertSame($main_siteurl, get_blog_option($main_site_id, 'siteurl'));
}

/**
* Main title identity is restored when requested after the copy step rewrites it.
*/
public function test_promote_restores_original_main_title_when_preserved(): void {

$main_site_id = wu_get_main_site_id();
$original_main_title = get_blog_option($main_site_id, 'blogname');
$main_title = 'Original Main Title';
$source_title = 'Copied Source Title';

update_blog_option($main_site_id, 'blogname', $main_title);
update_blog_option($this->source_blog_id, 'blogname', $source_title);

$override_filter = function () use ($main_site_id, $source_title) {
update_blog_option($main_site_id, 'blogname', $source_title);

return true;
};

add_filter('wu_main_site_promoter_override_site', $override_filter);

try {
$result = Main_Site_Promoter::get_instance()->promote(
$this->source_blog_id,
[
'backup' => false,
'preserve_main_title' => true,
]
);

$this->assertIsArray($result);
$this->assertSame($main_title, get_blog_option($main_site_id, 'blogname'));
} finally {
remove_filter('wu_main_site_promoter_override_site', $override_filter);
update_blog_option($main_site_id, 'blogname', $original_main_title);
}
}

/**
* Source title is applied when the main title should not be preserved.
*/
public function test_promote_uses_source_title_when_main_title_not_preserved(): void {

$main_site_id = wu_get_main_site_id();
$original_main_title = get_blog_option($main_site_id, 'blogname');
$source_title = 'Copied Source Title';

update_blog_option($main_site_id, 'blogname', 'Original Main Title');
update_blog_option($this->source_blog_id, 'blogname', $source_title);

$override_filter = function () use ($main_site_id) {
update_blog_option($main_site_id, 'blogname', 'Temporary Copied Title');

return true;
};

add_filter('wu_main_site_promoter_override_site', $override_filter);

try {
$result = Main_Site_Promoter::get_instance()->promote(
$this->source_blog_id,
[
'backup' => false,
'preserve_main_title' => false,
]
);

$this->assertIsArray($result);
$this->assertSame($source_title, get_blog_option($main_site_id, 'blogname'));
} finally {
remove_filter('wu_main_site_promoter_override_site', $override_filter);
update_blog_option($main_site_id, 'blogname', $original_main_title);
}
}

/**
* The caller's blog context is restored after promotion.
*/
Expand Down
Loading