web/wp-admin/includes/schema.php
changeset 136 bde1974c263b
child 194 32102edaa81b
equal deleted inserted replaced
135:53cff4b4a802 136:bde1974c263b
       
     1 <?php
       
     2 /**
       
     3  * WordPress Administration Scheme API
       
     4  *
       
     5  * Here we keep the DB structure and option values.
       
     6  *
       
     7  * @package WordPress
       
     8  * @subpackage Administration
       
     9  */
       
    10 
       
    11 /**
       
    12  * The database character collate.
       
    13  * @var string
       
    14  * @global string
       
    15  * @name $charset_collate
       
    16  */
       
    17 $charset_collate = '';
       
    18 
       
    19 // Declare these as global in case schema.php is included from a function.
       
    20 global $wpdb, $wp_queries;
       
    21 
       
    22 if ( ! empty($wpdb->charset) )
       
    23 	$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
       
    24 if ( ! empty($wpdb->collate) )
       
    25 	$charset_collate .= " COLLATE $wpdb->collate";
       
    26 
       
    27 /** Create WordPress database tables SQL */
       
    28 $wp_queries = "CREATE TABLE $wpdb->terms (
       
    29  term_id bigint(20) unsigned NOT NULL auto_increment,
       
    30  name varchar(200) NOT NULL default '',
       
    31  slug varchar(200) NOT NULL default '',
       
    32  term_group bigint(10) NOT NULL default 0,
       
    33  PRIMARY KEY  (term_id),
       
    34  UNIQUE KEY slug (slug),
       
    35  KEY name (name)
       
    36 ) $charset_collate;
       
    37 CREATE TABLE $wpdb->term_taxonomy (
       
    38  term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
       
    39  term_id bigint(20) unsigned NOT NULL default 0,
       
    40  taxonomy varchar(32) NOT NULL default '',
       
    41  description longtext NOT NULL,
       
    42  parent bigint(20) unsigned NOT NULL default 0,
       
    43  count bigint(20) NOT NULL default 0,
       
    44  PRIMARY KEY  (term_taxonomy_id),
       
    45  UNIQUE KEY term_id_taxonomy (term_id,taxonomy),
       
    46  KEY taxonomy (taxonomy)
       
    47 ) $charset_collate;
       
    48 CREATE TABLE $wpdb->term_relationships (
       
    49  object_id bigint(20) unsigned NOT NULL default 0,
       
    50  term_taxonomy_id bigint(20) unsigned NOT NULL default 0,
       
    51  term_order int(11) NOT NULL default 0,
       
    52  PRIMARY KEY  (object_id,term_taxonomy_id),
       
    53  KEY term_taxonomy_id (term_taxonomy_id)
       
    54 ) $charset_collate;
       
    55 CREATE TABLE $wpdb->commentmeta (
       
    56   meta_id bigint(20) unsigned NOT NULL auto_increment,
       
    57   comment_id bigint(20) unsigned NOT NULL default '0',
       
    58   meta_key varchar(255) default NULL,
       
    59   meta_value longtext,
       
    60   PRIMARY KEY  (meta_id),
       
    61   KEY comment_id (comment_id),
       
    62   KEY meta_key (meta_key)
       
    63 ) $charset_collate;
       
    64 CREATE TABLE $wpdb->comments (
       
    65   comment_ID bigint(20) unsigned NOT NULL auto_increment,
       
    66   comment_post_ID bigint(20) unsigned NOT NULL default '0',
       
    67   comment_author tinytext NOT NULL,
       
    68   comment_author_email varchar(100) NOT NULL default '',
       
    69   comment_author_url varchar(200) NOT NULL default '',
       
    70   comment_author_IP varchar(100) NOT NULL default '',
       
    71   comment_date datetime NOT NULL default '0000-00-00 00:00:00',
       
    72   comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
       
    73   comment_content text NOT NULL,
       
    74   comment_karma int(11) NOT NULL default '0',
       
    75   comment_approved varchar(20) NOT NULL default '1',
       
    76   comment_agent varchar(255) NOT NULL default '',
       
    77   comment_type varchar(20) NOT NULL default '',
       
    78   comment_parent bigint(20) unsigned NOT NULL default '0',
       
    79   user_id bigint(20) unsigned NOT NULL default '0',
       
    80   PRIMARY KEY  (comment_ID),
       
    81   KEY comment_approved (comment_approved),
       
    82   KEY comment_post_ID (comment_post_ID),
       
    83   KEY comment_approved_date_gmt (comment_approved,comment_date_gmt),
       
    84   KEY comment_date_gmt (comment_date_gmt)
       
    85 ) $charset_collate;
       
    86 CREATE TABLE $wpdb->links (
       
    87   link_id bigint(20) unsigned NOT NULL auto_increment,
       
    88   link_url varchar(255) NOT NULL default '',
       
    89   link_name varchar(255) NOT NULL default '',
       
    90   link_image varchar(255) NOT NULL default '',
       
    91   link_target varchar(25) NOT NULL default '',
       
    92   link_description varchar(255) NOT NULL default '',
       
    93   link_visible varchar(20) NOT NULL default 'Y',
       
    94   link_owner bigint(20) unsigned NOT NULL default '1',
       
    95   link_rating int(11) NOT NULL default '0',
       
    96   link_updated datetime NOT NULL default '0000-00-00 00:00:00',
       
    97   link_rel varchar(255) NOT NULL default '',
       
    98   link_notes mediumtext NOT NULL,
       
    99   link_rss varchar(255) NOT NULL default '',
       
   100   PRIMARY KEY  (link_id),
       
   101   KEY link_visible (link_visible)
       
   102 ) $charset_collate;
       
   103 CREATE TABLE $wpdb->options (
       
   104   option_id bigint(20) unsigned NOT NULL auto_increment,
       
   105   blog_id int(11) NOT NULL default '0',
       
   106   option_name varchar(64) NOT NULL default '',
       
   107   option_value longtext NOT NULL,
       
   108   autoload varchar(20) NOT NULL default 'yes',
       
   109   PRIMARY KEY  (option_id),
       
   110   UNIQUE KEY option_name (option_name)
       
   111 ) $charset_collate;
       
   112 CREATE TABLE $wpdb->postmeta (
       
   113   meta_id bigint(20) unsigned NOT NULL auto_increment,
       
   114   post_id bigint(20) unsigned NOT NULL default '0',
       
   115   meta_key varchar(255) default NULL,
       
   116   meta_value longtext,
       
   117   PRIMARY KEY  (meta_id),
       
   118   KEY post_id (post_id),
       
   119   KEY meta_key (meta_key)
       
   120 ) $charset_collate;
       
   121 CREATE TABLE $wpdb->posts (
       
   122   ID bigint(20) unsigned NOT NULL auto_increment,
       
   123   post_author bigint(20) unsigned NOT NULL default '0',
       
   124   post_date datetime NOT NULL default '0000-00-00 00:00:00',
       
   125   post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
       
   126   post_content longtext NOT NULL,
       
   127   post_title text NOT NULL,
       
   128   post_excerpt text NOT NULL,
       
   129   post_status varchar(20) NOT NULL default 'publish',
       
   130   comment_status varchar(20) NOT NULL default 'open',
       
   131   ping_status varchar(20) NOT NULL default 'open',
       
   132   post_password varchar(20) NOT NULL default '',
       
   133   post_name varchar(200) NOT NULL default '',
       
   134   to_ping text NOT NULL,
       
   135   pinged text NOT NULL,
       
   136   post_modified datetime NOT NULL default '0000-00-00 00:00:00',
       
   137   post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00',
       
   138   post_content_filtered text NOT NULL,
       
   139   post_parent bigint(20) unsigned NOT NULL default '0',
       
   140   guid varchar(255) NOT NULL default '',
       
   141   menu_order int(11) NOT NULL default '0',
       
   142   post_type varchar(20) NOT NULL default 'post',
       
   143   post_mime_type varchar(100) NOT NULL default '',
       
   144   comment_count bigint(20) NOT NULL default '0',
       
   145   PRIMARY KEY  (ID),
       
   146   KEY post_name (post_name),
       
   147   KEY type_status_date (post_type,post_status,post_date,ID),
       
   148   KEY post_parent (post_parent)
       
   149 ) $charset_collate;
       
   150 CREATE TABLE $wpdb->users (
       
   151   ID bigint(20) unsigned NOT NULL auto_increment,
       
   152   user_login varchar(60) NOT NULL default '',
       
   153   user_pass varchar(64) NOT NULL default '',
       
   154   user_nicename varchar(50) NOT NULL default '',
       
   155   user_email varchar(100) NOT NULL default '',
       
   156   user_url varchar(100) NOT NULL default '',
       
   157   user_registered datetime NOT NULL default '0000-00-00 00:00:00',
       
   158   user_activation_key varchar(60) NOT NULL default '',
       
   159   user_status int(11) NOT NULL default '0',
       
   160   display_name varchar(250) NOT NULL default '',
       
   161   PRIMARY KEY  (ID),
       
   162   KEY user_login_key (user_login),
       
   163   KEY user_nicename (user_nicename)
       
   164 ) $charset_collate;
       
   165 CREATE TABLE $wpdb->usermeta (
       
   166   umeta_id bigint(20) unsigned NOT NULL auto_increment,
       
   167   user_id bigint(20) unsigned NOT NULL default '0',
       
   168   meta_key varchar(255) default NULL,
       
   169   meta_value longtext,
       
   170   PRIMARY KEY  (umeta_id),
       
   171   KEY user_id (user_id),
       
   172   KEY meta_key (meta_key)
       
   173 ) $charset_collate;";
       
   174 
       
   175 /**
       
   176  * Create WordPress options and set the default values.
       
   177  *
       
   178  * @since 1.5.0
       
   179  * @uses $wpdb
       
   180  * @uses $wp_db_version
       
   181  */
       
   182 function populate_options() {
       
   183 	global $wpdb, $wp_db_version;
       
   184 
       
   185 	$guessurl = wp_guess_url();
       
   186 
       
   187 	do_action('populate_options');
       
   188 
       
   189 	if ( ini_get('safe_mode') ) {
       
   190 		// Safe mode can break mkdir() so use a flat structure by default.
       
   191 		$uploads_use_yearmonth_folders = 0;
       
   192 	} else {
       
   193 		$uploads_use_yearmonth_folders = 1;
       
   194 	}
       
   195 
       
   196 	$options = array(
       
   197 	'siteurl' => $guessurl,
       
   198 	'blogname' => __('My Blog'),
       
   199 	'blogdescription' => __('Just another WordPress weblog'),
       
   200 	'users_can_register' => 0,
       
   201 	'admin_email' => 'you@example.com',
       
   202 	'start_of_week' => 1,
       
   203 	'use_balanceTags' => 0,
       
   204 	'use_smilies' => 1,
       
   205 	'require_name_email' => 1,
       
   206 	'comments_notify' => 1,
       
   207 	'posts_per_rss' => 10,
       
   208 	'rss_use_excerpt' => 0,
       
   209 	'mailserver_url' => 'mail.example.com',
       
   210 	'mailserver_login' => 'login@example.com',
       
   211 	'mailserver_pass' => 'password',
       
   212 	'mailserver_port' => 110,
       
   213 	'default_category' => 1,
       
   214 	'default_comment_status' => 'open',
       
   215 	'default_ping_status' => 'open',
       
   216 	'default_pingback_flag' => 1,
       
   217 	'default_post_edit_rows' => 10,
       
   218 	'posts_per_page' => 10,
       
   219 	/* translators: default date format, see http://php.net/date */
       
   220 	'date_format' => __('F j, Y'),
       
   221 	/* translators: default time format, see http://php.net/date */
       
   222 	'time_format' => __('g:i a'),
       
   223 	/* translators: links last updated date format, see http://php.net/date */
       
   224 	'links_updated_date_format' => __('F j, Y g:i a'),
       
   225 	'links_recently_updated_prepend' => '<em>',
       
   226 	'links_recently_updated_append' => '</em>',
       
   227 	'links_recently_updated_time' => 120,
       
   228 	'comment_moderation' => 0,
       
   229 	'moderation_notify' => 1,
       
   230 	'permalink_structure' => '',
       
   231 	'gzipcompression' => 0,
       
   232 	'hack_file' => 0,
       
   233 	'blog_charset' => 'UTF-8',
       
   234 	'moderation_keys' => '',
       
   235 	'active_plugins' => array(),
       
   236 	'home' => $guessurl,
       
   237 	'category_base' => '',
       
   238 	'ping_sites' => 'http://rpc.pingomatic.com/',
       
   239 	'advanced_edit' => 0,
       
   240 	'comment_max_links' => 2,
       
   241 	'gmt_offset' => date('Z') / 3600,
       
   242 
       
   243 	// 1.5
       
   244 	'default_email_category' => 1,
       
   245 	'recently_edited' => '',
       
   246 	'use_linksupdate' => 0,
       
   247 	'template' => 'default',
       
   248 	'stylesheet' => 'default',
       
   249 	'comment_whitelist' => 1,
       
   250 	'blacklist_keys' => '',
       
   251 	'comment_registration' => 0,
       
   252 	'rss_language' => 'en',
       
   253 	'html_type' => 'text/html',
       
   254 
       
   255 	// 1.5.1
       
   256 	'use_trackback' => 0,
       
   257 
       
   258 	// 2.0
       
   259 	'default_role' => 'subscriber',
       
   260 	'db_version' => $wp_db_version,
       
   261 
       
   262 	// 2.0.1
       
   263 	'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders,
       
   264 	'upload_path' => '',
       
   265 
       
   266 	// 2.0.3
       
   267 	'secret' => wp_generate_password(64),
       
   268 
       
   269 	// 2.1
       
   270 	'blog_public' => '1',
       
   271 	'default_link_category' => 2,
       
   272 	'show_on_front' => 'posts',
       
   273 
       
   274 	// 2.2
       
   275 	'tag_base' => '',
       
   276 
       
   277 	// 2.5
       
   278 	'show_avatars' => '1',
       
   279 	'avatar_rating' => 'G',
       
   280 	'upload_url_path' => '',
       
   281 	'thumbnail_size_w' => 150,
       
   282 	'thumbnail_size_h' => 150,
       
   283 	'thumbnail_crop' => 1,
       
   284 	'medium_size_w' => 300,
       
   285 	'medium_size_h' => 300,
       
   286 
       
   287 	// 2.6
       
   288 	'avatar_default' => 'mystery',
       
   289 	'enable_app' => 0,
       
   290 	'enable_xmlrpc' => 0,
       
   291 
       
   292 	// 2.7
       
   293 	'large_size_w' => 1024,
       
   294 	'large_size_h' => 1024,
       
   295 	'image_default_link_type' => 'file',
       
   296 	'image_default_size' => '',
       
   297 	'image_default_align' => '',
       
   298 	'close_comments_for_old_posts' => 0,
       
   299 	'close_comments_days_old' => 14,
       
   300 	'thread_comments' => 0,
       
   301 	'thread_comments_depth' => 5,
       
   302 	'page_comments' => 1,
       
   303 	'comments_per_page' => 50,
       
   304 	'default_comments_page' => 'newest',
       
   305 	'comment_order' => 'asc',
       
   306 	'sticky_posts' => array(),
       
   307 	'widget_categories' => array(),
       
   308 	'widget_text' => array(),
       
   309 	'widget_rss' => array(),
       
   310 
       
   311 	// 2.8
       
   312 	'timezone_string' => '',
       
   313 
       
   314 	// 2.9
       
   315 	'embed_autourls' => 1,
       
   316 	'embed_size_w' => '',
       
   317 	'embed_size_h' => 600,
       
   318 	);
       
   319 
       
   320 	// Set autoload to no for these options
       
   321 	$fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' );
       
   322 
       
   323 	$existing_options = $wpdb->get_col("SELECT option_name FROM $wpdb->options");
       
   324 
       
   325 	$insert = '';
       
   326 	foreach ( $options as $option => $value ) {
       
   327 		if ( in_array($option, $existing_options) )
       
   328 			continue;
       
   329 		if ( in_array($option, $fat_options) )
       
   330 			$autoload = 'no';
       
   331 		else
       
   332 			$autoload = 'yes';
       
   333 
       
   334 		$option = $wpdb->escape($option);
       
   335 		if ( is_array($value) )
       
   336 			$value = serialize($value);
       
   337 		$value = $wpdb->escape($value);
       
   338 		if ( !empty($insert) )
       
   339 			$insert .= ', ';
       
   340 		$insert .= "('$option', '$value', '$autoload')";
       
   341 	}
       
   342 
       
   343 	if ( !empty($insert) )
       
   344 		$wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert);
       
   345 
       
   346 	// in case it is set, but blank, update "home"
       
   347 	if ( !__get_option('home') ) update_option('home', $guessurl);
       
   348 
       
   349 	// Delete unused options
       
   350 	$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',
       
   351 		'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron', 'random_seed', 'rss_excerpt_length');
       
   352 	foreach ($unusedoptions as $option)
       
   353 		delete_option($option);
       
   354 	
       
   355 	// delete obsolete magpie stuff
       
   356 	$wpdb->query("DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'");
       
   357 }
       
   358 
       
   359 /**
       
   360  * Execute WordPress role creation for the various WordPress versions.
       
   361  *
       
   362  * @since 2.0.0
       
   363  */
       
   364 function populate_roles() {
       
   365 	populate_roles_160();
       
   366 	populate_roles_210();
       
   367 	populate_roles_230();
       
   368 	populate_roles_250();
       
   369 	populate_roles_260();
       
   370 	populate_roles_270();
       
   371 	populate_roles_280();
       
   372 }
       
   373 
       
   374 /**
       
   375  * Create the roles for WordPress 2.0
       
   376  *
       
   377  * @since 2.0.0
       
   378  */
       
   379 function populate_roles_160() {
       
   380 	// Add roles
       
   381 
       
   382 	// Dummy gettext calls to get strings in the catalog.
       
   383 	/* translators: user role */
       
   384 	_x('Administrator', 'User role');
       
   385 	/* translators: user role */
       
   386 	_x('Editor', 'User role');
       
   387 	/* translators: user role */
       
   388 	_x('Author', 'User role');
       
   389 	/* translators: user role */
       
   390 	_x('Contributor', 'User role');
       
   391 	/* translators: user role */
       
   392 	_x('Subscriber', 'User role');
       
   393 
       
   394 	add_role('administrator', 'Administrator');
       
   395 	add_role('editor', 'Editor');
       
   396 	add_role('author', 'Author');
       
   397 	add_role('contributor', 'Contributor');
       
   398 	add_role('subscriber', 'Subscriber');
       
   399 
       
   400 	// Add caps for Administrator role
       
   401 	$role =& get_role('administrator');
       
   402 	$role->add_cap('switch_themes');
       
   403 	$role->add_cap('edit_themes');
       
   404 	$role->add_cap('activate_plugins');
       
   405 	$role->add_cap('edit_plugins');
       
   406 	$role->add_cap('edit_users');
       
   407 	$role->add_cap('edit_files');
       
   408 	$role->add_cap('manage_options');
       
   409 	$role->add_cap('moderate_comments');
       
   410 	$role->add_cap('manage_categories');
       
   411 	$role->add_cap('manage_links');
       
   412 	$role->add_cap('upload_files');
       
   413 	$role->add_cap('import');
       
   414 	$role->add_cap('unfiltered_html');
       
   415 	$role->add_cap('edit_posts');
       
   416 	$role->add_cap('edit_others_posts');
       
   417 	$role->add_cap('edit_published_posts');
       
   418 	$role->add_cap('publish_posts');
       
   419 	$role->add_cap('edit_pages');
       
   420 	$role->add_cap('read');
       
   421 	$role->add_cap('level_10');
       
   422 	$role->add_cap('level_9');
       
   423 	$role->add_cap('level_8');
       
   424 	$role->add_cap('level_7');
       
   425 	$role->add_cap('level_6');
       
   426 	$role->add_cap('level_5');
       
   427 	$role->add_cap('level_4');
       
   428 	$role->add_cap('level_3');
       
   429 	$role->add_cap('level_2');
       
   430 	$role->add_cap('level_1');
       
   431 	$role->add_cap('level_0');
       
   432 
       
   433 	// Add caps for Editor role
       
   434 	$role =& get_role('editor');
       
   435 	$role->add_cap('moderate_comments');
       
   436 	$role->add_cap('manage_categories');
       
   437 	$role->add_cap('manage_links');
       
   438 	$role->add_cap('upload_files');
       
   439 	$role->add_cap('unfiltered_html');
       
   440 	$role->add_cap('edit_posts');
       
   441 	$role->add_cap('edit_others_posts');
       
   442 	$role->add_cap('edit_published_posts');
       
   443 	$role->add_cap('publish_posts');
       
   444 	$role->add_cap('edit_pages');
       
   445 	$role->add_cap('read');
       
   446 	$role->add_cap('level_7');
       
   447 	$role->add_cap('level_6');
       
   448 	$role->add_cap('level_5');
       
   449 	$role->add_cap('level_4');
       
   450 	$role->add_cap('level_3');
       
   451 	$role->add_cap('level_2');
       
   452 	$role->add_cap('level_1');
       
   453 	$role->add_cap('level_0');
       
   454 
       
   455 	// Add caps for Author role
       
   456 	$role =& get_role('author');
       
   457 	$role->add_cap('upload_files');
       
   458 	$role->add_cap('edit_posts');
       
   459 	$role->add_cap('edit_published_posts');
       
   460 	$role->add_cap('publish_posts');
       
   461 	$role->add_cap('read');
       
   462 	$role->add_cap('level_2');
       
   463 	$role->add_cap('level_1');
       
   464 	$role->add_cap('level_0');
       
   465 
       
   466 	// Add caps for Contributor role
       
   467 	$role =& get_role('contributor');
       
   468 	$role->add_cap('edit_posts');
       
   469 	$role->add_cap('read');
       
   470 	$role->add_cap('level_1');
       
   471 	$role->add_cap('level_0');
       
   472 
       
   473 	// Add caps for Subscriber role
       
   474 	$role =& get_role('subscriber');
       
   475 	$role->add_cap('read');
       
   476 	$role->add_cap('level_0');
       
   477 }
       
   478 
       
   479 /**
       
   480  * Create and modify WordPress roles for WordPress 2.1.
       
   481  *
       
   482  * @since 2.1.0
       
   483  */
       
   484 function populate_roles_210() {
       
   485 	$roles = array('administrator', 'editor');
       
   486 	foreach ($roles as $role) {
       
   487 		$role =& get_role($role);
       
   488 		if ( empty($role) )
       
   489 			continue;
       
   490 
       
   491 		$role->add_cap('edit_others_pages');
       
   492 		$role->add_cap('edit_published_pages');
       
   493 		$role->add_cap('publish_pages');
       
   494 		$role->add_cap('delete_pages');
       
   495 		$role->add_cap('delete_others_pages');
       
   496 		$role->add_cap('delete_published_pages');
       
   497 		$role->add_cap('delete_posts');
       
   498 		$role->add_cap('delete_others_posts');
       
   499 		$role->add_cap('delete_published_posts');
       
   500 		$role->add_cap('delete_private_posts');
       
   501 		$role->add_cap('edit_private_posts');
       
   502 		$role->add_cap('read_private_posts');
       
   503 		$role->add_cap('delete_private_pages');
       
   504 		$role->add_cap('edit_private_pages');
       
   505 		$role->add_cap('read_private_pages');
       
   506 	}
       
   507 
       
   508 	$role =& get_role('administrator');
       
   509 	if ( ! empty($role) ) {
       
   510 		$role->add_cap('delete_users');
       
   511 		$role->add_cap('create_users');
       
   512 	}
       
   513 
       
   514 	$role =& get_role('author');
       
   515 	if ( ! empty($role) ) {
       
   516 		$role->add_cap('delete_posts');
       
   517 		$role->add_cap('delete_published_posts');
       
   518 	}
       
   519 
       
   520 	$role =& get_role('contributor');
       
   521 	if ( ! empty($role) ) {
       
   522 		$role->add_cap('delete_posts');
       
   523 	}
       
   524 }
       
   525 
       
   526 /**
       
   527  * Create and modify WordPress roles for WordPress 2.3.
       
   528  *
       
   529  * @since 2.3.0
       
   530  */
       
   531 function populate_roles_230() {
       
   532 	$role =& get_role( 'administrator' );
       
   533 
       
   534 	if ( !empty( $role ) ) {
       
   535 		$role->add_cap( 'unfiltered_upload' );
       
   536 	}
       
   537 }
       
   538 
       
   539 /**
       
   540  * Create and modify WordPress roles for WordPress 2.5.
       
   541  *
       
   542  * @since 2.5.0
       
   543  */
       
   544 function populate_roles_250() {
       
   545 	$role =& get_role( 'administrator' );
       
   546 
       
   547 	if ( !empty( $role ) ) {
       
   548 		$role->add_cap( 'edit_dashboard' );
       
   549 	}
       
   550 }
       
   551 
       
   552 /**
       
   553  * Create and modify WordPress roles for WordPress 2.6.
       
   554  *
       
   555  * @since 2.6.0
       
   556  */
       
   557 function populate_roles_260() {
       
   558 	$role =& get_role( 'administrator' );
       
   559 
       
   560 	if ( !empty( $role ) ) {
       
   561 		$role->add_cap( 'update_plugins' );
       
   562 		$role->add_cap( 'delete_plugins' );
       
   563 	}
       
   564 }
       
   565 
       
   566 /**
       
   567  * Create and modify WordPress roles for WordPress 2.7.
       
   568  *
       
   569  * @since 2.7.0
       
   570  */
       
   571 function populate_roles_270() {
       
   572 	$role =& get_role( 'administrator' );
       
   573 
       
   574 	if ( !empty( $role ) ) {
       
   575 		$role->add_cap( 'install_plugins' );
       
   576 		$role->add_cap( 'update_themes' );
       
   577 	}
       
   578 }
       
   579 
       
   580 /**
       
   581  * Create and modify WordPress roles for WordPress 2.8.
       
   582  *
       
   583  * @since 2.8.0
       
   584  */
       
   585 function populate_roles_280() {
       
   586 	$role =& get_role( 'administrator' );
       
   587 
       
   588 	if ( !empty( $role ) ) {
       
   589 		$role->add_cap( 'install_themes' );
       
   590 	}
       
   591 }
       
   592 
       
   593 ?>