From 30a8b614b232625c41f766342cd4cb80168bc8f0 Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 1 Dec 2005 22:51:40 +0000 Subject: [PATCH] Add wp_upload_bits(). Attempt to fix mw_newMediaObject(). git-svn-id: http://svn.automattic.com/wordpress/trunk@3255 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions-post.php | 33 +++++++++++++ xmlrpc.php | 88 ++++++++++------------------------ 2 files changed, 57 insertions(+), 64 deletions(-) diff --git a/wp-includes/functions-post.php b/wp-includes/functions-post.php index c4205cb4c..38c1cfe76 100644 --- a/wp-includes/functions-post.php +++ b/wp-includes/functions-post.php @@ -778,4 +778,37 @@ function get_post_mime_type($ID = '') { function get_attached_file($attachment_id) { return get_post_meta($attachment_id, '_wp_attached_file', true); } + +function wp_upload_bits($name, $type, $bits) { + if ( empty($name) ) + return array('error' => "Empty filename"); + + $upload = wp_upload_dir(); + + if ( $upload['error'] !== false ) + return $upload; + + $number = ''; + $filename = $name; + while ( file_exists($upload['path'] . "/$filename") ) + $filename = str_replace("$number.$ext", ++$number . ".$ext", $filename); + + $new_file = $uploads['path'] . "/$filename"; + $ifp = @ fopen($new_file, 'wb'); + if ( ! $ifp ) + return array('error' => "Could not write file $new_file."); + + $success = @ fwrite($ifp, $bits); + fclose($ifp); + // Set correct file permissions + $stat = @ stat(dirname($new_file)); + $perms = $stat['mode'] & 0000777; + @ chmod($new_file, $perms); + + // Compute the URL + $url = $upload['url'] . "/$filename"; + + return array('file' => $new_file, 'url' => $url); +} + ?> diff --git a/xmlrpc.php b/xmlrpc.php index 5586e6038..51459aa33 100644 --- a/xmlrpc.php +++ b/xmlrpc.php @@ -825,83 +825,43 @@ class wp_xmlrpc_server extends IXR_Server { /* metaweblog.newMediaObject uploads a file, following your settings */ function mw_newMediaObject($args) { - // adapted from a patch by Johann Richard - // http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/ + // adapted from a patch by Johann Richard + // http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/ global $wpdb; - $blog_ID = $wpdb->escape($args[0]); - $user_login = $wpdb->escape($args[1]); + $blog_ID = $wpdb->escape($args[0]); + $user_login = $wpdb->escape($args[1]); $user_pass = $wpdb->escape($args[2]); - $data = $args[3]; + $data = $args[3]; - $name = $data['name']; - $type = $data['type']; - $bits = $data['bits']; + $name = $data['name']; + $type = $data['type']; + $bits = $data['bits']; - $file_realpath = get_settings('fileupload_realpath'); - $file_url = get_settings('fileupload_url'); + logIO('O', '(MW) Received '.strlen($bits).' bytes'); - logIO('O', '(MW) Received '.strlen($bits).' bytes'); + if ( !$this->login_pass_ok($user_login, $user_pass) ) + return $this->error; - if (!$this->login_pass_ok($user_login, $user_pass)) { - return $this->error; - } + $user = new WP_User($user_login); - $user_data = get_userdatabylogin($user_login); + if ( !$user->has_cap('upload_files') ) { + logIO('O', '(MW) User does not have upload_files capability'); + $this->error = new IXR_Error(401, 'You are not allowed to upload files to this site.'); + return $this->error; + } - if(!get_settings('use_fileupload')) { - // Uploads not allowed - logIO('O', '(MW) Uploads not allowed'); - $this->error = new IXR_Error(405, 'No uploads allowed for this site.'); - return $this->error; - } - - $user = new WP_User($user_login); - if ( !$user->has_cap('upload_files') ) { - logIO('O', '(MW) User does not have upload_files capability'); - $this->error = new IXR_Error(401, 'You are not allowed to upload files to this site.'); - return $this->error; - } - - if(trim($file_realpath) == '' || trim($file_url) == '' ) { - // WordPress is not correctly configured - logIO('O', '(MW) Bad configuration. Real/URL path not defined'); - $this->error = new IXR_Error(500, 'Please configure WordPress with valid paths for file upload.'); - return $this->error; - } - - $prefix = '/'; - - if(!empty($name)) { - // Create the path - $localpath = $file_realpath.$prefix.$name; - $url = $file_url.$prefix.$name; - - if (mkdir_p(dirname($localpath))) { - - /* encode & write data (binary) */ - $ifp = fopen($localpath, 'wb'); - $success = fwrite($ifp, $bits); - fclose($ifp); - @chmod($localpath, 0666); - - if($success) { - $resp = array('url' => $url); - return $resp; - } else { - logIO('O', '(MW) Could not write file '.$name.' to '.$localpath); - return new IXR_Error(500, 'Could not write file '.$name); - } - - } else { - return new IXR_Error(500, 'Could not create directories for '.$name); - } - } + $upload = wp_upload_bits($name, $type, $bits); + if ( $upload['error'] !== false ) { + logIO('O', '(MW) Could not write file '.$name); + return new IXR_Error(500, 'Could not write file '.$name); + } + + return array('url' => $upload['url']); } - /* MovableType API functions * specs on http://www.movabletype.org/docs/mtmanual_programmatic.html */