Make WordPress Core

Changeset 8973


Ignore:
Timestamp:
09/25/2008 01:42:34 PM (16 years ago)
Author:
azaozz
Message:

Batch editing, first cut, see #6815

Location:
trunk/wp-admin
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-ajax.php

    r8943 r8973  
    732732    check_ajax_referer( 'inlineeditnonce', '_inline_edit' );
    733733   
    734     if ( ! isset($_POST['post_ID']) )
     734    if ( ! isset($_POST['post_ID']) || ! ( $id = (int) $_POST['post_ID'] ) )
    735735        exit;
     736
     737    if ( $last = wp_check_post_lock( $id ) ) {
     738        $last_user = get_userdata( $last );
     739        $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' );
     740        echo '<tr><td colspan="8"><div class="error"><p>' . sprintf( $_POST['post_type'] == 'page' ? __( 'Saving is disabled: %s is currently editing this page.' ) : __( 'Saving is disabled: %s is currently editing this post.' ),   wp_specialchars( $last_user_name ) ) . '</p></div></td></tr>';
     741        exit;
     742    }
    736743   
    737744    inline_save_row( $_POST );
  • trunk/wp-admin/categories.php

    r8948 r8973  
    179179<option value="delete"><?php _e('Delete'); ?></option>
    180180</select>
    181 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     181<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    182182<?php wp_nonce_field('bulk-categories'); ?>
    183183</div>
  • trunk/wp-admin/css/global.css

    r8787 r8973  
    205205}
    206206*/
    207 .widefat .num {
     207.widefat .num,
     208.widefat .column-comments {
    208209    text-align: center;
    209210}
  • trunk/wp-admin/edit-comments.php

    r8867 r8973  
    196196<option value="delete"><?php _e('Delete'); ?></option>
    197197</select>
    198 <input type="submit" name="doaction" value="<?php _e('Apply'); ?>" class="button-secondary apply" />
     198<input type="submit" name="doaction" id="doaction" value="<?php _e('Apply'); ?>" class="button-secondary apply" />
    199199<?php wp_nonce_field('bulk-comments'); ?>
    200200<?php if ( isset($_GET['apage']) ) { ?>
  • trunk/wp-admin/edit-link-categories.php

    r8948 r8973  
    119119<option value="delete"><?php _e('Delete'); ?></option>
    120120</select>
    121 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     121<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    122122<?php wp_nonce_field('bulk-link-categories'); ?>
    123123</div>
  • trunk/wp-admin/edit-pages.php

    r8948 r8973  
    1010require_once('admin.php');
    1111
    12 // Handle bulk deletes
    13 if ( isset($_GET['action']) && isset($_GET['post']) && isset($_GET['doaction']) ) {
    14     check_admin_referer('bulk-pages');
    15     if ( $_GET['action'] == 'delete' ) {
    16         foreach( (array) $_GET['post'] as $post_id_del ) {
    17             $post_del = & get_post($post_id_del);
    18 
    19             if ( !current_user_can('delete_page', $post_id_del) )
    20                 wp_die( __('You are not allowed to delete this page.') );
    21 
    22             if ( $post_del->post_type == 'attachment' ) {
    23                 if ( ! wp_delete_attachment($post_id_del) )
    24                     wp_die( __('Error in deleting...') );
    25             } else {
    26                 if ( !wp_delete_post($post_id_del) )
    27                     wp_die( __('Error in deleting...') );
     12// Handle bulk actions
     13if ( isset($_GET['action']) && $_GET['action'] != -1 ) {
     14    switch ( $_GET['action'] ) {
     15        case 'delete':
     16            if ( isset($_GET['post']) && isset($_GET['doaction']) ) {
     17                check_admin_referer('bulk-pages');
     18                foreach( (array) $_GET['post'] as $post_id_del ) {
     19                    $post_del = & get_post($post_id_del);
     20       
     21                    if ( !current_user_can('delete_page', $post_id_del) )
     22                        wp_die( __('You are not allowed to delete this page.') );
     23       
     24                    if ( $post_del->post_type == 'attachment' ) {
     25                        if ( ! wp_delete_attachment($post_id_del) )
     26                            wp_die( __('Error in deleting...') );
     27                    } else {
     28                        if ( !wp_delete_post($post_id_del) )
     29                            wp_die( __('Error in deleting...') );
     30                    }
     31                }
    2832            }
    29         }
    30 
    31         $sendback = wp_get_referer();
    32         if (strpos($sendback, 'page.php') !== false) $sendback = admin_url('page-new.php');
    33         elseif (strpos($sendback, 'attachments.php') !== false) $sendback = admin_url('attachments.php');
    34         $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback);
    35 
    36         wp_redirect($sendback);
    37         exit();
     33            break;
     34        case 'edit':
     35            if ( isset($_GET['post']) ) {
     36                check_admin_referer('bulk-pages');
     37                $_GET['post_status'] = $_GET['_status'];
     38   
     39                if ( -1 == $_GET['post_author'] )
     40                    unset($_GET['post_author']);
     41   
     42                $done = bulk_edit_posts($_GET);
     43            }
     44            break;
    3845    }
     46    $sendback = wp_get_referer();
     47    if (strpos($sendback, 'page.php') !== false) $sendback = admin_url('page-new.php');
     48    elseif (strpos($sendback, 'attachments.php') !== false) $sendback = admin_url('attachments.php');
     49    $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback);
     50    if ( isset($done) ) {
     51        $done['upd'] = count( $done['upd'] );
     52        $done['skip'] = count( $done['skip'] );
     53        $sendback = add_query_arg( $done, $sendback );
     54        unset($done);
     55    }
     56    wp_redirect($sendback);
     57    exit();
    3958} elseif ( !empty($_GET['_wp_http_referer']) ) {
    4059     wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
     
    86105</form>
    87106
     107<?php if ( isset($_GET['upd']) && (int) $_GET['upd'] ) { ?>
     108<div id="message" class="updated fade"><p>
     109<?php printf( __ngettext( '%d page updated.', '%d pages updated.', $_GET['upd'] ), number_format_i18n( $_GET['upd'] ) );
     110unset($_GET['upd']);
     111   
     112    if ( isset($_GET['skip']) && (int) $_GET['skip'] ) {
     113        printf( __ngettext( ' %d page not updated. Somebody is editing it.', ' %d pages not updated. Somebody is editing them.', $_GET['skip'] ), number_format_i18n( $_GET['skip'] ) );
     114        unset($_GET['skip']);
     115    } ?>
     116</p></div>
     117<?php } ?>
     118
    88119<div class="wrap">
    89120<form id="adv-settings" action="" method="get">
     
    176207<option value="delete"><?php _e('Delete'); ?></option>
    177208</select>
    178 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     209<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    179210<?php wp_nonce_field('bulk-pages'); ?>
    180211</div>
     
    198229  </thead>
    199230  <tbody>
    200   <?php inline_edit_row( 'page' ) ?>
    201231  <?php page_rows($posts, $pagenum, $per_page); ?>
    202232  </tbody>
    203233</table>
    204234</form>
     235
     236<?php inline_edit_row( 'page' ) ?>
    205237
    206238<div id="ajax-response"></div>
  • trunk/wp-admin/edit-post-rows.php

    r8943 r8973  
    1616    </thead>
    1717    <tbody>
    18      
    19 <?php inline_edit_row( 'post' ) ?>   
    2018
    2119<?php
  • trunk/wp-admin/edit-tags.php

    r8948 r8973  
    185185<option value="delete"><?php _e('Delete'); ?></option>
    186186</select>
    187 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     187<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    188188<?php wp_nonce_field('bulk-tags'); ?>
    189189</div>
  • trunk/wp-admin/edit.php

    r8948 r8973  
    1111
    1212// Handle bulk actions
    13 if ( isset($_GET['action']) && $_GET['action'] != -1 && isset($_GET['doaction']) ) {
     13if ( isset($_GET['action']) && $_GET['action'] != -1 ) {
    1414    switch ( $_GET['action'] ) {
    1515        case 'delete':
    16             if ( isset($_GET['post']) ) {
     16            if ( isset($_GET['post']) && isset($_GET['doaction']) ) {
    1717                check_admin_referer('bulk-posts');
    1818                foreach( (array) $_GET['post'] as $post_id_del ) {
     
    3333            break;
    3434        case 'edit':
    35             // TODO: Decide what to do here - add bulk edit feature, or just disallow if >1 post selected
     35            if ( isset($_GET['post']) ) {
     36                check_admin_referer('bulk-posts');
     37                $_GET['post_status'] = $_GET['_status'];
     38   
     39                if ( -1 == $_GET['post_author'] )
     40                    unset($_GET['post_author']);
     41   
     42                $done = bulk_edit_posts($_GET);
     43            }
    3644            break;
    3745    }
     46
    3847    $sendback = wp_get_referer();
    3948    if (strpos($sendback, 'post.php') !== false) $sendback = admin_url('post-new.php');
    4049    elseif (strpos($sendback, 'attachments.php') !== false) $sendback = admin_url('attachments.php');
    4150    $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback);
    42 
     51    if ( isset($done) ) {
     52        $done['upd'] = count( $done['upd'] );
     53        $done['skip'] = count( $done['skip'] );
     54        $sendback = add_query_arg( $done, $sendback );
     55        unset($done);
     56    }
    4357    wp_redirect($sendback);
    4458    exit();
     
    7993    </p>
    8094</form>
     95
     96<?php if ( isset($_GET['posted']) && $_GET['posted'] ) : $_GET['posted'] = (int) $_GET['posted']; ?>
     97<div id="message" class="updated fade"><p><strong><?php _e('Your post has been saved.'); ?></strong> <a href="<?php echo get_permalink( $_GET['posted'] ); ?>"><?php _e('View post'); ?></a> | <a href="<?php echo get_edit_post_link( $_GET['posted'] ); ?>"><?php _e('Edit post'); ?></a></p></div>
     98<?php $_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
     99endif; ?>
     100
     101<?php if ( isset($_GET['upd']) && (int) $_GET['upd'] ) { ?>
     102<div id="message" class="updated fade"><p>
     103<?php printf( __ngettext( '%d post updated.', '%d posts updated.', $_GET['upd'] ), number_format_i18n( $_GET['upd'] ) );
     104unset($_GET['upd']);
     105   
     106    if ( isset($_GET['skip']) && (int) $_GET['skip'] ) {
     107        printf( __ngettext( ' %d post not updated. Somebody is editing it.', ' %d posts not updated. Somebody is editing them.', $_GET['skip'] ), number_format_i18n( $_GET['skip'] ) );
     108        unset($_GET['skip']);
     109    } ?>
     110</p></div>
     111<?php } ?>
    81112
    82113<div class="wrap">
     
    155186<?php if ( isset($_GET['post_status'] ) ) : ?>
    156187<input type="hidden" name="post_status" value="<?php echo attribute_escape($_GET['post_status']) ?>" />
    157 <?php endif;
    158 
    159 if ( isset($_GET['posted']) && $_GET['posted'] ) : $_GET['posted'] = (int) $_GET['posted']; ?>
    160 <div id="message" class="updated fade"><p><strong><?php _e('Your post has been saved.'); ?></strong> <a href="<?php echo get_permalink( $_GET['posted'] ); ?>"><?php _e('View post'); ?></a> | <a href="<?php echo get_edit_post_link( $_GET['posted'] ); ?>"><?php _e('Edit post'); ?></a></p></div>
    161 <?php $_SERVER['REQUEST_URI'] = remove_query_arg(array('posted'), $_SERVER['REQUEST_URI']);
    162 endif;
    163 ?>
    164 
     188<?php endif; ?>
    165189<input type="hidden" name="mode" value="<?php echo $mode; ?>" />
    166190
     
    190214<option value="delete"><?php _e('Delete'); ?></option>
    191215</select>
    192 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     216<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    193217<?php wp_nonce_field('bulk-posts'); ?>
    194218<?php
     
    243267
    244268</form>
     269
     270<?php inline_edit_row( 'post' ); ?>
    245271
    246272<div id="ajax-response"></div>
  • trunk/wp-admin/inbox.php

    r8845 r8973  
    3232<option value="archive"><?php _e('Archive'); ?></option>
    3333</select>
    34 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     34<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    3535</div>
    3636<br class="clear" />
  • trunk/wp-admin/includes/post.php

    r8912 r8973  
    176176
    177177    return $post_ID;
     178}
     179
     180function bulk_edit_posts( $post_data = null ) {
     181
     182    if ( empty($post_data) )
     183        $post_data = &$_POST;
     184
     185    if ( 'page' == $post_data['post_type'] ) {
     186        if ( ! current_user_can( 'edit_pages' ) )
     187            wp_die( __('You are not allowed to edit pages.') );
     188    } else {
     189        if ( ! current_user_can( 'edit_posts' ) )
     190            wp_die( __('You are not allowed to edit posts.') );
     191    }
     192
     193    $post_IDs = array_map( intval, (array) $post_data['post'] );
     194
     195    if ( isset($post_data['post_category']) ) {
     196        if ( is_array($post_data['post_category']) && ! empty($post_data['post_category']) )
     197            $new_cats = array_map( absint, $post_data['post_category'] );
     198        else
     199            unset($post_data['post_category']);
     200    }
     201
     202    if ( isset($post_data['tags_input']) ) {
     203        if ( ! empty($post_data['tags_input']) ) {
     204            $new_tags = preg_replace( '/\s*,\s*/', ',', rtrim($post_data['tags_input'], ' ,') );
     205            $new_tags = explode(',', $new_tags);
     206        } else {
     207            unset($post_data['tags_input']);
     208        }
     209    }
     210
     211    $reset = array( 'post_author', 'post_status', 'post_password', 'post_parent', 'page_template', 'comment_status', 'ping_status', 'keep_private' );
     212    foreach ( $reset as $field ) {
     213        if ( isset($post_data[$field]) && '' == $post_data[$field] )
     214            unset($post_data[$field]);
     215    }
     216
     217    $updated = $skipped = array();
     218    foreach ( $post_IDs as $post_ID ) {
     219
     220        if ( wp_check_post_lock( $post_ID ) ) {
     221            $skipped[] = $post_ID;
     222            continue;
     223        }
     224
     225        if ( isset($new_cats) ) {
     226            $cats = (array) wp_get_post_categories($post_ID);
     227            $post_data['post_category'] = array_unique( array_merge($cats, $new_cats) );
     228        }
     229
     230        if ( isset($new_tags) ) {
     231            $tags = wp_get_post_tags($post_ID, array('fields' => 'names'));
     232            $post_data['tags_input'] = array_unique( array_merge($tags, $new_tags) );
     233        }
     234
     235        $post_data['ID'] = $post_ID;
     236        $updated[] = wp_update_post( $post_data );
     237    }
     238
     239    return array( 'upd' => $updated, 'skip' => $skipped );
    178240}
    179241
  • trunk/wp-admin/includes/template.php

    r8967 r8973  
    623623    $col_count = count($columns) - $hidden_count;
    624624    $m = ( isset($mode) && 'excerpt' == $mode ) ? 'excerpt' : 'list';
    625     ?>
    626     <tr title="<?php _e('Double-click to cancel'); ?>" id="inline-edit" style="display: none"><td colspan="<?php echo $col_count; ?>">
     625    $can_publish = current_user_can('publish_posts'); ?>
     626
     627<form method="get" action=""><table style="display: none"><tbody id="inlineedit">
     628    <?php
     629    $bulk = 0;
     630    while ( $bulk < 2 ) { ?>
     631   
     632    <tr title="<?php _e('Double-click to cancel'); ?>" id="<?php echo $bulk ? 'bulk-edit' : 'inline-edit'; ?>" style="display: none"><td colspan="<?php echo $col_count; ?>">
    627633    <?php
    628634    foreach($columns as $column_name=>$column_display_name) {
     
    641647            case 'modified':
    642648            case 'date':
    643             ?>
     649                if ( ! $bulk ) { ?>
    644650                <div <?php echo $attributes; ?> title="<?php _e('Timestamp'); ?>">
    645651                    <div class="title"><?php _e('Timestamp'); ?></div>
     
    649655                </div>
    650656                <?php
     657                }
    651658                break;
    652659
    653660            case 'title':
    654661                $attributes = "class=\"$type-title column-title quick-edit-div\"" . $style; ?>
     662                <?php if ( $bulk ) { ?>
     663                <div <?php echo $attributes; ?> id="bulk-title-div" title="<?php $is_page ? _e('Selected pages') : _e('Selected posts'); ?>">
     664                    <div class="title"><?php $is_page ? _e('Selected pages') : _e('Selected posts'); ?></div>
     665                    <div class="in">
     666                    <div id="bulk-titles"></div>
     667                    </div>
     668                </div>
     669                <?php } else { ?>
    655670                <div <?php echo $attributes ?>>
    656671                    <div class="title"><?php _e('Title'); ?></div>
     
    661676                    </div>
    662677                </div>
     678                <?php } ?>
     679
    663680                <?php if ( $is_page ) { ?>
    664681                <div class="parent quick-edit-div" title="<?php _e('Page Parent'); ?>">
     
    666683                    <div class="in">
    667684                    <select name="post_parent">
     685                        <?php if ( $bulk ) { ?>
     686                        <option value=""><?php _e('- No Change -'); ?></option>
     687                        <?php } ?>
    668688                        <option value="0"><?php _e('Main Page (no parent)'); ?></option>
    669689                        <?php parent_dropdown(); ?>
     
    671691                    </div>
    672692                </div>
     693
    673694                <div class="template quick-edit-div" title="<?php _e('Page Template'); ?>">
    674695                    <div class="title"><?php _e('Page Template'); ?></div>
    675696                    <div class="in">
    676697                    <select name="page_template">
    677                         <option value='default'><?php _e('Default Template'); ?></option>
     698                        <?php if ( $bulk ) { ?>
     699                        <option value=""><?php _e('- No Change -'); ?></option>
     700                        <?php } ?>
     701                        <option value="default"><?php _e('Default Template'); ?></option>
    678702                        <?php page_template_dropdown() ?>
    679703                    </select>
    680704                    </div>
    681705                </div>
     706
     707                <?php if ( ! $bulk ) { ?>
    682708                <div class="order quick-edit-div" title="<?php _e('Page Order'); ?>">
    683709                    <div class="title"><?php _e('Page Order'); ?></div>
     
    687713                </div>
    688714                <?php }
     715                }
    689716
    690717                break;
    691718
    692719            case 'categories': ?>
     720                <?php if ( ! $bulk ) { ?>
    693721                <div <?php echo $attributes ?> title="<?php _e('Categories'); ?>">
    694722                    <div class="title"><?php _e('Categories'); ?>
     
    699727                    </ul>
    700728                </div>
    701                 <?php
     729                <?php }
    702730                break;
    703731
    704732            case 'tags': ?>
     733                <?php if ( ! $bulk ) { ?>
    705734                <div <?php echo $attributes ?> title="<?php _e('Tags'); ?>">
    706735                    <div class="title"><?php _e('Tags'); ?></div>
     
    709738                    </div>
    710739                </div>
    711                 <?php
     740                <?php }
    712741                break;
    713742
    714743            case 'comments':
    715                 $attributes = 'class="comments column-comments num quick-edit-div"' . $style; ?>
     744                ?>
    716745                <div <?php echo $attributes ?> title="<?php _e('Comments and Pings'); ?>">
    717746                    <div class="title"><?php _e('Comments and Pings'); ?></div>
    718747                    <div class="in">
     748                    <?php if ( $bulk ) { ?>
     749                    <select name="comment_status">
     750                        <option value=""><?php _e('- No Change -'); ?></option>
     751                        <option value="open"><?php _e('Allow Comments'); ?></option>
     752                        <option value="closed"><?php _e('Disallow Comments'); ?></option>
     753                    </select>
     754                    <select name="ping_status">
     755                        <option value=""><?php _e('- No Change -'); ?></option>
     756                        <option value="open"><?php _e('Allow Pings'); ?></option>
     757                        <option value="closed"><?php _e('Disallow Pings'); ?></option>
     758                    </select>
     759                    <?php } else { ?>
    719760                    <label><input type="checkbox" name="comment_status" value="open" />
    720761                    <?php _e('Allow Comments'); ?></label><br />
    721762                    <label><input type="checkbox" name="ping_status" value="open" />
    722763                    <?php _e('Allow Pings'); ?></label>
     764                    <?php } ?>
    723765                    </div>
    724766                </div>
     
    732774                    <div class="title"><?php _e('Author'); ?></div>
    733775                    <div class="in">
    734                     <?php wp_dropdown_users( array('include' => $authors, 'name' => 'post_author', 'class'=> 'authors', 'selected' => $post->post_author) ); ?>
     776                    <?php
     777                    $users_opt = array('include' => $authors, 'name' => 'post_author', 'class'=> 'authors');
     778                    if ( $bulk ) $users_opt['show_option_none'] = __('- No Change -');
     779                    wp_dropdown_users( $users_opt ); ?>
    735780                    </div>
    736781                </div>
    737782                <?php } ?>
    738783
     784                <?php if ( ! $bulk ) { ?>
    739785                <div class="password quick-edit-div" title="<?php _e('Password'); ?>">
    740786                    <div class="title"><?php _e('Password'); ?></div>
    741787                    <div class="in">
    742                     <input type="text" name="post_password" value="<?php the_post_password(); ?>" />
     788                    <input type="text" name="post_password" value="" />
    743789                    <label title="<?php _e('Privacy'); ?>">
    744790                    <input type="checkbox" name="keep_private" value="private" <?php checked($post->post_status, 'private'); ?> /> <?php echo $is_page ? __('Keep this page private') : __('Keep this post private'); ?></label>
    745791                    </div>
    746792                </div>
    747                 <?php
     793                <?php }
    748794                break;
    749795
     
    753799                    <div class="in">
    754800                    <select name="_status">
    755                         <?php if ( current_user_can('publish_posts') ) { // Contributors only get "Unpublished" and "Pending Review" ?>
    756                         <option value='publish'><?php _e('Published') ?></option>
    757                         <option value='future'><?php _e('Scheduled') ?></option>
     801                        <?php if ( $bulk ) { ?>
     802                        <option value=""><?php _e('- No Change -'); ?></option>
     803                            <?php if ( $can_publish ) { ?>
     804                            <option value="private"><?php _e('Private') ?></option>
     805                            <?php } ?>
    758806                        <?php } ?>
    759                         <option value='pending'><?php _e('Pending Review') ?></option>
    760                         <option value='draft'><?php _e('Unpublished') ?></option>
     807                        <?php if ( $can_publish ) { // Contributors only get "Unpublished" and "Pending Review" ?>
     808                        <option value="publish"><?php _e('Published') ?></option>
     809                        <option value="future"><?php _e('Scheduled') ?></option>
     810                        <?php } ?>
     811                        <option value="pending"><?php _e('Pending Review') ?></option>
     812                        <option value="draft"><?php _e('Unpublished') ?></option>
    761813                    </select>
    762814                    </div>
    763815                </div>
    764816
    765                 <?php if ( current_user_can( 'edit_others_posts' ) && ! $is_page ) { ?>
     817                <?php if ( ! $is_page && ! $bulk && current_user_can( 'edit_others_posts' ) ) { ?>
    766818                <div class="sticky quick-edit-div" <?php echo $style; ?> title="<?php _e('Sticky') ?>">
    767819                    <div class="title"><?php _e('Sticky'); ?></div>
     
    774826                break;
    775827
    776             case 'control_view': ?>
    777                 <div><a href="<?php the_permalink(); ?>" rel="permalink" class="view"><?php _e('View'); ?></a></div>
    778                 <?php
    779                 break;
    780 
    781             case 'control_edit': ?>
    782                 <div><?php if ( current_user_can('edit_post',$post->ID) ) { echo "<a href='post.php?action=edit&amp;post=$id' class='edit'>" . __('Edit') . "</a>"; } ?></div>
    783                 <?php
    784                 break;
    785 
    786             case 'control_delete': ?>
    787                 <div><?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'>" . __('Delete') . "</a>"; } ?></div>
    788                 <?php
    789                 break;
    790 
    791             default: ?>
    792                 <div><?php do_action('manage_posts_custom_column', $column_name, $post->ID); ?></div>
    793                 <?php
     828            default:
     829                if ( $bulk )
     830                    do_action('bulk_edit_custom_box', $column_name, $type);
     831                else
     832                    do_action('quick_edit_custom_box', $column_name, $type);
     833
    794834                break;
    795835        }
     
    800840        <a accesskey="c" href="#inline-edit" title="<?php _e('Cancel'); ?>" class="button-secondary cancel"><?php _e('Cancel'); ?></a>
    801841        <a accesskey="s" href="#inline-edit" title="<?php _e('Save'); ?>" class="button-secondary save"><?php _e('Save'); ?></a>
    802         <?php wp_nonce_field( 'inlineeditnonce', '_inline_edit', false ) ?>
     842        <?php if ( ! $bulk ) wp_nonce_field( 'inlineeditnonce', '_inline_edit', false ); ?>
    803843        <input type="hidden" name="post_view" value="<?php echo $m; ?>" />
    804844    </div>
    805845    </td></tr>
     846<?php
     847    $bulk++;
     848    } ?>
     849    </tbody></table></form>
    806850<?php
    807851}
     
    845889
    846890    echo '
    847 <div id="inline_' . $post->ID . '">
    848     <input type="hidden" name="" class="post_title" value="' . $title . '" />
    849     <input type="hidden" name="" class="post_name" value="' . $post->post_name . '" />
    850     <input type="hidden" name="" class="post_author" value="' . $post->post_author . '" />
    851     <input type="hidden" name="" class="comment_status" value="' . $post->comment_status . '" />
    852     <input type="hidden" name="" class="ping_status" value="' . $post->ping_status . '" />
    853     <input type="hidden" name="" class="_status" value="' . $post->post_status . '" />
    854     <input type="hidden" name="" class="jj" value="' . mysql2date( 'd', $post->post_date ) . '" />
    855     <input type="hidden" name="" class="mm" value="' . mysql2date( 'm', $post->post_date ) . '" />
    856     <input type="hidden" name="" class="aa" value="' . mysql2date( 'Y', $post->post_date ) . '" />
    857     <input type="hidden" name="" class="hh" value="' . mysql2date( 'H', $post->post_date ) . '" />
    858     <input type="hidden" name="" class="mn" value="' . mysql2date( 'i', $post->post_date ) . '" />
    859     <input type="hidden" name="" class="post_password" value="' . wp_specialchars($post->post_password, 1) . '" />';
     891<div class="hidden" id="inline_' . $post->ID . '">
     892    <div class="post_title">' . $title . '</div>
     893    <div class="post_name">' . $post->post_name . '</div>
     894    <div class="post_author">' . $post->post_author . '</div>
     895    <div class="comment_status">' . $post->comment_status . '</div>
     896    <div class="ping_status">' . $post->ping_status . '</div>
     897    <div class="_status">' . $post->post_status . '</div>
     898    <div class="jj">' . mysql2date( 'd', $post->post_date ) . '</div>
     899    <div class="mm">' . mysql2date( 'm', $post->post_date ) . '</div>
     900    <div class="aa">' . mysql2date( 'Y', $post->post_date ) . '</div>
     901    <div class="hh">' . mysql2date( 'H', $post->post_date ) . '</div>
     902    <div class="mn">' . mysql2date( 'i', $post->post_date ) . '</div>
     903    <div class="post_password">' . wp_specialchars($post->post_password, 1) . '</div>';
    860904
    861905    if( $post->post_type == 'page' )
    862906        echo '
    863     <input type="hidden" name="" class="post_parent" value="' . $post->post_parent . '" />
    864     <input type="hidden" name="" class="page_template" value="' . wp_specialchars(get_post_meta( $post->ID, '_wp_page_template', true ), 1) . '" />
    865     <input type="hidden" name="" class="menu_order" value="' . $post->menu_order . '" />';
     907    <div class="post_parent">' . $post->post_parent . '</div>
     908    <div class="page_template">' . wp_specialchars(get_post_meta( $post->ID, '_wp_page_template', true ), 1) . '</div>
     909    <div class="menu_order">' . $post->menu_order . '</div>';
    866910   
    867911    if( $post->post_type == 'post' )
    868912        echo '
    869     <input type="hidden" name="" class="tags_input" value="' . wp_specialchars( str_replace( ',', ', ', get_tags_to_edit($post->ID) ), 1) . '" />
    870     <input type="hidden" name="" class="post_category" value="' . implode( ',', wp_get_post_categories( $post->ID ) ) . '" />
    871     <input type="hidden" name="" class="sticky" value="' . (is_sticky($post->ID) ? 'sticky' : '') . '" />';
     913    <div class="tags_input">' . wp_specialchars( str_replace( ',', ', ', get_tags_to_edit($post->ID) ), 1) . '</div>
     914    <div class="post_category">' . implode( ',', wp_get_post_categories( $post->ID ) ) . '</div>
     915    <div class="sticky">' . (is_sticky($post->ID) ? 'sticky' : '') . '</div>';
    872916       
    873917    echo '</div>';
     
    10361080
    10371081        case 'comments':
    1038             $attributes = 'class="comments column-comments num"' . $style;
    10391082        ?>
    10401083        <td <?php echo $attributes ?>><div class="post-com-count-wrapper">
     
    12111254
    12121255    case 'comments':
    1213         $attributes = 'class="comments column-comments num"' . $style;
    12141256        ?>
    12151257        <td <?php echo $attributes ?>><div class="post-com-count-wrapper">
  • trunk/wp-admin/js/inline-edit.js

    r8951 r8973  
    22(function($) {
    33inlineEdit = {
    4     type : '',
    5     rows : '',
    64
    75    init : function() {
    8         var t = this, blankRow = $('#inline-edit');
     6        var t = this, qeRow = $('#inline-edit'), bulkRow = $('#bulk-edit');
    97
    108        t.type = $('table.widefat').hasClass('page') ? 'page' : 'post';
     9        t.what = '#'+t.type+'-';
    1110
    1211        // get all editable rows
     
    1413
    1514        // prepare the edit row
    16         blankRow.dblclick(function() { inlineEdit.toggle(this); })
    17             .keyup(function(e) { if(e.which == 27) return inlineEdit.revert(this); });
    18 
    19         $('a.cancel', blankRow).click(function() { return inlineEdit.revert(this); });
    20         $('a.save', blankRow).click(function() { return inlineEdit.save(this); });
     15        qeRow.dblclick(function() { inlineEdit.toggle(this); })
     16            .keyup(function(e) { if(e.which == 27) return inlineEdit.revert(); });
     17
     18        bulkRow.dblclick(function() { inlineEdit.revert(); })
     19            .keyup(function(e) { if (e.which == 27) return inlineEdit.revert(); });
     20
     21        $('a.cancel', qeRow).click(function() { return inlineEdit.revert(); });
     22        $('a.save', qeRow).click(function() { return inlineEdit.save(this); });
     23
     24        $('a.cancel', bulkRow).click(function() { return inlineEdit.revert(); });
     25        $('a.save', bulkRow).click(function() { return inlineEdit.saveBulk(); });
    2126
    2227        // add events
    2328        t.rows.dblclick(function() { inlineEdit.toggle(this); });
    2429        t.addEvents(t.rows);
     30
     31        $('#bulk-title-div').after(
     32            $('#inline-edit div.categories').clone(),
     33            $('#inline-edit div.tags').clone()
     34        );
     35
     36        // categories expandable?
     37        $('span.catshow').click(function() {
     38            $('.inline-editor ul.cat-checklist').addClass("cat-hover");
     39            $('.inline-editor span.cathide').show();
     40            $(this).hide();
     41        });
     42
     43        $('span.cathide').click(function() {
     44            $('.inline-editor ul.cat-checklist').removeClass("cat-hover");
     45            $('.inline-editor span.catshow').show();
     46            $(this).hide();
     47        });
     48
     49        $('select[name="_status"] option[value="future"]', bulkRow).remove();
     50
     51        $('#doaction').click(function(e){
     52            if ( $('select[name="action"]').val() == 'edit' ) {
     53                e.preventDefault();
     54                t.setBulk();
     55            } else if ( $('form#posts-filter tr.inline-editor').length > 0 ) {
     56                t.revert();
     57            }
     58        });
     59       
     60        $('#post-query-submit').click(function(e){
     61            if ( $('form#posts-filter tr.inline-editor').length > 0 )
     62                t.revert();
     63        });
     64       
    2565    },
    2666
     
    2868        var t = this;
    2969
    30         $('#'+t.type+'-'+t.getId(el)).css('display') == 'none' ? t.revert(el) : t.edit(el);
     70        $(t.what+t.getId(el)).css('display') == 'none' ? t.revert() : t.edit(el);
    3171    },
    3272
     
    3979    },
    4080
     81    setBulk : function() {
     82        var te = '', c = '';
     83        this.revert();
     84
     85        $('table.widefat tbody').prepend( $('#bulk-edit') );
     86        $('#bulk-edit').addClass('inline-editor').show();
     87
     88        $('tbody th.check-column input[type="checkbox"]').each(function(i){
     89            if ( $(this).attr('checked') ) {
     90                var id = $(this).val();
     91                c = c == '' ? ' class="alternate"' : '';
     92                te += '<div'+c+'>'+$('#inline_'+id+' .post_title').text()+'</div>';
     93            }
     94        });
     95
     96        $('#bulk-titles').html(te);
     97
     98        // enable autocomplete for tags
     99        if ( this.type == 'post' )
     100            $('tr.inline-editor textarea[name="tags_input"]').suggest( 'admin-ajax.php?action=ajax-tag-search', { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } );
     101    },
     102
    41103    edit : function(id) {
    42         var t = this, type = t.type, old = $('tr.inline-editor').attr('id');
    43 
    44         if( typeof(id) == 'object' )
     104        var t = this;
     105        t.revert();
     106
     107        if ( typeof(id) == 'object' )
    45108            id = t.getId(id);
    46109
    47         if ( old ) {
    48             old = old.split('-')[1];
    49             t.revert(old);
    50         }
    51 
    52110        var fields = ['post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'post_password'];
    53         if ( type == 'page' ) fields.push('post_parent', 'menu_order', 'page_template');
    54         if ( type == 'post' ) fields.push('tags_input');
     111        if ( t.type == 'page' ) fields.push('post_parent', 'menu_order', 'page_template');
     112        if ( t.type == 'post' ) fields.push('tags_input');
    55113
    56114        // add the new blank row
    57115        var editRow = $('#inline-edit').clone(true);
    58116
    59         if ( $('#'+type+'-'+id).hasClass('alternate') )
     117        if ( $(t.what+id).hasClass('alternate') )
    60118            $(editRow).addClass('alternate');
    61         $('#'+type+'-'+id).hide().after(editRow);
     119        $(t.what+id).hide().after(editRow);
    62120
    63121        // populate the data
    64122        var rowData = $('#inline_'+id);
    65123        for ( var f = 0; f < fields.length; f++ ) {
    66             $(':input[name="'+fields[f]+'"]', editRow).val( $('.'+fields[f], rowData).val() );
     124            $(':input[name="'+fields[f]+'"]', editRow).val( $('.'+fields[f], rowData).text() );
    67125        }
    68126
    69         if ( $('.comment_status', rowData).val() == 'open' )
     127        if ( $('.comment_status', rowData).text() == 'open' )
    70128            $('input[name="comment_status"]', editRow).attr("checked", "checked");
    71         if ( $('.ping_status', rowData).val() == 'open' )
     129        if ( $('.ping_status', rowData).text() == 'open' )
    72130            $('input[name="ping_status"]', editRow).attr("checked", "checked");
    73         if ( $('.sticky', rowData).val() == 'sticky' )
     131        if ( $('.sticky', rowData).text() == 'sticky' )
    74132            $('input[name="sticky"]', editRow).attr("checked", "checked");
    75133
    76134        // categories
    77135        var cats;
    78         if ( cats = $('.post_category', rowData).val() )
    79             $('ul.cat-checklist :checkbox').val(cats.split(','));
     136        if ( cats = $('.post_category', rowData).text() )
     137            $('ul.cat-checklist :checkbox', editRow).val(cats.split(','));
    80138
    81139        // handle the post status
    82         var status = $('._status', rowData).val();
     140        var status = $('._status', rowData).text();
    83141        if ( status != 'future' ) $('select[name="_status"] option[value="future"]', editRow).remove();
    84142        if ( status == 'private' ) $('input[name="keep_private"]', editRow).attr("checked", "checked");
     
    100158        }
    101159
    102         // categories expandable?
    103         $('span.catshow', editRow).click(function() {
    104             $('ul.cat-checklist', editRow).addClass("cat-hover");
    105             $('span.cathide', editRow).show();
    106             $(this).hide();
    107         });
    108 
    109         $('span.cathide', editRow).click(function() {
    110             $('ul.cat-checklist', editRow).removeClass("cat-hover");
    111             $('span.catshow', editRow).show();
    112             $(this).hide();
    113         });
    114 
    115160        $(editRow).attr('id', 'edit-'+id).addClass('inline-editor').show();
    116161        $('.ptitle', editRow).focus();
    117162
    118163        // enable autocomplete for tags
    119         if ( type == 'post' )
     164        if ( t.type == 'post' )
    120165            $('tr.inline-editor textarea[name="tags_input"]').suggest( 'admin-ajax.php?action=ajax-tag-search', { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } );
    121166
     
    141186        // make ajax request
    142187        $.post('admin-ajax.php', params,
    143             function(html) {
    144                 var row = $('#'+inlineEdit.type+'-'+id);
    145                 $('#edit-'+id).hide();
    146                 html = $(html).html();
    147                 row.html(html).show();
    148                 row.animate( { backgroundColor: '#FFFBCC' }, 200)
    149                      .animate( { backgroundColor: row.css('background-color') }, 500);
     188            function(r) {
     189                var row = $(inlineEdit.what+id);
     190                $('#edit-'+id).remove();
     191                row.html($(r).html()).show()
     192                    .animate( { backgroundColor: '#CCEEBB' }, 500)
     193                    .animate( { backgroundColor: '#eefee7' }, 500);
    150194                inlineEdit.addEvents(row);
    151195            }
     
    154198    },
    155199
    156     revert : function(id) {
    157         if ( typeof(id) == 'object' )
    158             id = this.getId(id);
    159 
    160         $('#edit-'+id).remove();
    161         $('#'+this.type+'-'+id).show();
     200    saveBulk : function() {
     201        $('form#posts-filter').submit();
     202    },
     203
     204    revert : function() {
     205        var id;
     206
     207        if ( id = $('table.widefat tr.inline-editor').attr('id') ) {
     208            if ( 'bulk-edit' == id ) {
     209                $('table.widefat #bulk-edit').removeClass('inline-editor').hide();
     210                $('#bulk-titles').html('');
     211                $('#inlineedit').append( $('#bulk-edit') );
     212            } else  {
     213                $('#'+id).remove();
     214                id = id.substr( id.lastIndexOf('-') + 1 );
     215                $(this.what+id).show();
     216            }
     217        }
    162218
    163219        return false;
  • trunk/wp-admin/link-manager.php

    r8948 r8973  
    121121<option value="delete"><?php _e('Delete'); ?></option>
    122122</select>
    123 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     123<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    124124<?php
    125125$categories = get_terms('link_category', "hide_empty=1");
  • trunk/wp-admin/plugins.php

    r8755 r8973  
    332332            <option value="deactivate-selected"><?php _e('Deactivate'); ?></option>
    333333        </select>
    334         <input type="submit" name="doaction" value="<?php _e('Apply'); ?>" class="button-secondary action" />
     334        <input type="submit" name="doaction_active" value="<?php _e('Apply'); ?>" class="button-secondary action" />
    335335    </div>
    336336</div>
     
    357357<?php endif; ?>
    358358        </select>
    359         <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     359        <input type="submit" value="<?php _e('Apply'); ?>" name="doaction_recent" class="button-secondary action" />
    360360        <input type="submit" name="clear-recent-list" value="<?php _e('Clear List') ?>" class="button-secondary" />
    361361    </div>
  • trunk/wp-admin/upload.php

    r8948 r8973  
    272272<?php } ?>
    273273</select>
    274 <input type="submit" id="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     274<input type="submit" id="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    275275<?php wp_nonce_field('bulk-media'); ?>
    276276<?php
  • trunk/wp-admin/users.php

    r8948 r8973  
    333333<option value="delete"><?php _e('Delete'); ?></option>
    334334</select>
    335 <input type="submit" value="<?php _e('Apply'); ?>" name="doaction" class="button-secondary action" />
     335<input type="submit" value="<?php _e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
    336336<label class="hidden" for="new_role"><?php _e('Change role to&hellip;') ?></label><select name="new_role" id="new_role"><option value=''><?php _e('Change role to&hellip;') ?></option><?php wp_dropdown_roles(); ?></select>
    337337<input type="submit" value="<?php _e('Change'); ?>" name="changeit" class="button-secondary" />
  • trunk/wp-admin/wp-admin.css

    r8955 r8973  
    22042204
    22052205.inline-editor div.title {
    2206     padding: 2px 5px;
     2206    height: 18px;
     2207    line-height: 16px;
     2208    padding: 1px 5px;
    22072209    cursor: default;
    22082210}
     
    22112213.inline-editor .page-title {
    22122214    width: 260px;
     2215}
     2216
     2217#bulk-edit .post-title,
     2218#bulk-edit .page-title {
     2219    width: 200px;
     2220    height: 179px;
    22132221}
    22142222
     
    22592267
    22602268.inline-editor .categories {
    2261     width: 180px;
     2269    width: 200px;
    22622270}
    22632271
     
    22762284.inline-editor .categories ul.cat-hover {
    22772285    height: 200px;
    2278     overflow: auto;
     2286    overflow-x: auto;
    22792287}
    22802288
     
    23022310
    23032311.inline-editor .tags {
    2304     width: 220px;
     2312    width: 200px;
    23052313}
    23062314
     
    23092317    border-style: solid;
    23102318    height: 45px;
    2311     width: 200px;
     2319    width: 180px;
    23122320    font-size: 11px;
    23132321}
     
    23182326}
    23192327
     2328#wpbody-content .inline-editor .comments select {
     2329    margin-bottom: 3px;
     2330    width: 150px;
     2331}
     2332
     2333.inline-editor .parent {
     2334    width: 180px;
     2335}
     2336
     2337#wpbody-content .inline-editor .parent select {
     2338    width: 170px;
     2339}
     2340
    23202341.inline-editor .quick-edit-save {
    23212342    padding: 8px 10px;
     2343}
     2344
     2345#bulk-titles {
     2346    height: 150px;
     2347    overflow: auto;
     2348    cursor: default;
     2349}
     2350
     2351#bulk-titles div {
     2352    padding: 1px 2px;
    23222353}
    23232354
Note: See TracChangeset for help on using the changeset viewer.