[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-admin/includes/ -> schema.php (source)

   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  ?>


Generated: Fri Jan 8 00:19:48 2010 Cross-referenced by PHPXref 0.7