WPCOM_JSON_API_Endpoint::handle_media_creation_v1_1 PHP Method

handle_media_creation_v1_1() public method

public handle_media_creation_v1_1 ( $media_files, $media_urls, $media_attrs = [], $force_parent_id = false )
    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);
    }