WordPress.org

Make WordPress Core

Ticket #6820: 6820.diff

File 6820.diff, 6.3 KB (added by wonderboymusic, 7 years ago)
  • src/wp-admin/admin-ajax.php

     
    6161        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
    6262        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
    6363        'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail',
    64         'parse-media-shortcode', 'destroy-sessions'
     64        'parse-media-shortcode', 'destroy-sessions', 'detach-from-parent'
    6565);
    6666
    6767// Register core Ajax calls.
  • src/wp-admin/includes/ajax-actions.php

     
    22242224        if ( 'attachment' != $post['post_type'] )
    22252225                wp_send_json_error();
    22262226
     2227        if ( isset( $changes['parent'] ) )
     2228                $post['post_parent'] = $changes['parent'];
     2229
    22272230        if ( isset( $changes['title'] ) )
    22282231                $post['post_title'] = $changes['title'];
    22292232
     
    28052808
    28062809        wp_send_json_success( array( 'message' => $message ) );
    28072810}
     2811
     2812/**
     2813 * AJAX handler for detaching an attachment from its parent
     2814 *
     2815 * @since 4.2.0
     2816 */
     2817function wp_ajax_detach_from_parent() {
     2818        $post = get_post( (int) $_POST['id'] );
     2819        if ( ! $post || ! $post->post_parent || ! current_user_can( 'edit_post', $post->ID ) ) {
     2820                wp_send_json_error();
     2821        }
     2822
     2823        if ( ! wp_update_post( array( 'post_parent' => 0, 'ID' => $post->ID ) ) ) {
     2824                wp_send_json_error();
     2825        }
     2826
     2827        wp_send_json_success();
     2828}
  • src/wp-admin/includes/class-wp-media-list-table.php

     
    411411                                } else {
    412412                                        echo $title;
    413413                                } ?></strong>,
    414                                 <?php echo get_the_time( __( 'Y/m/d' ) ); ?>
     414                                <?php echo get_the_time( __( 'Y/m/d' ) ); ?><br />
     415                                <?php if ( $user_can_edit ) { ?>
     416                                        <a class="hide-if-no-js detach-from-parent" data-id="<?php echo $post->ID ?>" href="#the-list"><?php _e( 'Detach' ); ?></a>
     417                                <?php } ?>
    415418                        </td>
    416419<?php
    417420                } else {
  • src/wp-admin/js/media.js

     
    110110                $( '.find-box-inside' ).on( 'click', 'tr', function() {
    111111                        $( this ).find( '.found-radio input' ).prop( 'checked', true );
    112112                });
     113
     114                // Needs to work for list table rows and the grid details modal
     115                $( '.wp-list-table' ).on( 'click', '.detach-from-parent', function (e) {
     116                        e.preventDefault();
     117
     118                        var $el = $( e.currentTarget ), id, url;
     119
     120                        id = $el.data( 'id' );
     121
     122                        $.ajax({
     123                                url: ajaxurl,
     124                                type: 'post',
     125                                data: {
     126                                        id: id,
     127                                        action: 'detach-from-parent'
     128                                }
     129                        }).done( function () {
     130                                url = window.location.href.split('#')[0];
     131                                url = url.replace(/[\?&]detached-[0-9]+/, '');
     132                                url += url.indexOf( '?' ) > -1 ? '&' : '?';
     133                                url += 'detached-' + id;
     134                                window.location = url + '#post-' + id;
     135                        } );
     136                } );
    113137        });
    114138})( jQuery );
  • src/wp-includes/js/media-views.js

     
    51185118                                } );
    51195119
    51205120                        if ( options.rerenderOnModelChange ) {
    5121                                 this.model.on( 'change', this.render, this );
     5121                                this.listenTo( this.model, 'change', this.render );
    51225122                        } else {
    5123                                 this.model.on( 'change:percent', this.progress, this );
     5123                                this.listenTo( this.model, 'change:percent', this.progress );
     5124                                this.listenTo( this.model, 'change:parent', this.render );
    51245125                        }
    5125                         this.model.on( 'change:title', this._syncTitle, this );
    5126                         this.model.on( 'change:caption', this._syncCaption, this );
    5127                         this.model.on( 'change:artist', this._syncArtist, this );
    5128                         this.model.on( 'change:album', this._syncAlbum, this );
     5126                        this.listenTo( this.model, 'change:title', this._syncTitle );
     5127                        this.listenTo( this.model, 'change:caption', this._syncCaption );
     5128                        this.listenTo( this.model, 'change:artist', this._syncArtist );
     5129                        this.listenTo( this.model, 'change:album', this._syncAlbum );
    51295130
    51305131                        // Update the selection.
    5131                         this.model.on( 'add', this.select, this );
    5132                         this.model.on( 'remove', this.deselect, this );
     5132                        this.listenTo( this.model, 'add', this.select );
     5133                        this.listenTo( this.model, 'remove', this.deselect );
    51335134                        if ( selection ) {
    51345135                                selection.on( 'reset', this.updateSelect, this );
    51355136                                // Update the model's details view.
    5136                                 this.model.on( 'selection:single selection:unsingle', this.details, this );
     5137                                this.listenTo( this.model, 'selection:single selection:unsingle', this.details );
    51375138                                this.details( this.model, this.controller.state().get('selection') );
    51385139                        }
    51395140
     
    70617062                        'click .untrash-attachment':      'untrashAttachment',
    70627063                        'click .edit-attachment':         'editAttachment',
    70637064                        'click .refresh-attachment':      'refreshAttachment',
    7064                         'keydown':                        'toggleSelectionHandler'
     7065                        'keydown':                        'toggleSelectionHandler',
     7066                        'click .detach-from-parent':      'detachFromParent'
    70657067                },
    70667068
    70677069                initialize: function() {
     
    71607162                                this.controller.trigger( 'attachment:keydown:arrow', event );
    71617163                                return;
    71627164                        }
     7165                },
     7166                /**
     7167                 * @param {Object} event
     7168                 */
     7169                detachFromParent: function( event ) {
     7170                        event.preventDefault();
     7171
     7172                        this.model.save({
     7173                                'parent' : 0,
     7174                                'uploadedTo' : 0,
     7175                                'uploadedToLink' : '',
     7176                                'uploadedToTitle' : ''
     7177                        });
    71637178                }
    71647179        });
    71657180
  • src/wp-includes/media-template.php

     
    418418                                                <# } else { #>
    419419                                                        <span class="value">{{ data.uploadedToTitle }}</span>
    420420                                                <# } #>
     421                                                <# if ( data.nonces.edit ) { #>
     422                                                <a class="detach-from-parent" data-id="{{ data.id }}" href="#">(<?php _e( 'Detach' ); ?>)</a>
     423                                                <# } #>
    421424                                        </label>
    422425                                <# } #>
    423426                                <div class="attachment-compat"></div>