WordPress.org

Make WordPress Core

Ticket #23314: 23314.diff

File 23314.diff, 12.6 KB (added by kovshenin, 5 years ago)
  • wp-includes/post.php

     
    52455245
    52465246        $preview = wp_get_post_autosave($post->ID);
    52475247
     5248        $preview_id = (int) $_GET['preview_id'];
     5249        if ( $preview->ID != $preview_id ) {
     5250                $actual_preview = get_post( $preview_id );
     5251                if ( 'revision' == $actual_preview->post_type )
     5252                        $preview = $actual_preview;
     5253        }
     5254
    52485255        if ( ! is_object($preview) )
    52495256                return $post;
    52505257
  • wp-admin/includes/post.php

     
    243243
    244244        update_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID );
    245245
    246         wp_update_post( $post_data );
     246        if ( ! empty( $_POST['save-as-draft'] ) ) {
     247                unset( $post_data['post_ID'], $post_data['ID'] );
     248                $post_data['post_type'] = 'revision';
     249                $post_data['post_parent'] = $post_ID;
     250                $post_data['post_status'] = 'draft';
     251        }
    247252
     253        if ( ! empty( $_POST['publish'] ) && 'revision' == $post->post_type && current_user_can( 'publish_posts' ) ) {
     254                $parent = get_post( $post->post_parent );
     255                if ( ! current_user_can( 'edit_post', $parent->ID ) )
     256                        wp_die( __( 'You are not allowed to edit this post.' ) );
     257
     258                unset( $post_data['post_parent'] );
     259                $post_data['post_type'] = $parent->post_type;
     260                $post_data['post_status'] = $parent->post_status;
     261                $post_data['post_ID'] = $parent->ID;
     262                $post_data['ID'] = $parent->ID;
     263
     264                // Discard the draft
     265                wp_delete_post( $post->ID, true );
     266        }
     267
     268        if ( ! empty( $post_data['post_ID'] ) )
     269                $post_ID = wp_update_post( $post_data );
     270        else
     271                $post_ID = wp_insert_post( $post_data );
     272
    248273        // Now that we have an ID we can fix any attachment anchor hrefs
    249274        _fix_attachment_links( $post_ID );
    250275
     
    12981323        if ( is_wp_error($id) )
    12991324                wp_die( $id->get_error_message() );
    13001325
    1301         if ( $_POST['post_status'] == 'draft'  ) {
     1326        $post_status = $_POST['post_status'];
     1327        $preview_id = $id;
     1328
     1329        if ( 'revision' == $post->post_type ) {
     1330                $parent = get_post( $post->post_parent );
     1331                $post_status = $parent->post_status;
     1332                $id = $parent->ID;
     1333                $preview_id = $post->ID;
     1334        }
     1335
     1336        if ( $post_status == 'draft'  ) {
    13021337                $url = add_query_arg( 'preview', 'true', get_permalink($id) );
    13031338        } else {
    1304                 $nonce = wp_create_nonce('post_preview_' . $id);
    1305                 $url = add_query_arg( array( 'preview' => 'true', 'preview_id' => $id, 'preview_nonce' => $nonce ), get_permalink($id) );
     1339                $nonce = wp_create_nonce('post_preview_' . $preview_id);
     1340                $url = add_query_arg( array( 'preview' => 'true', 'preview_id' => $preview_id, 'preview_nonce' => $nonce ), get_permalink($id) );
    13061341        }
    13071342
    13081343        return $url;
  • wp-admin/includes/meta-boxes.php

     
    1313        global $action;
    1414
    1515        $post_type = $post->post_type;
     16
     17        if ( 'revision' == $post_type ) {
     18                $parent = get_post( $post->post_parent );
     19                $post_type = $parent->post_type;
     20        }
     21
    1622        $post_type_object = get_post_type_object($post_type);
    1723        $can_publish = current_user_can($post_type_object->cap->publish_posts);
     24
     25        $revision = null;
     26        if ( 'publish' == $post->post_status ) {
     27                $revisions = get_posts( array(
     28                        'post_parent'    => $post->ID,
     29                        'post_type'      => 'revision',
     30                        'post_status'    => array( 'draft' ),
     31                        'posts_per_page' => 1,
     32                ) );
     33
     34                if ( ! empty( $revisions ) && is_array( $revisions ) ) {
     35                        $revision = $revisions[0];
     36                        $edit_revision_link = add_query_arg( 'post', $revision->ID, get_edit_post_link( $post->ID ) );
     37                }
     38        }
    1839?>
    1940<div class="submitbox" id="submitpost">
    2041
     
    3152<input <?php if ( 'private' == $post->post_status ) { ?>style="display:none"<?php } ?> type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save Draft'); ?>" class="button" />
    3253<?php } elseif ( 'pending' == $post->post_status && $can_publish ) { ?>
    3354<input type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save as Pending'); ?>" class="button" />
     55<?php } elseif ( 'publish' == $post->post_status && ( ! $revision || ! current_user_can( 'edit_post', $revision ) ) ) { ?>
     56<input type="submit" name="save-as-draft" id="save-post" value="<?php esc_attr_e('Save as Draft'); ?>" class="button" />
    3457<?php } ?>
    3558<span class="spinner"></span>
    3659</div>
     
    4568        $preview_link = esc_url( apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ) ) );
    4669        $preview_button = __( 'Preview' );
    4770}
     71
     72if ( 'revision' == $post->post_type )
     73        $preview_button = __( 'Preview Changes' );
    4874?>
    4975<a class="preview button" href="<?php echo $preview_link; ?>" target="wp-preview" id="post-preview"><?php echo $preview_button; ?></a>
    5076<input type="hidden" name="wp-preview" id="wp-preview" value="" />
     
    5581
    5682<div id="misc-publishing-actions">
    5783
     84<?php if ( 'revision' == $post->post_type ) : ?>
     85<?php else : ?>
    5886<div class="misc-pub-section"><label for="post_status"><?php _e('Status:') ?></label>
    5987<span id="post-status-display">
    6088<?php
     
    180208</div><?php // /misc-pub-section ?>
    181209<?php endif; ?>
    182210
     211<?php endif; // !revision ?>
     212
    183213<?php do_action('post_submitbox_misc_actions'); ?>
    184214</div>
    185215<div class="clear"></div>
     
    194224                $delete_text = __('Delete Permanently');
    195225        else
    196226                $delete_text = __('Move to Trash');
     227
     228        $delete_link = get_delete_post_link( $post->ID );
     229        if ( 'revision' == $post->post_type ) {
     230                $delete_text = __( 'Discard Changes' );
     231                $delete_link = add_query_arg( 'post', $post->ID, get_delete_post_link( $post->post_parent, '', true ) );
     232                $delete_link = wp_nonce_url( $delete_link, "delete-post_{$post->ID}" );
     233        }
    197234        ?>
    198 <a class="submitdelete deletion" href="<?php echo get_delete_post_link($post->ID); ?>"><?php echo $delete_text; ?></a><?php
     235<a class="submitdelete deletion" href="<?php echo esc_url( $delete_link ); ?>"><?php echo $delete_text; ?></a><?php
    199236} ?>
    200237</div>
    201238
     
    208245                <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Schedule') ?>" />
    209246                <?php submit_button( __( 'Schedule' ), 'primary button-large', 'publish', false, array( 'accesskey' => 'p' ) ); ?>
    210247<?php   else : ?>
     248                <?php $publish_label = ( 'revision' == $post->post_type ) ? __( 'Publish Changes' ) : __( 'Publish' ); ?>
     249                <?php if ( 'revision' == $post->post_type ) : ?>
     250                <input type="hidden" name="publish-revision" value="1" />
     251                <?php endif; ?>
    211252                <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Publish') ?>" />
    212                 <?php submit_button( __( 'Publish' ), 'primary button-large', 'publish', false, array( 'accesskey' => 'p' ) ); ?>
     253                <?php submit_button( $publish_label, 'primary button-large', 'publish', false, array( 'accesskey' => 'p' ) ); ?>
    213254<?php   endif;
    214255        else : ?>
    215256                <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Submit for Review') ?>" />
  • wp-admin/post.php

     
    3131if ( $post ) {
    3232        $post_type = $post->post_type;
    3333        $post_type_object = get_post_type_object( $post_type );
     34
     35        $revisions = get_posts( array(
     36                'post_parent' => $post->ID,
     37                'post_type' => 'revision',
     38                'post_status' => array( 'draft' ),
     39        ) );
     40
     41        if ( ! empty( $revisions ) && is_array( $revisions ) ) {
     42                $revision = $revisions[0];
     43                if ( current_user_can( 'edit_post', $revision->ID ) ) {
     44                        redirect_post( $revision->ID );
     45                }
     46        }
    3447}
    3548
    3649/**
     
    3952 * @param int $post_id Optional. Post ID.
    4053 */
    4154function redirect_post($post_id = '') {
     55
     56        $post = get_post( $post_id );
     57        if ( 'revision' == $post->post_type )
     58                $post_id = $post->post_parent;
     59
    4260        if ( isset($_POST['save']) || isset($_POST['publish']) ) {
    4361                $status = get_post_status( $post_id );
    4462
     
    5371                                default:
    5472                                        $message = 6;
    5573                        }
     74
     75                        if ( ! empty( $_POST['publish-revision'] ) )
     76                                $message = 12;
    5677                } else {
    5778                                $message = 'draft' == $status ? 10 : 1;
    5879                }
     
    7293                $location = add_query_arg( 'message', 4, get_edit_post_link( $post_id, 'url' ) );
    7394        }
    7495
     96        if ( 'revision' == $post->post_type ) {
     97                $post_id = $post->ID;
     98                $location = add_query_arg( 'post', $post->ID, $location );
     99
     100                if ( ! empty( $_POST['save-as-draft'] ) || ! empty( $_POST['save'] ) )
     101                        $location = add_query_arg( 'message', 13, $location );
     102                else
     103                        $location = remove_query_arg( 'message', $location );
     104        }
     105
    75106        wp_redirect( apply_filters( 'redirect_post_location', $location, $post_id ) );
    76107        exit;
    77108}
     
    135166
    136167        $p = $post_id;
    137168
     169        $post_type = $post->post_type;
     170        if ( 'revision' == $post_type && ! empty( $post->post_parent ) ) {
     171                $parent = get_post( $post->post_parent );
     172                $post_type = $parent->post_type;
     173                $post_type_object = get_post_type_object( $post_type );
     174        }
     175
    138176        if ( empty($post->ID) )
    139177                wp_die( __('You attempted to edit an item that doesn&#8217;t exist. Perhaps it was deleted?') );
    140178
     
    147185        if ( 'trash' == $post->post_status )
    148186                wp_die( __('You can&#8217;t edit this item because it is in the Trash. Please restore it and try again.') );
    149187
    150         $post_type = $post->post_type;
    151188        if ( 'post' == $post_type ) {
    152189                $parent_file = "edit.php";
    153190                $submenu_file = "edit.php";
     
    182219                enqueue_comment_hotkeys_js();
    183220        }
    184221
     222        set_current_screen( $post_type );
     223
    185224        include('./edit-form-advanced.php');
    186225
    187226        break;
     
    243282        if ( !current_user_can($post_type_object->cap->delete_post, $post_id) )
    244283                wp_die( __('You are not allowed to delete this item.') );
    245284
     285        if ( 'revision' == $post->post_type ) {
     286                $sendback = add_query_arg( 'message', 11, get_edit_post_link( $post->post_parent, 'raw' ) );
     287        }
     288
    246289        $force = !EMPTY_TRASH_DAYS;
    247290        if ( $post->post_type == 'attachment' ) {
    248291                $force = ( $force || !MEDIA_TRASH );
     
    259302
    260303case 'preview':
    261304        check_admin_referer( 'autosave', 'autosavenonce' );
    262 
    263305        $url = post_preview();
    264306
    265307        wp_redirect($url);
  • wp-admin/edit-form-advanced.php

     
    4545                // translators: Publish box date format, see http://php.net/date
    4646                date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    4747        10 => sprintf( __('Post draft updated. <a target="_blank" href="%s">Preview post</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
     48        11 => __( 'Your changes have been discarded.' ),
     49        12 => sprintf( __( 'Your changes have been saved and published. <a href="%s">View post</a>' ), esc_url( get_permalink( $post_ID ) ) ),
     50        13 => __( 'Your changes have been saved, but not published.' ),
    4851);
    4952$messages['page'] = array(
    5053         0 => '', // Unused. Messages start at index 1.
     
    296299<?php if ( $message ) : ?>
    297300<div id="message" class="updated"><p><?php echo $message; ?></p></div>
    298301<?php endif; ?>
     302<?php
     303        $revision = null;
     304        $revisions = get_posts( array(
     305                'post_parent' => $post->ID,
     306                'post_type' => 'revision',
     307                'post_status' => array( 'draft' ),
     308        ) );
     309
     310        if ( ! empty( $revisions ) && is_array( $revisions ) ) {
     311                $revision = $revisions[0];
     312                $edit_revision_link = add_query_arg( 'post', $revision->ID, get_edit_post_link( $post->ID ) );
     313        }
     314?>
     315<?php if ( 'revision' == $post->post_type ) : ?>
     316<div class="updated">
     317        <p>These changes are not published. <a href="<?php echo esc_url( get_permalink( $post->post_parent ) ); ?>">View published post</a>.</p>
     318</div>
     319<?php endif; ?>
    299320<form name="post" action="post.php" method="post" id="post"<?php do_action('post_edit_form_tag'); ?>>
    300321<?php wp_nonce_field($nonce_action); ?>
    301322<input type="hidden" id="user-id" name="user_ID" value="<?php echo (int) $user_ID ?>" />
     
    336357if ( !empty($shortlink) )
    337358    $sample_permalink_html .= '<input id="shortlink" type="hidden" value="' . esc_attr($shortlink) . '" /><a href="#" class="button button-small" onclick="prompt(&#39;URL:&#39;, jQuery(\'#shortlink\').val()); return false;">' . __('Get Shortlink') . '</a>';
    338359
    339 if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { ?>
     360if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) && 'revision' != $post->post_type ) { ?>
    340361        <div id="edit-slug-box" class="hide-if-no-js">
    341362        <?php
    342363                if ( $sample_permalink_html && 'auto-draft' != $post->post_status )