Commit c957fe0a authored by Kjartan's avatar Kjartan
Browse files

- Commited patch #4878: Support file uploads via blogapi.

parent be59d6a6
......@@ -288,6 +288,37 @@ function file_save_upload($source, $dest = 0, $replace = 0) {
return 0;
}
/**
* Save a string to the specified destination
*
* @param $data A string containing the contents of the file
* @param $dest A string containing the destination location
*
* @return A string containing the resulting filename or 0 on error
*/
function file_save_data($data, $dest, $replace = 0) {
if (!valid_input_data($data)) {
watchdog('error', t('Possible exploit abuse: invalid data.'));
drupal_set_message(t("file upload failed: invalid data."), 'error');
return 0;
}
$temp = variable_get('file_directory_temp', (PHP_OS == 'WINNT' ? 'c:\\windows\\temp' : '/tmp'));
$file = tempnam($temp, 'file');
if (!$fp = fopen($file, 'w')) {
drupal_set_message(t('unable to create file.'), 'error');
return 0;
}
fwrite($fp, $data);
fclose($fp);
if (!file_move($file, $dest)) {
return 0;
}
return $file;
}
/**
* Transfer file using http to client. Pipes a file through Drupal to the
* client.
......
......@@ -247,11 +247,29 @@ function blogapi_delete_post($req_params) {
/**
* Blogging API callback. Inserts a file into Drupal.
*
* This has yet to be implemented.
*/
function blogapi_new_media_object($req_params) {
return blogapi_error('not implemented');
$params = blogapi_convert($req_params);
$user = blogapi_validate_user($params[1], $params[2]);
if (!$user->uid) {
return blogapi_error($user);
}
$name = basename($params[3]['name']);
$data = $params[3]['bits'];
if (!$data) {
return blogapi_error(t('No file sent'));
}
if (!$file = file_save_data($data, $name)) {
return blogapi_error(t('Error storing file'));
}
// Return the successful result.
$result = new xmlrpcval(array('url' => new xmlrpcval(file_create_url($file), 'string')), 'struct');
return new xmlrpcresp($result);
}
/**
......
......@@ -247,11 +247,29 @@ function blogapi_delete_post($req_params) {
/**
* Blogging API callback. Inserts a file into Drupal.
*
* This has yet to be implemented.
*/
function blogapi_new_media_object($req_params) {
return blogapi_error('not implemented');
$params = blogapi_convert($req_params);
$user = blogapi_validate_user($params[1], $params[2]);
if (!$user->uid) {
return blogapi_error($user);
}
$name = basename($params[3]['name']);
$data = $params[3]['bits'];
if (!$data) {
return blogapi_error(t('No file sent'));
}
if (!$file = file_save_data($data, $name)) {
return blogapi_error(t('Error storing file'));
}
// Return the successful result.
$result = new xmlrpcval(array('url' => new xmlrpcval(file_create_url($file), 'string')), 'struct');
return new xmlrpcresp($result);
}
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment