function handle_media_creation_v1_1($media_files, $media_urls, $media_attrs = array(), $force_parent_id = false)
{
add_filter('upload_mimes', array($this, 'allow_video_uploads'));
$media_ids = $errors = array();
$user_can_upload_files = current_user_can('upload_files');
$media_attrs = array_values($media_attrs);
// reset the keys
$i = 0;
if (!empty($media_files)) {
$this->api->trap_wp_die('upload_error');
foreach ($media_files as $media_item) {
$_FILES['.api.media.item.'] = $media_item;
if (!$user_can_upload_files) {
$media_id = new WP_Error('unauthorized', 'User cannot upload media.', 403);
} else {
if ($force_parent_id) {
$parent_id = absint($force_parent_id);
} elseif (!empty($media_attrs[$i]) && !empty($media_attrs[$i]['parent_id'])) {
$parent_id = absint($media_attrs[$i]['parent_id']);
} else {
$parent_id = 0;
}
$media_id = media_handle_upload('.api.media.item.', $parent_id);
}
if (is_wp_error($media_id)) {
$errors[$i]['file'] = $media_item['name'];
$errors[$i]['error'] = $media_id->get_error_code();
$errors[$i]['message'] = $media_id->get_error_message();
} else {
$media_ids[$i] = $media_id;
}
$i++;
}
$this->api->trap_wp_die(null);
unset($_FILES['.api.media.item.']);
}
if (!empty($media_urls)) {
foreach ($media_urls as $url) {
if (!$user_can_upload_files) {
$media_id = new WP_Error('unauthorized', 'User cannot upload media.', 403);
} else {
if ($force_parent_id) {
$parent_id = absint($force_parent_id);
} else {
if (!empty($media_attrs[$i]) && !empty($media_attrs[$i]['parent_id'])) {
$parent_id = absint($media_attrs[$i]['parent_id']);
} else {
$parent_id = 0;
}
}
$media_id = $this->handle_media_sideload($url, $parent_id);
}
if (is_wp_error($media_id)) {
$errors[$i] = array('file' => $url, 'error' => $media_id->get_error_code(), 'message' => $media_id->get_error_message());
} elseif (!empty($media_id)) {
$media_ids[$i] = $media_id;
}
$i++;
}
}
if (!empty($media_attrs)) {
foreach ($media_ids as $index => $media_id) {
if (empty($media_attrs[$index])) {
continue;
}
$attrs = $media_attrs[$index];
$insert = array();
// Attributes: Title, Caption, Description
if (isset($attrs['title'])) {
$insert['post_title'] = $attrs['title'];
}
if (isset($attrs['caption'])) {
$insert['post_excerpt'] = $attrs['caption'];
}
if (isset($attrs['description'])) {
$insert['post_content'] = $attrs['description'];
}
if (!empty($insert)) {
$insert['ID'] = $media_id;
wp_update_post((object) $insert);
}
// Attributes: Alt
if (isset($attrs['alt'])) {
$alt = wp_strip_all_tags($attrs['alt'], true);
update_post_meta($media_id, '_wp_attachment_image_alt', $alt);
}
// Attributes: Artist, Album
$id3_meta = array();
foreach (array('artist', 'album') as $key) {
if (isset($attrs[$key])) {
$id3_meta[$key] = wp_strip_all_tags($attrs[$key], true);
}
}
if (!empty($id3_meta)) {
// Before updating metadata, ensure that the item is audio
$item = $this->get_media_item_v1_1($media_id);
if (0 === strpos($item->mime_type, 'audio/')) {
wp_update_attachment_metadata($media_id, $id3_meta);
}
}
}
}
return array('media_ids' => $media_ids, 'errors' => $errors);
}