WordPress.org

Make WordPress Core

Ticket #6813: press-this-6-23-4am.diff

File press-this-6-23-4am.diff, 18.4 KB (added by noel, 10 years ago)

This patch fixes problems with wp_error the photo tab and some js issues dealing with cross-browser implementation.

  • press-this.php

     
    3030                                # see if files exist in content - we don't want to upload non-used selected files.
    3131                                preg_match('/'.$quoted.'/', $_REQUEST['content'], $matches[0]);
    3232                                if($matches[0])
    33                                         media_sideload_image($data, $post_ID, $_REQUEST['photo_description'][$key]);   
     33                                        $upload = media_sideload_image($data, $post_ID, $_REQUEST['photo_description'][$key]); 
    3434                        }
    3535                        $content = $_REQUEST['content'];
    3636                        break;
     
    4545        $quick['post_content'] = str_replace('<br />', "\n", preg_replace('/<\/?p>/','',$content));
    4646
    4747        #error handling for $post
    48         if ( is_wp_error($post_ID) ) {
     48        if ( is_wp_error($post_ID)) {
    4949                wp_die($id);
    5050                wp_delete_post($post_ID);
    51 
    5251        #error handling for media_sideload
     52        } elseif ( is_wp_error($upload)) {
     53                wp_die($upload);
     54                wp_delete_post($post_ID);
    5355        } else {       
    5456                $quick['ID'] = $post_ID;
    5557                wp_update_post($quick);
     
    7880        ?>
    7981        </head>
    8082        <body class="press-this">
     83               
    8184                <div id="message" class="updated fade"><p><strong><?php _e('Your post has been saved.'); ?></strong> <a onclick="window.opener.location.replace(this.href); window.close();" href="<?php echo get_permalink( $post_ID); ?>"><?php _e('View post'); ?></a> | <a href="post.php?action=edit&amp;post=<?php echo $post_ID; ?>" onclick="window.opener.location.replace(this.href); window.close();"><?php _e('Edit post'); ?></a> | <a href="#" onclick="window.close();">Close Window</a></p></div>
    8285               
    8386                <div id="footer">
     
    110113$image = $_GET['i'];
    111114
    112115if($_REQUEST['ajax'] == 'thickbox') { ?>
     116        <script type="text/javascript" charset="utf-8">
     117                jQuery('.cancel').click(function() {
     118                        tb_remove();
     119                });
     120               
     121                jQuery('.select').click(function() {
     122                        image_selector();
     123                });
     124        </script>
    113125        <h3 id="title"><label for="post_title"><?php _e('Description') ?></label></h3>
    114126        <div class="titlewrap">
    115127                <input id="this_photo_description" name="photo_description" class="text" onkeypress="if(event.keyCode==13) image_selector();" value="<?php echo attribute_escape($title);?>"/>
     
    123135}
    124136
    125137if($_REQUEST['ajax'] == 'thickbox_url') { ?>
     138        <script type="text/javascript" charset="utf-8">
     139                jQuery('.cancel').click(function() {
     140                        tb_remove();
     141                });
     142               
     143                jQuery('.select').click(function() {
     144                        image_selector();
     145                });
     146        </script>
    126147        <h3 id="title"><label for="post_title"><?php _e('URL') ?></label></h3>
    127148        <div class="titlewrap">
    128149                <input id="this_photo" name="this_photo" class="text" onkeypress="if(event.keyCode==13) image_selector();" />
     
    181202}
    182203
    183204if($_REQUEST['ajax'] == 'photo_js') { ?>
    184 
    185                         tb_init('a.thickbox, area.thickbox, input.thickbox'); //pass where to apply thickbox
     205       
     206       
     207        // gather images and load some default JS
     208       
     209        var last = null
     210        var img, img_tag, aspect, w, h, skip, i, strtoappend = "";
     211        var my_src = eval(
     212                jQuery.ajax({
     213                        type: "GET",
     214                        url: "<?php echo clean_url($_SERVER['PHP_SELF']); ?>",
     215                        cache : false,
     216                        async : false,
     217                        data: "ajax=photo_images&u=<?php echo urlencode($url); ?>",
     218                        dataType : "script"
     219                }).responseText
     220        );
     221       
     222        for (i = 0; i < my_src.length; i++) {
     223                img = new Image();
     224                img.src = my_src[i];
     225                img_attr = 'id="img' + i + '"';
     226                skip = false;
     227                if (img.width && img.height) {
     228                        if (img.width * img.height < 2500)
     229                                skip = true;
     230                        aspect = img.width / img.height;
     231                        scale = (aspect > 1) ? (75 / img.width) : (75 / img.height);
    186232                       
    187                         function image_selector() {
    188                                 desc = jQuery('#this_photo_description').val();
    189                                 src = jQuery('#this_photo').val();
    190                                 pick(src, desc);
    191                                 tb_remove();
    192                                 return false;
    193                         }
     233                        w = img.width;
     234                        h = img.height;
    194235                       
    195                         jQuery(document).ready(function() {
    196                                 jQuery('#this_photo').focus();
    197 
    198                                 jQuery('.cancel').click(function() {
    199                                         tb_remove();
    200                                 });
    201                                
    202                                 jQuery('.select').click(function() {
    203                                         image_selector();
    204                                 });
    205                                
    206                                 jQuery('#photo_add_url').attr('href', '?ajax=thickbox_url&height=200&width=500');
    207                                
    208                         });
    209                        
    210                        
    211                         function pick(img, desc) {
    212                                 if (img) {
    213                                         length = jQuery('.photolist input').length;
    214                                         if(length == 0) length = 1;
    215                                         jQuery('.photolist').append('<input name="photo_src[' + length + ']" value="' + img +'" type="hidden"/>');
    216                                         jQuery('.photolist').append('<input name="photo_description[' + length + ']" value="' + desc +'" type="hidden"/>');
    217                                         append_editor('<img src="' + img +'" alt="' + desc + '" />'); }
    218                                         tinyMCE.activeEditor.resizeToContent();
    219                                 return false;
     236                        if (scale < 1) {
     237                                w = parseInt(img.width * scale);
     238                                h = parseInt(img.height * scale);
    220239                        }
    221 
    222                         var last = null
    223                         var my_src, img, img_tag, aspect, w, h, skip, i, strtoappend = "";
    224                         var my_src = eval(
    225                         jQuery.ajax({
    226                                 type: "GET",
    227                                 url: "<?php echo clean_url($_SERVER['PHP_SELF']); ?>",
    228                                 cache : false,
    229                                 async : false,
    230                                 data: "ajax=photo_images&u=<?php echo urlencode($url); ?>",
    231                                 dataType : "script"
    232                                 }).responseText);
    233 
    234                         for (i = 0; i < my_src.length; i++) {
    235                                 img = new Image(); img.src = my_src[i]; img_attr = 'id="img' + i; skip = false;
    236 
    237                                 if (img.width && img.height) {
    238                                         if (img.width * img.height < 2500)
    239                                                 skip = true;
    240                                         aspect = img.width / img.height;
    241                                         scale = (aspect > 1) ? (75 / img.width) : (75 / img.height);
    242                                        
    243                                         if (scale < 1) {
    244                                                 w = parseInt(img.width * scale);
    245                                                 h = parseInt(img.height * scale);
    246                                         } else {
    247                                                 w = img.width;
    248                                                 h = img.height;
    249                                         }
    250                                         img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"';
    251                                 }
    252 
    253                                 if (!skip) strtoappend += '<a href="?ajax=thickbox&amp;i=' + img.src + '&amp;u=<?php echo $url; ?>&amp;height=400&amp;width=500" title="" class="thickbox"><img src="' + img.src + '" ' + img_attr + '/></a>';
    254 
    255                         }
    256                         jQuery('#img_container').html(strtoappend);
    257 
     240                        img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"';
     241                }
     242                if (!skip) strtoappend += '<a href="?ajax=thickbox&amp;i=' + img.src + '&amp;u=<?php echo $url; ?>&amp;height=400&amp;width=500" title="" class="thickbox"><img src="' + img.src + '" ' + img_attr + '/></a>';
     243        }
     244       
     245        function pick(img, desc) {
     246                if (img) {
     247                        length = jQuery('.photolist input').length;
     248                        if(length == 0) length = 1;
     249                        jQuery('.photolist').append('<input name="photo_src[' + length + ']" value="' + img +'" type="hidden"/>');
     250                        jQuery('.photolist').append('<input name="photo_description[' + length + ']" value="' + desc +'" type="hidden"/>');
     251                        append_editor('<img src="' + img +'" alt="' + desc + '" />');
     252                }
     253                tinyMCE.activeEditor.resizeToContent();
     254                return false;
     255        }
     256       
     257        function image_selector() {
     258                tb_remove();
     259                desc = jQuery('#this_photo_description').val();
     260                src = jQuery('#this_photo').val();
     261                pick(src, desc);
     262                return false;
     263        }
     264       
     265        jQuery(document).ready(function() {
     266                jQuery('#img_container').html(strtoappend);
     267                jQuery('#photo_add_url').attr('href', '?ajax=thickbox_url&height=200&width=500');
     268                tb_init('a.thickbox, area.thickbox, input.thickbox');
     269        });
     270       
    258271<?php die; }
    259272
    260273if($_REQUEST['ajax'] == 'photo') { ?>
     
    292305                if ( isset($strings) ) echo $strings; ?>
    293306                        (function() {
    294307                                var base = tinymce.baseURL, sl = tinymce.ScriptLoader, ln = "<?php echo $language; ?>";
    295 
    296308                                sl.markDone(base + '/langs/' + ln + '.js');
    297309                                sl.markDone(base + '/themes/advanced/langs/' + ln + '.js');
    298310                                sl.markDone(base + '/themes/advanced/langs/' + ln + '_dlg.js');
     
    354366                jQuery('#' + type + '_button').addClass('ui-tabs-selected');
    355367                jQuery("#post_type").val(type);
    356368        }
     369       
    357370        function set_editor(text) {
    358371
    359372                if(tinyMCE.activeEditor) tinyMCE.activeEditor.setContent('');
    360373                if(tinyMCE.activeEditor) tinyMCE.execCommand('mceInsertContent' ,false, text);
    361374        }
     375       
    362376        function append_editor(text) {
    363377                if(tinyMCE.activeEditor) tinyMCE.execCommand('mceInsertContent' ,false, text);
    364378        }
     379       
    365380        function set_title(title) { jQuery("#content_type").text(title); }
    366381
    367382        function show(tab_name) {
     
    371386                        case 'text' :
    372387                                set_menu('text');
    373388                                set_title('<?php _e('Post') ?>');
    374 
    375389                                return false;
    376                         break;
     390                                break;
    377391                        case 'quote' :
    378392                                set_menu('quote');
    379393                                set_title('<?php _e('Quote') ?>');
    380394                                set_editor("<blockquote><p><?php echo $selection; ?> </p><p><cite><a href='<?php echo $url; ?>'><?php echo $title; ?> </a> </cite> </p></blockquote>");
    381395                                return false;
    382                         break;
     396                                break;
    383397                        case 'video' :
    384 
    385398                                set_menu('video');
    386399                                set_title('<?php _e('Caption') ?>');
    387400                               
    388401                                jQuery('#extra_fields').show();
    389402                                jQuery('body').addClass('video_split');
    390403                                jQuery('#extra_fields').load('<?php echo clean_url($_SERVER['PHP_SELF']); ?>', { ajax: 'video', s: '<?php echo attribute_escape($selection); ?>'}, function() {
    391                                        
    392404                                        <?php
    393405                                        if ( preg_match("/youtube\.com\/watch/i", $url) ) {
    394406                                        list($domain, $video_id) = split("v=", $url);
     
    407419                                       
    408420                                        set_editor("<?php echo $title; ?>");
    409421                                });
    410                                
    411422                                return false;
    412                         break;
    413                        
     423                                break;
    414424                        case 'photo' :
    415425                                set_menu('photo');
    416426                                set_title('Post');
     
    430440                                                jQuery('#waiting').remove();
    431441                                        }
    432442                                });
    433                                
    434443                                return false;
    435                         break;
    436 
     444                                break;
    437445                }
    438        
    439446        }
    440447       
    441448        jQuery(document).ready(function() {
     
    445452                        show(tab_name);
    446453                });
    447454               
     455                // Set default tabs
    448456                <?php if ( preg_match("/youtube\.com\/watch/i", $url) ) { ?>
    449457                        show('video');
    450458                <?php } elseif ( preg_match("/vimeo\.com\/[0-9]+/i", $url) ) { ?>
     
    453461                        show('photo');
    454462                <?php } ?>
    455463        });
     464       
    456465</script>
    457466</head>
    458467<body class="press-this">
    459468<div id="wphead">
    460 <h1><span id="viewsite"><a href="<?php echo get_option('home'); ?>/"><?php _e('Visit:') ?> <?php bloginfo('name'); ?></a></span></h1>
     469        <h1><span id="viewsite"><a href="<?php echo get_option('home'); ?>/"><?php _e('Visit:') ?> <?php bloginfo('name'); ?></a></span></h1>
    461470</div>
    462471
    463                 <ul id="menu" class="ui-tabs-nav">
    464                         <li id="text_button" class="ui-tabs-selected"><a href="#"><?php _e('Text') ?></a></li>
    465                         <li id="photo_button"><a href="#"><?php _e('Photo') ?></a></li>
    466                         <li id="quote_button"><a href="#"><?php _e('Quote') ?></a></li>
    467                         <li id="video_button"><a href="#"><?php _e('Video') ?></a></li>
    468                 </ul>
     472<ul id="menu" class="ui-tabs-nav">
     473        <li id="text_button" class="ui-tabs-selected"><a href="#"><?php _e('Text') ?></a></li>
     474        <li id="photo_button"><a href="#"><?php _e('Photo') ?></a></li>
     475        <li id="quote_button"><a href="#"><?php _e('Quote') ?></a></li>
     476        <li id="video_button"><a href="#"><?php _e('Video') ?></a></li>
     477</ul>
    469478
    470                         <form action="press-this.php?action=post" method="post">
    471 
    472                                 <?php wp_nonce_field('press-this') ?>
    473                                 <input type="hidden" name="post_type" id="post_type" value="text"/>
    474                                 <div id="posting">
    475                                        
    476                                         <h2 id="title"><label for="post_title"><?php _e('Title') ?></label></h2>
    477                                         <div class="titlewrap">
    478                                                 <input name="post_title" id="post_title" class="text" value="<?php echo attribute_escape($title);?>"/>
    479                                         </div>
    480                                        
    481                                         <div id="extra_fields" style="display: none"></div>
    482                                         <div class="editor_area">
    483                                         <h2 id="content_type"><label for="content"><?php _e('Post') ?></label></h2>
    484                                         <div class="editor-container">
    485                                                 <textarea name="content" id="content" style="width:100%;" class="mceEditor"><?php if($selection) { ?><a href='<?php echo $url ?>'><?php echo $selection ?></a><?php } else { ?><a href='<?php echo $url ?>'><?php echo $title; ?></a><?php } ?></textarea>
    486                                         </div>
    487                                         </div>
    488                                        
    489                                 </div>
    490                                 <div id="categories">
    491                                         <div class="submitbox" id="submitpost">
    492                                         <div id="previewview"></div>
    493                                         <div class="inside">
    494                                                 <h2><?php _e('Categories') ?></h2>
    495                                                 <div id="categories-all">
    496                                                         <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
    497                                                                 <?php wp_category_checklist() ?>
    498                                                         </ul>
    499                                                 </div>
    500                                                 <h2><?php _e('Tags') ?></h2>
    501                                                 <p id="jaxtag"><label class="hidden" for="newtag"><?php _e('Tags'); ?></label><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" /></p>
    502                                                 <div id="tagchecklist"></div>
    503                                         </div>
    504                                         <label for="post_status" id="post_status"><input type="radio" name="post_status" value="publish" checked="checked" id="published" />Published <input type="radio" name="post_status" value="draft" id="unpubplished" /> Unpublished</label>
    505                                        
    506                                         <p class="submit">         
    507                                                 <input type="submit" value="<?php _e('Publish') ?>" onclick="document.getElementById('photo_saving').style.display = '';"/>
    508                                                 <img src="images/loading-publish.gif" alt="" id="photo_saving" style="display:none;"/>
    509                                         </p>
    510                                 </div>
    511                                
    512                                
    513                         </form>         
    514                                        
     479<form action="press-this.php?action=post" method="post">
     480        <?php wp_nonce_field('press-this') ?>
     481        <input type="hidden" name="post_type" id="post_type" value="text"/>
     482        <div id="posting">
     483                <h2 id="title"><label for="post_title"><?php _e('Title') ?></label></h2>
     484                <div class="titlewrap">
     485                        <input name="post_title" id="post_title" class="text" value="<?php echo attribute_escape($title);?>"/>
     486                </div>
     487               
     488                <div id="extra_fields" style="display: none"></div>
     489               
     490                <div class="editor_area">
     491                        <h2 id="content_type"><label for="content"><?php _e('Post') ?></label></h2>
     492                        <div class="editor-container">
     493                                <textarea name="content" id="content" style="width:100%;" class="mceEditor"><?php if($selection) { ?><a href='<?php echo $url ?>'><?php echo $selection ?></a><?php } else { ?><a href='<?php echo $url ?>'><?php echo $title; ?></a><?php } ?></textarea>
     494                        </div>
     495                </div>
     496        </div>
     497       
     498        <div id="categories">
     499                <div class="submitbox" id="submitpost">
     500                <div id="previewview"></div>
     501                <div class="inside">
     502                        <h2><?php _e('Categories') ?></h2>
     503                        <div id="categories-all">
     504                                <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
     505                                        <?php wp_category_checklist() ?>
     506                                </ul>
     507                        </div>
     508                        <h2><?php _e('Tags') ?></h2>
     509                        <p id="jaxtag"><label class="hidden" for="newtag"><?php _e('Tags'); ?></label><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" /></p>
     510                        <div id="tagchecklist"></div>
     511                </div>
     512                <label for="post_status" id="post_status"><input type="radio" name="post_status" value="publish" checked="checked" id="published" />Published <input type="radio" name="post_status" value="draft" id="unpubplished" /> Unpublished</label>
     513                <p class="submit">         
     514                        <input type="submit" value="<?php _e('Publish') ?>" onclick="document.getElementById('photo_saving').style.display = '';"/>
     515                        <img src="images/loading-publish.gif" alt="" id="photo_saving" style="display:none;"/>
     516                </p>
     517        </div>
     518</form>
    515519</body>
    516520</html>
     521 No newline at end of file
  • css/press-this.css

     
    294294        height: 100px;
    295295}
    296296
     297#img_container a {
     298        display: block;
     299        width: 79px;
     300        height: 79px;
     301        float: left;
     302}
    297303#img_container img {
    298304        width: 75px;
    299305        height: 75px;
     306        border: 0px;
    300307        padding: 2px;
    301308        background-color: #f4f4f4;
    302         margin-right: 7px;
    303         margin-bottom: 7px;
    304309        cursor: pointer;
    305310}
     311#img_container a, #img_container a:link, #img_container a:visited {
     312        border: 2px solid #ccc;
     313        margin: 0 4px 4px 0;
     314}
     315#img_container a:hover, #img_container a:active {
     316        border: 2px solid #000;
     317}
    306318.submit {
    307 -moz-border-radius-bottomleft: 3px;
    308 -khtml-border-bottom-left-radius: 3px;
    309 -webkit-border-bottom-left-radius: 3px;
    310 border-bottom-left-radius: 3px;
    311 -moz-border-radius-bottomright: 3px;
    312 -khtml-border-bottom-right-radius: 3px;
    313 -webkit-border-bottom-right-radius: 3px;
    314 border-bottom-right-radius: 3px;
    315 margin: 0;
    316 padding: 0;
     319        -moz-border-radius-bottomleft: 3px;
     320        -khtml-border-bottom-left-radius: 3px;
     321        -webkit-border-bottom-left-radius: 3px;
     322        border-bottom-left-radius: 3px;
     323        -moz-border-radius-bottomright: 3px;
     324        -khtml-border-bottom-right-radius: 3px;
     325        -webkit-border-bottom-right-radius: 3px;
     326        border-bottom-right-radius: 3px;
     327        margin: 0;
     328        padding: 0;
    317329}
    318330.submitbox {
    319331        width: 100%;
     
    466478}
    467479
    468480#post_status {
    469 margin-left: 10px;
    470 margin-bottom: 1em;
    471 display: block;
     481        margin-left: 10px;
     482        margin-bottom: 1em;
     483        display: block;
    472484}
    473485
    474486#footer {
  • includes/media.php

     
    115115
    116116}
    117117
    118 
    119 function media_sideload_image($file, $post_id, $desc = null) {
    120 
    121         if (!empty($file) ) {
    122                 // Upload File button was clicked
    123                
    124                 $file_array['name'] = basename($file);
    125                 $file_array['tmp_name'] = download_url($file);
    126                 $desc = @$desc;
    127                
    128                 $sideload = media_handle_sideload($file_array, $post_id, $desc);
    129 
    130                 $id = $sideload['id'];
    131                 $src = $sideload['src'];
    132                
    133                 unset($file_array['tmp_name']);
    134                 unset($file_array);
    135                
    136                 if ( is_wp_error($id) ) {
    137                         $errors['upload_error'] = $id;
    138                         $id = false;
    139                 }
    140         }
    141        
    142         if ( !empty($src) && !strpos($src, '://') )
    143                
    144                 $src = "http://$src";
    145                 $alt = @$desc;
    146                
    147                 if ( !empty($src) )
    148                         $html = "<img src='$src' alt='$alt' />";
    149                         return $html;
    150        
    151 }
    152 
    153118function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) {
    154119        $overrides = array('test_form'=>false);
    155120        $file = wp_handle_sideload($file_array, $overrides);
     
    186151        $id = wp_insert_attachment($attachment, $file, $post_parent);
    187152        if ( !is_wp_error($id) ) {
    188153                wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
     154                return $src;
    189155        }
     156       
     157        return $id;
    190158
    191         return array('id' => $id, 'src' => $url);
    192 
    193159}
    194160
    195161
     
    348314        return wp_iframe( 'media_upload_type_form', 'image', $errors, $id );
    349315}
    350316
     317function media_sideload_image($file, $post_id, $desc = null) {
     318        if (!empty($file) ) {
     319                $file_array['name'] = basename($file);
     320                $file_array['tmp_name'] = download_url($file);
     321                $desc = @$desc;
     322               
     323                $id = media_handle_sideload($file_array, $post_id, $desc);
     324                unset($file_array);
     325               
     326                if ( is_wp_error($id) ) {
     327                        $errors['upload_error'] = $id;
     328                        return $id;
     329                } else {
     330                        $src = $id;
     331                }
     332        }
     333       
     334        if (!empty($src) && !strpos($src, '://') ) {
     335                $src = "http://$src";
     336                $alt = @$desc;
     337        }
     338        if ( !empty($src) ) {
     339                $html = "<img src='$src' alt='$alt' />";
     340                return $html;
     341        }
     342}
     343
    351344function media_upload_audio() {
    352345        if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
    353346                // Upload File button was clicked