[ Index ]

PHP Cross Reference of Wordpress 2.7.1

title

Body

[close]

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

   1  <?php
   2  /**
   3   * WordPress Export Administration API
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   */
   8  
   9  /**
  10   * Version number for the export format.
  11   *
  12   * Bump this when something changes that might affect compatibility.
  13   *
  14   * @since unknown
  15   * @var string
  16   */
  17  define('WXR_VERSION', '1.0');
  18  
  19  /**
  20   * {@internal Missing Short Description}}
  21   *
  22   * @since unknown
  23   *
  24   * @param unknown_type $author
  25   */
  26  function export_wp($author='') {
  27  global $wpdb, $post_ids, $post;
  28  
  29  do_action('export_wp');
  30  
  31  $filename = 'wordpress.' . date('Y-m-d') . '.xml';
  32  
  33  header('Content-Description: File Transfer');
  34  header("Content-Disposition: attachment; filename=$filename");
  35  header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true);
  36  
  37  $where = '';
  38  if ( $author and $author != 'all' ) {
  39      $author_id = (int) $author;
  40      $where = $wpdb->prepare(" WHERE post_author = %d ", $author_id);
  41  }
  42  
  43  // grab a snapshot of post IDs, just in case it changes during the export
  44  $post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC");
  45  
  46  $categories = (array) get_categories('get=all');
  47  $tags = (array) get_tags('get=all');
  48  
  49  /**
  50   * {@internal Missing Short Description}}
  51   *
  52   * @since unknown
  53   *
  54   * @param unknown_type $categories
  55   */
  56  function wxr_missing_parents($categories) {
  57      if ( !is_array($categories) || empty($categories) )
  58          return array();
  59  
  60      foreach ( $categories as $category )
  61          $parents[$category->term_id] = $category->parent;
  62  
  63      $parents = array_unique(array_diff($parents, array_keys($parents)));
  64  
  65      if ( $zero = array_search('0', $parents) )
  66          unset($parents[$zero]);
  67  
  68      return $parents;
  69  }
  70  
  71  while ( $parents = wxr_missing_parents($categories) ) {
  72      $found_parents = get_categories("include=" . join(', ', $parents));
  73      if ( is_array($found_parents) && count($found_parents) )
  74          $categories = array_merge($categories, $found_parents);
  75      else
  76          break;
  77  }
  78  
  79  // Put them in order to be inserted with no child going before its parent
  80  $pass = 0;
  81  $passes = 1000 + count($categories);
  82  while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) {
  83      if ( $cat->parent == 0 || isset($cats[$cat->parent]) ) {
  84          $cats[$cat->term_id] = $cat;
  85      } else {
  86          $categories[] = $cat;
  87      }
  88  }
  89  unset($categories);
  90  
  91  /**
  92   * Place string in CDATA tag.
  93   *
  94   * @since unknown
  95   *
  96   * @param string $str String to place in XML CDATA tag.
  97   */
  98  function wxr_cdata($str) {
  99      if ( seems_utf8($str) == false )
 100          $str = utf8_encode($str);
 101  
 102      // $str = ent2ncr(wp_specialchars($str));
 103  
 104      $str = "<![CDATA[$str" . ( ( substr($str, -1) == ']' ) ? ' ' : '') . "]]>";
 105  
 106      return $str;
 107  }
 108  
 109  /**
 110   * {@internal Missing Short Description}}
 111   *
 112   * @since unknown
 113   *
 114   * @return string Site URL.
 115   */
 116  function wxr_site_url() {
 117      global $current_site;
 118  
 119      // mu: the base url
 120      if ( isset($current_site->domain) ) {
 121          return 'http://'.$current_site->domain.$current_site->path;
 122      }
 123      // wp: the blog url
 124      else {
 125          return get_bloginfo_rss('url');
 126      }
 127  }
 128  
 129  /**
 130   * {@internal Missing Short Description}}
 131   *
 132   * @since unknown
 133   *
 134   * @param object $c Category Object
 135   */
 136  function wxr_cat_name($c) {
 137      if ( empty($c->name) )
 138          return;
 139  
 140      echo '<wp:cat_name>' . wxr_cdata($c->name) . '</wp:cat_name>';
 141  }
 142  
 143  /**
 144   * {@internal Missing Short Description}}
 145   *
 146   * @since unknown
 147   *
 148   * @param object $c Category Object
 149   */
 150  function wxr_category_description($c) {
 151      if ( empty($c->description) )
 152          return;
 153  
 154      echo '<wp:category_description>' . wxr_cdata($c->description) . '</wp:category_description>';
 155  }
 156  
 157  /**
 158   * {@internal Missing Short Description}}
 159   *
 160   * @since unknown
 161   *
 162   * @param object $t Tag Object
 163   */
 164  function wxr_tag_name($t) {
 165      if ( empty($t->name) )
 166          return;
 167  
 168      echo '<wp:tag_name>' . wxr_cdata($t->name) . '</wp:tag_name>';
 169  }
 170  
 171  /**
 172   * {@internal Missing Short Description}}
 173   *
 174   * @since unknown
 175   *
 176   * @param object $t Tag Object
 177   */
 178  function wxr_tag_description($t) {
 179      if ( empty($t->description) )
 180          return;
 181  
 182      echo '<wp:tag_description>' . wxr_cdata($t->description) . '</wp:tag_description>';
 183  }
 184  
 185  /**
 186   * {@internal Missing Short Description}}
 187   *
 188   * @since unknown
 189   */
 190  function wxr_post_taxonomy() {
 191      $categories = get_the_category();
 192      $tags = get_the_tags();
 193      $the_list = '';
 194      $filter = 'rss';
 195  
 196      if ( !empty($categories) ) foreach ( (array) $categories as $category ) {
 197          $cat_name = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter);
 198          // for backwards compatibility
 199          $the_list .= "\n\t\t<category><![CDATA[$cat_name]]></category>\n";
 200          // forwards compatibility: use a unique identifier for each cat to avoid clashes
 201          // http://trac.wordpress.org/ticket/5447
 202          $the_list .= "\n\t\t<category domain=\"category\" nicename=\"{$category->slug}\"><![CDATA[$cat_name]]></category>\n";
 203      }
 204  
 205      if ( !empty($tags) ) foreach ( (array) $tags as $tag ) {
 206          $tag_name = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter);
 207          $the_list .= "\n\t\t<category domain=\"tag\"><![CDATA[$tag_name]]></category>\n";
 208          // forwards compatibility as above
 209          $the_list .= "\n\t\t<category domain=\"tag\" nicename=\"{$tag->slug}\"><![CDATA[$tag_name]]></category>\n";
 210      }
 211  
 212      echo $the_list;
 213  }
 214  
 215  echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n";
 216  
 217  ?>
 218  <!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. -->
 219  <!-- It contains information about your blog's posts, comments, and categories. -->
 220  <!-- You may use this file to transfer that content from one site to another. -->
 221  <!-- This file is not intended to serve as a complete backup of your blog. -->
 222  
 223  <!-- To import this information into a WordPress blog follow these steps. -->
 224  <!-- 1. Log into that blog as an administrator. -->
 225  <!-- 2. Go to Tools: Import in the blog's admin panels (or Manage: Import in older versions of WordPress). -->
 226  <!-- 3. Choose "WordPress" from the list. -->
 227  <!-- 4. Upload this file using the form provided on that page. -->
 228  <!-- 5. You will first be asked to map the authors in this export file to users -->
 229  <!--    on the blog.  For each author, you may choose to map to an -->
 230  <!--    existing user on the blog or to create a new user -->
 231  <!-- 6. WordPress will then import each of the posts, comments, and categories -->
 232  <!--    contained in this file into your blog -->
 233  
 234  <?php the_generator('export');?>
 235  <rss version="2.0"
 236      xmlns:excerpt="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/excerpt/"
 237      xmlns:content="http://purl.org/rss/1.0/modules/content/"
 238      xmlns:wfw="http://wellformedweb.org/CommentAPI/"
 239      xmlns:dc="http://purl.org/dc/elements/1.1/"
 240      xmlns:wp="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/"
 241  >
 242  
 243  <channel>
 244      <title><?php bloginfo_rss('name'); ?></title>
 245      <link><?php bloginfo_rss('url') ?></link>
 246      <description><?php bloginfo_rss("description") ?></description>
 247      <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></pubDate>
 248      <generator>http://wordpress.org/?v=<?php bloginfo_rss('version'); ?></generator>
 249      <language><?php echo get_option('rss_language'); ?></language>
 250      <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version>
 251      <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url>
 252      <wp:base_blog_url><?php bloginfo_rss('url'); ?></wp:base_blog_url>
 253  <?php if ( $cats ) : foreach ( $cats as $c ) : ?>
 254      <wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category>
 255  <?php endforeach; endif; ?>
 256  <?php if ( $tags ) : foreach ( $tags as $t ) : ?>
 257      <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name($t); ?><?php wxr_tag_description($t); ?></wp:tag>
 258  <?php endforeach; endif; ?>
 259      <?php do_action('rss2_head'); ?>
 260      <?php if ($post_ids) {
 261          global $wp_query;
 262          $wp_query->in_the_loop = true;  // Fake being in the loop.
 263          // fetch 20 posts at a time rather than loading the entire table into memory
 264          while ( $next_posts = array_splice($post_ids, 0, 20) ) {
 265              $where = "WHERE ID IN (".join(',', $next_posts).")";
 266              $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC");
 267                  foreach ($posts as $post) {
 268              // Don't export revisions.  They bloat the export.
 269              if ( 'revision' == $post->post_type )
 270                  continue;
 271              setup_postdata($post); ?>
 272  <item>
 273  <title><?php echo apply_filters('the_title_rss', $post->post_title); ?></title>
 274  <link><?php the_permalink_rss() ?></link>
 275  <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
 276  <dc:creator><?php echo wxr_cdata(get_the_author()); ?></dc:creator>
 277  <?php wxr_post_taxonomy() ?>
 278  
 279  <guid isPermaLink="false"><?php the_guid(); ?></guid>
 280  <description></description>
 281  <content:encoded><?php echo wxr_cdata( apply_filters('the_content_export', $post->post_content) ); ?></content:encoded>
 282  <excerpt:encoded><?php echo wxr_cdata( apply_filters('the_excerpt_export', $post->post_excerpt) ); ?></excerpt:encoded>
 283  <wp:post_id><?php echo $post->ID; ?></wp:post_id>
 284  <wp:post_date><?php echo $post->post_date; ?></wp:post_date>
 285  <wp:post_date_gmt><?php echo $post->post_date_gmt; ?></wp:post_date_gmt>
 286  <wp:comment_status><?php echo $post->comment_status; ?></wp:comment_status>
 287  <wp:ping_status><?php echo $post->ping_status; ?></wp:ping_status>
 288  <wp:post_name><?php echo $post->post_name; ?></wp:post_name>
 289  <wp:status><?php echo $post->post_status; ?></wp:status>
 290  <wp:post_parent><?php echo $post->post_parent; ?></wp:post_parent>
 291  <wp:menu_order><?php echo $post->menu_order; ?></wp:menu_order>
 292  <wp:post_type><?php echo $post->post_type; ?></wp:post_type>
 293  <wp:post_password><?php echo $post->post_password; ?></wp:post_password>
 294  <?php
 295  if ($post->post_type == 'attachment') { ?>
 296  <wp:attachment_url><?php echo wp_get_attachment_url($post->ID); ?></wp:attachment_url>
 297  <?php } ?>
 298  <?php
 299  $postmeta = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID) );
 300  if ( $postmeta ) {
 301  ?>
 302  <?php foreach( $postmeta as $meta ) { ?>
 303  <wp:postmeta>
 304  <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key>
 305  <wp:meta_value><?Php echo $meta->meta_value; ?></wp:meta_value>
 306  </wp:postmeta>
 307  <?php } ?>
 308  <?php } ?>
 309  <?php
 310  $comments = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d", $post->ID) );
 311  if ( $comments ) { foreach ( $comments as $c ) { ?>
 312  <wp:comment>
 313  <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id>
 314  <wp:comment_author><?php echo wxr_cdata($c->comment_author); ?></wp:comment_author>
 315  <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email>
 316  <wp:comment_author_url><?php echo $c->comment_author_url; ?></wp:comment_author_url>
 317  <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP>
 318  <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date>
 319  <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt>
 320  <wp:comment_content><?php echo wxr_cdata($c->comment_content) ?></wp:comment_content>
 321  <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved>
 322  <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type>
 323  <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent>
 324  <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id>
 325  </wp:comment>
 326  <?php } } ?>
 327      </item>
 328  <?php } } } ?>
 329  </channel>
 330  </rss>
 331  <?php
 332  }
 333  
 334  ?>


Generated: Mon Mar 23 16:23:02 2009 Cross-referenced by PHPXref 0.7