Change xmlrpc upload logic. Props Joseph Scott.
git-svn-id: https://develop.svn.wordpress.org/trunk@5008 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
db67d51e29
commit
c79783485f
|
@ -1094,7 +1094,7 @@ function wp_upload_dir() {
|
|||
return apply_filters('upload_dir', $uploads);
|
||||
}
|
||||
|
||||
function wp_upload_bits($name, $type, $bits, $overwrite = false) {
|
||||
function wp_upload_bits($name, $type, $bits) {
|
||||
if ( empty($name) )
|
||||
return array('error' => __("Empty filename"));
|
||||
|
||||
|
@ -1122,21 +1122,10 @@ function wp_upload_bits($name, $type, $bits, $overwrite = false) {
|
|||
$filename = str_replace("$number$ext", ++$number . $ext, $filename);
|
||||
}
|
||||
|
||||
// If we are asked to over write the file then make sure
|
||||
// the $name has the complete path and is writable.
|
||||
if($overwrite) {
|
||||
if(!is_writable($name)) {
|
||||
return(array("error" => __("Can not over write file.")));
|
||||
}
|
||||
$new_file = $name;
|
||||
$filename = basename($name);
|
||||
}
|
||||
else {
|
||||
$new_file = $upload['path'] . "/$filename";
|
||||
if ( ! wp_mkdir_p( dirname($new_file) ) ) {
|
||||
$message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file));
|
||||
return array('error' => $message);
|
||||
}
|
||||
$new_file = $upload['path'] . "/$filename";
|
||||
if ( ! wp_mkdir_p( dirname($new_file) ) ) {
|
||||
$message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file));
|
||||
return array('error' => $message);
|
||||
}
|
||||
|
||||
$ifp = @ fopen($new_file, 'wb');
|
||||
|
@ -1151,11 +1140,8 @@ function wp_upload_bits($name, $type, $bits, $overwrite = false) {
|
|||
$perms = $perms & 0000666;
|
||||
@ chmod($new_file, $perms);
|
||||
|
||||
// Compute the URL if this is a new file.
|
||||
// Compute the URL
|
||||
$url = $upload['url'] . "/$filename";
|
||||
if($overwrite) {
|
||||
$url = $name;
|
||||
}
|
||||
|
||||
return array('file' => $new_file, 'url' => $url, 'error' => false);
|
||||
}
|
||||
|
|
44
xmlrpc.php
44
xmlrpc.php
|
@ -1383,29 +1383,22 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||
$type = $data['type'];
|
||||
$bits = $data['bits'];
|
||||
|
||||
// Default to new file, not over write.
|
||||
$overwrite = false;
|
||||
if(!empty($data["overwrite"]) && ($data["overwrite"] == true)) {
|
||||
$overwrite = true;
|
||||
|
||||
// If the file isn't writable then error out now.
|
||||
if(!is_writable($data["name"])) {
|
||||
return(new IXR_Error(500, "File is not writable, over write failed."));
|
||||
}
|
||||
|
||||
// We now know the file is good so don't use the sanitized name.
|
||||
$name = $data["name"];
|
||||
|
||||
// Get postmeta info on the object.
|
||||
$old_meta = $wpdb->get_row("
|
||||
SELECT *
|
||||
FROM {$wpdb->postmeta}
|
||||
WHERE meta_key = '_wp_attached_file'
|
||||
AND meta_value = '{$name}'
|
||||
$old_file = $wpdb->get_row("
|
||||
SELECT ID
|
||||
FROM {$wpdb->posts}
|
||||
WHERE post_title = '{$name}'
|
||||
AND post_type = 'attachment'
|
||||
");
|
||||
|
||||
// Get post info on the object.
|
||||
$old_post = get_post($old_meta->post_id);
|
||||
// Delete previous file.
|
||||
wp_delete_attachment($old_file->ID);
|
||||
|
||||
// Make sure the new name is different by pre-pending the
|
||||
// previous post id.
|
||||
$filename = preg_replace("/^wpid\d+-/", "", $name);
|
||||
$name = "wpid{$old_file->ID}-{$filename}";
|
||||
}
|
||||
|
||||
logIO('O', '(MW) Received '.strlen($bits).' bytes');
|
||||
|
@ -1440,22 +1433,11 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||
'guid' => $upload[ 'url' ]
|
||||
);
|
||||
|
||||
// If we are over writing then set the correct post_id and URL
|
||||
// instead of getting new ones.
|
||||
if($overwrite) {
|
||||
$post_id = $old_meta->post_id;
|
||||
$attachment["post_parent"] = $old_meta->post_id;
|
||||
$attachment["ID"] = $old_meta->post_id;
|
||||
|
||||
$upload["url"] = $old_post->guid;
|
||||
$attachment["guid"] = $old_post->guid;
|
||||
}
|
||||
|
||||
// Save the data
|
||||
$id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id );
|
||||
wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );
|
||||
|
||||
return apply_filters( 'wp_handle_upload', array( 'file' => $upload[ 'file' ], 'url' => $upload[ 'url' ], 'type' => $type ) );
|
||||
return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ) );
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue