WordPress.org

Make WordPress Core

Ticket #7607: 7607.1.diff

File 7607.1.diff, 15.7 KB (added by ShaneF, 10 years ago)
  • wp-admin/includes/media.php

     
    5858        $rel = $rel ? ' rel="attachment wp-att-'.attribute_escape($id).'"' : '';
    5959
    6060        if ( $url )
    61                 $html = '<a href="' . clean_url($url) . "\"$rel>$html</a>";
     61                $html = '<a href="' . clean_url($url) . "\" title=\"". attribute_escape($title) ."\"$rel>$html</a>";
    6262
    6363        $html = apply_filters( 'image_send_to_editor', $html, $id, $alt, $title, $align, $url, $size );
    6464
     
    274274                                wp_set_object_terms($attachment_id, array_map('trim', preg_split('/,+/', $attachment[$t])), $t, false);
    275275        }
    276276
    277         if ( isset($_POST['insert-gallery']) )
    278                 return media_send_to_editor('[gallery]');
     277        if ( isset($_POST['insert-gallery']) ) {
     278                if ( ( isset($_POST['gallery_insert']) ) && ( $_POST['gallery_insert'] > 0 ) ) {
     279                        return media_send_to_editor('[gallery group="'.$_POST['gallery_insert'].'"]');
     280                } else {
     281                        return media_send_to_editor('[gallery]');
     282                }
     283        }
     284       
     285        if ( isset($_POST['new-gallery']) )
     286                wp_new_gallery($post['post_parent']);
     287               
     288        if ( isset($_POST['gallery_delete']) && !is_null($_POST['gallery_delete']) && ($_POST['gallery_delete'] > 0) )
     289                wp_delete_gallery($post['post_parent'], $_POST['gallery_delete']);
    279290
    280291        if ( isset($_POST['send']) ) {
    281292                $keys = array_keys($_POST['send']);
     
    317328                        $align = attribute_escape($_POST['insertonly']['align']);
    318329                        $class = " class='align$align'";
    319330                }
     331                if ( isset($_POST['insertonly']['title']) ) {
     332                        $title = " title='".attribute_escape($_POST['insertonly']['title'])."'";
     333                }
    320334                if ( !empty($src) )
    321                         $html = "<img src='$src' alt='$alt'$class />";
     335                        $html = "<img src='$src' alt='$alt'$title$class />";
    322336                return media_send_to_editor($html);
    323337        }
    324338
     
    732746        return $form_fields;
    733747}
    734748
    735 function get_media_items( $post_id, $errors ) {
     749function get_media_items( $post_id, $group_num = null, $errors ) {
    736750        if ( $post_id ) {
    737751                $post = get_post($post_id);
    738                 if ( $post && $post->post_type == 'attachment' )
     752                if ( $post && $post->post_type == 'attachment' ) {
     753                        // @todo This section has not been tested to see if it's working at all.
    739754                        $attachments = array($post->ID => $post);
    740                 else
    741                         $attachments = get_children( array( 'post_parent' => $post_id, 'post_type' => 'attachment', 'orderby' => 'menu_order ASC, ID', 'order' => 'DESC') );
     755                } else {
     756                        $attachments = get_attachments( $post_id, $group_num );
     757                       
     758                        if ( ! count($attachments) )
     759                                return "\n<div class='media-item media-no-items child-of-$post_id preloaded'><div class='progress'><div class='bar'></div></div><div id='media-upload-error-$id'></div><div class='filename'></div><div class='filename new'>". __("No images in this group. Move items to this group.") ."</div></div>";
     760                }
    742761        } else {
    743762                if ( is_array($GLOBALS['wp_the_query']->posts) )
    744763                        foreach ( $GLOBALS['wp_the_query']->posts as $attachment )
     
    748767        if ( empty($attachments) )
    749768                return '';
    750769
    751         foreach ( $attachments as $id => $attachment )
     770        foreach ( $attachments as $id => $attachment ) {       
    752771                if ( $item = get_media_item( $id, array( 'errors' => isset($errors[$id]) ? $errors[$id] : null) ) )
    753772                        $output .= "\n<div id='media-item-$id' class='media-item child-of-$attachment->post_parent preloaded'><div class='progress'><div class='bar'></div></div><div id='media-upload-error-$id'></div><div class='filename'></div>$item\n</div>";
    754 
     773        }
     774       
    755775        return $output;
    756776}
    757777
     
    780800        $filename = basename($post->guid);
    781801        $title = attribute_escape($post->post_title);
    782802        $description = attribute_escape($post->post_content);
     803        $group_number = attribute_escape($post->group_number);
    783804        if ( $_tags = get_the_tags($attachment_id) ) {
    784805                foreach ( $_tags as $tag )
    785806                        $tags[] = $tag->name;
     
    810831        $gallery = ( (isset($_REQUEST['tab']) && 'gallery' == $_REQUEST['tab']) || (isset($redir_tab) && 'gallery' == $redir_tab) ) ? true : false;
    811832        $order = '';
    812833
     834        $groupnum = '<input type="hidden" class="group-value" name="attachments['.$attachment_id.'][group_number]" value="'.$group_number.'" />';
     835
    813836        foreach ( $form_fields as $key => $val ) {
    814837                if ( 'menu_order' == $key ) {
    815838                        if ( $gallery )
     
    826849        $type
    827850        $toggle_links
    828851        $order
     852        $groupnum
    829853        $display_title
    830854        <table class='slidetoggle describe $class'>
    831855                <thead class='media-item-info'>
     
    10881112                html = '<img alt="'+alt+'" src="'+f.src.value+'"'+title+cls+' width="'+t.width+'" height="'+t.height+'" />';
    10891113
    10901114                if ( f.url.value )
    1091                         html = '<a href="'+f.url.value+'">'+html+'</a>';
     1115                        html = '<a href="'+f.url.value+'"'+title+'>'+html+'</a>';
    10921116
    10931117                if ( caption )
    10941118                        html = '[caption id="" align="'+t.align+'" width="'+t.width+'" caption="'+caption+'"]'+html+'[/caption]';
     
    11511175        media_upload_header();
    11521176
    11531177        $post_id = intval($_REQUEST['post_id']);
     1178        $group_num = intval(get_attachment_groups( $post_id ));
     1179        $_group_name = get_attachments_groupsname( $post_id );
     1180       
    11541181        $form_action_url = admin_url("media-upload.php?type={$GLOBALS['type']}&tab=gallery&post_id=$post_id");
    11551182?>
    11561183
     
    11601187        var preloaded = $(".media-item.preloaded");
    11611188        if ( preloaded.length > 0 ) {
    11621189                preloaded.each(function(){prepareMediaItem({id:this.id.replace(/[^0-9]/g, '')},'');});
    1163                 updateMediaForm();
    11641190        }
     1191        jQuery("a.del-group").click(function () {
     1192                var deleteConfirmation = confirm('<?php _e("Are you sure you want to delete this gallery group?"); ?>');
     1193               
     1194                if (!deleteConfirmation) { return; }
     1195               
     1196                if (jQuery("#media-group-" + jQuery(this).attr('value') + " .media-item input.group-value").length)
     1197                {
     1198                        jQuery.each(jQuery("#media-group-delete-" + jQuery(this).attr('value') + " .media-item input.group-value"), function(i, id) {
     1199                                jQuery(id)[0].value = 0;        //      we are going to set all the items to group 0             
     1200                        });
     1201                }
     1202                jQuery("#gallery-delete").val( jQuery(this).attr('value') );    //      set the gallery we are deleting
     1203                jQuery("#media-group-" + jQuery(this).attr('value')).hide();    //      hide the gallery and then...
     1204                jQuery(".savebutton").click();
     1205        });
     1206        jQuery("a.insert-group").click(function () {
     1207                jQuery("#gallery-insert").val( jQuery(this).attr('value') );    //      set the gallery we are inserting
     1208                jQuery(".insert-gallery").click();               
     1209        });
    11651210});
    11661211-->
    11671212</script>
     
    11691214<form enctype="multipart/form-data" method="post" action="<?php echo attribute_escape($form_action_url); ?>" class="media-upload-form validate" id="gallery-form">
    11701215<?php wp_nonce_field('media-form'); ?>
    11711216<?php //media_upload_form( $errors ); ?>
     1217<div id="media-items">
     1218<?php
     1219for ( $i = 0; $i < $group_num; $i++ )
     1220{
     1221?>
     1222<div id="media-group-<?php echo $i; ?>" class="media-groups">
     1223<input type="hidden" id="media-group-value-<?php echo $i; ?>" value="<?php echo $i; ?>" />
    11721224<table class="widefat">
    11731225<thead><tr>
    1174 <th><?php _e('Media'); ?></th>
     1226<th>
     1227<?php 
     1228if ($i > 0) {
     1229       
     1230        $delete = "<a href=\"#media-group-delete-value-".$i."\" value=\"".$i."\" class=\"del-group\">" . __('Delete') . "</a>";
     1231        $insert = "<a href=\"#media-group-insert-value-".$i."\" value=\"".$i."\" class=\"insert-group\">" . __('Insert') . "</a>";
     1232        $group_link = "<small>[".$delete." | " .$insert."]</small>";
     1233        $group_name = "<input type=\"text\" name=\"\" value=\"" . $_group_name[$i] . "\" size=\"20\" />";
     1234       
     1235        _e('Group (' . $i . ') ' . $group_name . ' ' . $group_link);
     1236               
     1237} else {
     1238
     1239        _e('Media: Non-grouped items.');
     1240       
     1241}
     1242?>
     1243</th>
    11751244<th class="order-head"><?php _e('Order'); ?></th>
    11761245</tr></thead>
    11771246</table>
    1178 <div id="media-items">
    1179 <?php echo get_media_items($post_id, $errors); ?>
     1247<?php echo get_media_items($post_id, $i, $errors); ?>
    11801248</div>
     1249<?php
     1250}
     1251?>
     1252</div>
    11811253<p class="ml-submit">
    11821254<input type="submit" class="button savebutton" name="save" value="<?php echo attribute_escape( __( 'Save all changes' ) ); ?>" />
    1183 <input type="submit" class="button insert-gallery" name="insert-gallery" value="<?php echo attribute_escape( __( 'Insert gallery into post' ) ); ?>" />
     1255<input type="submit" class="button new-gallery" name="new-gallery" value="<?php echo attribute_escape( __( 'Create new gallery' ) ); ?>" />
     1256<input type="submit" class="button insert-gallery" name="insert-gallery" value="<?php echo attribute_escape( __( 'Insert full gallery into post' ) ); ?>" />
     1257<input type="hidden" name="gallery_delete" id="gallery-delete" value="" />
     1258<input type="hidden" name="gallery_insert" id="gallery-insert" value="" />
    11841259<input type="hidden" name="post_id" id="post_id" value="<?php echo (int) $post_id; ?>" />
    11851260<input type="hidden" name="type" value="<?php echo attribute_escape( $GLOBALS['type'] ); ?>" />
    11861261<input type="hidden" name="tab" value="<?php echo attribute_escape( $GLOBALS['tab'] ); ?>" />
    11871262</p>
    11881263</form>
     1264<script type="text/javascript">
     1265<!--
     1266        updateMediaForm();
     1267-->
     1268</script>
    11891269<?php
    11901270}
    11911271
     
    13251405</script>
    13261406
    13271407<div id="media-items">
    1328 <?php echo get_media_items(null, $errors); ?>
     1408<?php echo get_media_items(null, null, $errors); ?>
    13291409</div>
    13301410<p class="ml-submit">
    13311411<input type="submit" class="button savebutton" name="save" value="<?php echo attribute_escape( __( 'Save all changes' ) ); ?>" />
  • wp-admin/js/gallery.js

     
    11jQuery(function($) {
    22        var gallerySortable;
     3
    34        var gallerySortableInit = function() {
    45                gallerySortable = $('#media-items').sortable( {
    56                        items: '.media-item',
    67                        placeholder: 'sorthelper',
    78                        axis: 'y',
    89                        distance: 2,
    9                         update: galleryReorder
     10                        update: galleryHandle,
    1011                } );
    1112        }
    12 
    13         // When an update has occurred, adjust the order for each item
     13       
     14        var galleryHandle = function (e, sort) {
     15                galleryReorder(e, sort);
     16                gallerySortGroups();
     17        }
     18       
     19        // @todo: fix me!
     20        // When an update has occurred, adjust the order for each item..
    1421        var galleryReorder = function(e, sort) {
     22                var o = 0;
    1523                jQuery.each(sort['element'].sortable('toArray'), function(i, id) {
    16                         jQuery('#' + id + ' .menu_order input')[0].value = (1+i);
     24                        if (id)
     25                        {
     26                                o++;
     27                                jQuery('#' + id + ' .menu_order input')[0].value = o;
     28                        }
    1729                });
    1830        }
    19 
     31       
     32        var gallerySortGroups = function () {
     33                var mediaGroups = jQuery(".media-groups").length;
     34                for (g = 0; g < mediaGroups; g++)
     35                {
     36                        jQuery.each(jQuery("#media-group-" + g + " .media-item input.group-value"), function(i, id) {
     37                                jQuery(id)[0].value = g;               
     38                        });
     39                }
     40        }
     41       
    2042        // initialize sortable
    2143        gallerySortableInit();
    2244});
  • wp-includes/js/swfupload/handlers.js

     
    126126        }
    127127
    128128        // Only show Save buttons when there is at least one file.
    129         if ( jQuery('#media-items>*').not('.media-blank').length > 0 )
     129        if ( jQuery('#media-items .media-item').not('.media-no-items').length > 0 )
    130130                jQuery('.savebutton').show();
    131131        else
    132132                jQuery('.savebutton').hide();
    133133
     134        // Only show new Gallery button when there are at least two files.
     135        if ( jQuery('#media-items .media-item').not('.media-no-items').length > 1 )
     136                jQuery('.new-gallery').show();
     137        else
     138                jQuery('.new-gallery').hide();
     139
    134140        // Only show Gallery button when there are at least two files.
    135         if ( jQuery('#media-items>*').length > 1 )
     141        if ( jQuery('#media-items .media-groups').length > 1 )
    136142                jQuery('.insert-gallery').show();
    137143        else
    138144                jQuery('.insert-gallery').hide();
     145               
    139146}
    140147
    141148function uploadSuccess(fileObj, serverData) {
  • wp-includes/media.php

     
    617617                'icontag'    => 'dt',
    618618                'captiontag' => 'dd',
    619619                'columns'    => 3,
     620                'group'          => null,
    620621                'size'       => 'thumbnail',
    621622        ), $attr));
    622623
    623624        $id = intval($id);
    624         $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    625 
     625        $attachments = get_attachments( $post->ID, $group, array('post_status' => 'inherit', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
     626       
    626627        if ( empty($attachments) )
    627628                return '';
    628629
  • wp-includes/post.php

     
    6969}
    7070
    7171/**
     72 * Get the posts attachments data.
     73 *
     74 * @since 2.7.0
     75 *
     76 * @param int $post_id Post ID
     77 */
     78function _get_attachment_data ( $post_id ) {
     79        global $wpdb;
     80
     81        $_attchments = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = '_wp_post_attachments' LIMIT 1", $post_id));
     82        return unserialize($_attchments->meta_value);
     83}
     84/**
     85 * Get the posts attachments.
     86 *
     87 * @since 2.7.0
     88 *
     89 * @param int $post_id Post ID
     90 * @param int $group_num Group Number
     91 * @param mixed $args Optional. User defined arguments for replacing the defaults.
     92 */
     93function &get_attachments( $post_id, $group_num = null, $args = '' ) {
     94
     95        $attachment = _get_attachment_data ( $post_id );
     96       
     97        foreach ( $attachment as $key => $group ) {
     98               
     99                if (!is_null($group_num))
     100                        if ($key != $group_num) { continue; }
     101               
     102                if ( !is_array($group['items']) )
     103                        break;
     104                       
     105                foreach ( $group['items'] as $item => $attachment_id ) {
     106                        $p = get_post( $attachment_id );
     107                        $p->group_number = $key;
     108                       
     109                        $attach[$attachment_id] = $p;
     110                }
     111        }
     112       
     113        // @todo Orginize items based on the settings either default or user
     114       
     115        return $attach;
     116}
     117
     118/**
     119 * Get the gallery groups names.
     120 *
     121 * @since 2.7.0
     122 *
     123 * @param int $post_id Post ID
     124 */
     125function &get_attachments_groupsname( $post_id ) {
     126
     127        $attachment = _get_attachment_data ( $post_id );
     128       
     129        if ( !is_array($attachment) )
     130                return '';
     131       
     132        foreach ( $attachment as $key => $group ) {
     133                $groups[$key] = $group['name'];
     134        }
     135       
     136        return $groups;
     137}
     138
     139/**
     140 * Get the number of groups attached to this post.
     141 *
     142 * @since 2.7.0
     143 *
     144 * @param int $post_id Post ID
     145 */
     146function get_attachment_groups( $post_id ) {
     147       
     148        return count(_get_attachment_data ( $post_id ));
     149}
     150
     151/**
     152 * Insert a new gallery into the post.
     153 *
     154 * @since 2.7.0
     155 *
     156 * @param int $post_id post data
     157*/
     158function wp_new_gallery ( $post_id ) {
     159
     160        $attachment = _get_attachment_data ( $post_id );
     161       
     162        foreach ( $attachment as $key => $group )
     163                $_group[$key] = array ('name' => $group['name'], 'items' => $group['items']);
     164
     165        $_group[] = array ('name' => null, 'items' => null);
     166       
     167        update_post_meta( $post_id, '_wp_post_attachments', $_group );
     168       
     169}
     170
     171/**
     172 * We are deleting a gallery and moving
     173 *
     174 * @since 2.7.0
     175 *
     176 * @param int $post_id Post ID
     177 * @param int $group_number Group Number
     178*/
     179function wp_delete_gallery ( $post_id, $group_num ) {
     180         
     181        $attachment = _get_attachment_data ( $post_id );
     182       
     183        foreach ( $attachment as $key => $group ) {
     184                if ($key != $group_num) {
     185                        $_group[$key] = array ('name' => $group['name'], 'items' => $group['items']);
     186                        continue;                                               
     187                }       
     188               
     189                if ( !is_array($group['items']) )
     190                        break;
     191               
     192                foreach ( $group['items'] as $item => $attachment_id ) {
     193                        $_attach[] = $attachment_id;   
     194                }
     195        }
     196       
     197        if ( is_array($_group[0]['items']) && is_array($_attach) )  {
     198                $i = array_merge($_group[0]['items'], $_attach);       
     199                $_group[0] = array ('name' => null, 'items' => $i);     
     200        } else {
     201                $_group[0] = array ('name' => null, 'items' => $_group[0]['items']);
     202        }
     203
     204        update_post_meta( $post_id, '_wp_post_attachments', $_group );
     205
     206}
     207
     208/**
    72209 * Retrieve all children of the post parent ID.
    73210 *
    74211 * Normally, without any enhancements, the children would apply to pages. In the