WordPress.org

Make WordPress Core

Changeset 6004


Ignore:
Timestamp:
09/01/2007 07:32:54 PM (14 years ago)
Author:
ryan
Message:

AtomPub fixes from Pete Lacey. fixes #4887

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-app.php

    r5951 r6004  
    1414require_once(ABSPATH . WPINC . '/atomlib.php');
    1515
    16 // Attempt to automatically detect whether to use querystring
    17 // or PATH_INFO, based on our environment:
    18 $use_querystring = $wp_version == 'MU' ? 1 : 0;
    19 
    20 // If using querystring, we need to put the path together manually:
    21 if ($use_querystring) {
    22     $GLOBALS['use_querystring'] = $use_querystring;
    23     $action = $_GET['action'];
    24     $eid = (int) $_GET['eid'];
    25 
    26     $_SERVER['PATH_INFO'] = $action;
    27 
    28     if ($eid) {
    29         $_SERVER['PATH_INFO'] .= "/$eid";
    30     }
    31 } else {
    32     $_SERVER['PATH_INFO'] = str_replace( '.*/wp-app.php', '', $_SERVER['REQUEST_URI'] );
    33 }
     16$_SERVER['PATH_INFO'] = preg_replace( '/.*\/wp-app\.php/', '', $_SERVER['REQUEST_URI'] );
    3417
    3518$app_logging = 0;
     
    143126        // redirect to /service in case no path is found.
    144127        if(strlen($path) == 0 || $path == '/') {
    145                 $this->redirect($this->get_service_url());
     128            $this->redirect($this->get_service_url());
    146129        }
    147130   
     
    151134            if(isset($funcs[$method])) {
    152135
    153                         // authenticate regardless of the operation and set the current
    154                         // user. each handler will decide if auth is required or not.
    155                         $this->authenticate();               
    156                         $u = wp_get_current_user();
    157                         if(!isset($u) || $u->ID == 0) {
    158                             if ($always_authenticate) {
    159                                 $this->auth_required('Credentials required.');
    160                             }
    161                         }
    162 
    163                         array_shift($matches);
    164                         call_user_func_array(array(&$this,$funcs[$method]), $matches);
    165                         exit();
     136                // authenticate regardless of the operation and set the current
     137                // user. each handler will decide if auth is required or not.
     138                $this->authenticate();               
     139                $u = wp_get_current_user();
     140                if(!isset($u) || $u->ID == 0) {
     141                    if ($always_authenticate) {
     142                        $this->auth_required('Credentials required.');
     143                    }
     144                }
     145
     146                array_shift($matches);
     147                call_user_func_array(array(&$this,$funcs[$method]), $matches);
     148                exit();
    166149            } else {
    167                         // only allow what we have handlers for...
    168                         $this->not_allowed(array_keys($funcs));
     150                // only allow what we have handlers for...
     151                $this->not_allowed(array_keys($funcs));
    169152            }
    170153            }
     
    246229       
    247230        $wp_cats = get_categories(array('hide_empty' => false));
    248         log_app('CATEGORIES :', print_r($wp_cats,true));
    249231       
    250232        $post_category = array();
     
    353335        $this->escape($postdata);
    354336
    355         log_app('UPDATING ENTRY WITH:', print_r($postdata,true));
    356 
    357337        $result = wp_update_post($postdata);
    358338
     
    607587
    608588    function get_entries_url($page = NULL) {
    609         global $use_querystring;
    610589        if($GLOBALS['post_type'] == 'attachment') {
    611590            $path = $this->MEDIA_PATH;
     
    613592            $path = $this->ENTRIES_PATH;
    614593        }
    615         $url = get_bloginfo('url') . '/' . $this->script_name;
    616         if ($use_querystring) {
    617             $url .= '?action=/' . $path;
    618             if(isset($page) && is_int($page)) {
    619                 $url .= "&eid=$page";
    620             }
    621         } else {
    622             $url .= '/' . $path;
    623             if(isset($page) && is_int($page)) {
    624                 $url .= "/$page";
    625             }
     594        $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $path;
     595        if(isset($page) && is_int($page)) {
     596            $url .= "/$page";
    626597        }
    627598        return $url;
     
    634605
    635606    function get_categories_url($page = NULL) {
    636         global $use_querystring;
    637         $url = get_bloginfo('url') . '/' . $this->script_name;
    638         if ($use_querystring) {
    639             $url .= '?action=/' . $this->CATEGORIES_PATH;
    640         } else {
    641             $url .= '/' . $this->CATEGORIES_PATH;
    642         }
    643         return $url;
     607        return get_bloginfo('url') . '/' . $this->script_name . '/' . $this->CATEGORIES_PATH;
    644608    }
    645609
     
    650614
    651615    function get_attachments_url($page = NULL) {
    652         global $use_querystring;
    653         $url = get_bloginfo('url') . '/' . $this->script_name;
    654         if ($use_querystring) {
    655             $url .= '?action=/' . $this->MEDIA_PATH;
    656             if(isset($page) && is_int($page)) {
    657                 $url .= "&eid=$page";
    658             }
    659         } else {
    660             $url .= '/' . $this->MEDIA_PATH;
    661             if(isset($page) && is_int($page)) {
    662                 $url .= "/$page";
    663             }
     616        $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->MEDIA_PATH;
     617        if(isset($page) && is_int($page)) {
     618            $url .= "/$page";
    664619        }
    665620        return $url;
     
    672627
    673628    function get_service_url() {
    674         global $use_querystring;
    675         $url = get_bloginfo('url') . '/' . $this->script_name;
    676         if ($use_querystring) {
    677             $url .= '?action=/' . $this->SERVICE_PATH;
    678         } else {
    679             $url .= '/' . $this->SERVICE_PATH;
    680         }
    681         return $url;
     629        return get_bloginfo('url') . '/' . $this->script_name . '/' . $this->SERVICE_PATH;
    682630    }
    683631
    684632    function get_entry_url($postID = NULL) {
    685         global $use_querystring;
    686633        if(!isset($postID)) {
    687634            global $post;
     
    689636        }
    690637
    691         if ($use_querystring) {
    692             $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->ENTRY_PATH . "&eid=$postID";
    693         } else {
    694             $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->ENTRY_PATH . "/$postID";
    695         }
     638        $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->ENTRY_PATH . "/$postID";
    696639
    697640        log_app('function',"get_entry_url() = $url");
     
    705648
    706649    function get_media_url($postID = NULL) {
    707         global $use_querystring;
    708650        if(!isset($postID)) {
    709651            global $post;
     
    711653        }
    712654
    713         if ($use_querystring) {
    714             $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->MEDIA_SINGLE_PATH ."/file&eid=$postID";
    715         } else {
    716             $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->MEDIA_SINGLE_PATH ."/file/$postID";
    717         }
     655        $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->MEDIA_SINGLE_PATH ."/file/$postID";
    718656
    719657        log_app('function',"get_media_url() = $url");
     
    768706        $count = get_option('posts_per_rss');
    769707
    770         wp('what_to_show=posts&posts_per_page=' . $count . '&offset=' . ($page-1));
     708        wp('what_to_show=posts&posts_per_page=' . $count . '&offset=' . ($count * ($page-1) ));
    771709
    772710        $post = $GLOBALS['post'];
     
    784722        $prev_page = ($page - 1) < 1 ? NULL : $page - 1;
    785723        $last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? NULL : (int) $last_page;
     724        $self_page = $page > 1 ? $page : NULL;
    786725?><feed xmlns="<?php echo $this->ATOM_NS ?>" xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>">
    787726<id><?php $this->the_entries_url() ?></id>
     
    797736<?php endif; ?>
    798737<link rel="last" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($last_page) ?>" />
    799 <link rel="self" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url() ?>" />
     738<link rel="self" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($self_page) ?>" />
    800739<rights type="text">Copyright <?php echo mysql2date('Y', get_lastpostdate('blog')); ?></rights>
    801740<generator uri="http://wordpress.com/" version="1.0.5-dc">WordPress.com Atom API</generator>
    802 <?php if ( have_posts() ) : while ( have_posts() ) : the_post();
    803 $post = $GLOBALS['post'];
    804 ?>
    805 <entry>
    806         <id><?php the_guid($post->ID); ?></id>
    807         <title type="text"><![CDATA[<?php the_title_rss() ?>]]></title>
    808         <updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></updated>
    809         <published><?php echo get_post_time('Y-m-d\TH:i:s\Z', true); ?></published>
    810         <app:edited><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></app:edited>
    811         <app:control>
    812             <app:draft><?php echo ($GLOBALS['post']->post_status == 'draft' ? 'yes' : 'no') ?></app:draft>
    813         </app:control>
    814         <author>
    815             <name><?php the_author()?></name>
    816             <email><?php the_author_email()?></email>
    817         <?php if (get_the_author_url() && get_the_author_url() != 'http://') { ?>
    818             <uri><?php the_author_url()?></uri>
    819         <?php } ?>
    820         </author>
    821     <?php if($GLOBALS['post']->post_type == 'attachment') { ?>
    822         <link rel="edit-media" href="<?php $this->the_media_url() ?>" />
    823         <content type="<?php echo $GLOBALS['post']->post_mime_type ?>" src="<?php the_guid(); ?>"/>
    824     <?php } else { ?>
    825         <link href="<?php the_permalink_rss() ?>" />
    826         <?php if ( strlen( $GLOBALS['post']->post_content ) ) : ?>
    827             <content type="html"><![CDATA[<?php echo get_the_content('', 0, '') ?>]]></content>
    828         <?php endif; ?>
    829     <?php } ?>
    830         <link rel="edit" href="<?php $this->the_entry_url() ?>" />
    831     <?php foreach(get_the_category() as $category) { ?>
    832         <category scheme="<?php bloginfo_rss('home') ?>" term="<?php echo $category->cat_name?>" />
    833     <?php } ?>
    834         <summary type="html"><![CDATA[<?php the_excerpt_rss(); ?>]]></summary>
    835     </entry>
    836 <?php
    837     endwhile;
    838     endif;
     741<?php if ( have_posts() ) {
     742            while ( have_posts() ) {
     743                the_post();
     744                $this->echo_entry();
     745            }
     746        }
    839747?></feed>
    840748<?php
     
    857765        }
    858766        query_posts($varname . '=' . $postID);
    859         if ( have_posts() ) : while ( have_posts() ) : the_post();
    860         $post = $GLOBALS['post'];
    861         ?>
    862         <?php log_app('$post',print_r($GLOBALS['post'],true)); ?>
     767        if ( have_posts() ) {
     768            while ( have_posts() ) {
     769                the_post();
     770                $this->echo_entry();
     771                log_app('$post',print_r($GLOBALS['post'],true));
     772                $entry = ob_get_contents();
     773                break;
     774            }
     775        }
     776        ob_end_clean();
     777
     778        log_app('get_entry returning:',$entry);
     779        return $entry;
     780    }
     781
     782    function echo_entry() { ?>
    863783<entry xmlns="<?php echo $this->ATOM_NS ?>"
    864784       xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>">
    865     <id><?php the_guid($post->ID); ?></id>
    866     <title type="text"><![CDATA[<?php the_title_rss() ?>]]></title>
    867 
     785    <id><?php the_guid($GLOBALS['post']->ID); ?></id>
     786<?php list($content_type, $content) = $this->prep_content(get_the_title()); ?>
     787    <title type="<?php echo $content_type ?>"><?php echo $content ?></title>
    868788    <updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></updated>
    869789    <published><?php echo get_post_time('Y-m-d\TH:i:s\Z', true); ?></published>
     
    875795        <name><?php the_author()?></name>
    876796        <email><?php the_author_email()?></email>
    877     <?php if (get_the_author_url() && get_the_author_url() != 'http://') { ?>
     797<?php if (get_the_author_url() && get_the_author_url() != 'http://') { ?>
    878798        <uri><?php the_author_url()?></uri>
    879     <?php } ?>
     799<?php } ?>
    880800    </author>
    881801<?php if($GLOBALS['post']->post_type == 'attachment') { ?>
     
    884804<?php } else { ?>
    885805    <link href="<?php the_permalink_rss() ?>" />
    886     <?php if ( strlen( $GLOBALS['post']->post_content ) ) : ?>
    887         <content type="<?php echo $GLOBALS['post']->post_mime_tpye ?>"><![CDATA[<?php echo get_the_content('', 0, '') ?>]]></content>
    888     <?php endif; ?>
     806<?php if ( strlen( $GLOBALS['post']->post_content ) ) :
     807list($content_type, $content) = $this->prep_content(get_the_content()); ?>
     808    <content type="<?php echo $content_type ?>"><?php echo $content ?></content>
     809<?php endif; ?>
    889810<?php } ?>
    890811    <link rel="edit" href="<?php $this->the_entry_url() ?>" />
     
    892813    <category scheme="<?php bloginfo_rss('home') ?>" term="<?php echo $category->cat_name?>" />
    893814<?php } ?>
    894     <summary type="html"><![CDATA[<?php the_excerpt_rss(); ?>]]></summary>
    895     </entry>
    896 <?php
    897         $entry = ob_get_contents();
    898         break;
    899         endwhile;
    900         endif;
    901         ob_end_clean();
    902 
    903         log_app('get_entry returning:',$entry);
    904         return $entry;
     815<?php list($content_type, $content) = $this->prep_content(get_the_excerpt()); ?>
     816    <summary type="<?php echo $content_type ?>"><?php echo $content ?></summary>
     817</entry>
     818<?php }
     819
     820    function prep_content($data) {
     821        if (strpos($data, '<') === false && strpos($data, '&') === false) {
     822            return array('text', $data);
     823        }
     824
     825        $parser = xml_parser_create();
     826        xml_parse($parser, '<div>' . $data . '</div>', true);
     827        $code = xml_get_error_code($parser);
     828        xml_parser_free($parser);
     829
     830        if (!$code) {
     831            $data = "<div xmlns='http://www.w3.org/1999/xhtml'>$data</div>";
     832            return array('xhtml', $data);
     833        }
     834
     835        if (strpos($data, ']]>') == false) {
     836            return array('html', "<![CDATA[$data]]>");
     837        } else {
     838            return array('html', htmlspecialchars($data));
     839        }
    905840    }
    906841
     
    998933
    999934    function created($post_ID, $content, $post_type = 'post') {
    1000         global $use_querystring;
    1001935        log_app('created()::$post_ID',"$post_ID, $post_type");
    1002936        $edit = $this->get_entry_url($post_ID);
     
    1006940                break;
    1007941            case 'attachment':
    1008                 if ($use_querystring) {
    1009                     $edit = get_bloginfo('url') . '/' . $this->script_name . "?action=/attachments&amp;eid=$post_ID";
    1010                 } else {
    1011                     $edit = get_bloginfo('url') . '/' . $this->script_name . "/attachments/$post_ID";
    1012                 }
     942                $edit = get_bloginfo('url') . '/' . $this->script_name . "/attachments/$post_ID";
    1013943                break;
    1014944        }
Note: See TracChangeset for help on using the changeset viewer.