From 2051c80cacfcf59821c7f55ff93f997ee1f21103 Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 9 Mar 2007 20:14:52 +0000 Subject: [PATCH] Change xmlrpc upload logic. Props Joseph Scott. git-svn-id: http://svn.automattic.com/wordpress/trunk@5008 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions.php | 26 ++++++----------------- xmlrpc.php | 44 ++++++++++++--------------------------- 2 files changed, 19 insertions(+), 51 deletions(-) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index c1ccfe1c18..4ae1cebd58 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -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); } diff --git a/xmlrpc.php b/xmlrpc.php index 3283944715..ce1171afba 100644 --- a/xmlrpc.php +++ b/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 ) ); }