WordPress.org

Make WordPress Core

Changeset 6004


Ignore:
Timestamp:
09/01/07 19:32:54 (7 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.