2004-09-04 21:22:17 -04:00
< ? php
2008-10-01 21:03:26 -04:00
/**
2008-10-10 14:21:16 -04:00
* WordPress Administration Scheme API
2008-10-01 21:03:26 -04:00
*
* Here we keep the DB structure and option values .
*
* @ package WordPress
* @ subpackage Administration
*/
2008-10-10 14:21:16 -04:00
/**
* The database character collate .
* @ var string
* @ global string
* @ name $charset_collate
*/
2007-02-01 19:04:35 -05:00
$charset_collate = '' ;
2007-02-27 10:24:54 -05:00
2008-02-18 12:33:40 -05:00
// Declare these as global in case schema.php is included from a function.
global $wpdb , $wp_queries ;
2009-12-15 16:01:57 -05:00
if ( ! empty ( $wpdb -> charset ) )
$charset_collate = " DEFAULT CHARACTER SET $wpdb->charset " ;
if ( ! empty ( $wpdb -> collate ) )
$charset_collate .= " COLLATE $wpdb->collate " ;
2007-02-01 19:04:35 -05:00
2008-10-01 21:03:26 -04:00
/** Create WordPress database tables SQL */
$wp_queries = " CREATE TABLE $wpdb->terms (
2009-03-31 17:57:51 -04:00
term_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
2008-08-05 14:27:02 -04:00
name varchar ( 200 ) NOT NULL default '' ,
2007-05-22 01:12:38 -04:00
slug varchar ( 200 ) NOT NULL default '' ,
term_group bigint ( 10 ) NOT NULL default 0 ,
PRIMARY KEY ( term_id ),
2008-07-24 15:28:40 -04:00
UNIQUE KEY slug ( slug ),
KEY name ( name )
2007-05-22 01:12:38 -04:00
) $charset_collate ;
CREATE TABLE $wpdb -> term_taxonomy (
2009-03-31 17:57:51 -04:00
term_taxonomy_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
term_id bigint ( 20 ) unsigned NOT NULL default 0 ,
2007-05-22 01:12:38 -04:00
taxonomy varchar ( 32 ) NOT NULL default '' ,
description longtext NOT NULL ,
2009-03-31 17:57:51 -04:00
parent bigint ( 20 ) unsigned NOT NULL default 0 ,
2007-05-22 01:12:38 -04:00
count bigint ( 20 ) NOT NULL default 0 ,
2007-05-25 18:57:52 -04:00
PRIMARY KEY ( term_taxonomy_id ),
2009-03-06 03:26:45 -05:00
UNIQUE KEY term_id_taxonomy ( term_id , taxonomy ),
KEY taxonomy ( taxonomy )
2007-05-22 01:12:38 -04:00
) $charset_collate ;
CREATE TABLE $wpdb -> term_relationships (
2009-03-31 17:57:51 -04:00
object_id bigint ( 20 ) unsigned NOT NULL default 0 ,
term_taxonomy_id bigint ( 20 ) unsigned NOT NULL default 0 ,
2008-02-14 12:17:57 -05:00
term_order int ( 11 ) NOT NULL default 0 ,
2007-05-25 18:57:52 -04:00
PRIMARY KEY ( object_id , term_taxonomy_id ),
KEY term_taxonomy_id ( term_taxonomy_id )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2009-09-17 16:17:33 -04:00
CREATE TABLE $wpdb -> commentmeta (
meta_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
comment_id bigint ( 20 ) unsigned NOT NULL default '0' ,
meta_key varchar ( 255 ) default NULL ,
meta_value longtext ,
PRIMARY KEY ( meta_id ),
2009-09-21 14:09:21 -04:00
KEY comment_id ( comment_id ),
2009-09-17 16:17:33 -04:00
KEY meta_key ( meta_key )
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> comments (
2005-02-04 17:55:11 -05:00
comment_ID bigint ( 20 ) unsigned NOT NULL auto_increment ,
2009-03-31 17:57:51 -04:00
comment_post_ID bigint ( 20 ) unsigned NOT NULL default '0' ,
2004-09-04 21:22:17 -04:00
comment_author tinytext NOT NULL ,
comment_author_email varchar ( 100 ) NOT NULL default '' ,
comment_author_url varchar ( 200 ) NOT NULL default '' ,
comment_author_IP varchar ( 100 ) NOT NULL default '' ,
comment_date datetime NOT NULL default '0000-00-00 00:00:00' ,
comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00' ,
comment_content text NOT NULL ,
comment_karma int ( 11 ) NOT NULL default '0' ,
2008-02-05 16:05:56 -05:00
comment_approved varchar ( 20 ) NOT NULL default '1' ,
2004-09-04 21:43:40 -04:00
comment_agent varchar ( 255 ) NOT NULL default '' ,
2004-09-05 03:44:58 -04:00
comment_type varchar ( 20 ) NOT NULL default '' ,
2009-04-01 12:10:14 -04:00
comment_parent bigint ( 20 ) unsigned NOT NULL default '0' ,
2009-03-31 17:57:51 -04:00
user_id bigint ( 20 ) unsigned NOT NULL default '0' ,
2004-09-04 21:22:17 -04:00
PRIMARY KEY ( comment_ID ),
KEY comment_approved ( comment_approved ),
2008-02-05 13:04:17 -05:00
KEY comment_post_ID ( comment_post_ID ),
2008-02-13 14:15:30 -05:00
KEY comment_approved_date_gmt ( comment_approved , comment_date_gmt ),
2010-02-19 12:56:40 -05:00
KEY comment_date_gmt ( comment_date_gmt ),
KEY comment_parent ( comment_parent )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> links (
2009-03-31 17:57:51 -04:00
link_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
2004-09-04 21:22:17 -04:00
link_url varchar ( 255 ) NOT NULL default '' ,
link_name varchar ( 255 ) NOT NULL default '' ,
link_image varchar ( 255 ) NOT NULL default '' ,
link_target varchar ( 25 ) NOT NULL default '' ,
link_description varchar ( 255 ) NOT NULL default '' ,
2008-02-05 16:05:56 -05:00
link_visible varchar ( 20 ) NOT NULL default 'Y' ,
2009-04-01 12:10:14 -04:00
link_owner bigint ( 20 ) unsigned NOT NULL default '1' ,
2004-09-04 21:22:17 -04:00
link_rating int ( 11 ) NOT NULL default '0' ,
link_updated datetime NOT NULL default '0000-00-00 00:00:00' ,
link_rel varchar ( 255 ) NOT NULL default '' ,
2005-12-09 14:04:12 -05:00
link_notes mediumtext NOT NULL ,
2004-09-04 21:22:17 -04:00
link_rss varchar ( 255 ) NOT NULL default '' ,
PRIMARY KEY ( link_id ),
KEY link_visible ( link_visible )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> options (
2009-03-31 17:57:51 -04:00
option_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
2004-09-04 21:22:17 -04:00
blog_id int ( 11 ) NOT NULL default '0' ,
option_name varchar ( 64 ) NOT NULL default '' ,
2005-02-01 04:52:36 -05:00
option_value longtext NOT NULL ,
2008-02-05 16:05:56 -05:00
autoload varchar ( 20 ) NOT NULL default 'yes' ,
2009-11-19 11:42:07 -05:00
PRIMARY KEY ( option_id ),
2009-12-07 08:57:18 -05:00
UNIQUE KEY option_name ( option_name )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> postmeta (
2009-03-31 17:57:51 -04:00
meta_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
post_id bigint ( 20 ) unsigned NOT NULL default '0' ,
2004-09-04 21:22:17 -04:00
meta_key varchar ( 255 ) default NULL ,
2005-06-12 16:49:13 -04:00
meta_value longtext ,
2004-09-04 21:22:17 -04:00
PRIMARY KEY ( meta_id ),
KEY post_id ( post_id ),
KEY meta_key ( meta_key )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> posts (
2005-02-04 17:55:11 -05:00
ID bigint ( 20 ) unsigned NOT NULL auto_increment ,
2009-03-31 17:57:51 -04:00
post_author bigint ( 20 ) unsigned NOT NULL default '0' ,
2004-09-04 21:22:17 -04:00
post_date datetime NOT NULL default '0000-00-00 00:00:00' ,
post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00' ,
2005-02-02 04:41:06 -05:00
post_content longtext NOT NULL ,
2004-09-04 21:22:17 -04:00
post_title text NOT NULL ,
2005-12-09 14:04:12 -05:00
post_excerpt text NOT NULL ,
2008-02-05 16:05:56 -05:00
post_status varchar ( 20 ) NOT NULL default 'publish' ,
comment_status varchar ( 20 ) NOT NULL default 'open' ,
ping_status varchar ( 20 ) NOT NULL default 'open' ,
2004-09-04 21:22:17 -04:00
post_password varchar ( 20 ) NOT NULL default '' ,
post_name varchar ( 200 ) NOT NULL default '' ,
2005-12-09 14:04:12 -05:00
to_ping text NOT NULL ,
pinged text NOT NULL ,
2004-09-04 21:22:17 -04:00
post_modified datetime NOT NULL default '0000-00-00 00:00:00' ,
post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00' ,
2005-12-09 14:04:12 -05:00
post_content_filtered text NOT NULL ,
2009-03-31 17:57:51 -04:00
post_parent bigint ( 20 ) unsigned NOT NULL default '0' ,
2004-09-04 21:43:40 -04:00
guid varchar ( 255 ) NOT NULL default '' ,
2004-10-05 04:27:13 -04:00
menu_order int ( 11 ) NOT NULL default '0' ,
2006-04-01 19:33:10 -05:00
post_type varchar ( 20 ) NOT NULL default 'post' ,
2005-11-22 19:38:56 -05:00
post_mime_type varchar ( 100 ) NOT NULL default '' ,
2005-11-16 01:29:36 -05:00
comment_count bigint ( 20 ) NOT NULL default '0' ,
2004-09-04 21:22:17 -04:00
PRIMARY KEY ( ID ),
2006-04-01 19:33:10 -05:00
KEY post_name ( post_name ),
2008-10-22 18:03:41 -04:00
KEY type_status_date ( post_type , post_status , post_date , ID ),
2010-03-03 14:08:30 -05:00
KEY post_parent ( post_parent ),
KEY post_author ( post_author )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2004-09-04 21:22:17 -04:00
CREATE TABLE $wpdb -> users (
2005-02-04 17:55:11 -05:00
ID bigint ( 20 ) unsigned NOT NULL auto_increment ,
user_login varchar ( 60 ) NOT NULL default '' ,
2004-09-04 21:22:17 -04:00
user_pass varchar ( 64 ) NOT NULL default '' ,
user_nicename varchar ( 50 ) NOT NULL default '' ,
user_email varchar ( 100 ) NOT NULL default '' ,
user_url varchar ( 100 ) NOT NULL default '' ,
2004-12-17 14:27:35 -05:00
user_registered datetime NOT NULL default '0000-00-00 00:00:00' ,
2004-09-04 21:22:17 -04:00
user_activation_key varchar ( 60 ) NOT NULL default '' ,
user_status int ( 11 ) NOT NULL default '0' ,
2005-06-12 16:49:13 -04:00
display_name varchar ( 250 ) NOT NULL default '' ,
2004-09-04 21:22:17 -04:00
PRIMARY KEY ( ID ),
2007-09-11 14:13:56 -04:00
KEY user_login_key ( user_login ),
KEY user_nicename ( user_nicename )
2007-02-01 19:04:35 -05:00
) $charset_collate ;
2005-06-12 16:49:13 -04:00
CREATE TABLE $wpdb -> usermeta (
2009-03-31 17:57:51 -04:00
umeta_id bigint ( 20 ) unsigned NOT NULL auto_increment ,
user_id bigint ( 20 ) unsigned NOT NULL default '0' ,
2005-06-12 16:49:13 -04:00
meta_key varchar ( 255 ) default NULL ,
meta_value longtext ,
PRIMARY KEY ( umeta_id ),
KEY user_id ( user_id ),
KEY meta_key ( meta_key )
2007-02-01 19:04:35 -05:00
) $charset_collate ; " ;
2004-09-04 21:22:17 -04:00
2008-10-01 21:03:26 -04:00
/**
* Create WordPress options and set the default values .
*
2008-10-10 14:21:16 -04:00
* @ since 1.5 . 0
2008-10-01 21:03:26 -04:00
* @ uses $wpdb
* @ uses $wp_db_version
*/
2004-09-04 21:22:17 -04:00
function populate_options () {
2010-02-01 15:01:14 -05:00
global $wpdb , $wp_db_version , $current_site ;
2008-08-09 01:36:14 -04:00
2008-06-24 13:36:21 -04:00
$guessurl = wp_guess_url ();
2008-08-09 01:36:14 -04:00
2008-04-28 15:55:00 -04:00
do_action ( 'populate_options' );
2008-08-09 01:36:14 -04:00
2006-01-14 17:09:51 -05:00
if ( ini_get ( 'safe_mode' ) ) {
2009-12-15 12:53:51 -05:00
// Safe mode can break mkdir() so use a flat structure by default.
2009-03-10 18:41:33 -04:00
$uploads_use_yearmonth_folders = 0 ;
2006-01-14 17:09:51 -05:00
} else {
2009-03-10 18:41:33 -04:00
$uploads_use_yearmonth_folders = 1 ;
2006-01-14 17:09:51 -05:00
}
2006-11-19 02:56:05 -05:00
2009-03-10 18:41:33 -04:00
$options = array (
'siteurl' => $guessurl ,
2010-04-29 23:17:49 -04:00
'blogname' => __ ( 'My Site' ),
2010-02-01 15:01:14 -05:00
/* translators: blog tagline */
'blogdescription' => __ ( 'Just another WordPress site' ),
2009-03-10 18:41:33 -04:00
'users_can_register' => 0 ,
'admin_email' => 'you@example.com' ,
'start_of_week' => 1 ,
'use_balanceTags' => 0 ,
'use_smilies' => 1 ,
'require_name_email' => 1 ,
'comments_notify' => 1 ,
'posts_per_rss' => 10 ,
'rss_use_excerpt' => 0 ,
'mailserver_url' => 'mail.example.com' ,
'mailserver_login' => 'login@example.com' ,
'mailserver_pass' => 'password' ,
'mailserver_port' => 110 ,
'default_category' => 1 ,
'default_comment_status' => 'open' ,
'default_ping_status' => 'open' ,
'default_pingback_flag' => 1 ,
2011-01-05 19:57:24 -05:00
'default_post_edit_rows' => 20 ,
2009-03-10 18:41:33 -04:00
'posts_per_page' => 10 ,
2009-03-12 23:53:39 -04:00
/* translators: default date format, see http://php.net/date */
2009-03-10 18:41:33 -04:00
'date_format' => __ ( 'F j, Y' ),
2009-03-12 23:53:39 -04:00
/* translators: default time format, see http://php.net/date */
2009-03-10 18:41:33 -04:00
'time_format' => __ ( 'g:i a' ),
2009-03-12 23:53:39 -04:00
/* translators: links last updated date format, see http://php.net/date */
2009-03-10 18:41:33 -04:00
'links_updated_date_format' => __ ( 'F j, Y g:i a' ),
'links_recently_updated_prepend' => '<em>' ,
'links_recently_updated_append' => '</em>' ,
'links_recently_updated_time' => 120 ,
'comment_moderation' => 0 ,
'moderation_notify' => 1 ,
'permalink_structure' => '' ,
'gzipcompression' => 0 ,
'hack_file' => 0 ,
'blog_charset' => 'UTF-8' ,
'moderation_keys' => '' ,
'active_plugins' => array (),
'home' => $guessurl ,
'category_base' => '' ,
'ping_sites' => 'http://rpc.pingomatic.com/' ,
'advanced_edit' => 0 ,
'comment_max_links' => 2 ,
'gmt_offset' => date ( 'Z' ) / 3600 ,
// 1.5
'default_email_category' => 1 ,
'recently_edited' => '' ,
2010-03-17 13:42:49 -04:00
'template' => WP_DEFAULT_THEME ,
'stylesheet' => WP_DEFAULT_THEME ,
2009-03-10 18:41:33 -04:00
'comment_whitelist' => 1 ,
'blacklist_keys' => '' ,
'comment_registration' => 0 ,
'rss_language' => 'en' ,
'html_type' => 'text/html' ,
// 1.5.1
'use_trackback' => 0 ,
// 2.0
'default_role' => 'subscriber' ,
'db_version' => $wp_db_version ,
// 2.0.1
'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders ,
2009-12-15 12:53:51 -05:00
'upload_path' => '' ,
2009-03-10 18:41:33 -04:00
2006-02-18 02:40:43 -05:00
// 2.1
2009-03-10 18:41:33 -04:00
'blog_public' => '1' ,
'default_link_category' => 2 ,
'show_on_front' => 'posts' ,
2006-01-14 17:09:51 -05:00
2007-03-31 05:19:32 -04:00
// 2.2
2009-03-10 18:41:33 -04:00
'tag_base' => '' ,
2007-03-31 05:19:32 -04:00
2008-02-07 01:07:12 -05:00
// 2.5
2009-03-10 18:41:33 -04:00
'show_avatars' => '1' ,
'avatar_rating' => 'G' ,
'upload_url_path' => '' ,
'thumbnail_size_w' => 150 ,
'thumbnail_size_h' => 150 ,
'thumbnail_crop' => 1 ,
'medium_size_w' => 300 ,
'medium_size_h' => 300 ,
2008-02-07 01:07:12 -05:00
2008-05-02 20:56:16 -04:00
// 2.6
2009-03-10 18:41:33 -04:00
'avatar_default' => 'mystery' ,
'enable_app' => 0 ,
'enable_xmlrpc' => 0 ,
2008-08-09 01:36:14 -04:00
2008-08-15 11:40:35 -04:00
// 2.7
2009-03-10 18:41:33 -04:00
'large_size_w' => 1024 ,
'large_size_h' => 1024 ,
'image_default_link_type' => 'file' ,
'image_default_size' => '' ,
'image_default_align' => '' ,
'close_comments_for_old_posts' => 0 ,
'close_comments_days_old' => 14 ,
2010-02-20 20:02:00 -05:00
'thread_comments' => 1 ,
2009-03-10 18:41:33 -04:00
'thread_comments_depth' => 5 ,
2010-03-09 16:04:41 -05:00
'page_comments' => 0 ,
2009-03-10 18:41:33 -04:00
'comments_per_page' => 50 ,
'default_comments_page' => 'newest' ,
'comment_order' => 'asc' ,
'sticky_posts' => array (),
'widget_categories' => array (),
'widget_text' => array (),
2009-05-11 13:31:30 -04:00
'widget_rss' => array (),
2009-05-24 19:47:49 -04:00
2009-05-11 13:31:30 -04:00
// 2.8
2009-10-13 13:04:22 -04:00
'timezone_string' => '' ,
// 2.9
'embed_autourls' => 1 ,
'embed_size_w' => '' ,
'embed_size_h' => 600 ,
2010-06-11 13:04:06 -04:00
// 3.0
'page_for_posts' => 0 ,
'page_on_front' => 0 ,
2010-12-19 00:36:11 -05:00
// 3.1
'default_post_format' => 0 ,
2009-03-10 18:41:33 -04:00
);
2010-01-18 19:04:25 -05:00
// 3.0 multisite
if ( is_multisite () ) {
2010-02-01 15:01:14 -05:00
/* translators: blog tagline */
2010-01-19 11:14:06 -05:00
$options [ 'blogdescription' ] = sprintf ( __ ( 'Just another %s site' ), $current_site -> site_name );
$options [ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/' ;
2010-01-18 19:04:25 -05:00
}
2009-03-10 21:07:12 -04:00
// Set autoload to no for these options
$fat_options = array ( 'moderation_keys' , 'recently_edited' , 'blacklist_keys' );
2009-03-10 18:41:33 -04:00
$existing_options = $wpdb -> get_col ( " SELECT option_name FROM $wpdb->options " );
$insert = '' ;
foreach ( $options as $option => $value ) {
if ( in_array ( $option , $existing_options ) )
continue ;
2009-03-10 21:07:12 -04:00
if ( in_array ( $option , $fat_options ) )
$autoload = 'no' ;
else
$autoload = 'yes' ;
2009-03-10 18:41:33 -04:00
$option = $wpdb -> escape ( $option );
2009-03-26 13:59:27 -04:00
if ( is_array ( $value ) )
$value = serialize ( $value );
2009-03-10 18:41:33 -04:00
$value = $wpdb -> escape ( $value );
if ( ! empty ( $insert ) )
2009-03-17 22:43:45 -04:00
$insert .= ', ' ;
2009-03-10 21:07:12 -04:00
$insert .= " (' $option ', ' $value ', ' $autoload ') " ;
2009-03-10 18:41:33 -04:00
}
if ( ! empty ( $insert ) )
2009-03-10 21:07:12 -04:00
$wpdb -> query ( " INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert );
2009-03-10 18:41:33 -04:00
// in case it is set, but blank, update "home"
if ( ! __get_option ( 'home' ) ) update_option ( 'home' , $guessurl );
2008-12-09 13:03:31 -05:00
2004-09-04 21:22:17 -04:00
// Delete unused options
2010-10-29 18:39:05 -04:00
$unusedoptions = array ( 'blodotgsping_url' , 'bodyterminator' , 'emailtestonly' , 'phoneemail_separator' , 'smilies_directory' , 'subjectprefix' , 'use_bbcode' , 'use_blodotgsping' , 'use_phoneemail' , 'use_quicktags' , 'use_weblogsping' , 'weblogs_cache_file' , 'use_preview' , 'use_htmltrans' , 'smilies_directory' , 'fileupload_allowedusers' , 'use_phoneemail' , 'default_post_status' , 'default_post_category' , 'archive_mode' , 'time_difference' , 'links_minadminlevel' , 'links_use_adminlevels' , 'links_rating_type' , 'links_rating_char' , 'links_rating_ignore_zero' , 'links_rating_single_image' , 'links_rating_image0' , 'links_rating_image1' , 'links_rating_image2' , 'links_rating_image3' , 'links_rating_image4' , 'links_rating_image5' , 'links_rating_image6' , 'links_rating_image7' , 'links_rating_image8' , 'links_rating_image9' , 'weblogs_cacheminutes' , 'comment_allowed_tags' , 'search_engine_friendly_urls' , 'default_geourl_lat' , 'default_geourl_lon' , 'use_default_geourl' , 'weblogs_xml_url' , 'new_users_can_blog' , '_wpnonce' , '_wp_http_referer' , 'Update' , 'action' , 'rich_editing' , 'autosave_interval' , 'deactivated_plugins' , 'can_compress_scripts' , 'page_uris' , 'update_core' , 'update_plugins' , 'update_themes' , 'doing_cron' , 'random_seed' , 'rss_excerpt_length' , 'secret' , 'use_linksupdate' , 'default_comment_status_page' , 'wporg_popular_tags' , 'what_to_show' );
2010-06-19 03:28:27 -04:00
foreach ( $unusedoptions as $option )
2004-09-04 21:22:17 -04:00
delete_option ( $option );
2010-01-15 17:11:12 -05:00
2009-11-18 17:04:07 -05:00
// delete obsolete magpie stuff
$wpdb -> query ( " DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f] { 32}(_ts)? $ ' " );
2004-09-04 21:22:17 -04:00
}
2005-01-10 15:21:06 -05:00
2008-10-01 21:03:26 -04:00
/**
* Execute WordPress role creation for the various WordPress versions .
*
2008-10-10 14:21:16 -04:00
* @ since 2.0 . 0
2008-10-01 21:03:26 -04:00
*/
2005-07-11 18:39:50 -04:00
function populate_roles () {
2006-02-11 04:56:02 -05:00
populate_roles_160 ();
populate_roles_210 ();
2007-04-24 19:27:20 -04:00
populate_roles_230 ();
2008-02-02 02:57:51 -05:00
populate_roles_250 ();
2008-06-06 15:21:35 -04:00
populate_roles_260 ();
2008-08-04 17:01:09 -04:00
populate_roles_270 ();
2009-02-11 18:10:11 -05:00
populate_roles_280 ();
2010-01-18 17:21:36 -05:00
populate_roles_300 ();
2005-10-27 18:04:12 -04:00
}
2008-10-01 21:03:26 -04:00
/**
* Create the roles for WordPress 2.0
*
* @ since 2.0 . 0
*/
2005-10-27 18:04:12 -04:00
function populate_roles_160 () {
2005-09-20 19:48:28 -04:00
// Add roles
2008-02-19 15:28:54 -05:00
// Dummy gettext calls to get strings in the catalog.
2009-03-10 19:02:29 -04:00
/* translators: user role */
_x ( 'Administrator' , 'User role' );
/* translators: user role */
_x ( 'Editor' , 'User role' );
/* translators: user role */
_x ( 'Author' , 'User role' );
/* translators: user role */
_x ( 'Contributor' , 'User role' );
/* translators: user role */
_x ( 'Subscriber' , 'User role' );
2008-02-19 15:28:54 -05:00
2009-03-10 19:02:29 -04:00
add_role ( 'administrator' , 'Administrator' );
add_role ( 'editor' , 'Editor' );
add_role ( 'author' , 'Author' );
add_role ( 'contributor' , 'Contributor' );
add_role ( 'subscriber' , 'Subscriber' );
2006-02-12 02:53:23 -05:00
2005-09-20 19:48:28 -04:00
// Add caps for Administrator role
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'switch_themes' );
$role -> add_cap ( 'edit_themes' );
$role -> add_cap ( 'activate_plugins' );
$role -> add_cap ( 'edit_plugins' );
$role -> add_cap ( 'edit_users' );
$role -> add_cap ( 'edit_files' );
$role -> add_cap ( 'manage_options' );
$role -> add_cap ( 'moderate_comments' );
$role -> add_cap ( 'manage_categories' );
$role -> add_cap ( 'manage_links' );
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'import' );
$role -> add_cap ( 'unfiltered_html' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'edit_others_posts' );
$role -> add_cap ( 'edit_published_posts' );
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'edit_pages' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_10' );
$role -> add_cap ( 'level_9' );
$role -> add_cap ( 'level_8' );
$role -> add_cap ( 'level_7' );
$role -> add_cap ( 'level_6' );
2005-09-24 01:38:09 -04:00
$role -> add_cap ( 'level_5' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'level_4' );
$role -> add_cap ( 'level_3' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 02:53:23 -05:00
2005-09-20 19:48:28 -04:00
// Add caps for Editor role
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'editor' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'moderate_comments' );
$role -> add_cap ( 'manage_categories' );
$role -> add_cap ( 'manage_links' );
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'unfiltered_html' );
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'edit_others_posts' );
$role -> add_cap ( 'edit_published_posts' );
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'edit_pages' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_7' );
$role -> add_cap ( 'level_6' );
2005-09-24 01:38:09 -04:00
$role -> add_cap ( 'level_5' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'level_4' );
$role -> add_cap ( 'level_3' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 02:53:23 -05:00
2005-09-20 19:48:28 -04:00
// Add caps for Author role
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'author' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'upload_files' );
$role -> add_cap ( 'edit_posts' );
2005-11-30 02:47:22 -05:00
$role -> add_cap ( 'edit_published_posts' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'publish_posts' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_2' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 02:53:23 -05:00
2005-09-20 19:48:28 -04:00
// Add caps for Contributor role
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'contributor' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'edit_posts' );
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_1' );
$role -> add_cap ( 'level_0' );
2006-02-12 02:53:23 -05:00
2005-09-20 19:48:28 -04:00
// Add caps for Subscriber role
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'subscriber' );
2005-09-20 19:48:28 -04:00
$role -> add_cap ( 'read' );
$role -> add_cap ( 'level_0' );
2005-07-11 18:39:50 -04:00
}
2005-09-20 19:48:28 -04:00
2008-10-01 21:03:26 -04:00
/**
* Create and modify WordPress roles for WordPress 2.1 .
*
* @ since 2.1 . 0
*/
2006-02-11 04:56:02 -05:00
function populate_roles_210 () {
$roles = array ( 'administrator' , 'editor' );
foreach ( $roles as $role ) {
2008-12-12 15:47:18 -05:00
$role =& get_role ( $role );
2006-02-11 04:56:02 -05:00
if ( empty ( $role ) )
continue ;
$role -> add_cap ( 'edit_others_pages' );
$role -> add_cap ( 'edit_published_pages' );
$role -> add_cap ( 'publish_pages' );
$role -> add_cap ( 'delete_pages' );
$role -> add_cap ( 'delete_others_pages' );
$role -> add_cap ( 'delete_published_pages' );
$role -> add_cap ( 'delete_posts' );
$role -> add_cap ( 'delete_others_posts' );
$role -> add_cap ( 'delete_published_posts' );
2006-05-11 19:13:35 -04:00
$role -> add_cap ( 'delete_private_posts' );
$role -> add_cap ( 'edit_private_posts' );
$role -> add_cap ( 'read_private_posts' );
$role -> add_cap ( 'delete_private_pages' );
$role -> add_cap ( 'edit_private_pages' );
$role -> add_cap ( 'read_private_pages' );
2006-02-11 04:56:02 -05:00
}
2006-02-12 02:53:23 -05:00
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2006-06-05 12:52:21 -04:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_users' );
$role -> add_cap ( 'create_users' );
}
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'author' );
2006-02-11 04:56:02 -05:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_posts' );
2006-02-12 02:53:23 -05:00
$role -> add_cap ( 'delete_published_posts' );
2006-02-11 04:56:02 -05:00
}
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'contributor' );
2006-02-11 04:56:02 -05:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'delete_posts' );
}
}
2008-10-01 21:03:26 -04:00
/**
* Create and modify WordPress roles for WordPress 2.3 .
*
* @ since 2.3 . 0
*/
2007-04-24 19:27:20 -04:00
function populate_roles_230 () {
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2007-06-13 22:25:30 -04:00
2007-04-24 19:27:20 -04:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'unfiltered_upload' );
}
}
2008-10-01 21:03:26 -04:00
/**
* Create and modify WordPress roles for WordPress 2.5 .
*
* @ since 2.5 . 0
*/
2008-02-02 02:57:51 -05:00
function populate_roles_250 () {
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2008-02-02 02:57:51 -05:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'edit_dashboard' );
}
}
2008-10-01 21:03:26 -04:00
/**
* Create and modify WordPress roles for WordPress 2.6 .
*
* @ since 2.6 . 0
*/
2008-06-06 15:21:35 -04:00
function populate_roles_260 () {
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2008-06-06 15:21:35 -04:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'update_plugins' );
$role -> add_cap ( 'delete_plugins' );
}
}
2008-10-01 21:03:26 -04:00
/**
* Create and modify WordPress roles for WordPress 2.7 .
*
* @ since 2.7 . 0
*/
2008-08-04 17:01:09 -04:00
function populate_roles_270 () {
2008-12-12 15:47:18 -05:00
$role =& get_role ( 'administrator' );
2008-08-04 17:01:09 -04:00
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'install_plugins' );
2008-09-26 02:43:53 -04:00
$role -> add_cap ( 'update_themes' );
2008-08-04 17:01:09 -04:00
}
}
2009-02-11 18:10:11 -05:00
/**
* Create and modify WordPress roles for WordPress 2.8 .
*
* @ since 2.8 . 0
*/
function populate_roles_280 () {
$role =& get_role ( 'administrator' );
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'install_themes' );
}
}
2010-01-18 17:21:36 -05:00
/**
2010-01-18 17:34:16 -05:00
* Create and modify WordPress roles for WordPress 3.0 .
2010-01-18 17:21:36 -05:00
*
2010-03-26 15:13:36 -04:00
* @ since 3.0 . 0
2010-01-18 17:21:36 -05:00
*/
function populate_roles_300 () {
$role =& get_role ( 'administrator' );
if ( ! empty ( $role ) ) {
$role -> add_cap ( 'update_core' );
2010-04-22 15:48:13 -04:00
$role -> add_cap ( 'list_users' );
2010-01-18 17:21:36 -05:00
$role -> add_cap ( 'remove_users' );
2010-04-21 12:33:13 -04:00
$role -> add_cap ( 'add_users' );
2010-04-21 13:43:53 -04:00
$role -> add_cap ( 'promote_users' );
2010-04-16 11:36:44 -04:00
$role -> add_cap ( 'edit_theme_options' );
2010-05-27 05:49:38 -04:00
$role -> add_cap ( 'delete_themes' );
2010-06-01 14:02:05 -04:00
$role -> add_cap ( 'export' );
2010-01-18 17:21:36 -05:00
}
}
2010-01-18 19:04:25 -05:00
/**
* populate network settings
*
2010-03-26 15:13:36 -04:00
* @ since 3.0 . 0
2010-01-18 19:04:25 -05:00
*
* @ param int $network_id id of network to populate
2010-03-10 20:51:24 -05:00
* @ return bool | WP_Error True on success , or WP_Error on warning ( with the install otherwise successful ,
* so the error code must be checked ) or failure .
2010-01-18 19:04:25 -05:00
*/
2010-03-10 03:17:07 -05:00
function populate_network ( $network_id = 1 , $domain = '' , $email = '' , $site_name = '' , $path = '/' , $subdomain_install = false ) {
2010-02-19 21:01:46 -05:00
global $wpdb , $current_site , $wp_db_version , $wp_rewrite ;
2010-01-18 19:04:25 -05:00
2010-03-10 20:51:24 -05:00
$errors = new WP_Error ();
if ( '' == $domain )
$errors -> add ( 'empty_domain' , __ ( 'You must provide a domain name.' ) );
if ( '' == $site_name )
$errors -> add ( 'empty_sitename' , __ ( 'You must provide a name for your network of sites.' ) );
2010-01-18 19:04:25 -05:00
// check for network collision
2010-03-10 20:51:24 -05:00
if ( $network_id == $wpdb -> get_var ( $wpdb -> prepare ( " SELECT id FROM $wpdb->site WHERE id = %d " , $network_id ) ) )
$errors -> add ( 'siteid_exists' , __ ( 'The network already exists.' ) );
2010-01-18 19:04:25 -05:00
$site_user = get_user_by_email ( $email );
2010-03-10 20:51:24 -05:00
if ( ! is_email ( $email ) )
$errors -> add ( 'invalid_email' , __ ( 'You must provide a valid e-mail address.' ) );
if ( $errors -> get_error_code () )
return $errors ;
2010-01-18 19:04:25 -05:00
// set up site tables
$template = get_option ( 'template' );
$stylesheet = get_option ( 'stylesheet' );
2010-02-12 17:45:35 -05:00
$allowed_themes = array ( $stylesheet => true );
2010-01-19 11:14:06 -05:00
if ( $template != $stylesheet )
2010-02-12 17:45:35 -05:00
$allowed_themes [ $template ] = true ;
2010-05-06 15:53:40 -04:00
if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template )
$allowed_themes [ WP_DEFAULT_THEME ] = true ;
2010-01-19 11:14:06 -05:00
2010-01-27 14:13:00 -05:00
if ( 1 == $network_id ) {
$wpdb -> insert ( $wpdb -> site , array ( 'domain' => $domain , 'path' => $path ) );
$network_id = $wpdb -> insert_id ;
} else {
2010-06-12 01:16:21 -04:00
$wpdb -> insert ( $wpdb -> site , array ( 'domain' => $domain , 'path' => $path , 'id' => $network_id ) );
2010-01-18 19:04:25 -05:00
}
2010-01-27 14:13:00 -05:00
2010-01-18 19:04:25 -05:00
if ( ! is_multisite () ) {
$site_admins = array ( $site_user -> user_login );
2010-12-16 19:11:21 -05:00
$users = get_users ( array ( 'fields' => array ( 'ID' , 'user_login' ) ) );
2010-01-18 19:04:25 -05:00
if ( $users ) {
foreach ( $users as $user ) {
2010-01-19 11:14:06 -05:00
if ( is_super_admin ( $user -> ID ) && ! in_array ( $user -> user_login , $site_admins ) )
2010-01-18 19:04:25 -05:00
$site_admins [] = $user -> user_login ;
}
}
} else {
$site_admins = get_site_option ( 'site_admins' );
}
2010-01-27 14:13:00 -05:00
$welcome_email = __ ( ' Dear User ,
2010-01-18 19:04:25 -05:00
2010-05-01 03:09:38 -04:00
Your new SITE_NAME site has been successfully set up at :
2010-01-18 19:04:25 -05:00
BLOG_URL
You can log in to the administrator account with the following information :
Username : USERNAME
Password : PASSWORD
Login Here : BLOG_URLwp - login . php
2010-05-01 03:09:38 -04:00
We hope you enjoy your new site .
2010-01-18 19:04:25 -05:00
Thanks !
2010-01-27 14:13:00 -05:00
-- The Team @ SITE_NAME ' );
$sitemeta = array (
2010-05-24 15:18:30 -04:00
'site_name' => $site_name ,
2010-01-27 14:13:00 -05:00
'admin_email' => $site_user -> user_email ,
'admin_user_id' => $site_user -> ID ,
'registration' => 'none' ,
'upload_filetypes' => 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf' ,
'blog_upload_space' => 10 ,
'fileupload_maxk' => 1500 ,
'site_admins' => $site_admins ,
'allowedthemes' => $allowed_themes ,
2010-05-15 18:18:40 -04:00
'illegal_names' => array ( 'www' , 'web' , 'root' , 'admin' , 'main' , 'invite' , 'administrator' , 'files' ),
2010-01-27 14:13:00 -05:00
'wpmu_upgrade_site' => $wp_db_version ,
'welcome_email' => $welcome_email ,
'first_post' => __ ( 'Welcome to <a href="SITE_URL">SITE_NAME</a>. This is your first post. Edit or delete it, then start blogging!' ),
// @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
2010-03-18 19:35:04 -04:00
'siteurl' => get_option ( 'siteurl' ) . '/' ,
2010-03-05 16:01:08 -05:00
'add_new_users' => '0' ,
2010-03-10 03:34:42 -05:00
'upload_space_check_disabled' => '0' ,
'subdomain_install' => intval ( $subdomain_install ),
2010-03-16 13:17:55 -04:00
'global_terms_enabled' => global_terms_enabled () ? '1' : '0'
2010-01-27 14:13:00 -05:00
);
2010-06-23 01:10:45 -04:00
if ( ! $subdomain_install )
2010-05-08 14:37:38 -04:00
$sitemeta [ 'illegal_names' ][] = 'blog' ;
2010-01-27 14:13:00 -05:00
$insert = '' ;
foreach ( $sitemeta as $meta_key => $meta_value ) {
$meta_key = $wpdb -> escape ( $meta_key );
if ( is_array ( $meta_value ) )
$meta_value = serialize ( $meta_value );
$meta_value = $wpdb -> escape ( $meta_value );
if ( ! empty ( $insert ) )
$insert .= ', ' ;
$insert .= " ( $network_id , ' $meta_key ', ' $meta_value ') " ;
}
$wpdb -> query ( " INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert );
2010-01-18 19:04:25 -05:00
$current_site -> domain = $domain ;
2010-02-19 16:19:54 -05:00
$current_site -> path = $path ;
2010-01-18 19:04:25 -05:00
$current_site -> site_name = ucfirst ( $domain );
if ( ! is_multisite () ) {
2010-04-05 21:41:34 -04:00
$wpdb -> insert ( $wpdb -> blogs , array ( 'site_id' => $network_id , 'domain' => $domain , 'path' => $path , 'registered' => current_time ( 'mysql' ) ) );
2010-02-01 13:01:23 -05:00
$blog_id = $wpdb -> insert_id ;
2010-02-22 16:25:32 -05:00
update_user_meta ( $site_user -> ID , 'source_domain' , $domain );
update_user_meta ( $site_user -> ID , 'primary_blog' , $blog_id );
2010-03-08 14:52:29 -05:00
if ( ! $upload_path = get_option ( 'upload_path' ) ) {
$upload_path = substr ( WP_CONTENT_DIR , strlen ( ABSPATH ) ) . '/uploads' ;
update_option ( 'upload_path' , $upload_path );
}
2010-06-10 17:31:46 -04:00
update_option ( 'fileupload_url' , get_option ( 'siteurl' ) . '/' . $upload_path );
2010-01-18 19:04:25 -05:00
}
2010-03-10 03:17:07 -05:00
if ( $subdomain_install )
2010-01-18 19:04:25 -05:00
update_option ( 'permalink_structure' , '/%year%/%monthnum%/%day%/%postname%/' );
2010-01-19 11:14:06 -05:00
else
2010-01-18 19:04:25 -05:00
update_option ( 'permalink_structure' , '/blog/%year%/%monthnum%/%day%/%postname%/' );
2010-01-19 11:14:06 -05:00
2010-01-18 19:04:25 -05:00
$wp_rewrite -> flush_rules ();
2010-03-10 03:17:07 -05:00
if ( $subdomain_install ) {
2010-01-18 19:04:25 -05:00
$vhost_ok = false ;
2010-03-10 20:51:24 -05:00
$errstr = '' ;
2010-01-18 19:04:25 -05:00
$hostname = substr ( md5 ( time () ), 0 , 6 ) . '.' . $domain ; // Very random hostname!
$page = wp_remote_get ( 'http://' . $hostname , array ( 'timeout' => 5 , 'httpversion' => '1.1' ) );
2010-03-10 20:51:24 -05:00
if ( is_wp_error ( $page ) )
$errstr = $page -> get_error_message ();
elseif ( 200 == $page [ 'response' ][ 'code' ] )
2010-01-18 19:04:25 -05:00
$vhost_ok = true ;
2010-03-10 20:51:24 -05:00
2010-03-10 03:17:07 -05:00
if ( ! $vhost_ok ) {
2010-03-10 20:51:24 -05:00
$msg = '<p><strong>' . __ ( 'Warning! Wildcard DNS may not be configured correctly!' ) . '</strong></p>' ;
2010-04-28 03:40:49 -04:00
$msg .= '<p>' . sprintf ( __ ( 'The installer attempted to contact a random hostname (<code>%1$s</code>) on your domain.' ), $hostname );
2010-03-10 20:51:24 -05:00
if ( ! empty ( $errstr ) )
2010-04-28 03:40:49 -04:00
$msg .= ' ' . sprintf ( __ ( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );
2010-03-10 20:51:24 -05:00
$msg .= '</p>' ;
2010-06-21 01:36:18 -04:00
$msg .= '<p>' . __ ( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a <code>*</code> hostname record pointing at your web server in your DNS configuration tool.' ) . '</p>' ;
2010-03-10 20:51:24 -05:00
$msg .= '<p>' . __ ( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '</p>' ;
return new WP_Error ( 'no_wildcard_dns' , $msg );
2010-01-18 19:04:25 -05:00
}
}
2010-03-10 20:51:24 -05:00
return true ;
2010-01-18 19:04:25 -05:00
}
2010-01-19 11:14:06 -05:00
2007-05-22 01:12:38 -04:00
?>