diff --git a/wp-admin/css/press-this.css b/wp-admin/css/press-this.css index f9533eebbe..98af86ded2 100644 --- a/wp-admin/css/press-this.css +++ b/wp-admin/css/press-this.css @@ -91,10 +91,27 @@ body { border-top: none; } -.submit input { - +.button { +font-family: "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; +padding: 3px 5px; +font-size: 12px; +line-height: 1.5em; +border-width: 1px; +border-style: solid; +-moz-border-radius: 3px; +-khtml-border-radius: 3px; +-webkit-border-radius: 3px; +border-radius: 3px; +cursor: pointer; +margin-left: 5px; +text-decoration: none; } +.howto { +font-size: 11px; +} +#newtag { padding: 3px; } + #wphead { height: 2em; padding-top: 8px; @@ -189,7 +206,7 @@ div#container form { div#categories { font-size: 85%; position: absolute; - + top: 50px; right: 16px; width: 27%; z-index: 2; @@ -269,7 +286,6 @@ div#categories h2 { #img_container { background-color: #fff; - margin-top: 10px; overflow: auto; height: 100px; } @@ -283,42 +299,39 @@ div#categories h2 { margin-bottom: 7px; cursor: pointer; } - +.submit { +-moz-border-radius-bottomleft: 3px; +-khtml-border-bottom-left-radius: 3px; +-webkit-border-bottom-left-radius: 3px; +border-bottom-left-radius: 3px; +-moz-border-radius-bottomright: 3px; +-khtml-border-bottom-right-radius: 3px; +-webkit-border-bottom-right-radius: 3px; +border-bottom-right-radius: 3px; +margin: 0; +padding: 0; +} .submitbox { width: 100%; float: right; } -.submitbox .submit { - text-align: left; - padding: 12px 10px 10px 10px; - font-size: 11px; -} - -.submit { - border-top: 1px solid #ccc; - padding: 1.5em 0 0 0; - margin: 10px 0 0 0; - -moz-border-radius-bottomleft: 3px; - -khtml-border-bottom-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -moz-border-radius-bottomright: 3px; - -khtml-border-bottom-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; -} - .submitbox .submit a:hover { border-bottom-width: 1px; border-bottom-style: solid; } .submitbox .submit input { - margin-bottom: 8px; - margin-right: 3px; - padding: 6px 4px; border: none; + text-align: left; + padding: 12px 10px 10px 10px; + font-size: 12px; + margin: 10px; + + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; cursor: pointer; } @@ -337,3 +350,22 @@ div#categories h2 { .hidden { display: none; } + +.video_split #extra_fields { +width: 27%; +height: 300px; +float: left; +} +#embed_code { +border: 0; +width: 99%; +height: 200px; +} +.video_split .editor_area { +width: 70%; +float: right; +} + +#jaxtag { +clear: both; +} \ No newline at end of file diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php index a83b475e28..9eed2bf98d 100644 --- a/wp-admin/includes/file.php +++ b/wp-admin/includes/file.php @@ -184,6 +184,98 @@ function wp_handle_upload( &$file, $overrides = false ) { return $return; } +// Pass this function an array similar to that of a $_FILES POST array. +function wp_handle_sideload( &$file, $overrides = false ) { + // The default error handler. + if (! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error'=>$message ); + } + } + + // You may define your own function and pass the name in $overrides['upload_error_handler'] + $upload_error_handler = 'wp_handle_upload_error'; + + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: + $action = 'wp_handle_sideload'; + + // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. + $upload_error_strings = array( false, + __( "The file exceeds the upload_max_filesize directive in php.ini." ), + __( "The file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The file was only partially uploaded." ), + __( "No file was sent." ), + __( "Missing a temporary folder." ), + __( "Failed to write file to disk." )); + + // All tests are on by default. Most can be turned off by $override[{test_name}] = false; + $test_form = true; + $test_size = true; + + // If you override this, you must provide $ext and $type!!!! + $test_type = true; + $mimes = false; + + // Install user overrides. Did we mention that this voids your warranty? + if ( is_array( $overrides ) ) + extract( $overrides, EXTR_OVERWRITE ); + + // A correct form post will pass this test. + if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) + return $upload_error_handler( $file, __( 'Invalid form submission.' )); + + // A successful upload will pass this test. It makes no sense to override this one. + if ( $file['error'] > 0 ) + return $upload_error_handler( $file, $upload_error_strings[$file['error']] ); + + // A non-empty file will pass this test. + if ( $test_size && !(filesize($file['tmp_name']) > 0 ) ) + return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.' )); + + // A properly uploaded file will pass this test. There should be no reason to override this one. + if (! @ is_file( $file['tmp_name'] ) ) + return $upload_error_handler( $file, __( 'Specified file does not exist.' )); + + // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. + if ( $test_type ) { + $wp_filetype = wp_check_filetype( $file['name'], $mimes ); + + extract( $wp_filetype ); + + if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) + return $upload_error_handler( $file, __( 'File type does not meet security guidelines. Try another.' )); + + if ( !$ext ) + $ext = ltrim(strrchr($file['name'], '.'), '.'); + + if ( !$type ) + $type = $file['type']; + } + + // A writable uploads dir will pass this test. Again, there's no point overriding this one. + if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) + return $upload_error_handler( $file, $uploads['error'] ); + + $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + if ( false === @ rename( $file['tmp_name'], $new_file ) ) { + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) ); + } + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) ); + + return $return; +} /** * Downloads a url to a local file using the Snoopy HTTP Class diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php index 027d1b7a49..4f7b344542 100644 --- a/wp-admin/includes/media.php +++ b/wp-admin/includes/media.php @@ -116,6 +116,83 @@ function media_handle_upload($file_id, $post_id, $post_data = array()) { } +function media_sideload_image($file, $post_id) { + + if (!empty($file) ) { + // Upload File button was clicked + + $file_array['name'] = basename($file); + $file_array['tmp_name'] = download_url($file); + + $sideload = media_handle_sideload($file_array, $post_id); + + $id = $sideload['id']; + $src = $sideload['src']; + + unset($file_array['tmp_name']); + unset($file_array); + + if ( is_wp_error($id) ) { + $errors['upload_error'] = $id; + $id = false; + } + } + + if ( !empty($src) && !strpos($src, '://') ) + + $src = "http://$src"; + /*$alt = attribute_escape($_POST['insertonly']['alt']); + if ( isset($_POST['insertonly']['align']) ) { + $align = attribute_escape($_POST['insertonly']['align']); + $class = " class='align$align'"; + } */ + if ( !empty($src) ) + $html = "$alt"; + return $html; + +} + +function media_handle_sideload($file_array, $post_id, $post_data = array()) { + $overrides = array('test_form'=>false); + $file = wp_handle_sideload($file_array, $overrides); + + if ( isset($file['error']) ) + return new wp_error( 'upload_error', $file['error'] ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = preg_replace('/\.[^.]+$/', '', basename($file)); + $content = ''; + + // use image exif/iptc data for title and caption defaults if possible + if ( $image_meta = @wp_read_image_metadata($file) ) { + if ( trim($image_meta['title']) ) + $title = $image_meta['title']; + if ( trim($image_meta['caption']) ) + $content = $image_meta['caption']; + } + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // Save the data + $id = wp_insert_attachment($attachment, $file, $post_parent); + if ( !is_wp_error($id) ) { + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + } + + return array('id' => $id, 'src' => $url); + +} + + // wrap iframe content (produced by $content_func) in a doctype, html head/body etc // any additional function args will be passed to content_func function wp_iframe($content_func /* ... */) { diff --git a/wp-admin/press-this.php b/wp-admin/press-this.php index 1df7c697f8..a618f73cf4 100644 --- a/wp-admin/press-this.php +++ b/wp-admin/press-this.php @@ -1,114 +1,226 @@ -if ( 'post' == $_REQUEST['action'] ) { - check_admin_referer('press-this'); - $post_ID = press_it(); ?> - '; + // insert the post with nothing in it, to get an ID + $post_ID = wp_insert_post($quick, true); + + $content = ''; + switch ( $_REQUEST['post_type'] ) { + case 'text': + $content .= $_REQUEST['content']; - $content .= ''; + case 'quote': + $content .= $_REQUEST['content']; + break; - if ($_REQUEST['photo_link']) - $content .= ' - '; + case 'photo': + if ($_REQUEST['photo_link']) + $content .= ''; + + $content .= media_sideload_image($_REQUEST['photo_src'], $post_ID); - if ($_REQUEST['content']) - $content = $content . "\n".$_REQUEST['content']; + if ($_REQUEST['photo_link']) + $content .= ''; - break; - case "video": - $content = $_REQUEST['content']; - - break; - } + if ($_REQUEST['content']) + $content .= $content . "\n\n".$_REQUEST['content']; + + break; + case "video": + if($_REQUEST['embed_code']) + $content .= $_REQUEST['embed_code']."\n\n"; + $content .= $_REQUEST['content']; + break; + } $quick['post_content'] = $content; - $post_ID = wp_insert_post($quick, true); - - if ( is_wp_error($post_ID) ) - wp_die($wp_error); - + if ( is_wp_error($post_ID) ) { + wp_die($id); + wp_delete_post($post_ID); + } else { + $quick['ID'] = $post_ID; + wp_update_post($quick); + } return $post_ID; } -function tag_div() { ?> -

-
- -
-
-

-
-
-
    - -
-
-
-

- - -

-
-]+src=[\'"]([^\'" >]+?)[\'" >]/is'; - preg_match_all($pattern, $content, $matches); - if ( empty($matches[1]) ) return ''; - - $sources = array(); - foreach ($matches[1] as $src) { - if ( false !== strpos($src, '&') ) - continue; - if ( !strstr( $src, 'http://' ) ) - $src = 'http://'.str_replace('//','/', $host['host'].'/'.$host['path'].'/'.$src); - - $sources[] = $src; + function tag_div() { ?> +

+
+ +
+
+

+
+
+
    + +
+
+
+

+ + +

+
+ + + +

+
+ +
+]+src=[\'"]([^\'" >]+?)[\'" >]/is'; + preg_match_all($pattern, $content, $matches); + if ( empty($matches[1]) ) return ''; + + $sources = array(); + + foreach ($matches[1] as $src) { + if ( false !== strpos($src, '&') ) continue; + if(strpos($src, 'http') === false) { + if(strpos($src, '../') === false && strpos($src, './') === false) { + $src = 'http://'.str_replace('//','/', $host['host'].'/'.$src); + } else { + $src = 'http://'.str_replace('//','/', $host['host'].'/'.$host['path'].'/'.$src); + } + } + $sources[] = $src; + } + return "'" . implode("','", $sources) . "'"; + } + + echo 'new Array('.get_images_from_uri($url).')'; +die; +} + +if($_REQUEST['ajax'] == 'photo_js') { ?> + + var last = null + function pick(img) { + + if (last) last.style.backgroundColor = '#f4f4f4'; + if (img) { + jQuery('#photo_src').val(img.src); + img.style.backgroundColor = '#44f'; + } + last = img; + + /*noel's code to select more than one image.... + jQuery('.photolist').append('

' + + '
' + + 'remove ' + + '
');*/ + + return false; + } + + jQuery('.remove').click(function() { + jQuery(this).remove; + }); + + + var my_src, img, img_tag, aspect, w, h, skip, i, strtoappend = ""; + + var my_src =eval( + jQuery.ajax({ + type: "GET", + url: "", + cache : false, + async : false, + data: "ajax=photo_images&url=", + dataType : "script" + }).responseText); + + for (i = 0; i < my_src.length; i++) { + img = new Image(); + img.src = my_src[i]; + img_attr = 'id="img' + i + '" onclick="pick(this);"'; + skip = false; + + if (img.width && img.height) { + if (img.width * img.height < 2500) skip = true; + aspect = img.width / img.height; + if (aspect > 1) { // Image is wide + scale = 75 / img.width; + } else { // Image is tall or square + scale = 75 / img.height; + } + if (scale < 1) { + w = parseInt(img.width * scale); + h = parseInt(img.height * scale); + } else { + w = img.width; + h = img.height; + } + img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"'; + } + + if (!skip) strtoappend += ''; + + } + + jQuery('#img_container').html(strtoappend); + + tb_init('a.thickbox, area.thickbox, input.thickbox'); //pass where to apply thickbox + + +

+
+ +
+ +
+ +

+
+ +
+ + +
+
Loading Images...
+
+ - jQuery('#tags-input').hide(); + jQuery('#tags-input').hide(); - tag_update_quickclicks(); + tag_update_quickclicks(); - // add the quickadd form - jQuery('#jaxtag').prepend(''+postL10n.separate+''); + // add the quickadd form + jQuery('#jaxtag').prepend(''+postL10n.separate+''); - jQuery('#tagadd').click( tag_flush_to_text ); - jQuery('#newtag').focus(function() { - if ( this.value == postL10n.addTag ) - jQuery(this).val( '' ).removeClass( 'form-input-tip' ); - }); - jQuery('#newtag').blur(function() { - if ( this.value == '' ) - jQuery(this).val( postL10n.addTag ).addClass( 'form-input-tip' ); - }); + jQuery('#tagadd').click( tag_flush_to_text ); + jQuery('#newtag').focus(function() { + if ( this.value == postL10n.addTag ) + jQuery(this).val( '' ).removeClass( 'form-input-tip' ); + }); + jQuery('#newtag').blur(function() { + if ( this.value == '' ) + jQuery(this).val( postL10n.addTag ).addClass( 'form-input-tip' ); + }); - // auto-save tags on post save/publish - jQuery('#publish').click( tag_save_on_publish ); - jQuery('#save-post').click( tag_save_on_publish ); + // auto-save tags on post save/publish + jQuery('#publish').click( tag_save_on_publish ); + jQuery('#save-post').click( tag_save_on_publish ); function set_menu(type) { jQuery('#text_button').removeClass('ui-tabs-selected'); @@ -202,129 +314,113 @@ $url = clean_url($_GET['u']); jQuery("#post_type").val(type); } function set_editor(text) { - tinyMCE.activeEditor.setContent(''); - tinyMCE.execCommand('mceInsertContent' ,false, text); + if(tinyMCE.activeEditor) tinyMCE.activeEditor.setContent(''); + if(tinyMCE.activeEditor) tinyMCE.execCommand('mceInsertContent' ,false, text); } function set_title(title) { jQuery("#content_type").text(title); } - - var last = null; - function pick(img) { - if (last) last.style.backgroundColor = '#f4f4f4'; - if (img) { - document.getElementById('photo_src').value = img.src; - img.style.backgroundColor = '#44f'; - } - last = img; - - /*noel's code to select more than one image.... - jQuery('.photolist').append('

' + - '
' + - 'remove ' + - '
');*/ - - return false; + function reset_height() { + tinyMCE.height = '170px'; } + function show(tab_name) { + jQuery('body').removeClass('video_split'); + jQuery('#extra_fields').hide(); + switch(tab_name) { + case 'text' : + reset_height(); + jQuery('.editor-container').show(); + jQuery('#content_type').show(); + set_menu('text'); + set_title(''); + set_editor(''); + return false; + break; + case 'quote' : + reset_height(); + jQuery('.editor-container').show(); + jQuery('#content_type').show(); + set_menu('quote'); + set_title(''); + set_editor('

'); - jQuery(document).ready(function() { - - - - - + return false; + break; + case 'video' : + reset_height(); + jQuery('.editor-container').show(); + jQuery('#content_type').show(); + set_menu('video'); + set_title(''); + + jQuery('#extra_fields').show(); + jQuery('body').addClass('video_split'); - + + jQuery('#extra_fields').load('', { ajax: 'video', selection: ''}, function() { + + '; ?> + + '; + + if(trim($selection) == '') $selection = '' . $title . ' on Vimeo'; + }else { + $content = $selection; + } ?> + jQuery('#embed_code').prepend(''); + set_editor(''); + + }); - - - - jQuery("#text_button").click(function () { - jQuery('.editor-container').show(); - jQuery('#content_type').show(); - jQuery('#photo_fields').hide(); - set_menu('text'); - set_title(''); - set_editor(''); - return false; - }); - - jQuery("#quote_button").click(function () { - jQuery('.editor-container').show(); - jQuery('#content_type').show(); - jQuery('#photo_fields').hide(); - set_menu('quote'); - set_title(''); - set_editor('

'); + + return false; + break; - return false; - }); - + case 'photo' : + reset_height(); + set_menu('photo'); + set_title('Caption'); + set_editor(''); + + jQuery('#extra_fields').show(); + jQuery('#extra_fields').load(''); + jQuery('#extra_fields').prepend('

Loading...

'); + jQuery.ajax({ + type: "GET", + cache : false, + url: "", + data: "ajax=photo_js&url=", + dataType : "script", + success : function() { + } + }); + return false; + break; - jQuery("#video_button").click(function () { - jQuery('.editor-container').show(); - jQuery('#content_type').show(); - jQuery('#photo_fields').hide(); - set_menu('video'); - set_title(''); - set_editor(''); - ';--> - */?> - return false; - }); - - - jQuery("#photo_button").click(function () { - set_menu('photo'); - set_title('Caption'); - set_editor(''); - jQuery('#photo_fields').show(); - jQuery('.remove').click(function() { - jQuery(this).remove; - - }); - - - var img, img_tag, aspect, w, h, skip, i, strtoappend = ""; - var my_src = []; - - for (i = 0; i < my_src.length; i++) { - img = new Image(); - img.src = my_src[i]; - img_attr = 'id="img' + i + '" onclick="pick(this);"'; - skip = false; - - if (img.width && img.height) { - if (img.width * img.height < 2500) skip = true; - aspect = img.width / img.height; - if (aspect > 1) { // Image is wide - scale = 75 / img.width; - } else { // Image is tall or square - scale = 75 / img.height; - } - if (scale < 1) { - w = parseInt(img.width * scale); - h = parseInt(img.height * scale); - } else { - w = img.width; - h = img.height; - } - img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"'; - } - - if (!skip) strtoappend += ''; - } - - jQuery('#img_container').html(strtoappend); - - tb_init('a.thickbox, area.thickbox, input.thickbox'); //pass where to apply thickbox - - }); - }); - - + } + + jQuery(document).ready(function() { + jQuery('#menu li').click(function (){ + tab_name = this.id.split('_'); + tab_name = tab_name[0]; + show(tab_name); + }); + + + show('video'); + + show('video'); + + show('photo'); + + }); +