PHP Cross Reference of WordPress Subversion HEAD |
| [ Index ] [ Classes ] [ Functions ] [ Variables ] [ Constants ] |
[Summary view] [Print] [Text view]
1 <?php 2 3 if ( file_exists(ABSPATH . 'wp-content/install.php') ) 4 require (ABSPATH . 'wp-content/install.php'); 5 require_once (ABSPATH . 'wp-admin/includes/admin.php'); 6 require_once (ABSPATH . 'wp-admin/includes/schema.php'); 7 8 if ( !function_exists('wp_install') ) : 9 function wp_install($blog_title, $user_name, $user_email, $public, $deprecated='') { 10 global $wp_rewrite; 11 12 wp_check_mysql_version(); 13 wp_cache_flush(); 14 make_db_current_silent(); 15 populate_options(); 16 populate_roles(); 17 18 update_option('blogname', $blog_title); 19 update_option('admin_email', $user_email); 20 update_option('blog_public', $public); 21 $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; 22 23 if ( defined('WP_SITEURL') && '' != WP_SITEURL ) 24 $guessurl = WP_SITEURL; 25 else 26 $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 27 28 update_option('siteurl', $guessurl); 29 30 // If not a public blog, don't ping. 31 if ( ! $public ) 32 update_option('default_pingback_flag', 0); 33 34 // Create default user. If the user already exists, the user tables are 35 // being shared among blogs. Just set the role in that case. 36 $user_id = username_exists($user_name); 37 if ( !$user_id ) { 38 $random_password = substr(md5(uniqid(microtime())), 0, 6); 39 $user_id = wp_create_user($user_name, $random_password, $user_email); 40 } else { 41 $random_password = __('User already exists. Password inherited.'); 42 } 43 44 $user = new WP_User($user_id); 45 $user->set_role('administrator'); 46 47 wp_install_defaults($user_id); 48 49 $wp_rewrite->flush_rules(); 50 51 wp_new_blog_notification($blog_title, $guessurl, $user_id, $random_password); 52 53 wp_cache_flush(); 54 55 return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $random_password); 56 } 57 endif; 58 59 if ( !function_exists('wp_install_defaults') ) : 60 function wp_install_defaults($user_id) { 61 global $wpdb; 62 63 // Default category 64 $cat_name = $wpdb->escape(__('Uncategorized')); 65 $cat_slug = sanitize_title(__('Uncategorized')); 66 $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$cat_name', '$cat_slug', '0')"); 67 $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('1', 'category', '', '0', '1')"); 68 69 // Default link category 70 $cat_name = $wpdb->escape(__('Blogroll')); 71 $cat_slug = sanitize_title(__('Blogroll')); 72 $wpdb->query("INSERT INTO $wpdb->terms (name, slug, term_group) VALUES ('$cat_name', '$cat_slug', '0')"); 73 $wpdb->query("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ('2', 'link_category', '', '0', '7')"); 74 75 // Now drop in some default links 76 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://codex.wordpress.org/', 'Documentation', 0, '', '');"); 77 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (1, 2)" ); 78 79 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://wordpress.org/development/', 'Development Blog', 0, 'http://wordpress.org/development/feed/', '');"); 80 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (2, 2)" ); 81 82 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://wordpress.org/extend/ideas/', 'Suggest Ideas', 0, '', '');"); 83 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (3, 2)" ); 84 85 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://wordpress.org/support/', 'Support Forum', 0, '', '');"); 86 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (4, 2)" ); 87 88 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://wordpress.org/extend/plugins/', 'Plugins', 0, '', '');"); 89 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (5, 2)" ); 90 91 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://wordpress.org/extend/themes/', 'Themes', 0, '', '');"); 92 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (6, 2)" ); 93 94 $wpdb->query("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://planet.wordpress.org/', 'WordPress Planet', 0, '', '');"); 95 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (7, 2)" ); 96 97 // First post 98 $now = date('Y-m-d H:i:s'); 99 $now_gmt = gmdate('Y-m-d H:i:s'); 100 $first_post_guid = get_option('home') . '/?p=1'; 101 $wpdb->query("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, guid, comment_count, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'))."', '', '".$wpdb->escape(__('Hello world!'))."', '0', '".$wpdb->escape(__('hello-world'))."', '$now', '$now_gmt', '$first_post_guid', '1', '', '', '')"); 102 $wpdb->query( "INSERT INTO $wpdb->term_relationships (`object_id`, `term_taxonomy_id`) VALUES (1, 1)" ); 103 104 // Default comment 105 $wpdb->query("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content) VALUES ('1', '".$wpdb->escape(__('Mr WordPress'))."', '', 'http://wordpress.org/', '$now', '$now_gmt', '".$wpdb->escape(__('Hi, this is a comment.<br />To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'))."')"); 106 107 // First Page 108 $wpdb->query("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, post_status, post_type, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('This is an example of a WordPress page, you could edit this to put information about yourself or your site so readers know where you are coming from. You can create as many pages like this one or sub-pages as you like and manage all of your content inside of WordPress.'))."', '', '".$wpdb->escape(__('About'))."', '0', '".$wpdb->escape(__('about'))."', '$now', '$now_gmt', 'publish', 'page', '', '', '')"); 109 } 110 endif; 111 112 if ( !function_exists('wp_new_blog_notification') ) : 113 function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { 114 $user = new WP_User($user_id); 115 $email = $user->user_email; 116 $name = $user->user_login; 117 $message_headers = 'From: "' . $blog_title . '" <wordpress@' . $_SERVER['SERVER_NAME'] . '>'; 118 $message = sprintf(__("Your new WordPress blog has been successfully set up at: 119 120 %1\$s 121 122 You can log in to the administrator account with the following information: 123 124 Username: %2\$s 125 Password: %3\$s 126 127 We hope you enjoy your new blog. Thanks! 128 129 --The WordPress Team 130 http://wordpress.org/ 131 "), $blog_url, $name, $password); 132 133 @wp_mail($email, __('New WordPress Blog'), $message, $message_headers); 134 } 135 endif; 136 137 if ( !function_exists('wp_upgrade') ) : 138 function wp_upgrade() { 139 global $wp_current_db_version, $wp_db_version; 140 141 $wp_current_db_version = __get_option('db_version'); 142 143 // We are up-to-date. Nothing to do. 144 if ( $wp_db_version == $wp_current_db_version ) 145 return; 146 147 wp_check_mysql_version(); 148 wp_cache_flush(); 149 make_db_current_silent(); 150 upgrade_all(); 151 wp_cache_flush(); 152 } 153 endif; 154 155 // Functions to be called in install and upgrade scripts 156 function upgrade_all() { 157 global $wp_current_db_version, $wp_db_version, $wp_rewrite; 158 $wp_current_db_version = __get_option('db_version'); 159 160 // We are up-to-date. Nothing to do. 161 if ( $wp_db_version == $wp_current_db_version ) 162 return; 163 164 // If the version is not set in the DB, try to guess the version. 165 if ( empty($wp_current_db_version) ) { 166 $wp_current_db_version = 0; 167 168 // If the template option exists, we have 1.5. 169 $template = __get_option('template'); 170 if ( !empty($template) ) 171 $wp_current_db_version = 2541; 172 } 173 174 if ( $wp_current_db_version < 6039 ) 175 upgrade_230_options_table(); 176 177 populate_options(); 178 179 if ( $wp_current_db_version < 2541 ) { 180 upgrade_100(); 181 upgrade_101(); 182 upgrade_110(); 183 upgrade_130(); 184 } 185 186 if ( $wp_current_db_version < 3308 ) 187 upgrade_160(); 188 189 if ( $wp_current_db_version < 4772 ) 190 upgrade_210(); 191 192 if ( $wp_current_db_version < 4351 ) 193 upgrade_old_slugs(); 194 195 if ( $wp_current_db_version < 5539 ) 196 upgrade_230(); 197 198 if ( $wp_current_db_version < 6124 ) 199 upgrade_230_old_tables(); 200 201 maybe_disable_automattic_widgets(); 202 203 $wp_rewrite->flush_rules(); 204 205 update_option('db_version', $wp_db_version); 206 } 207 208 function upgrade_100() { 209 global $wpdb; 210 211 // Get the title and ID of every post, post_name to check if it already has a value 212 $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); 213 if ($posts) { 214 foreach($posts as $post) { 215 if ('' == $post->post_name) { 216 $newtitle = sanitize_title($post->post_title); 217 $wpdb->query("UPDATE $wpdb->posts SET post_name = '$newtitle' WHERE ID = '$post->ID'"); 218 } 219 } 220 } 221 222 $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); 223 foreach ($categories as $category) { 224 if ('' == $category->category_nicename) { 225 $newtitle = sanitize_title($category->cat_name); 226 $wpdb->query("UPDATE $wpdb->categories SET category_nicename = '$newtitle' WHERE cat_ID = '$category->cat_ID'"); 227 } 228 } 229 230 231 $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') 232 WHERE option_name LIKE 'links_rating_image%' 233 AND option_value LIKE 'wp-links/links-images/%'"); 234 235 $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); 236 if ($done_ids) : 237 foreach ($done_ids as $done_id) : 238 $done_posts[] = $done_id->post_id; 239 endforeach; 240 $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; 241 else: 242 $catwhere = ''; 243 endif; 244 245 $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category != '0' $catwhere"); 246 if ($allposts) : 247 foreach ($allposts as $post) { 248 // Check to see if it's already been imported 249 $cat = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = $post->ID AND category_id = $post->post_category"); 250 if (!$cat && 0 != $post->post_category) { // If there's no result 251 $wpdb->query(" 252 INSERT INTO $wpdb->post2cat 253 (post_id, category_id) 254 VALUES 255 ('$post->ID', '$post->post_category') 256 "); 257 } 258 } 259 endif; 260 } 261 262 function upgrade_101() { 263 global $wpdb; 264 265 // Clean up indices, add a few 266 add_clean_index($wpdb->posts, 'post_name'); 267 add_clean_index($wpdb->posts, 'post_status'); 268 add_clean_index($wpdb->categories, 'category_nicename'); 269 add_clean_index($wpdb->comments, 'comment_approved'); 270 add_clean_index($wpdb->comments, 'comment_post_ID'); 271 add_clean_index($wpdb->links , 'link_category'); 272 add_clean_index($wpdb->links , 'link_visible'); 273 } 274 275 276 function upgrade_110() { 277 global $wpdb; 278 279 // Set user_nicename. 280 $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); 281 foreach ($users as $user) { 282 if ('' == $user->user_nicename) { 283 $newname = sanitize_title($user->user_nickname); 284 $wpdb->query("UPDATE $wpdb->users SET user_nicename = '$newname' WHERE ID = '$user->ID'"); 285 } 286 } 287 288 $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); 289 foreach ($users as $row) { 290 if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { 291 $wpdb->query('UPDATE '.$wpdb->users.' SET user_pass = MD5(\''.$row->user_pass.'\') WHERE ID = \''.$row->ID.'\''); 292 } 293 } 294 295 296 // Get the GMT offset, we'll use that later on 297 $all_options = get_alloptions_110(); 298 299 $time_difference = $all_options->time_difference; 300 301 $server_time = time()+date('Z'); 302 $weblogger_time = $server_time + $time_difference*3600; 303 $gmt_time = time(); 304 305 $diff_gmt_server = ($gmt_time - $server_time) / 3600; 306 $diff_weblogger_server = ($weblogger_time - $server_time) / 3600; 307 $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; 308 $gmt_offset = -$diff_gmt_weblogger; 309 310 // Add a gmt_offset option, with value $gmt_offset 311 add_option('gmt_offset', $gmt_offset); 312 313 // Check if we already set the GMT fields (if we did, then 314 // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' 315 // <michel_v> I just slapped myself silly for not thinking about it earlier 316 $got_gmt_fields = ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '0000-00-00 00:00:00') ? false : true; 317 318 if (!$got_gmt_fields) { 319 320 // Add or substract time to all dates, to get GMT dates 321 $add_hours = intval($diff_gmt_weblogger); 322 $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); 323 $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 324 $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); 325 $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'"); 326 $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = DATE_ADD(comment_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 327 $wpdb->query("UPDATE $wpdb->users SET user_registered = DATE_ADD(user_registered, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); 328 } 329 330 } 331 332 function upgrade_130() { 333 global $wpdb; 334 335 // Remove extraneous backslashes. 336 $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); 337 if ($posts) { 338 foreach($posts as $post) { 339 $post_content = addslashes(deslash($post->post_content)); 340 $post_title = addslashes(deslash($post->post_title)); 341 $post_excerpt = addslashes(deslash($post->post_excerpt)); 342 if ( empty($post->guid) ) 343 $guid = get_permalink($post->ID); 344 else 345 $guid = $post->guid; 346 347 $wpdb->query("UPDATE $wpdb->posts SET post_title = '$post_title', post_content = '$post_content', post_excerpt = '$post_excerpt', guid = '$guid' WHERE ID = '$post->ID'"); 348 } 349 } 350 351 // Remove extraneous backslashes. 352 $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); 353 if ($comments) { 354 foreach($comments as $comment) { 355 $comment_content = addslashes(deslash($comment->comment_content)); 356 $comment_author = addslashes(deslash($comment->comment_author)); 357 $wpdb->query("UPDATE $wpdb->comments SET comment_content = '$comment_content', comment_author = '$comment_author' WHERE comment_ID = '$comment->comment_ID'"); 358 } 359 } 360 361 // Remove extraneous backslashes. 362 $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); 363 if ($links) { 364 foreach($links as $link) { 365 $link_name = addslashes(deslash($link->link_name)); 366 $link_description = addslashes(deslash($link->link_description)); 367