X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/959f97d8ecd5c1668103a3e41c795486b944bc68..a01a150d87a096c70b6ec80332b7ce89c943eefe:/wp-admin/includes/export.php diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php index 96239af9..a9e8f22d 100644 --- a/wp-admin/includes/export.php +++ b/wp-admin/includes/export.php @@ -1,154 +1,288 @@ $args ); -header('Content-Description: File Transfer'); -header("Content-Disposition: attachment; filename=$filename"); -header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); + $defaults = array( 'author' => null, 'taxonomy' => null, 'post_type' => null, 'post_status' => null, 'start_date' => null, 'end_date' => null ); + $args = wp_parse_args( $args, $defaults ); -$where = ''; -if ( $author and $author != 'all' ) { - $author_id = (int) $author; - $where = " WHERE post_author = '$author_id' "; -} + extract($args); -// grab a snapshot of post IDs, just in case it changes during the export -$post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); + do_action('export_wp'); -$categories = (array) get_categories('get=all'); -$tags = (array) get_tags('get=all'); - -function wxr_missing_parents($categories) { - if ( !is_array($categories) || empty($categories) ) - return array(); + if( strlen( $start_date ) > 4 && strlen( $end_date ) > 4 ) + $filename = 'wordpress.' . $start_date . '.' . $end_date . '.xml'; + else + $filename = 'wordpress.' . date( 'Y-m-d' ) . '.xml'; - foreach ( $categories as $category ) - $parents[$category->term_id] = $category->parent; + header( 'Content-Description: File Transfer' ); + header( 'Content-Disposition: attachment; filename=' . $filename ); + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); - $parents = array_unique(array_diff($parents, array_keys($parents))); + if ( $post_type && $post_type != 'all' ) + $where = $wpdb->prepare("WHERE post_type = %s ", $post_type); + else + $where = "WHERE post_type != 'revision' "; - if ( $zero = array_search('0', $parents) ) - unset($parents[$zero]); + if ( $author && $author != 'all' ) { + $author_id = (int) $author; + $where .= $wpdb->prepare( "AND post_author = %d ", $author_id ); + } - return $parents; -} + if ( $start_date && $start_date != 'all' ) + $where .= $wpdb->prepare( "AND post_date >= %s ", $start_date ); -while ( $parents = wxr_missing_parents($categories) ) { - $found_parents = get_categories("include=" . join(', ', $parents)); - if ( is_array($found_parents) && count($found_parents) ) - $categories = array_merge($categories, $found_parents); - else - break; -} + if ( $end_date && $end_date != 'all' ) + $where .= $wpdb->prepare( "AND post_date < %s ", $end_date ); -// Put them in order to be inserted with no child going before its parent -$pass = 0; -$passes = 1000 + count($categories); -while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) { - if ( $cat->parent == 0 || isset($cats[$cat->parent]) ) { - $cats[$cat->term_id] = $cat; - } else { - $categories[] = $cat; + if ( $taxonomy && is_array( $taxonomy ) ) { + foreach ( $taxonomy as $term_id ) { + if ( $term_id != 'all' ) + $where .= $wpdb->prepare( "AND ID IN (SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d) ", $term_id ); + } } -} -unset($categories); -function wxr_cdata($str) { - if ( seems_utf8($str) == false ) - $str = utf8_encode($str); + if ( $post_status && $post_status != 'all' ) + $where .= $wpdb->prepare( "AND post_status = %s", $post_status ); - // $str = ent2ncr(wp_specialchars($str)); + // grab a snapshot of post IDs, just in case it changes during the export + $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC" ); - $str = ""; + $categories = (array) get_categories( array( 'get' => 'all' ) ); + $tags = (array) get_tags( array( 'get' => 'all' ) ); - return $str; -} + $custom_taxonomies = $wp_taxonomies; + unset( $custom_taxonomies['category'] ); + unset( $custom_taxonomies['post_tag'] ); + unset( $custom_taxonomies['link_category'] ); + $custom_taxonomies = array_keys( $custom_taxonomies ); + $terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) ); -function wxr_site_url() { - global $current_site; + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param unknown_type $categories + */ + function wxr_missing_parents( $categories ) { + if ( ! is_array( $categories ) || empty( $categories ) ) + return array(); - // mu: the base url - if ( isset($current_site->domain) ) { - return 'http://'.$current_site->domain.$current_site->path; - } - // wp: the blog url - else { - return get_bloginfo_rss('url'); - } -} + foreach ( $categories as $category ){ + $parents[$category->term_id] = $category->parent; + } -function wxr_cat_name($c) { - if ( empty($c->name) ) - return; + $parents = array_unique( array_diff( $parents, array_keys( $parents ) ) ); - echo '' . wxr_cdata($c->name) . ''; -} + if ( $zero = array_search( '0', $parents ) ) + unset( $parents[$zero] ); -function wxr_category_description($c) { - if ( empty($c->description) ) - return; + return $parents; + } - echo '' . wxr_cdata($c->description) . ''; -} + while ( $parents = wxr_missing_parents( $categories ) ) { + $found_parents = get_categories( array( 'include' => join( ', ', $parents) ) ); + if ( is_array( $found_parents ) && count( $found_parents ) ) + $categories = array_merge( $categories, $found_parents ); + else + break; + } -function wxr_tag_name($t) { - if ( empty($t->name) ) - return; + // Put them in order to be inserted with no child going before its parent + $pass = 0; + $passes = 1000 + count( $categories ); + while ( ( $cat = array_shift( $categories ) ) && ++$pass < $passes ) { + if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) ) + $cats[$cat->term_id] = $cat; + else + $categories[] = $cat; + } + unset( $categories ); + + /** + * Place string in CDATA tag. + * + * @since unknown + * + * @param string $str String to place in XML CDATA tag. + */ + function wxr_cdata( $str ) { + if ( seems_utf8( $str ) == false ) + $str = utf8_encode( $str ); + + // $str = ent2ncr(esc_html($str)); + $str = ""; + + return $str; + } - echo '' . wxr_cdata($t->name) . ''; -} + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @return string Site URL. + */ + function wxr_site_url() { + global $current_site; + + // mu: the base url + if ( isset( $current_site->domain ) ) + return network_home_url(); + // wp: the blog url + else + return get_bloginfo_rss( 'url' ); + } -function wxr_tag_description($t) { - if ( empty($t->description) ) - return; + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $c Category Object + */ + function wxr_cat_name( $c ) { + if ( empty( $c->name ) ) + return; + + echo '' . wxr_cdata( $c->name ) . ''; + } - echo '' . wxr_cdata($t->description) . ''; -} + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $c Category Object + */ + function wxr_category_description( $c ) { + if ( empty( $c->description ) ) + return; + + echo '' . wxr_cdata($c->description) . ''; + } -function wxr_post_taxonomy() { - $categories = get_the_category(); - $tags = get_the_tags(); - $the_list = ''; - $filter = 'rss'; + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $t Tag Object + */ + function wxr_tag_name( $t ) { + if ( empty( $t->name ) ) + return; + + echo '' . wxr_cdata($t->name) . ''; + } - if ( !empty($categories) ) foreach ( (array) $categories as $category ) { - $cat_name = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter); - // for backwards compatibility - $the_list .= "\n\t\t\n"; - // forwards compatibility: use a unique identifier for each cat to avoid clashes - // http://trac.wordpress.org/ticket/5447 - $the_list .= "\n\t\tslug}\">\n"; + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $t Tag Object + */ + function wxr_tag_description( $t ) { + if ( empty( $t->description ) ) + return; + + echo '' . wxr_cdata($t->description) . ''; } - if ( !empty($tags) ) foreach ( (array) $tags as $tag ) { - $tag_name = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter); - $the_list .= "\n\t\t\n"; - // forwards compatibility as above - $the_list .= "\n\t\tslug}\">\n"; + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $t Term Object + */ + function wxr_term_name( $t ) { + if ( empty( $t->name ) ) + return; + + echo '' . wxr_cdata($t->name) . ''; } - echo $the_list; -} + /** + * {@internal Missing Short Description}} + * + * @since unknown + * + * @param object $t Term Object + */ + function wxr_term_description( $t ) { + if ( empty( $t->description ) ) + return; + + echo '' . wxr_cdata($t->description) . ''; + } -echo '\n"; + /** + * {@internal Missing Short Description}} + * + * @since unknown + */ + function wxr_post_taxonomy() { + global $post; + + $the_list = ''; + $filter = 'rss'; + + $taxonomies = get_object_taxonomies( 'post' ); + $terms = wp_get_post_terms( $post->ID, $taxonomies ); + foreach ( (array) $terms as $term ) { + $domain = ( 'post_tag' == $term->taxonomy ) ? 'tag' : $term->taxonomy; + $term_name = sanitize_term_field( 'name', $term->name, $term->term_id, $term->taxonomy, $filter ); + // Back compat. + if ( 'category' == $term->taxonomy ) + $the_list .= "\n\t\t\n"; + elseif ( 'post_tag' == $term->taxonomy ) + $the_list .= "\n\t\t\n"; + // forwards compatibility as above + $the_list .= "\n\t\tslug}\">\n"; + } + echo $the_list; + } -?> + echo '\n"; + + ?> - - + + @@ -157,8 +291,9 @@ echo '\n"; - + \n"; > - <?php bloginfo_rss('name'); ?> - - - - http://wordpress.org/?v= - + <?php bloginfo_rss( 'name' ); ?> + + + + http://wordpress.org/?v= + - - - slug; ?>parent ? $cats[$c->parent]->name : ''; ?> - - - slug; ?> - - - in_the_loop = true; // Fake being in the loop. - // fetch 20 posts at a time rather than loading the entire table into memory - while ( $next_posts = array_splice($post_ids, 0, 20) ) { - $where = "WHERE ID IN (".join(',', $next_posts).")"; - $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); - foreach ($posts as $post) { - setup_postdata($post); ?> - -<?php echo apply_filters('the_title_rss', $post->post_title); ?> - - - - - - - -post_content) ); ?> -ID; ?> -post_date; ?> -post_date_gmt; ?> -comment_status; ?> -ping_status; ?> -post_name; ?> -post_status; ?> -post_parent; ?> -menu_order; ?> -post_type; ?> -post_password; ?> -post_type == 'attachment') { ?> -ID); ?> - -get_results("SELECT * FROM $wpdb->postmeta WHERE post_id = $post->ID"); -if ( $postmeta ) { -?> - - -meta_key; ?> -meta_value; ?> - - - -get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID"); -if ( $comments ) { foreach ( $comments as $c ) { ?> - -comment_ID; ?> -comment_author); ?> -comment_author_email; ?> -comment_author_url; ?> -comment_author_IP; ?> -comment_date; ?> -comment_date_gmt; ?> -comment_content) ?> -comment_approved; ?> -comment_type; ?> -comment_parent; ?> -user_id; ?> - - + + + slug; ?>parent ? $cats[$c->parent]->name : ''; ?> + + + slug; ?> + + + taxonomy; ?>slug; ?>parent ? $custom_taxonomies[$t->parent]->name : ''; ?> + + + + + in_the_loop = true; // Fake being in the loop. + + // fetch 20 posts at a time rather than loading the entire table into memory + while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) { + $where = "WHERE ID IN (" . join( ',', $next_posts ) . ")"; + $posts = $wpdb->get_results( "SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC" ); + + // Begin Loop + foreach ($posts as $post) { + setup_postdata( $post ); + + $is_sticky = 0; + if ( is_sticky( $post->ID ) ) + $is_sticky = 1; + + ?> + + <?php echo apply_filters( 'the_title_rss', $post->post_title ); ?> + + + + + + + + post_content ) ); ?> + post_excerpt ) ); ?> + ID; ?> + post_date; ?> + post_date_gmt; ?> + comment_status; ?> + ping_status; ?> + post_name; ?> + post_status; ?> + post_parent; ?> + menu_order; ?> + post_type; ?> + post_password; ?> + + post_type == 'attachment' ) { ?> + ID ); ?> + + get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) ); + if ( $postmeta ) { + ?> + + + meta_key; ?> + meta_value ); ?> + + + + get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d", $post->ID ) ); + if ( $comments ) { foreach ( $comments as $c ) { ?> + + comment_ID; ?> + comment_author ); ?> + comment_author_email; ?> + comment_author_url ); ?> + comment_author_IP; ?> + comment_date; ?> + comment_date_gmt; ?> + comment_content ) ?> + comment_approved; ?> + comment_type; ?> + comment_parent; ?> + user_id; ?> + + - + \ No newline at end of file +?>