Upgrade/Install: Introduce populate_site_meta().

Fixes #44896. See #41333.


git-svn-id: https://develop.svn.wordpress.org/trunk@43629 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Felix Arntz
2018-09-05 11:01:36 +00:00
parent 88b725e1cb
commit 46e5c6c91b
2 changed files with 103 additions and 0 deletions

View File

@@ -1292,3 +1292,42 @@ We hope you enjoy your new site. Thanks!
}
$wpdb->query( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.WP.PreparedSQL.NotPrepared
}
/**
* Creates WordPress site meta and sets the default values.
*
* @since 5.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int $site_id Site ID to populate meta for.
* @param array $meta Optional. Custom meta $key => $value pairs to use. Default empty array.
*/
function populate_site_meta( $site_id, array $meta = array() ) {
global $wpdb;
$site_id = (int) $site_id;
if ( ! is_site_meta_supported() ) {
return;
}
if ( empty( $meta ) ) {
return;
}
$insert = '';
foreach ( $meta as $meta_key => $meta_value ) {
if ( is_array( $meta_value ) ) {
$meta_value = serialize( $meta_value );
}
if ( ! empty( $insert ) ) {
$insert .= ', ';
}
$insert .= $wpdb->prepare( '( %d, %s, %s)', $site_id, $meta_key, $meta_value );
}
$wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.WP.PreparedSQL.NotPrepared
wp_cache_set( 'last_changed', microtime(), 'sites' );
}

View File

@@ -7,6 +7,7 @@
class Tests_Admin_Includes_Schema extends WP_UnitTestCase {
private static $options;
private static $blogmeta;
private static $sitemeta;
/**
@@ -16,9 +17,11 @@ class Tests_Admin_Includes_Schema extends WP_UnitTestCase {
global $wpdb;
self::$options = 'testprefix_options';
self::$blogmeta = 'testprefix_blogmeta';
self::$sitemeta = 'testprefix_sitemeta';
$options = self::$options;
$blogmeta = self::$blogmeta;
$sitemeta = self::$sitemeta;
require_once( ABSPATH . 'wp-admin/includes/schema.php' );
@@ -38,6 +41,19 @@ class Tests_Admin_Includes_Schema extends WP_UnitTestCase {
) {$charset_collate}
"
);
$wpdb->query(
"
CREATE TABLE {$blogmeta} (
meta_id bigint(20) unsigned NOT NULL auto_increment,
blog_id bigint(20) unsigned NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY meta_key (meta_key({$max_index_length})),
KEY blog_id (blog_id)
) {$charset_collate}
"
);
$wpdb->query(
"
CREATE TABLE {$sitemeta} (
@@ -60,9 +76,11 @@ class Tests_Admin_Includes_Schema extends WP_UnitTestCase {
global $wpdb;
$options = self::$options;
$blogmeta = self::$blogmeta;
$sitemeta = self::$sitemeta;
$wpdb->query( "DROP TABLE IF EXISTS {$options}" );
$wpdb->query( "DROP TABLE IF EXISTS {$blogmeta}" );
$wpdb->query( "DROP TABLE IF EXISTS {$sitemeta}" );
}
@@ -156,8 +174,54 @@ class Tests_Admin_Includes_Schema extends WP_UnitTestCase {
);
}
/**
* @ticket 44896
* @group multisite
* @group ms-required
* @dataProvider data_populate_site_meta
*/
function test_populate_site_meta( $meta, $expected ) {
global $wpdb;
$orig_blogmeta = $wpdb->blogmeta;
$wpdb->blogmeta = self::$blogmeta;
populate_site_meta( 42, $meta );
$results = array();
foreach ( $expected as $meta_key => $value ) {
$results[ $meta_key ] = get_site_meta( 42, $meta_key, true );
}
$wpdb->query( "TRUNCATE TABLE {$wpdb->blogmeta}" );
$wpdb->blogmeta = $orig_blogmeta;
$this->assertEquals( $expected, $results );
}
public function data_populate_site_meta() {
return array(
array(
array(),
array(
'unknown_value' => '',
),
),
array(
array(
'custom_meta' => '1',
),
array(
'custom_meta' => '1',
),
),
);
}
/**
* @ticket 44895
* @group multisite
* @dataProvider data_populate_network_meta
*/
function test_populate_network_meta( $meta, $expected ) {