mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-11 12:20:22 +00:00
Press This enhancement from noel. see #7066
git-svn-id: https://develop.svn.wordpress.org/trunk@8048 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -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 <code>upload_max_filesize</code> directive in <code>php.ini</code>." ),
|
||||
__( "The file exceeds the <em>MAX_FILE_SIZE</em> 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
|
||||
|
||||
@@ -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 = "<img src='$src' alt='$alt'$class />";
|
||||
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 /* ... */) {
|
||||
|
||||
Reference in New Issue
Block a user