Make WordPress Core

Ticket #3945: 3945d.diff

File 3945d.diff, 18.5 KB (added by mdawaffe, 18 years ago)

posts and pages

  • wp-includes/query.php

     
    995995                }
    996996
    997997                if ( $this->is_attachment ) {
    998                         $where .= " AND (post_type = 'attachment')";
     998                        $where .= " AND post_type = 'attachment'";
    999999                } elseif ($this->is_page) {
    1000                         $where .= " AND (post_type = 'page')";
     1000                        $where .= " AND post_type = 'page'";
    10011001                } elseif ($this->is_single) {
    1002                         $where .= " AND (post_type = 'post')";
     1002                        $where .= " AND post_type = 'post'";
    10031003                } else {
    1004                         $where .= " AND (post_type = '$post_type' AND (post_status = 'publish'";
     1004                        $where .= " AND post_type = '$post_type'";
     1005                }
    10051006
     1007                if ( isset($q['post_status']) && '' != $q['post_status'] ) {
     1008                        $q_status = explode(',', $q['post_status']);
     1009                        $r_status = array();
     1010                        if ( in_array( 'draft'  , $q_status ) )
     1011                                $r_status[] = "post_status = 'draft'";
     1012                        if ( in_array( 'future' , $q_status ) )
     1013                                $r_status[] = "post_status = 'future'";
     1014                        if ( in_array( 'inherit' , $q_status ) )
     1015                                $r_status[] = "post_status = 'inherit'";
     1016                        if ( in_array( 'private', $q_status ) )
     1017                                $r_status[] = "post_status = 'private'";
     1018                        if ( in_array( 'publish', $q_status ) )
     1019                                $r_status[] = "post_status = 'publish'";
     1020                        if ( !empty($r_status) )
     1021                                $where .= " AND (" . join( ' OR ', $r_status ) . ")";
     1022                } elseif ( !$this->is_singular ) {
     1023                        $where .= " AND (post_status = 'publish'";
     1024
    10061025                        if ( is_admin() )
    10071026                                $where .= " OR post_status = 'future' OR post_status = 'draft'";
    10081027
    1009                         if ( is_user_logged_in() ) {
    1010                                 if ( 'post' == $post_type )
    1011                                         $cap = 'read_private_posts';
    1012                                 else
    1013                                         $cap = 'read_private_pages';
     1028                        $where .= current_user_can( "read_private_{$post_type}s" ) ? " OR post_status = 'private'" : " OR post_author = $user_ID AND post_status = 'private'";
    10141029
    1015                                 if ( current_user_can($cap) )
    1016                                         $where .= " OR post_status = 'private'";
    1017                                 else
    1018                                 $where .= " OR post_author = $user_ID AND post_status = 'private'";
    1019                         }
    1020 
    1021                         $where .= '))';
     1030                        $where .= ')';
    10221031                }
    10231032
    10241033                // Apply filters on where and join prior to paging so that any
  • wp-includes/link-template.php

     
    476476        $request = preg_replace('|^'. $home_root . '|', '', $request);
    477477        $request = preg_replace('|^/+|', '', $request);
    478478       
    479         if ( !$wp_rewrite->using_permalinks() ) {
     479        if ( !$wp_rewrite->using_permalinks() || is_admin() ) {
    480480                $base = trailingslashit( get_bloginfo( 'home' ) );
    481                
     481
    482482                if ( $pagenum > 1 ) {
    483483                        $result = add_query_arg( 'paged', $pagenum, $base . $request );
    484484                } else {
  • wp-includes/capabilities.php

     
    445445function current_user_can($capability) {
    446446        $current_user = wp_get_current_user();
    447447
     448        if ( empty($current_user) )
     449                return false;
     450
    448451        $args = array_slice(func_get_args(), 1);
    449452        $args = array_merge(array($capability), $args);
    450453
    451         if ( empty($current_user) )
    452                 return false;
    453 
    454454        return call_user_func_array(array(&$current_user, 'has_cap'), $args);
    455455}
    456456
  • wp-includes/classes.php

     
    33class WP {
    44        var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'debug', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots');
    55
    6         var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'what_to_show', 'showposts', 'nopaging', 'post_type');
     6        var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'what_to_show', 'showposts', 'nopaging', 'post_type', 'post_status');
    77        var $extra_query_vars = array();
    88
    99        var $query_vars;
  • wp-admin/wp-admin.css

     
    790790        width: 320px;
    791791}
    792792
    793 #searchform {
     793#searchform fieldset {
    794794        float: left;
    795         margin-right: 1em;
    796         width: 18em;
     795        margin: 0 1.5ex 1em 0;
     796        padding: 0;
    797797}
    798798
    799 #viewarc {
    800         float: left;
    801         width: 23em;
    802         margin-bottom: 1em;
     799#searchform fieldset legend {
     800        padding: 0 0 .2em 1px;
    803801}
     802       
     803#searchform #s {
     804        padding: 4px 3px;
     805}
    804806
    805 #viewcat {
     807#searchform #post-query-submit {
    806808        float: left;
    807         width: 30em;
    808         margin-bottom: 1em;
     809        margin: 14px 0 1em;
     810        position: relative;
     811        top: .35em;
    809812}
    810813
    811814#postcustom .updatemeta, #postcustom .deletemeta {
  • wp-admin/edit.php

     
    66wp_enqueue_script( 1 == $_GET['c'] ? 'admin-comments' : 'listman' );
    77require_once('admin-header.php');
    88
    9 $_GET['m'] = (int) $_GET['m'];
     9$_GET['m']   = (int) $_GET['m'];
     10$_GET['cat'] = (int) $_GET['cat'];
     11$post_stati  = array('draft' => __('Draft'), 'future' => __('Future Dated'), 'private' => __('Private'), 'publish' => __('Published'));
    1012
    11 $drafts = get_users_drafts( $user_ID );
    12 $other_drafts = get_others_drafts( $user_ID);
    13 
    14 if ($drafts || $other_drafts) {
     13$post_status_q = '';
     14$author_q = '';
     15if ( isset($_GET['post_status']) && in_array( $_GET['post_status'], array_keys($post_stati) ) ) {
     16        $post_status_q = '&post_status=' . $_GET['post_status'];
     17        if ( in_array( $_GET['post_status'], array('draft', 'private') ) )
     18                $author_q = "&author=$user_ID";
     19}
    1520?>
     21
    1622<div class="wrap">
    17 <?php if ($drafts) { ?>
    18         <p><strong><?php _e('Your Drafts:') ?></strong>
    19         <?php
    20         $i = 0;
    21         foreach ($drafts as $draft) {
    22                 if (0 != $i)
    23                         echo ', ';
    24                 $draft->post_title = apply_filters('the_title', stripslashes($draft->post_title));
    25                 if ($draft->post_title == '')
    26                         $draft->post_title = sprintf(__('Post #%s'), $draft->ID);
    27                 echo "<a href='post.php?action=edit&amp;post=$draft->ID' title='" . __('Edit this draft') . "'>$draft->post_title</a>";
    28                 ++$i;
    29                 }
    30         ?>
    31 .</p>
    32 <?php } ?>
    3323
    34 <?php if ($other_drafts) { ?>
    35         <p><strong><?php _e('Other&#8217;s Drafts:') ?></strong>
    36         <?php
    37         $i = 0;
    38         foreach ($other_drafts as $draft) {
    39                 if (0 != $i)
    40                         echo ', ';
    41                 $draft->post_title = apply_filters('the_title', stripslashes($draft->post_title));
    42                 if ($draft->post_title == '')
    43                         $draft->post_title = sprintf(__('Post #%s'), $draft->ID);
    44                 echo "<a href='post.php?action=edit&amp;post=$draft->ID' title='" . __('Edit this draft') . "'>$draft->post_title</a>";
    45                 ++$i;
    46                 }
    47         ?>
    48         .</p>
     24<?php
    4925
    50 <?php } ?>
     26wp("what_to_show=posts$author_q$post_status_q&posts_per_page=15&posts_per_archive_page=-1");
    5127
    52 </div>
    53 <?php } ?>
     28do_action('restrict_manage_posts');
    5429
    55 <div class="wrap">
    56 <h2>
    57 <?php
     30// define the columns to display, the syntax is 'internal name' => 'display name'
     31$posts_columns = array(
     32        'id'         => '<div style="text-align: center">' . __('ID') . '</div>',
     33        'date'       => __('When'),
     34        'title'      => __('Title'),
     35        'categories' => __('Categories'),
     36        'comments'   => '<div style="text-align: center">' . __('Comments') . '</div>',
     37        'author'     => __('Author')
     38);
     39$posts_columns = apply_filters('manage_posts_columns', $posts_columns);
    5840
    59 wp('what_to_show=posts&posts_per_page=15&posts_per_archive_page=-1');
     41// you can not edit these at the moment
     42$posts_columns['control_view']   = '';
     43$posts_columns['control_edit']   = '';
     44$posts_columns['control_delete'] = '';
    6045
     46?>
     47
     48<h2><?php
    6149if ( is_month() ) {
    6250        single_month_title(' ');
    6351} elseif ( is_search() ) {
    64         printf(__('Search for &#8220;%s&#8221;'), wp_specialchars($_GET['s']) );
     52        printf(__('Search for &#8220;%s&#8221;'), wp_specialchars( get_search_query() ) );
    6553} else {
    6654        if ( is_single() )
    6755                printf(__('Comments on %s'), apply_filters( "the_title", $post->post_title));
     
    7058        else
    7159                _e('Previous Posts');
    7260}
    73 ?>
    74 </h2>
     61?></h2>
    7562
    7663<form name="searchform" id="searchform" action="" method="get">
    77   <fieldset>
    78   <legend><?php _e('Search Posts&hellip;') ?></legend>
    79   <input type="text" name="s" id="s" value="<?php if (isset($s)) echo attribute_escape($s); ?>" size="17" />
    80   <input type="submit" name="submit" value="<?php _e('Search') ?>" class="button" />
    81   </fieldset>
    82 </form>
     64        <fieldset><legend><?php _e('Search terms&hellip;'); ?></legend>
     65                <input type="text" name="s" id="s" value="<?php the_search_query(); ?>" size="17" />
     66        </fieldset>
    8367
    84 <?php $arc_result = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC");
     68        <fieldset><legend><?php _e('Post Type&hellip;'); ?></legend>
     69                <select name='post_status'>
     70                        <option<?php selected( @$_GET['post_status'], 0 ); ?> value='0'><?php _e('Any'); ?></option>
     71<?php   foreach ( $post_stati as $status => $label ) : ?>
     72                        <option<?php selected( @$_GET['post_status'], $status ); ?> value='<?php echo $status; ?>'><?php echo $label; ?></option>
     73<?php   endforeach; ?>
     74                </select>
     75        </fieldset>
    8576
    86 if ( count($arc_result) ) { ?>
     77<?php
    8778
    88 <form name="viewarc" id="viewarc" action="" method="get">
    89         <fieldset>
    90         <legend><?php _e('Browse Month&hellip;') ?></legend>
    91         <select name='m'>
    92         <?php
     79
     80$arc_query = "SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC";
     81
     82$arc_result = $wpdb->get_results( $arc_query );
     83
     84$month_count = count($arc_result);
     85
     86if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) { ?>
     87
     88        <fieldset><legend><?php _e('Month&hellip;') ?></legend>
     89                <select name='m'>
     90                        <option<?php selected( @$_GET['m'], 0 ); ?> value='0'><?php _e('Any'); ?></option>
     91                <?php
    9392                foreach ($arc_result as $arc_row) {
    9493                        if ( $arc_row->yyear == 0 )
    9594                                continue;
    9695                        $arc_row->mmonth = zeroise($arc_row->mmonth, 2);
    9796
    98                         if( isset($_GET['m']) && $arc_row->yyear . $arc_row->mmonth == (int) $_GET['m'] )
    99                                 $default = 'selected="selected"';
     97                        if ( $arc_row->yyear . $arc_row->mmonth == $_GET['m'] )
     98                                $default = ' selected="selected"';
    10099                        else
    101                                 $default = null;
     100                                $default = '';
    102101
    103                         echo "<option $default value='$arc_row->yyear$arc_row->mmonth'>";
     102                        echo "<option$default value='$arc_row->yyear$arc_row->mmonth'>";
    104103                        echo $wp_locale->get_month($arc_row->mmonth) . " $arc_row->yyear";
    105104                        echo "</option>\n";
    106105                }
    107         ?>
    108         </select>
    109                 <input type="submit" name="submit" value="<?php _e('Show Month') ?>" class="button" />
     106                ?>
     107                </select>
    110108        </fieldset>
    111 </form>
    112109
    113110<?php } ?>
    114111
    115 <form name="viewcat" id="viewcat" action="" method="get">
    116         <fieldset>
    117         <legend><?php _e('Browse Category&hellip;') ?></legend>
    118         <?php wp_dropdown_categories('show_option_all='.__('All').'&hide_empty=1&hierarchical=1&show_count=1&selected='.$cat);?>
    119         <input type="submit" name="submit" value="<?php _e('Show Category') ?>" class="button" />
     112        <fieldset><legend><?php _e('Category&hellip;') ?></legend>
     113                <?php wp_dropdown_categories('show_option_all='.__('All').'&hide_empty=1&hierarchical=1&show_count=1&selected='.$cat);?>
    120114        </fieldset>
     115        <input type="submit" id="post-query-submit" value="<?php _e('Go &#187;'); ?>" class="button" />
    121116</form>
    122117
    123 <?php do_action('restrict_manage_posts'); ?>
    124 
    125118<br style="clear:both;" />
    126119
    127120<?php
    128 // define the columns to display, the syntax is 'internal name' => 'display name'
    129 $posts_columns = array(
    130         'id'         => '<div style="text-align: center">' . __('ID') . '</div>',
    131         'date'       => __('When'),
    132         'title'      => __('Title'),
    133         'categories' => __('Categories'),
    134         'comments'   => '<div style="text-align: center">' . __('Comments') . '</div>',
    135         'author'     => __('Author')
    136 );
    137 $posts_columns = apply_filters('manage_posts_columns', $posts_columns);
     121if ( $post_status_q && ( false !== strpos($post_status_q, 'draft') || false !== strpos($post_status_q, 'private') ) ) {
     122        echo '<h3>' . __('Your Posts') . "</h3>\n";
     123        include( 'edit-post-rows.php' );
    138124
    139 // you can not edit these at the moment
    140 $posts_columns['control_view']   = '';
    141 $posts_columns['control_edit']   = '';
    142 $posts_columns['control_delete'] = '';
     125        $editable_ids = get_editable_user_ids( $user_ID );
    143126
    144 ?>
     127        if ( $editable_ids && count($editable_ids) > 1 ) {
     128                $_editable_ids = join(',', array_diff($editable_ids, array($user_ID)));
    145129
    146 <table class="widefat">
    147         <thead>
    148         <tr>
     130                $post_status_q = "&post_status=" . $_GET['post_status'];
    149131
    150 <?php foreach($posts_columns as $column_display_name) { ?>
    151         <th scope="col"><?php echo $column_display_name; ?></th>
    152 <?php } ?>
     132                unset($GLOBALS['day']); // setup_postdata does this
     133                wp("what_to_show=posts&author=$_editable_ids$post_status_q&posts_per_page=-1&posts_per_archive_page=-1");
    153134
    154         </tr>
    155         </thead>
    156         <tbody id="the-list">
    157 <?php
    158 if ($posts) {
    159 $bgcolor = '';
    160 while (have_posts()) : the_post();
    161 add_filter('the_title','wp_specialchars');
    162 $class = ('alternate' == $class) ? '' : 'alternate';
    163 ?>
    164         <tr id='post-<?php echo $id; ?>' class='<?php echo $class; ?>'>
    165 
    166 <?php
    167 
    168 foreach($posts_columns as $column_name=>$column_display_name) {
    169 
    170         switch($column_name) {
    171 
    172         case 'id':
    173                 ?>
    174                 <th scope="row" style="text-align: center"><?php echo $id ?></th>
    175                 <?php
    176                 break;
    177 
    178         case 'date':
    179                 ?>
    180                 <td><?php if ( '0000-00-00 00:00:00' ==$post->post_modified ) _e('Unpublished'); else the_time(__('Y-m-d \<\b\r \/\> g:i:s a')); ?></td>
    181                 <?php
    182                 break;
    183         case 'title':
    184                 ?>
    185                 <td><?php the_title() ?>
    186                 <?php if ('private' == $post->post_status) _e(' - <strong>Private</strong>'); ?></td>
    187                 <?php
    188                 break;
    189 
    190         case 'categories':
    191                 ?>
    192                 <td><?php the_category(','); ?></td>
    193                 <?php
    194                 break;
    195 
    196         case 'comments':
    197                 ?>
    198                 <td style="text-align: center">
    199                         <?php comments_number("<a href='edit.php?p=$id&amp;c=1'>" . __('0') . '</a>', "<a href='edit.php?p=$id&amp;c=1'>" . __('1') . '</a>', "<a href='edit.php?p=$id&amp;c=1'>" . __('%') . '</a>') ?>
    200                         </td>
    201                 <?php
    202                 break;
    203 
    204         case 'author':
    205                 ?>
    206                 <td><?php the_author() ?></td>
    207                 <?php
    208                 break;
    209 
    210         case 'control_view':
    211                 ?>
    212                 <td><a href="<?php the_permalink(); ?>" rel="permalink" class="edit"><?php _e('View'); ?></a></td>
    213                 <?php
    214                 break;
    215 
    216         case 'control_edit':
    217                 ?>
    218                 <td><?php if ( current_user_can('edit_post',$post->ID) ) { echo "<a href='post.php?action=edit&amp;post=$id' class='edit'>" . __('Edit') . "</a>"; } ?></td>
    219                 <?php
    220                 break;
    221 
    222         case 'control_delete':
    223                 ?>
    224                 <td><?php if ( current_user_can('delete_post',$post->ID) ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $post->ID) . "' class='delete' onclick=\"return deleteSomething( 'post', " . $id . ", '" . js_escape(sprintf(__("You are about to delete this post '%s'.\n'OK' to delete, 'Cancel' to stop."), get_the_title())) . "' );\">" . __('Delete') . "</a>"; } ?></td>
    225                 <?php
    226                 break;
    227 
    228         default:
    229                 ?>
    230                 <td><?php do_action('manage_posts_custom_column', $column_name, $id); ?></td>
    231                 <?php
    232                 break;
     135                if ( have_posts() ) {
     136                        echo '<h3>' . __("Others' Posts") . "</h3>\n";
     137                        include( 'edit-post-rows.php' );
     138                }
    233139        }
     140
     141} else {
     142        include( 'edit-post-rows.php' );
    234143}
    235144?>
    236         </tr>
    237 <?php
    238 endwhile;
    239 } else {
    240 ?>
    241   <tr style='background-color: <?php echo $bgcolor; ?>'>
    242     <td colspan="8"><?php _e('No posts found.') ?></td>
    243   </tr>
    244 <?php
    245 } // end if ($posts)
    246 ?>
    247         </tbody>
    248 </table>
    249145
    250146<div id="ajax-response"></div>
    251147
     
    255151</div>
    256152
    257153<?php
     154
    258155if ( 1 == count($posts) ) {
    259156
    260157        $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved != 'spam' ORDER BY comment_date");
     
    301198        ?>
    302199<?php } ?>
    303200</div>
    304 <?php
    305  include('admin-footer.php');
    306 ?>
     201
     202<?php include('admin-footer.php'); ?>
  • wp-admin/edit-pages.php

     
    44$parent_file = 'edit.php';
    55wp_enqueue_script( 'listman' );
    66require_once('admin-header.php');
     7
     8$post_stati  = array('draft' => __('Draft'), 'future' => __('Future Dated'), 'private' => __('Private'), 'publish' => __('Published'));
     9
     10$post_status_q = '';
     11if ( isset($_GET['post_status']) && in_array( $_GET['post_status'], array_keys($post_stati) ) )
     12        $post_status_q = '&post_status=' . $_GET['post_status'];
     13
    714?>
    815
    916<div class="wrap">
     
    1118<p><?php _e('Pages are like posts except they live outside of the normal blog chronology and can be hierarchical. You can use pages to organize and manage any amount of content.'); ?> <a href="page-new.php"><?php _e('Create a new page &raquo;'); ?></a></p>
    1219
    1320<form name="searchform" id="searchform" action="" method="get">
    14         <fieldset>
    15         <legend><?php _e('Search Pages&hellip;') ?></legend>
    16         <input type="text" name="s" id="s" value="<?php if (isset($_GET['s'])) echo attribute_escape($_GET['s']); ?>" size="17" />
    17         <input type="submit" name="submit" value="<?php _e('Search') ?>"  />
     21        <fieldset><legend><?php _e('Search Terms&hellip;') ?></legend>
     22                <input type="text" name="s" id="s" value="<?php the_search_query(); ?>" size="17" />
    1823        </fieldset>
     24
     25       
     26        <fieldset><legend><?php _e('Page Type&hellip;'); ?></legend>
     27                <select name='post_status'>
     28                        <option<?php selected( @$_GET['post_status'], 0 ); ?> value='0'><?php _e('Any'); ?></option>
     29<?php   foreach ( $post_stati as $status => $label ) : ?>
     30                        <option<?php selected( @$_GET['post_status'], $status ); ?> value='<?php echo $status; ?>'><?php echo $label; ?></option>
     31<?php   endforeach; ?>
     32                </select>
     33        </fieldset>
     34
     35        <input type="submit" id="post-query-submit" value="<?php _e('Go &#187;'); ?>" class="button" />
    1936</form>
    2037
    2138<br style="clear:both;" />
    2239
    2340<?php
    24 wp('post_type=page&orderby=menu_order&what_to_show=posts&posts_per_page=-1&posts_per_archive_page=-1&order=asc');
     41wp("post_type=page&orderby=menu_order&what_to_show=posts$post_status_q&posts_per_page=-1&posts_per_archive_page=-1&order=asc");
    2542
    2643if ( $_GET['s'] )
    2744        $all = false;
     
    4158  </tr>
    4259  </thead>
    4360  <tbody id="the-list">
    44 <?php
    45 page_rows(0, 0, $posts, $all);
    46 ?>
     61<?php page_rows(0, 0, $posts, $all); ?>
    4762  </tbody>
    4863</table>
    4964
     
    5267<?php
    5368} else {
    5469?>
    55 <p><?php _e('No pages yet.') ?></p>
     70<p><?php _e('No pages found.') ?></p>
    5671<?php
    5772} // end if ($posts)
    5873?>