| [ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * WordPress Upgrade API 4 * 5 * Most of the functions are pluggable and can be overwritten 6 * 7 * @package WordPress 8 * @subpackage Administration 9 */ 10 11 /** Include user install customize script. */ 12 if ( file_exists(WP_CONTENT_DIR . '/install.php') ) 13 require (WP_CONTENT_DIR . '/install.php'); 14 15 /** WordPress Administration API */ 16 require_once (ABSPATH . 'wp-admin/includes/admin.php'); 17 18 /** WordPress Schema API */ 19 require_once (ABSPATH . 'wp-admin/includes/schema.php'); 20 21 if ( !function_exists('wp_install') ) : 22 /** 23 * Installs the blog 24 * 25 * {@internal Missing Long Description}} 26 * 27 * @since 2.1.0 28 * 29 * @param string $blog_title Blog title. 30 * @param string $user_name User's username. 31 * @param string $user_email User's email. 32 * @param bool $public Whether blog is public. 33 * @param null $deprecated Optional. Not used. 34 * @param string $user_password Optional. User's chosen password. Will default to a random password. 35 * @return array Array keys 'url', 'user_id', 'password', 'password_message'. 36 */ 37 function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated = '', $user_password = '' ) { 38 if ( !empty( $deprecated ) ) 39 _deprecated_argument( __FUNCTION__, '2.6' ); 40 41 wp_check_mysql_version(); 42 wp_cache_flush(); 43 make_db_current_silent(); 44 populate_options(); 45 populate_roles(); 46 47 update_option('blogname', $blog_title); 48 update_option('admin_email', $user_email); 49 update_option('blog_public', $public); 50 51 $guessurl = wp_guess_url(); 52 53 update_option('siteurl', $guessurl); 54 55 // If not a public blog, don't ping. 56 if ( ! $public ) 57 update_option('default_pingback_flag', 0); 58 59 // Create default user. If the user already exists, the user tables are 60 // being shared among blogs. Just set the role in that case. 61 $user_id = username_exists($user_name); 62 $user_password = trim($user_password); 63 $email_password = false; 64 if ( !$user_id && empty($user_password) ) { 65 $user_password = wp_generate_password( 12, false ); 66 $message = __('<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.'); 67 $user_id = wp_create_user($user_name, $user_password, $user_email); 68 update_user_option($user_id, 'default_password_nag', true, true); 69 $email_password = true; 70 } else if ( !$user_id ) { 71 // Password has been provided 72 $message = '<em>'.__('Your chosen password.').'</em>'; 73 $user_id = wp_create_user($user_name, $user_password, $user_email); 74 } else { 75 $message = __('User already exists. Password inherited.'); 76 } 77 78 $user = new WP_User($user_id); 79 $user->set_role('administrator'); 80 81 wp_install_defaults($user_id); 82 83 flush_rewrite_rules(); 84 85 wp_new_blog_notification($blog_title, $guessurl, $user_id, ($email_password ? $user_password : __('The password you chose during the install.') ) ); 86 87 wp_cache_flush(); 88 89 return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message); 90 } 91 endif; 92 93 if ( !function_exists('wp_install_defaults') ) : 94 /** 95 * {@internal Missing Short Description}} 96 * 97 * {@internal Missing Long Description}} 98 * 99 * @since 2.1.0 100 * 101 * @param int $user_id User ID. 102 */ 103 function wp_install_defaults($user_id) { 104 global $wpdb, $wp_rewrite, $current_site, $table_prefix; 105 106 // Default category 107 $cat_name = __('Uncategorized'); 108 /* translators: Default category slug */ 109 $cat_slug = sanitize_title(_x('Uncategorized', 'Default category slug')); 110 111 if ( global_terms_enabled() ) { 112 $cat_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $cat_slug ) ); 113 if ( $cat_id == null ) { 114 $wpdb->insert( $wpdb->sitecategories, array('cat_ID' => 0, 'cat_name' => $cat_name, 'category_nicename' => $cat_slug, 'last_updated' => current_time('mysql', true)) ); 115 $cat_id = $wpdb->insert_id; 116 } 117 update_option('default_category', $cat_id); 118 } else { 119 $cat_id = 1; 120 } 121 122 $wpdb->insert( $wpdb->terms, array('term_id' => $cat_id, 'name' => $cat_name, 'slug' => $cat_slug, 'term_group' => 0) ); 123 $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $cat_id, 'taxonomy' => 'category', 'description' => '', 'parent' => 0, 'count' => 1)); 124 $cat_tt_id = $wpdb->insert_id; 125 126 // First post 127 $now = date('Y-m-d H:i:s'); 128 $now_gmt = gmdate('Y-m-d H:i:s'); 129 $first_post_guid = get_option('home') . '/?p=1'; 130 131 if ( is_multisite() ) { 132 $first_post = get_site_option( 'first_post' ); 133 134 if ( empty($first_post) ) 135 $first_post = __( 'Welcome to <a href="SITE_URL">SITE_NAME</a>. This is your first post. Edit or delete it, then start blogging!' ); 136 137 $first_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $first_post ); 138 $first_post = str_replace( "SITE_NAME", $current_site->site_name, $first_post ); 139 } else { 140 $first_post = __('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'); 141 } 142 143 $wpdb->insert( $wpdb->posts, array( 144 'post_author' => $user_id, 145 'post_date' => $now, 146 'post_date_gmt' => $now_gmt, 147 'post_content' => $first_post, 148 'post_excerpt' => '', 149 'post_title' => __('Hello world!'), 150 /* translators: Default post slug */ 151 'post_name' => sanitize_title( _x('hello-world', 'Default post slug') ), 152 'post_modified' => $now, 153 'post_modified_gmt' => $now_gmt, 154 'guid' => $first_post_guid, 155 'comment_count' => 1, 156 'to_ping' => '', 157 'pinged' => '', 158 'post_content_filtered' => '' 159 )); 160 $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => $cat_tt_id, 'object_id' => 1) ); 161 162 // Default comment 163 $first_comment_author = __('Mr WordPress'); 164 $first_comment_url = 'http://wordpress.org/'; 165 $first_comment = __('Hi, this is a comment. 166 To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'); 167 if ( is_multisite() ) { 168 $first_comment_author = get_site_option( 'first_comment_author', $first_comment_author ); 169 $first_comment_url = get_site_option( 'first_comment_url', network_home_url() ); 170 $first_comment = get_site_option( 'first_comment', $first_comment ); 171 } 172 $wpdb->insert( $wpdb->comments, array( 173 'comment_post_ID' => 1, 174 'comment_author' => $first_comment_author, 175 'comment_author_email' => '', 176 'comment_author_url' => $first_comment_url, 177 'comment_date' => $now, 178 'comment_date_gmt' => $now_gmt, 179 'comment_content' => $first_comment 180 )); 181 182 // First Page 183 $first_page = sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: 184 185 <blockquote>Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)</blockquote> 186 187 ...or something like this: 188 189 <blockquote>The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.</blockquote> 190 191 As a new WordPress user, you should go to <a href=\"%s\">your dashboard</a> to delete this page and create new pages for your content. Have fun!" ), admin_url() ); 192 if ( is_multisite() ) 193 $first_page = get_site_option( 'first_page', $first_page ); 194 $first_post_guid = get_option('home') . '/?page_id=2'; 195 $wpdb->insert( $wpdb->posts, array( 196 'post_author' => $user_id, 197 'post_date' => $now, 198 'post_date_gmt' => $now_gmt, 199 'post_content' => $first_page, 200 'post_excerpt' => '', 201 'post_title' => __( 'Sample Page' ), 202 /* translators: Default page slug */ 203 'post_name' => __( 'sample-page' ), 204 'post_modified' => $now, 205 'post_modified_gmt' => $now_gmt, 206 'guid' => $first_post_guid, 207 'post_type' => 'page', 208 'to_ping' => '', 209 'pinged' => '', 210 'post_content_filtered' => '' 211 )); 212 $wpdb->insert( $wpdb->postmeta, array( 'post_id' => 2, 'meta_key' => '_wp_page_template', 'meta_value' => 'default' ) ); 213 214 // Set up default widgets for default theme. 215 update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); 216 update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); 217 update_option( 'widget_recent-comments', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); 218 update_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); 219 update_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); 220 update_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); 221 update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array (), 'sidebar-1' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'sidebar-2' => array (),'array_version' => 3 ) ); 222 223 if ( ! is_multisite() ) 224 update_user_meta( $user_id, 'show_welcome_panel', 1 ); 225 elseif ( ! is_super_admin( $user_id ) && ! metadata_exists( 'user', $user_id, 'show_welcome_panel' ) ) 226 update_user_meta( $user_id, 'show_welcome_panel', 2 ); 227 228 if ( is_multisite() ) { 229 // Flush rules to pick up the new page. 230 $wp_rewrite->init(); 231 $wp_rewrite->flush_rules(); 232 233 $user = new WP_User($user_id); 234 $wpdb->update( $wpdb->options, array('option_value' => $user->user_email), array('option_name' => 'admin_email') ); 235 236 // Remove all perms except for the login user. 237 $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'user_level') ); 238 $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'capabilities') ); 239 240 // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. 241 if ( !is_super_admin( $user_id ) && $user_id != 1 ) 242 $wpdb->delete( $wpdb->usermeta, array( 'user_id' => $user_id , 'meta_key' => $wpdb->base_prefix.'1_capabilities' ) ); 243 } 244 } 245 endif; 246 247 if ( !function_exists('wp_new_blog_notification') ) : 248 /** 249 * {@internal Missing Short Description}} 250 * 251 * {@internal Missing Long Description}} 252 * 253 * @since 2.1.0 254 * 255 * @param string $blog_title Blog title. 256 * @param string $blog_url Blog url. 257 * @param int $user_id User ID. 258 * @param string $password User's Password. 259 */ 260 function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { 261 $user = new WP_User( $user_id ); 262 $email = $user->user_email; 263 $name = $user->user_login; 264 $message = sprintf(__("Your new WordPress site has been successfully set up at: 265 266 %1\$s 267 268 You can log in to the administrator account with the following information: 269 270 Username: %2\$s 271 Password: %3\$s 272 273 We hope you enjoy your new site. Thanks! 274 275 --The WordPress Team 276 http://wordpress.org/ 277 "), $blog_url, $name, $password); 278 279 @wp_mail($email, __('New WordPress Site'), $message); 280 } 281 endif; 282 283 if ( !function_exists('wp_upgrade') ) : 284 /** 285 * Run WordPress Upgrade functions. 286 * 287 * {@internal Missing Long Description}} 288 * 289 * @since 2.1.0 290 * 291 * @return null 292 */ 293 function wp_upgrade() { 294 global $wp_current_db_version, $wp_db_version, $wpdb; 295 296 $wp_current_db_version = __get_option('db_version'); 297 298 // We are up-to-date. Nothing to do. 299 if ( $wp_db_version == $wp_current_db_version ) 300 return; 301 302 if ( ! is_blog_installed() ) 303 return; 304 305 wp_check_mysql_version(); 306 wp_cache_flush(); 307 pre_schema_upgrade(); 308 make_db_current_silent(); 309 upgrade_all(); 310 if ( is_multisite() && is_main_site() ) 311 upgrade_network(); 312 wp_cache_flush(); 313 314 if ( is_multisite() ) { 315 if ( $wpdb->get_row( "SELECT blog_id FROM {$wpdb->blog_versions} WHERE blog_id = '{$wpdb->blogid}'" ) ) 316 $wpdb->query( "UPDATE {$wpdb->blog_versions} SET db_version = '{$wp_db_version}' WHERE blog_id = '{$wpdb->blogid}'" ); 317 else 318 $wpdb->query( "INSERT INTO {$wpdb->blog_versions} ( `blog_id` , `db_version` , `last_updated` ) VALUES ( '{$wpdb->blogid}', '{$wp_db_version}', NOW());" ); 319 } 320 } 321 endif; 322 323 /** 324 * Functions to be called in install and upgrade scripts. 325 * 326 * {@internal Missing Long Description}} 327 * 328 * @since 1.0.1 329 */ 330 function upgrade_all() { 331 global $wp_current_db_version, $wp_db_version; 332 $wp_current_db_version = __get_option('db_version'); 333 334 // We are up-to-date. Nothing to do. 335 if ( $wp_db_version == $wp_current_db_version ) 336 return; 337 338 // If the version is not set in the DB, try to guess the version. 339 if ( empty($wp_current_db_version) ) { 340 $wp_current_db_version = 0; 341 342 // If the template option exists, we have 1.5. 343 $template = __get_option('template'); 344 if ( !empty($template) ) 345 $wp_current_db_version = 2541; 346 } 347 348 if ( $wp_current_db_version < 6039 ) 349 upgrade_230_options_table(); 350 351 populate_options(); 352 353 if ( $wp_current_db_version < 2541 ) { 354 upgrade_100(); 355 upgrade_101(); 356 upgrade_110(); 357 upgrade_130(); 358 } 359 360 if ( $wp_current_db_version < 3308 ) 361 upgrade_160(); 362 363 if ( $wp_current_db_version < 4772 ) 364 upgrade_210(); 365 366 if ( $wp_current_db_version < 4351 ) 367 upgrade_old_slugs(); 368 369 if ( $wp_current_db_version < 5539 ) 370 upgrade_230(); 371 372 if ( $wp_current_db_version < 6124 ) 373 upgrade_230_old_tables(); 374 375 if ( $wp_current_db_version < 7499 ) 376 upgrade_250(); 377 378 if ( $wp_current_db_version < 7935 ) 379 upgrade_252(); 380 381 if ( $wp_current_db_version < 8201 ) 382 upgrade_260(); 383 384 if ( $wp_current_db_version < 8989 ) 385 upgrade_270(); 386 387 if ( $wp_current_db_version < 10360 ) 388 upgrade_280(); 389 390 if ( $wp_current_db_version < 11958 ) 391 upgrade_290(); 392 393 if ( $wp_current_db_version < 15260 ) 394 upgrade_300(); 395 396 if ( $wp_current_db_version < 19389 ) 397 upgrade_330(); 398 399 if ( $wp_current_db_version < 20080 ) 400 upgrade_340(); 401 402 if ( $wp_current_db_version < 22422 ) 403 upgrade_350(); 404 405 maybe_disable_link_manager(); 406 407 maybe_disable_automattic_widgets(); 408 409 update_option( 'db_version', $wp_db_version ); 410 update_option( 'db_upgraded', true ); 411 } 412 413 /** 414 * Execute changes made in WordPress 1.0. 415 * 416 * @since 1.0.0 417 */ 418 function upgrade_100() { 419 global $wpdb; 420 421 // Get the title and ID of every post, post_name to check if it already has a value 422 $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); 423 if ($posts) { 424 foreach($posts as $post) { 425 if ('' == $post->post_name) { 426 $newtitle = sanitize_title($post->post_title); 427 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_name = %s WHERE ID = %d", $newtitle, $post->ID) ); 428 } 429 } 430 } 431 432 $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); 433 foreach ($categories as $category) { 434 if ('' == $category->category_nicename) { 435 $newtitle = sanitize_title($category->cat_name); 436 $wpdb->update( $wpdb->categories, array('category_nicename' => $newtitle), array('cat_ID' => $category->cat_ID) ); 437 } 438 } 439 440 $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') 441 WHERE option_name LIKE 'links_rating_image%' 442 AND option_value LIKE 'wp-links/links-images/%'"); 443 444 $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); 445 if ($done_ids) : 446 foreach ($done_ids as $done_id) : 447 $done_posts[] = $done_id->post_id; 448 endforeach; 449 $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; 450 else: 451 $catwhere = ''; 452 endif; 453 454 $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category != '0' $catwhere"); 455 if ($allposts) : 456 foreach ($allposts as $post) { 457 // Check to see if it's already been imported 458 $cat = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->post2cat WHERE post_id = %d AND category_id = %d", $post->ID, $post->post_category) ); 459 if (!$cat && 0 != $post->post_category) { // If there's no result 460 $wpdb->insert( $wpdb->post2cat, array('post_id' => $post->ID, 'category_id' => $post->post_category) ); 461 } 462 } 463 endif; 464 } 465 466 /** 467 * Execute changes made in WordPress 1.0.1. 468 * 469 * @since 1.0.1 470 */ 471 function upgrade_101() { 472 global $wpdb; 473 474 // Clean up indices, add a few 475 add_clean_index($wpdb->posts, 'post_name'); 476 add_clean_index($wpdb->posts, 'post_status'); 477 add_clean_index($wpdb->categories, 'category_nicename'); 478 add_clean_index($wpdb->comments, 'comment_approved'); 479 add_clean_index($wpdb->comments, 'comment_post_ID'); 480 add_clean_index($wpdb->links , 'link_category'); 481 add_clean_index($wpdb->links , 'link_visible'); 482 } 483 484 /** 485 * Execute changes made in WordPress 1.2. 486 * 487 * @since 1.2.0 488 */ 489 function upgrade_110() { 490 global $wpdb; 491 492 // Set user_nicename. 493 $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); 494 foreach ($users as $user) { 495 if ('' == $user->user_nicename) { 496 $newname = sanitize_title($user->user_nickname); 497 $wpdb->update( $wpdb->users, array('user_nicename' => $newname), array('ID' => $user->ID) ); 498 } 499 } 500 501 $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); 502 foreach ($users as $row) { 503 if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { 504 $wpdb->update( $wpdb->users, array('user_pass' => md5($row->user_pass)), array('ID' => $row->ID) ); 505 } 506 } 507 508 // Get the GMT offset, we'll use that later on 509 $all_options = get_alloptions_110(); 510 511 $time_difference = $all_options->time_difference; 512 513 $server_time = time()+date('Z'); 514 $weblogger_time = $server_time + $time_difference * HOUR_IN_SECONDS; 515 $gmt_time = time(); 516 517 $diff_gmt_server = ($gmt_time - $server_time) / HOUR_IN_SECONDS; 518 $diff_weblogger_server = ($weblogger_time - $server_time) / HOUR_IN_SECONDS; 519 $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; 520 $gmt_offset = -$diff_gmt_weblogger; 521 522 // Add a gmt_offset option, with value $gmt_offset 523 add_option('gmt_offset', $gmt_offset); 524 525 // Check if we already set the GMT fields (if we did, then 526 // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' 527 // <michel_v> I just slapped myself silly for not thinking about it earlier 528 $got_gmt_fields = ! ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '0000-00-00 00:00:00'); 529 530 if (!$got_gmt_fields) { 531 532 // Add or subtract time to all dates, to get GMT dates 533 $add_hours = intval($diff_gmt_weblogger); 534 $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); 535 $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 536 $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); 537 $wpdb->query("UPDATE $wpdb->posts SET post_modified_gmt = DATE_ADD(post_modified, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE) WHERE post_modified != '0000-00-00 00:00:00'"); 538 $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = DATE_ADD(comment_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 539 $wpdb->query("UPDATE $wpdb->users SET user_registered = DATE_ADD(user_registered, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 540 } 541 542 } 543 544 /** 545 * Execute changes made in WordPress 1.5. 546 * 547 * @since 1.5.0 548 */ 549 function upgrade_130() { 550 global $wpdb; 551 552 // Remove extraneous backslashes. 553 $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); 554 if ($posts) { 555 foreach($posts as $post) { 556 $post_content = addslashes(deslash($post->post_content)); 557 $post_title = addslashes(deslash($post->post_title)); 558 $post_excerpt = addslashes(deslash($post->post_excerpt)); 559 if ( empty($post->guid) ) 560 $guid = get_permalink($post->ID); 561 else 562 $guid = $post->guid; 563 564 $wpdb->update( $wpdb->posts, compact('post_title', 'post_content', 'post_excerpt', 'guid'), array('ID' => $post->ID) ); 565 566 } 567 } 568 569 // Remove extraneous backslashes. 570 $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); 571 if ($comments) { 572 foreach($comments as $comment) { 573 $comment_content = deslash($comment->comment_content); 574 $comment_author = deslash($comment->comment_author); 575 576 $wpdb->update($wpdb->comments, compact('comment_content', 'comment_author'), array('comment_ID' => $comment->comment_ID) ); 577 } 578 } 579 580 // Remove extraneous backslashes. 581 $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); 582 if ($links) { 583 foreach($links as $link) { 584 $link_name = deslash($link->link_name); 585 $link_description = deslash($link->link_description); 586 587 $wpdb->update( $wpdb->links, compact('link_name', 'link_description'), array('link_id' => $link->link_id) ); 588 } 589 } 590 591 $active_plugins = __get_option('active_plugins'); 592 593 // If plugins are not stored in an array, they're stored in the old 594 // newline separated format. Convert to new format. 595 if ( !is_array( $active_plugins ) ) { 596 $active_plugins = explode("\n", trim($active_plugins)); 597 update_option('active_plugins', $active_plugins); 598 } 599 600 // Obsolete tables 601 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues'); 602 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes'); 603 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups'); 604 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options'); 605 606 // Update comments table to use comment_type 607 $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '<trackback />', '') WHERE comment_content LIKE '<trackback />%'"); 608 $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '<pingback />', '') WHERE comment_content LIKE '<pingback />%'"); 609 610 // Some versions have multiple duplicate option_name rows with the same values 611 $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM `$wpdb->options` GROUP BY option_name"); 612 foreach ( $options as $option ) { 613 if ( 1 != $option->dupes ) { // Could this be done in the query? 614 $limit = $option->dupes - 1; 615 $dupe_ids = $wpdb->get_col( $wpdb->prepare("SELECT option_id FROM $wpdb->options WHERE option_name = %s LIMIT %d", $option->option_name, $limit) ); 616 if ( $dupe_ids ) { 617 $dupe_ids = join($dupe_ids, ','); 618 $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); 619 } 620 } 621 } 622 623 make_site_theme(); 624 } 625 626 /** 627 * Execute changes made in WordPress 2.0. 628 * 629 * @since 2.0.0 630 */ 631 function upgrade_160() { 632 global $wpdb, $wp_current_db_version; 633 634 populate_roles_160(); 635 636 $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); 637 foreach ( $users as $user ) : 638 if ( !empty( $user->user_firstname ) ) 639 update_user_meta( $user->ID, 'first_name', wp_slash($user->user_firstname) ); 640 if ( !empty( $user->user_lastname ) ) 641 update_user_meta( $user->ID, 'last_name', wp_slash($user->user_lastname) ); 642 if ( !empty( $user->user_nickname ) ) 643 update_user_meta( $user->ID, 'nickname', wp_slash($user->user_nickname) ); 644 if ( !empty( $user->user_level ) ) 645 update_user_meta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); 646 if ( !empty( $user->user_icq ) ) 647 update_user_meta( $user->ID, 'icq', wp_slash($user->user_icq) ); 648 if ( !empty( $user->user_aim ) ) 649 update_user_meta( $user->ID, 'aim', wp_slash($user->user_aim) ); 650 if ( !empty( $user->user_msn ) ) 651 update_user_meta( $user->ID, 'msn', wp_slash($user->user_msn) ); 652 if ( !empty( $user->user_yim ) ) 653 update_user_meta( $user->ID, 'yim', wp_slash($user->user_icq) ); 654 if ( !empty( $user->user_description ) ) 655 update_user_meta( $user->ID, 'description', wp_slash($user->user_description) ); 656 657 if ( isset( $user->user_idmode ) ): 658 $idmode = $user->user_idmode; 659 if ($idmode == 'nickname') $id = $user->user_nickname; 660 if ($idmode == 'login') $id = $user->user_login; 661 if ($idmode == 'firstname') $id = $user->user_firstname; 662 if ($idmode == 'lastname') $id = $user->user_lastname; 663 if ($idmode == 'namefl') $id = $user->user_firstname.' '.$user->user_lastname; 664 if ($idmode == 'namelf') $id = $user->user_lastname.' '.$user->user_firstname; 665 if (!$idmode) $id = $user->user_nickname; 666 $wpdb->update( $wpdb->users, array('display_name' => $id), array('ID' => $user->ID) ); 667 endif; 668 669 // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. 670 $caps = get_user_meta( $user->ID, $wpdb->prefix . 'capabilities'); 671 if ( empty($caps) || defined('RESET_CAPS') ) { 672 $level = get_user_meta($user->ID, $wpdb->prefix . 'user_level', true); 673 $role = translate_level_to_role($level); 674 update_user_meta( $user->ID, $wpdb->prefix . 'capabilities', array($role => true) ); 675 } 676 677 endforeach; 678 $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); 679 $wpdb->hide_errors(); 680 foreach ( $old_user_fields as $old ) 681 $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); 682 $wpdb->show_errors(); 683 684 // populate comment_count field of posts table 685 $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); 686 if ( is_array( $comments ) ) 687 foreach ($comments as $comment) 688 $wpdb->update( $wpdb->posts, array('comment_count' => $comment->c), array('ID' => $comment->comment_post_ID) ); 689 690 // Some alpha versions used a post status of object instead of attachment and put 691 // the mime type in post_type instead of post_mime_type. 692 if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { 693 $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); 694 foreach ($objects as $object) { 695 $wpdb->update( $wpdb->posts, array( 'post_status' => 'attachment', 696 'post_mime_type' => $object->post_type, 697 'post_type' => ''), 698 array( 'ID' => $object->ID ) ); 699 700 $meta = get_post_meta($object->ID, 'imagedata', true); 701 if ( ! empty($meta['file']) ) 702 update_attached_file( $object->ID, $meta['file'] ); 703 } 704 } 705 } 706 707 /** 708 * Execute changes made in WordPress 2.1. 709 * 710 * @since 2.1.0 711 */ 712 function upgrade_210() { 713 global $wpdb, $wp_current_db_version; 714 715 if ( $wp_current_db_version < 3506 ) { 716 // Update status and type. 717 $posts = $wpdb->get_results("SELECT ID, post_status FROM $wpdb->posts"); 718 719 if ( ! empty($posts) ) foreach ($posts as $post) { 720 $status = $post->post_status; 721 $type = 'post'; 722 723 if ( 'static' == $status ) { 724 $status = 'publish'; 725 $type = 'page'; 726 } else if ( 'attachment' == $status ) { 727 $status = 'inherit'; 728 $type = 'attachment'; 729 } 730 731 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_status = %s, post_type = %s WHERE ID = %d", $status, $type, $post->ID) ); 732 } 733 } 734 735 if ( $wp_current_db_version < 3845 ) { 736 populate_roles_210(); 737 } 738 739 if ( $wp_current_db_version < 3531 ) { 740 // Give future posts a post_status of future. 741 $now = gmdate('Y-m-d H:i:59'); 742 $wpdb->query ("UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'"); 743 744 $posts = $wpdb->get_results("SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'"); 745 if ( !empty($posts) ) 746 foreach ( $posts as $post ) 747 wp_schedule_single_event(mysql2date('U', $post->post_date, false), 'publish_future_post', array($post->ID)); 748 } 749 } 750 751 /** 752 * Execute changes made in WordPress 2.3. 753 * 754 * @since 2.3.0 755 */ 756 function upgrade_230() { 757 global $wp_current_db_version, $wpdb; 758 759 if ( $wp_current_db_version < 5200 ) { 760 populate_roles_230(); 761 } 762 763 // Convert categories to terms. 764 $tt_ids = array(); 765 $have_tags = false; 766 $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_ID"); 767 foreach ($categories as $category) { 768 $term_id = (int) $category->cat_ID; 769 $name = $category->cat_name; 770 $description = $category->category_description; 771 $slug = $category->category_nicename; 772 $parent = $category->category_parent; 773 $term_group = 0; 774 775 // Associate terms with the same slug in a term group and make slugs unique. 776 if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { 777 $term_group = $exists[0]->term_group; 778 $id = $exists[0]->term_id; 779 $num = 2; 780 do { 781 $alt_slug = $slug . "-$num"; 782 $num++; 783 $slug_check = $wpdb->get_var( $wpdb->prepare("SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug) ); 784 } while ( $slug_check ); 785 786 $slug = $alt_slug; 787 788 if ( empty( $term_group ) ) { 789 $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1; 790 $wpdb->query( $wpdb->prepare("UPDATE $wpdb->terms SET term_group = %d WHERE term_id = %d", $term_group, $id) ); 791 } 792 } 793 794 $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES 795 (%d, %s, %s, %d)", $term_id, $name, $slug, $term_group) ); 796 797 $count = 0; 798 if ( !empty($category->category_count) ) { 799 $count = (int) $category->category_count; 800 $taxonomy = 'category'; 801 $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); 802 $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; 803 } 804 805 if ( !empty($category->link_count) ) { 806 $count = (int) $category->link_count; 807 $taxonomy = 'link_category'; 808 $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); 809 $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; 810 } 811 812 if ( !empty($category->tag_count) ) { 813 $have_tags = true; 814 $count = (int) $category->tag_count; 815 $taxonomy = 'post_tag'; 816 $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); 817 $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; 818 } 819 820 if ( empty($count) ) { 821 $count = 0; 822 $taxonomy = 'category'; 823 $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); 824 $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; 825 } 826 } 827 828 $select = 'post_id, category_id'; 829 if ( $have_tags ) 830 $select .= ', rel_type'; 831 832 $posts = $wpdb->get_results("SELECT $select FROM $wpdb->post2cat GROUP BY post_id, category_id"); 833 foreach ( $posts as $post ) { 834 $post_id = (int) $post->post_id; 835 $term_id = (int) $post->category_id; 836 $taxonomy = 'category'; 837 if ( !empty($post->rel_type) && 'tag' == $post->rel_type) 838 $taxonomy = 'tag'; 839 $tt_id = $tt_ids[$term_id][$taxonomy]; 840 if ( empty($tt_id) ) 841 continue; 842 843 $wpdb->insert( $wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $tt_id) ); 844 } 845 846 // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. 847 if ( $wp_current_db_version < 3570 ) { 848 // Create link_category terms for link categories. Create a map of link cat IDs 849 // to link_category terms. 850 $link_cat_id_map = array(); 851 $default_link_cat = 0; 852 $tt_ids = array(); 853 $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories'); 854 foreach ( $link_cats as $category) { 855 $cat_id = (int) $category->cat_id; 856 $term_id = 0; 857 $name = wp_slash($category->cat_name); 858 $slug = sanitize_title($name); 859 $term_group = 0; 860 861 // Associate terms with the same slug in a term group and make slugs unique. 862 if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { 863 $term_group = $exists[0]->term_group; 864 $term_id = $exists[0]->term_id; 865 } 866 867 if ( empty($term_id) ) { 868 $wpdb->insert( $wpdb->terms, compact('name', 'slug', 'term_group') ); 869 $term_id = (int) $wpdb->insert_id; 870 } 871 872 $link_cat_id_map[$cat_id] = $term_id; 873 $default_link_cat = $term_id; 874 875 $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $term_id, 'taxonomy' => 'link_category', 'description' => '', 'parent' => 0, 'count' => 0) ); 876 $tt_ids[$term_id] = (int) $wpdb->insert_id; 877 } 878 879 // Associate links to cats. 880 $links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links"); 881 if ( !empty($links) ) foreach ( $links as $link ) { 882 if ( 0 == $link->link_category ) 883 continue; 884 if ( ! isset($link_cat_id_map[$link->link_category]) ) 885 continue; 886 $term_id = $link_cat_id_map[$link->link_category]; 887 $tt_id = $tt_ids[$term_id]; 888 if ( empty($tt_id) ) 889 continue; 890 891 $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link->link_id, 'term_taxonomy_id' => $tt_id) ); 892 } 893 894 // Set default to the last category we grabbed during the upgrade loop. 895 update_option('default_link_category', $default_link_cat); 896 } else { 897 $links = $wpdb->get_results("SELECT link_id, category_id FROM $wpdb->link2cat GROUP BY link_id, category_id"); 898 foreach ( $links as $link ) { 899 $link_id = (int) $link->link_id; 900 $term_id = (int) $link->category_id; 901 $taxonomy = 'link_category'; 902 $tt_id = $tt_ids[$term_id][$taxonomy]; 903 if ( empty($tt_id) ) 904 continue; 905 $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link_id, 'term_taxonomy_id' => $tt_id) ); 906 } 907 } 908 909 if ( $wp_current_db_version < 4772 ) { 910 // Obsolete linkcategories table 911 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories'); 912 } 913 914 // Recalculate all counts 915 $terms = $wpdb->get_results("SELECT term_taxonomy_id, taxonomy FROM $wpdb->term_taxonomy"); 916 foreach ( (array) $terms as $term ) { 917 if ( ('post_tag' == $term->taxonomy) || ('category' == $term->taxonomy) ) 918 $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish' AND post_type = 'post' AND term_taxonomy_id = %d", $term->term_taxonomy_id) ); 919 else 920 $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term->term_taxonomy_id) ); 921 $wpdb->update( $wpdb->term_taxonomy, array('count' => $count), array('term_taxonomy_id' => $term->term_taxonomy_id) ); 922 } 923 } 924 925 /** 926 * Remove old options from the database. 927 * 928 * @since 2.3.0 929 */ 930 function upgrade_230_options_table() { 931 global $wpdb; 932 $old_options_fields = array( 'option_can_override', 'option_type', 'option_width', 'option_height', 'option_description', 'option_admin_level' ); 933 $wpdb->hide_errors(); 934 foreach ( $old_options_fields as $old ) 935 $wpdb->query("ALTER TABLE $wpdb->options DROP $old"); 936 $wpdb->show_errors(); 937 } 938 939 /** 940 * Remove old categories, link2cat, and post2cat database tables. 941 * 942 * @since 2.3.0 943 */ 944 function upgrade_230_old_tables() { 945 global $wpdb; 946 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'categories'); 947 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'link2cat'); 948 $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'post2cat'); 949 } 950 951 /** 952 * Upgrade old slugs made in version 2.2. 953 * 954 * @since 2.2.0 955 */ 956 function upgrade_old_slugs() { 957 // upgrade people who were using the Redirect Old Slugs plugin 958 global $wpdb; 959 $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); 960 } 961 962 /** 963 * Execute changes made in WordPress 2.5.0. 964 * 965 * @since 2.5.0 966 */ 967 function upgrade_250() { 968 global $wp_current_db_version; 969 970 if ( $wp_current_db_version < 6689 ) { 971 populate_roles_250(); 972 } 973 974 } 975 976 /** 977 * Execute changes made in WordPress 2.5.2. 978 * 979 * @since 2.5.2 980 */ 981 function upgrade_252() { 982 global $wpdb; 983 984 $wpdb->query("UPDATE $wpdb->users SET user_activation_key = ''"); 985 } 986 987 /** 988 * Execute changes made in WordPress 2.6. 989 * 990 * @since 2.6.0 991 */ 992 function upgrade_260() { 993 global $wp_current_db_version; 994 995 if ( $wp_current_db_version < 8000 ) 996 populate_roles_260(); 997 } 998 999 /** 1000 * Execute changes made in WordPress 2.7. 1001 * 1002 * @since 2.7.0 1003 */ 1004 function upgrade_270() { 1005 global $wpdb, $wp_current_db_version; 1006 1007 if ( $wp_current_db_version < 8980 ) 1008 populate_roles_270(); 1009 1010 // Update post_date for unpublished posts with empty timestamp 1011 if ( $wp_current_db_version < 8921 ) 1012 $wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" ); 1013 } 1014 1015 /** 1016 * Execute changes made in WordPress 2.8. 1017 * 1018 * @since 2.8.0 1019 */ 1020 function upgrade_280() { 1021 global $wp_current_db_version, $wpdb; 1022 1023 if ( $wp_current_db_version < 10360 ) 1024 populate_roles_280(); 1025 if ( is_multisite() ) { 1026 $start = 0; 1027 while( $rows = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options ORDER BY option_id LIMIT $start, 20" ) ) { 1028 foreach( $rows as $row ) { 1029 $value = $row->option_value; 1030 if ( !@unserialize( $value ) ) 1031 $value = stripslashes( $value ); 1032 if ( $value !== $row->option_value ) { 1033 update_option( $row->option_name, $value ); 1034 } 1035 } 1036 $start += 20; 1037 } 1038 refresh_blog_details( $wpdb->blogid ); 1039 } 1040 } 1041 1042 /** 1043 * Execute changes made in WordPress 2.9. 1044 * 1045 * @since 2.9.0 1046 */ 1047 function upgrade_290() { 1048 global $wp_current_db_version; 1049 1050 if ( $wp_current_db_version < 11958 ) { 1051 // Previously, setting depth to 1 would redundantly disable threading, but now 2 is the minimum depth to avoid confusion 1052 if ( get_option( 'thread_comments_depth' ) == '1' ) { 1053 update_option( 'thread_comments_depth', 2 ); 1054 update_option( 'thread_comments', 0 ); 1055 } 1056 } 1057 } 1058 1059 /** 1060 * Execute changes made in WordPress 3.0. 1061 * 1062 * @since 3.0.0 1063 */ 1064 function upgrade_300() { 1065 global $wp_current_db_version, $wpdb; 1066 1067 if ( $wp_current_db_version < 15093 ) 1068 populate_roles_300(); 1069 1070 if ( $wp_current_db_version < 14139 && is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) 1071 add_site_option( 'siteurl', '' ); 1072 1073 // 3.0 screen options key name changes. 1074 if ( is_main_site() && !defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { 1075 $prefix = like_escape($wpdb->base_prefix); 1076 $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key LIKE '{$prefix}%meta-box-hidden%' OR meta_key LIKE '{$prefix}%closedpostboxes%' OR meta_key LIKE '{$prefix}%manage-%-columns-hidden%' OR meta_key LIKE '{$prefix}%meta-box-order%' OR meta_key LIKE '{$prefix}%metaboxorder%' OR meta_key LIKE '{$prefix}%screen_layout%' 1077 OR meta_key = 'manageedittagscolumnshidden' OR meta_key='managecategoriescolumnshidden' OR meta_key = 'manageedit-tagscolumnshidden' OR meta_key = 'manageeditcolumnshidden' OR meta_key = 'categories_per_page' OR meta_key = 'edit_tags_per_page'" ); 1078 } 1079 1080 } 1081 1082 /** 1083 * Execute changes made in WordPress 3.3. 1084 * 1085 * @since 3.3.0 1086 */ 1087 function upgrade_330() { 1088 global $wp_current_db_version, $wpdb, $wp_registered_widgets, $sidebars_widgets; 1089 1090 if ( $wp_current_db_version < 19061 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { 1091 $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); 1092 } 1093 1094 if ( $wp_current_db_version >= 11548 ) 1095 return; 1096 1097 $sidebars_widgets = get_option( 'sidebars_widgets', array() ); 1098 $_sidebars_widgets = array(); 1099 1100 if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) 1101 $sidebars_widgets['array_version'] = 3; 1102 elseif ( !isset($sidebars_widgets['array_version']) ) 1103 $sidebars_widgets['array_version'] = 1; 1104 1105 switch ( $sidebars_widgets['array_version'] ) { 1106 case 1 : 1107 foreach ( (array) $sidebars_widgets as $index => $sidebar ) 1108 if ( is_array($sidebar) ) 1109 foreach ( (array) $sidebar as $i => $name ) { 1110 $id = strtolower($name); 1111 if ( isset($wp_registered_widgets[$id]) ) { 1112 $_sidebars_widgets[$index][$i] = $id; 1113 continue; 1114 } 1115 $id = sanitize_title($name); 1116 if ( isset($wp_registered_widgets[$id]) ) { 1117 $_sidebars_widgets[$index][$i] = $id; 1118 continue; 1119 } 1120 1121 $found = false; 1122 1123 foreach ( $wp_registered_widgets as $widget_id => $widget ) { 1124 if ( strtolower($widget['name']) == strtolower($name) ) { 1125 $_sidebars_widgets[$index][$i] = $widget['id']; 1126 $found = true; 1127 break; 1128 } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 1129 $_sidebars_widgets[$index][$i] = $widget['id']; 1130 $found = true; 1131 break; 1132 } 1133 } 1134 1135 if ( $found ) 1136 continue; 1137 1138 unset($_sidebars_widgets[$index][$i]); 1139 } 1140 $_sidebars_widgets['array_version'] = 2; 1141 $sidebars_widgets = $_sidebars_widgets; 1142 unset($_sidebars_widgets); 1143 1144 case 2 : 1145 $sidebars_widgets = retrieve_widgets(); 1146 $sidebars_widgets['array_version'] = 3; 1147 update_option( 'sidebars_widgets', $sidebars_widgets ); 1148 } 1149 } 1150 1151 /** 1152 * Execute changes made in WordPress 3.4. 1153 * 1154 * @since 3.4.0 1155 */ 1156 function upgrade_340() { 1157 global $wp_current_db_version, $wpdb; 1158 1159 if ( $wp_current_db_version < 19798 ) { 1160 $wpdb->hide_errors(); 1161 $wpdb->query( "ALTER TABLE $wpdb->options DROP COLUMN blog_id" ); 1162 $wpdb->show_errors(); 1163 } 1164 1165 if ( $wp_current_db_version < 19799 ) { 1166 $wpdb->hide_errors(); 1167 $wpdb->query("ALTER TABLE $wpdb->comments DROP INDEX comment_approved"); 1168 $wpdb->show_errors(); 1169 } 1170 1171 if ( $wp_current_db_version < 20022 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { 1172 $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 'themes_last_view'" ); 1173 } 1174 1175 if ( $wp_current_db_version < 20080 ) { 1176 if ( 'yes' == $wpdb->get_var( "SELECT autoload FROM $wpdb->options WHERE option_name = 'uninstall_plugins'" ) ) { 1177 $uninstall_plugins = get_option( 'uninstall_plugins' ); 1178 delete_option( 'uninstall_plugins' ); 1179 add_option( 'uninstall_plugins', $uninstall_plugins, null, 'no' ); 1180 } 1181 } 1182 } 1183 1184 /** 1185 * Execute changes made in WordPress 3.5. 1186 * 1187 * @since 3.5.0 1188 */ 1189 function upgrade_350() { 1190 global $wp_current_db_version, $wpdb; 1191 1192 if ( $wp_current_db_version < 22006 && $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) 1193 update_option( 'link_manager_enabled', 1 ); // Previously set to 0 by populate_options() 1194 1195 if ( $wp_current_db_version < 21811 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { 1196 $meta_keys = array(); 1197 foreach ( array_merge( get_post_types(), get_taxonomies() ) as $name ) { 1198 if ( false !== strpos( $name, '-' ) ) 1199 $meta_keys[] = 'edit_' . str_replace( '-', '_', $name ) . '_per_page'; 1200 } 1201 if ( $meta_keys ) { 1202 $meta_keys = implode( "', '", $meta_keys ); 1203 $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('$meta_keys')" ); 1204 } 1205 } 1206 1207 if ( $wp_current_db_version < 22422 && $term = get_term_by( 'slug', 'post-format-standard', 'post_format' ) ) 1208 wp_delete_term( $term->term_id, 'post_format' ); 1209 } 1210 1211 /** 1212 * Execute network level changes 1213 * 1214 * @since 3.0.0 1215 */ 1216 function upgrade_network() { 1217 global $wp_current_db_version, $wpdb; 1218 // 2.8 1219 if ( $wp_current_db_version < 11549 ) { 1220 $wpmu_sitewide_plugins = get_site_option( 'wpmu_sitewide_plugins' ); 1221 $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); 1222 if ( $wpmu_sitewide_plugins ) { 1223 if ( !$active_sitewide_plugins ) 1224 $sitewide_plugins = (array) $wpmu_sitewide_plugins; 1225 else 1226 $sitewide_plugins = array_merge( (array) $active_sitewide_plugins, (array) $wpmu_sitewide_plugins ); 1227 1228 update_site_option( 'active_sitewide_plugins', $sitewide_plugins ); 1229 } 1230 delete_site_option( 'wpmu_sitewide_plugins' ); 1231 delete_site_option( 'deactivated_sitewide_plugins' ); 1232 1233 $start = 0; 1234 while( $rows = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->sitemeta} ORDER BY meta_id LIMIT $start, 20" ) ) { 1235 foreach( $rows as $row ) { 1236 $value = $row->meta_value; 1237 if ( !@unserialize( $value ) ) 1238 $value = stripslashes( $value ); 1239 if ( $value !== $row->meta_value ) { 1240 update_site_option( $row->meta_key, $value ); 1241 } 1242 } 1243 $start += 20; 1244 } 1245 } 1246 1247 // 3.0 1248 if ( $wp_current_db_version < 13576 ) 1249 update_site_option( 'global_terms_enabled', '1' ); 1250 1251 // 3.3 1252 if ( $wp_current_db_version < 19390 ) 1253 update_site_option( 'initial_db_version', $wp_current_db_version ); 1254 1255 if ( $wp_current_db_version < 19470 ) { 1256 if ( false === get_site_option( 'active_sitewide_plugins' ) ) 1257 update_site_option( 'active_sitewide_plugins', array() ); 1258 } 1259 1260 // 3.4 1261 if ( $wp_current_db_version < 20148 ) { 1262 // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. 1263 $allowedthemes = get_site_option( 'allowedthemes' ); 1264 $allowed_themes = get_site_option( 'allowed_themes' ); 1265 if ( false === $allowedthemes && is_array( $allowed_themes ) && $allowed_themes ) { 1266 $converted = array(); 1267 $themes = wp_get_themes(); 1268 foreach ( $themes as $stylesheet => $theme_data ) { 1269 if ( isset( $allowed_themes[ $theme_data->get('Name') ] ) ) 1270 $converted[ $stylesheet ] = true; 1271 } 1272 update_site_option( 'allowedthemes', $converted ); 1273 delete_site_option( 'allowed_themes' ); 1274 } 1275 } 1276 1277 // 3.5 1278 if ( $wp_current_db_version < 21823 ) 1279 update_site_option( 'ms_files_rewriting', '1' ); 1280 } 1281 1282 // The functions we use to actually do stuff 1283 1284 // General 1285 1286 /** 1287 * {@internal Missing Short Description}} 1288 * 1289 * {@internal Missing Long Description}} 1290 * 1291 * @since 1.0.0 1292 * 1293 * @param string $table_name Database table name to create. 1294 * @param string $create_ddl SQL statement to create table. 1295 * @return bool If table already exists or was created by function. 1296 */ 1297 function maybe_create_table($table_name, $create_ddl) { 1298 global $wpdb; 1299 if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) 1300 return true; 1301 //didn't find it try to create it. 1302 $q = $wpdb->query($create_ddl); 1303 // we cannot directly tell that whether this succeeded! 1304 if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) 1305 return true; 1306 return false; 1307 } 1308 1309 /** 1310 * {@internal Missing Short Description}} 1311 * 1312 * {@internal Missing Long Description}} 1313 * 1314 * @since 1.0.1 1315 * 1316 * @param string $table Database table name. 1317 * @param string $index Index name to drop. 1318 * @return bool True, when finished. 1319 */ 1320 function drop_index($table, $index) { 1321 global $wpdb; 1322 $wpdb->hide_errors(); 1323 $wpdb->query("ALTER TABLE `$table` DROP INDEX `$index`"); 1324 // Now we need to take out all the extra ones we may have created 1325 for ($i = 0; $i < 25; $i++) { 1326 $wpdb->query("ALTER TABLE `$table` DROP INDEX `{$index}_$i`"); 1327 } 1328 $wpdb->show_errors(); 1329 return true; 1330 } 1331 1332 /** 1333 * {@internal Missing Short Description}} 1334 * 1335 * {@internal Missing Long Description}} 1336 * 1337 * @since 1.0.1 1338 * 1339 * @param string $table Database table name. 1340 * @param string $index Database table index column. 1341 * @return bool True, when done with execution. 1342 */ 1343 function add_clean_index($table, $index) { 1344 global $wpdb; 1345 drop_index($table, $index); 1346 $wpdb->query("ALTER TABLE `$table` ADD INDEX ( `$index` )"); 1347 return true; 1348 } 1349 1350 /** 1351 ** maybe_add_column() 1352 ** Add column to db table if it doesn't exist. 1353 ** Returns: true if already exists or on successful completion 1354 ** false on error 1355 */ 1356 function maybe_add_column($table_name, $column_name, $create_ddl) { 1357 global $wpdb; 1358 foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { 1359 if ($column == $column_name) { 1360 return true; 1361 } 1362 } 1363 //didn't find it try to create it. 1364 $q = $wpdb->query($create_ddl); 1365 // we cannot directly tell that whether this succeeded! 1366 foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { 1367 if ($column == $column_name) { 1368 return true; 1369 } 1370 } 1371 return false; 1372 } 1373 1374 /** 1375 * Retrieve all options as it was for 1.2. 1376 * 1377 * @since 1.2.0 1378 * 1379 * @return array List of options. 1380 */ 1381 function get_alloptions_110() { 1382 global $wpdb; 1383 $all_options = new stdClass; 1384 if ( $options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ) ) { 1385 foreach ( $options as $option ) { 1386 if ( 'siteurl' == $option->option_name || 'home' == $option->option_name || 'category_base' == $option->option_name ) 1387 $option->option_value = untrailingslashit( $option->option_value ); 1388 $all_options->{$option->option_name} = stripslashes( $option->option_value ); 1389 } 1390 } 1391 return $all_options; 1392 } 1393 1394 /** 1395 * Version of get_option that is private to install/upgrade. 1396 * 1397 * @since 1.5.1 1398 * @access private 1399 * 1400 * @param string $setting Option name. 1401 * @return mixed 1402 */ 1403 function __get_option($setting) { 1404 global $wpdb; 1405 1406 if ( $setting == 'home' && defined( 'WP_HOME' ) ) 1407 return untrailingslashit( WP_HOME ); 1408 1409 if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) 1410 return untrailingslashit( WP_SITEURL ); 1411 1412 $option = $wpdb->get_var( $wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s", $setting ) ); 1413 1414 if ( 'home' == $setting && '' == $option ) 1415 return __get_option( 'siteurl' ); 1416 1417 if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting || 'tag_base' == $setting ) 1418 $option = untrailingslashit( $option ); 1419 1420 @ $kellogs = unserialize( $option ); 1421 if ( $kellogs !== false ) 1422 return $kellogs; 1423 else 1424 return $option; 1425 } 1426 1427 /** 1428 * {@internal Missing Short Description}} 1429 * 1430 * {@internal Missing Long Description}} 1431 * 1432 * @since 1.5.0 1433 * 1434 * @param string $content 1435 * @return string 1436 */ 1437 function deslash($content) { 1438 // Note: \\\ inside a regex denotes a single backslash. 1439 1440 // Replace one or more backslashes followed by a single quote with 1441 // a single quote. 1442 $content = preg_replace("/\\\+'/", "'", $content); 1443 1444 // Replace one or more backslashes followed by a double quote with 1445 // a double quote. 1446 $content = preg_replace('/\\\+"/', '"', $content); 1447 1448 // Replace one or more backslashes with one backslash. 1449 $content = preg_replace("/\\\+/", "\\", $content); 1450 1451 return $content; 1452 } 1453 1454 /** 1455 * {@internal Missing Short Description}} 1456 * 1457 * {@internal Missing Long Description}} 1458 * 1459 * @since 1.5.0 1460 * 1461 * @param unknown_type $queries 1462 * @param unknown_type $execute 1463 * @return unknown 1464 */ 1465 function dbDelta( $queries = '', $execute = true ) { 1466 global $wpdb; 1467 1468 if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) ) 1469 $queries = wp_get_db_schema( $queries ); 1470 1471 // Separate individual queries into an array 1472 if ( !is_array($queries) ) { 1473 $queries = explode( ';', $queries ); 1474 $queries = array_filter( $queries ); 1475 } 1476 $queries = apply_filters( 'dbdelta_queries', $queries ); 1477 1478 $cqueries = array(); // Creation Queries 1479 $iqueries = array(); // Insertion Queries 1480 $for_update = array(); 1481 1482 // Create a tablename index for an array ($cqueries) of queries 1483 foreach($queries as $qry) { 1484 if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { 1485 $cqueries[ trim( $matches[1], '`' ) ] = $qry; 1486 $for_update[$matches[1]] = 'Created table '.$matches[1]; 1487 } else if (preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { 1488 array_unshift($cqueries, $qry); 1489 } else if (preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { 1490 $iqueries[] = $qry; 1491 } else if (preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { 1492 $iqueries[] = $qry; 1493 } else { 1494 // Unrecognized query type 1495 } 1496 } 1497 $cqueries = apply_filters( 'dbdelta_create_queries', $cqueries ); 1498 $iqueries = apply_filters( 'dbdelta_insert_queries', $iqueries ); 1499 1500 $global_tables = $wpdb->tables( 'global' ); 1501 foreach ( $cqueries as $table => $qry ) { 1502 // Upgrade global tables only for the main site. Don't upgrade at all if DO_NOT_UPGRADE_GLOBAL_TABLES is defined. 1503 if ( in_array( $table, $global_tables ) && ( !is_main_site() || defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) ) 1504 continue; 1505 1506 // Fetch the table column structure from the database 1507 $wpdb->suppress_errors(); 1508 $tablefields = $wpdb->get_results("DESCRIBE {$table};"); 1509 $wpdb->suppress_errors( false ); 1510 1511 if ( ! $tablefields ) 1512 continue; 1513 1514 // Clear the field and index arrays 1515 $cfields = $indices = array(); 1516 // Get all of the field names in the query from between the parens 1517 preg_match("|\((.*)\)|ms", $qry, $match2); 1518 $qryline = trim($match2[1]); 1519 1520 // Separate field lines into an array 1521 $flds = explode("\n", $qryline); 1522 1523 //echo "<hr/><pre>\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."</pre><hr/>"; 1524 1525 // For every field line specified in the query 1526 foreach ($flds as $fld) { 1527 // Extract the field name 1528 preg_match("|^([^ ]*)|", trim($fld), $fvals); 1529 $fieldname = trim( $fvals[1], '`' ); 1530 1531 // Verify the found field name 1532 $validfield = true; 1533 switch (strtolower($fieldname)) { 1534 case '': 1535 case 'primary': 1536 case 'index': 1537 case 'fulltext': 1538 case 'unique': 1539 case 'key': 1540 $validfield = false; 1541 $indices[] = trim(trim($fld), ", \n"); 1542 break; 1543 } 1544 $fld = trim($fld); 1545 1546 // If it's a valid field, add it to the field array 1547 if ($validfield) { 1548 $cfields[strtolower($fieldname)] = trim($fld, ", \n"); 1549 } 1550 } 1551 1552 // For every field in the table 1553 foreach ($tablefields as $tablefield) { 1554 // If the table field exists in the field array... 1555 if (array_key_exists(strtolower($tablefield->Field), $cfields)) { 1556 // Get the field type from the query 1557 preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches); 1558 $fieldtype = $matches[1]; 1559 1560 // Is actual field type different from the field type in query? 1561 if ($tablefield->Type != $fieldtype) { 1562 // Add a query to change the column type 1563 $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)]; 1564 $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; 1565 } 1566 1567 // Get the default value from the array 1568 //echo "{$cfields[strtolower($tablefield->Field)]}<br>"; 1569 if (preg_match("| DEFAULT '(.*?)'|i", $cfields[strtolower($tablefield->Field)], $matches)) { 1570 $default_value = $matches[1]; 1571 if ($tablefield->Default != $default_value) { 1572 // Add a query to change the column's default value 1573 $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'"; 1574 $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; 1575 } 1576 } 1577 1578 // Remove the field from the array (so it's not added) 1579 unset($cfields[strtolower($tablefield->Field)]); 1580 } else { 1581 // This field exists in the table, but not in the creation queries? 1582 } 1583 } 1584 1585 // For every remaining field specified for the table 1586 foreach ($cfields as $fieldname => $fielddef) { 1587 // Push a query line into $cqueries that adds the field to that table 1588 $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; 1589 $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname; 1590 } 1591 1592 // Index stuff goes here 1593 // Fetch the table index structure from the database 1594 $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};"); 1595 1596 if ($tableindices) { 1597 // Clear the index array 1598 unset($index_ary); 1599 1600 // For every index in the table 1601 foreach ($tableindices as $tableindex) { 1602 // Add the index to the index data array 1603 $keyname = $tableindex->Key_name; 1604 $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); 1605 $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; 1606 } 1607 1608 // For each actual index in the index array 1609 foreach ($index_ary as $index_name => $index_data) { 1610 // Build a create string to compare to the query 1611 $index_string = ''; 1612 if ($index_name == 'PRIMARY') { 1613 $index_string .= 'PRIMARY '; 1614 } else if($index_data['unique']) { 1615 $index_string .= 'UNIQUE '; 1616 } 1617 $index_string .= 'KEY '; 1618 if ($index_name != 'PRIMARY') { 1619 $index_string .= $index_name; 1620 } 1621 $index_columns = ''; 1622 // For each column in the index 1623 foreach ($index_data['columns'] as $column_data) { 1624 if ($index_columns != '') $index_columns .= ','; 1625 // Add the field to the column list string 1626 $index_columns .= $column_data['fieldname']; 1627 if ($column_data['subpart'] != '') { 1628 $index_columns .= '('.$column_data['subpart'].')'; 1629 } 1630 } 1631 // Add the column list to the index create string 1632 $index_string .= ' ('.$index_columns.')'; 1633 if (!(($aindex = array_search($index_string, $indices)) === false)) { 1634 unset($indices[$aindex]); 1635 //echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br />Found index:".$index_string."</pre>\n"; 1636 } 1637 //else echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br /><b>Did not find index:</b>".$index_string."<br />".print_r($indices, true)."</pre>\n"; 1638 } 1639 } 1640 1641 // For every remaining index specified for the table 1642 foreach ( (array) $indices as $index ) { 1643 // Push a query line into $cqueries that adds the index to that table 1644 $cqueries[] = "ALTER TABLE {$table} ADD $index"; 1645 $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index; 1646 } 1647 1648 // Remove the original table creation query from processing 1649 unset( $cqueries[ $table ], $for_update[ $table ] ); 1650 } 1651 1652 $allqueries = array_merge($cqueries, $iqueries); 1653 if ($execute) { 1654 foreach ($allqueries as $query) { 1655 //echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">".print_r($query, true)."</pre>\n"; 1656 $wpdb->query($query); 1657 } 1658 } 1659 1660 return $for_update; 1661 } 1662 1663 /** 1664 * {@internal Missing Short Description}} 1665 * 1666 * {@internal Missing Long Description}} 1667 * 1668 * @since 1.5.0 1669 */ 1670 function make_db_current( $tables = 'all' ) { 1671 $alterations = dbDelta( $tables ); 1672 echo "<ol>\n"; 1673 foreach($alterations as $alteration) echo "<li>$alteration</li>\n"; 1674 echo "</ol>\n"; 1675 } 1676 1677 /** 1678 * {@internal Missing Short Description}} 1679 * 1680 * {@internal Missing Long Description}} 1681 * 1682 * @since 1.5.0 1683 */ 1684 function make_db_current_silent( $tables = 'all' ) { 1685 $alterations = dbDelta( $tables ); 1686 } 1687 1688 /** 1689 * {@internal Missing Short Description}} 1690 * 1691 * {@internal Missing Long Description}} 1692 * 1693 * @since 1.5.0 1694 * 1695 * @param unknown_type $theme_name 1696 * @param unknown_type $template 1697 * @return unknown 1698 */ 1699 function make_site_theme_from_oldschool($theme_name, $template) { 1700 $home_path = get_home_path(); 1701 $site_dir = WP_CONTENT_DIR . "/themes/$template"; 1702 1703 if (! file_exists("$home_path/index.php")) 1704 return false; 1705 1706 // Copy files from the old locations to the site theme. 1707 // TODO: This does not copy arbitrary include dependencies. Only the 1708 // standard WP files are copied. 1709 $files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php'); 1710 1711 foreach ($files as $oldfile => $newfile) { 1712 if ($oldfile == 'index.php') 1713 $oldpath = $home_path; 1714 else 1715 $oldpath = ABSPATH; 1716 1717 if ($oldfile == 'index.php') { // Check to make sure it's not a new index 1718 $index = implode('', file("$oldpath/$oldfile")); 1719 if (strpos($index, 'WP_USE_THEMES') !== false) { 1720 if (! @copy(WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME . '/index.php', "$site_dir/$newfile")) 1721 return false; 1722 continue; // Don't copy anything 1723 } 1724 } 1725 1726 if (! @copy("$oldpath/$oldfile", "$site_dir/$newfile")) 1727 return false; 1728 1729 chmod("$site_dir/$newfile", 0777); 1730 1731 // Update the blog header include in each file. 1732 $lines = explode("\n", implode('', file("$site_dir/$newfile"))); 1733 if ($lines) { 1734 $f = fopen("$site_dir/$newfile", 'w'); 1735 1736 foreach ($lines as $line) { 1737 if (preg_match('/require.*wp-blog-header/', $line)) 1738 $line = '//' . $line; 1739 1740 // Update stylesheet references. 1741 $line = str_replace("<?php echo __get_option('siteurl'); ?>/wp-layout.css", "<?php bloginfo('stylesheet_url'); ?>", $line); 1742 1743 // Update comments template inclusion. 1744 $line = str_replace("<?php include(ABSPATH . 'wp-comments.php'); ?>", "<?php comments_template(); ?>", $line); 1745 1746 fwrite($f, "{$line}\n"); 1747 } 1748 fclose($f); 1749 } 1750 } 1751 1752 // Add a theme header. 1753 $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option('siteurl') . "\nDescription: A theme automatically created by the update.\nVersion: 1.0\nAuthor: Moi\n*/\n"; 1754 1755 $stylelines = file_get_contents("$site_dir/style.css"); 1756 if ($stylelines) { 1757 $f = fopen("$site_dir/style.css", 'w'); 1758 1759 fwrite($f, $header); 1760 fwrite($f, $stylelines); 1761 fclose($f); 1762 } 1763 1764 return true; 1765 } 1766 1767 /** 1768 * {@internal Missing Short Description}} 1769 * 1770 * {@internal Missing Long Description}} 1771 * 1772 * @since 1.5.0 1773 * 1774 * @param unknown_type $theme_name 1775 * @param unknown_type $template 1776 * @return unknown 1777 */ 1778 function make_site_theme_from_default($theme_name, $template) { 1779 $site_dir = WP_CONTENT_DIR . "/themes/$template"; 1780 $default_dir = WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME; 1781 1782 // Copy files from the default theme to the site theme. 1783 //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); 1784 1785 $theme_dir = @ opendir($default_dir); 1786 if ($theme_dir) { 1787 while(($theme_file = readdir( $theme_dir )) !== false) { 1788 if (is_dir("$default_dir/$theme_file")) 1789 continue; 1790 if (! @copy("$default_dir/$theme_file", "$site_dir/$theme_file")) 1791 return; 1792 chmod("$site_dir/$theme_file", 0777); 1793 } 1794 } 1795 @closedir($theme_dir); 1796 1797 // Rewrite the theme header. 1798 $stylelines = explode("\n", implode('', file("$site_dir/style.css"))); 1799 if ($stylelines) { 1800 $f = fopen("$site_dir/style.css", 'w'); 1801 1802 foreach ($stylelines as $line) { 1803 if (strpos($line, 'Theme Name:') !== false) $line = 'Theme Name: ' . $theme_name; 1804 elseif (strpos($line, 'Theme URI:') !== false) $line = 'Theme URI: ' . __get_option('url'); 1805 elseif (strpos($line, 'Description:') !== false) $line = 'Description: Your theme.'; 1806 elseif (strpos($line, 'Version:') !== false) $line = 'Version: 1'; 1807 elseif (strpos($line, 'Author:') !== false) $line = 'Author: You'; 1808 fwrite($f, $line . "\n"); 1809 } 1810 fclose($f); 1811 } 1812 1813 // Copy the images. 1814 umask(0); 1815 if (! mkdir("$site_dir/images", 0777)) { 1816 return false; 1817 } 1818 1819 $images_dir = @ opendir("$default_dir/images"); 1820 if ($images_dir) { 1821 while(($image = readdir($images_dir)) !== false) { 1822 if (is_dir("$default_dir/images/$image")) 1823 continue; 1824 if (! @copy("$default_dir/images/$image", "$site_dir/images/$image")) 1825 return; 1826 chmod("$site_dir/images/$image", 0777); 1827 } 1828 } 1829 @closedir($images_dir); 1830 } 1831 1832 // Create a site theme from the default theme. 1833 /** 1834 * {@internal Missing Short Description}} 1835 * 1836 * {@internal Missing Long Description}} 1837 * 1838 * @since 1.5.0 1839 * 1840 * @return unknown 1841 */ 1842 function make_site_theme() { 1843 // Name the theme after the blog. 1844 $theme_name = __get_option('blogname'); 1845 $template = sanitize_title($theme_name); 1846 $site_dir = WP_CONTENT_DIR . "/themes/$template"; 1847 1848 // If the theme already exists, nothing to do. 1849 if ( is_dir($site_dir)) { 1850 return false; 1851 } 1852 1853 // We must be able to write to the themes dir. 1854 if (! is_writable(WP_CONTENT_DIR . "/themes")) { 1855 return false; 1856 } 1857 1858 umask(0); 1859 if (! mkdir($site_dir, 0777)) { 1860 return false; 1861 } 1862 1863 if (file_exists(ABSPATH . 'wp-layout.css')) { 1864 if (! make_site_theme_from_oldschool($theme_name, $template)) { 1865 // TODO: rm -rf the site theme directory. 1866 return false; 1867 } 1868 } else { 1869 if (! make_site_theme_from_default($theme_name, $template)) 1870 // TODO: rm -rf the site theme directory. 1871 return false; 1872 } 1873 1874 // Make the new site theme active. 1875 $current_template = __get_option('template'); 1876 if ($current_template == WP_DEFAULT_THEME) { 1877 update_option('template', $template); 1878 update_option('stylesheet', $template); 1879 } 1880 return $template; 1881 } 1882 1883 /** 1884 * Translate user level to user role name. 1885 * 1886 * @since 2.0.0 1887 * 1888 * @param int $level User level. 1889 * @return string User role name. 1890 */ 1891 function translate_level_to_role($level) { 1892 switch ($level) { 1893 case 10: 1894 case 9: 1895 case 8: 1896 return 'administrator'; 1897 case 7: 1898 case 6: 1899 case 5: 1900 return 'editor'; 1901 case 4: 1902 case 3: 1903 case 2: 1904 return 'author'; 1905 case 1: 1906 return 'contributor'; 1907 case 0: 1908 return 'subscriber'; 1909 } 1910 } 1911 1912 /** 1913 * {@internal Missing Short Description}} 1914 * 1915 * {@internal Missing Long Description}} 1916 * 1917 * @since 2.1.0 1918 */ 1919 function wp_check_mysql_version() { 1920 global $wpdb; 1921 $result = $wpdb->check_database_version(); 1922 if ( is_wp_error( $result ) ) 1923 die( $result->get_error_message() ); 1924 } 1925 1926 /** 1927 * Disables the Automattic widgets plugin, which was merged into core. 1928 * 1929 * @since 2.2.0 1930 */ 1931 function maybe_disable_automattic_widgets() { 1932 $plugins = __get_option( 'active_plugins' ); 1933 1934 foreach ( (array) $plugins as $plugin ) { 1935 if ( basename( $plugin ) == 'widgets.php' ) { 1936 array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); 1937 update_option( 'active_plugins', $plugins ); 1938 break; 1939 } 1940 } 1941 } 1942 1943 /** 1944 * Disables the Link Manager on upgrade, if at the time of upgrade, no links exist in the DB. 1945 * 1946 * @since 3.5.0 1947 */ 1948 function maybe_disable_link_manager() { 1949 global $wp_current_db_version, $wpdb; 1950 1951 if ( $wp_current_db_version >= 22006 && get_option( 'link_manager_enabled' ) && ! $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) 1952 update_option( 'link_manager_enabled', 0 ); 1953 } 1954 1955 /** 1956 * Runs before the schema is upgraded. 1957 * 1958 * @since 2.9.0 1959 */ 1960 function pre_schema_upgrade() { 1961 global $wp_current_db_version, $wp_db_version, $wpdb; 1962 1963 // Upgrade versions prior to 2.9 1964 if ( $wp_current_db_version < 11557 ) { 1965 // Delete duplicate options. Keep the option with the highest option_id. 1966 $wpdb->query("DELETE o1 FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 USING (`option_name`) WHERE o2.option_id > o1.option_id"); 1967 1968 // Drop the old primary key and add the new. 1969 $wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)"); 1970 1971 // Drop the old option_name index. dbDelta() doesn't do the drop. 1972 $wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_name"); 1973 } 1974 1975 } 1976 1977 /** 1978 * Install global terms. 1979 * 1980 * @since 3.0.0 1981 * 1982 */ 1983 if ( !function_exists( 'install_global_terms' ) ) : 1984 function install_global_terms() { 1985 global $wpdb, $charset_collate; 1986 $ms_queries = " 1987 CREATE TABLE $wpdb->sitecategories ( 1988 cat_ID bigint(20) NOT NULL auto_increment, 1989 cat_name varchar(55) NOT NULL default '', 1990 category_nicename varchar(200) NOT NULL default '', 1991 last_updated timestamp NOT NULL, 1992 PRIMARY KEY (cat_ID), 1993 KEY category_nicename (category_nicename), 1994 KEY last_updated (last_updated) 1995 ) $charset_collate; 1996 "; 1997 // now create tables 1998 dbDelta( $ms_queries ); 1999 } 2000 endif;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Fri May 24 03:56:23 2013 | Hosted by follow the white rabbit. |