Esempio n. 1
0
/**
 * Save any changes to custom metadata
 *
 * @param int $post_id The ID of the post being saved.
 */
function humcore_deposit_metabox_save($post_id)
{
    /*
     * We need to verify this came from our screen and with proper authorization,
     * because the save_post action can be triggered at other times.
     */
    // Check if our nonce is set.
    if (!isset($_POST['deposit_metabox_noncename'])) {
        return $post_id;
    }
    // Verify that the nonce is valid.
    if (!wp_verify_nonce($_POST['deposit_metabox_noncename'], 'humcore_deposit_metabox')) {
        return $post_id;
    }
    // If this is an autosave, our form has not been submitted, so we don't want to do anything.
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $post_id;
    }
    // Check the user's permissions.
    if (isset($_POST['post_type']) && 'page' == $_POST['post_type']) {
        if (!current_user_can('edit_page', $post_id)) {
            return $post_id;
        }
    } else {
        if (!current_user_can('edit_post', $post_id)) {
            return $post_id;
        }
    }
    // Make sure that at least the ID is set.
    if (!isset($_POST['aggregator_id'])) {
        return $post_id;
    }
    global $fedora_api, $solr_client;
    $aggregator_metadata = json_decode(get_post_meta($post_id, '_deposit_metadata', true), true);
    $current_groups = $aggregator_metadata['group'];
    $current_group_ids = $aggregator_metadata['group_ids'];
    $current_subjects = $aggregator_metadata['subject'];
    $current_subject_ids = $aggregator_metadata['subject_ids'];
    $current_keywords = $aggregator_metadata['keyword'];
    $current_keyword_ids = $aggregator_metadata['keyword_ids'];
    // No changes allowed.
    // $aggregator_metadata['id'] = sanitize_text_field( $_POST['aggregator_id'] );
    // $aggregator_metadata['pid'] = sanitize_text_field( $_POST['aggregator_pid'] );
    // $aggregator_metadata['creator'] = sanitize_text_field( $_POST['aggregator_creator'] );
    // Sanitize user input.
    $aggregator_metadata['title'] = sanitize_text_field(stripslashes($_POST['aggregator_title_unchanged']));
    $aggregator_metadata['title_unchanged'] = wp_kses(stripslashes($_POST['aggregator_title_unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $aggregator_metadata['abstract'] = sanitize_text_field(stripslashes($_POST['aggregator_abstract_unchanged']));
    $aggregator_metadata['abstract_unchanged'] = wp_kses(stripslashes($_POST['aggregator_abstract_unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $aggregator_metadata['genre'] = sanitize_text_field($_POST['aggregator_genre']);
    $aggregator_metadata['organization'] = sanitize_text_field(stripslashes($_POST['aggregator_organization']));
    $aggregator_metadata['institution'] = sanitize_text_field(stripslashes($_POST['aggregator_institution']));
    $aggregator_metadata['conference_title'] = sanitize_text_field(stripslashes($_POST['aggregator_conference_title']));
    $aggregator_metadata['conference_organization'] = sanitize_text_field(stripslashes($_POST['aggregator_conference_organization']));
    // No changes allowed.
    //$aggregator_metadata['committee_deposit'] = sanitize_text_field( $_POST['aggregator_committee_deposit'] );
    //$aggregator_metadata['committee_id'] = sanitize_text_field( $_POST['aggregator_committee_id'] );
    //$aggregator_metadata['submitter'] = sanitize_text_field( $_POST['aggregator_submitter'] );
    $aggregator_metadata['authors'] = array();
    $authors = array();
    $authors = array_map(function ($given, $family, $fullname, $uni, $role, $affiliation) {
        return array('given' => sanitize_text_field(stripslashes($given)), 'family' => sanitize_text_field(stripslashes($family)), 'fullname' => sanitize_text_field(stripslashes($fullname)), 'uni' => sanitize_text_field(stripslashes($uni)), 'role' => sanitize_text_field(stripslashes($role)), 'affiliation' => sanitize_text_field(stripslashes($affiliation)));
    }, $_POST['aggregator_author_given'], $_POST['aggregator_author_family'], $_POST['aggregator_author_fullname'], $_POST['aggregator_author_uni'], $_POST['aggregator_author_role'], $_POST['aggregator_author_affiliation']);
    foreach ($authors as $author) {
        if (!empty($author['given']) || !empty($author['family']) || !empty($author['fullname'])) {
            $aggregator_metadata['authors'][] = $author;
        }
    }
    $aggregator_metadata['author_info'] = humcore_deposits_format_author_info($aggregator_metadata['authors']);
    $aggregator_metadata['group'] = array();
    $aggregator_metadata['group_ids'] = array();
    if (!empty($_POST['aggregator_group'])) {
        foreach ($_POST['aggregator_group'] as $group_id) {
            $group = groups_get_group(array('group_id' => sanitize_text_field($group_id)));
            if (!empty($group)) {
                $aggregator_metadata['group'][] = $group->name;
                $aggregator_metadata['group_ids'][] = $group_id;
            }
        }
    }
    $aggregator_metadata['subject'] = array();
    if (!empty($_POST['aggregator_subject'])) {
        foreach ($_POST['aggregator_subject'] as $subject) {
            $aggregator_metadata['subject'][] = sanitize_text_field(stripslashes($subject));
        }
        if ($aggregator_metadata['subject'] != $current_subjects) {
            $term_ids = array();
            $aggregator_metadata['subject_ids'] = array();
            foreach ($_POST['aggregator_subject'] as $subject) {
                $term_key = term_exists($subject, 'humcore_deposit_subject');
                if (!is_wp_error($term_key)) {
                    $term_ids[] = intval($term_key['term_id']);
                } else {
                    error_log('*****WP Admin HumCORE Deposit Meta Update Subject Error*****' . var_export($term_key, true));
                }
            }
            // Support add and remove.
            $term_taxonomy_ids = wp_set_object_terms($post_id, $term_ids, 'humcore_deposit_subject');
            $aggregator_metadata['subject_ids'] = $term_taxonomy_ids;
        }
    }
    $aggregator_metadata['keyword'] = array();
    if (!empty($_POST['aggregator_keyword'])) {
        foreach ($_POST['aggregator_keyword'] as $keyword) {
            $aggregator_metadata['keyword'][] = sanitize_text_field(stripslashes($keyword));
        }
        if ($aggregator_metadata['keyword'] != $current_keywords) {
            $term_ids = array();
            $aggregator_metadata['keyword_ids'] = array();
            foreach ($_POST['aggregator_keyword'] as $keyword) {
                $term_key = term_exists($keyword, 'humcore_deposit_tag');
                if (empty($term_key)) {
                    $term_key = wp_insert_term(strtolower(sanitize_text_field($keyword)), 'humcore_deposit_tag');
                }
                if (!is_wp_error($term_key)) {
                    $term_ids[] = intval($term_key['term_id']);
                } else {
                    error_log('*****WP Admin HumCORE Deposit Meta Update Keyword Error*****' . var_export($term_key, true));
                }
            }
            // Support add and remove.
            $term_taxonomy_ids = wp_set_object_terms($post_id, $term_ids, 'humcore_deposit_tag');
            $aggregator_metadata['keyword_ids'] = $term_taxonomy_ids;
        }
    }
    $aggregator_metadata['type_of_resource'] = sanitize_text_field($_POST['aggregator_type_of_resource']);
    $aggregator_metadata['language'] = sanitize_text_field($_POST['aggregator_language']);
    $aggregator_metadata['notes'] = sanitize_text_field(stripslashes($_POST['aggregator_notes']));
    $aggregator_metadata['notes_unchanged'] = sanitize_text_field(stripslashes($_POST['aggregator_notes_unchanged']));
    $aggregator_metadata['notes_unchanged'] = wp_kses(stripslashes($_POST['aggregator_notes_unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $aggregator_metadata['type_of_license'] = sanitize_text_field($_POST['aggregator_type_of_license']);
    // No changes allowed.
    // $aggregator_metadata['record_content_source'] = sanitize_text_field( $_POST['aggregator_record_content_source'] );
    // $aggregator_metadata['record_creation_date'] = sanitize_text_field( $_POST['aggregator_record_creation_date'] );
    // $aggregator_metadata['member_of'] = sanitize_text_field( $_POST['aggregator_member_of'] );
    $aggregator_metadata['publication-type'] = sanitize_text_field($_POST['aggregator_publication-type']);
    $aggregator_metadata['publisher'] = sanitize_text_field(stripslashes($_POST['aggregator_publisher']));
    $aggregator_metadata['date'] = sanitize_text_field($_POST['aggregator_date']);
    $aggregator_metadata['date_issued'] = sanitize_text_field($_POST['aggregator_date_issued']);
    $aggregator_metadata['doi'] = sanitize_text_field($_POST['aggregator_doi']);
    $aggregator_metadata['book_journal_title'] = sanitize_text_field(stripslashes($_POST['aggregator_book_journal_title']));
    $aggregator_metadata['book_author'] = sanitize_text_field(stripslashes($_POST['aggregator_book_author']));
    $aggregator_metadata['chapter'] = sanitize_text_field($_POST['aggregator_chapter']);
    $aggregator_metadata['volume'] = sanitize_text_field($_POST['aggregator_volume']);
    $aggregator_metadata['issue'] = sanitize_text_field($_POST['aggregator_issue']);
    $aggregator_metadata['start_page'] = sanitize_text_field($_POST['aggregator_start_page']);
    $aggregator_metadata['end_page'] = sanitize_text_field($_POST['aggregator_end_page']);
    $aggregator_metadata['isbn'] = sanitize_text_field($_POST['aggregator_isbn']);
    $aggregator_metadata['issn'] = sanitize_text_field($_POST['aggregator_issn']);
    $aggregator_metadata['handle'] = sanitize_text_field($_POST['aggregator_handle']);
    $aggregator_metadata['deposit_doi'] = sanitize_text_field($_POST['aggregator_deposit_doi']);
    // No changes allowed.
    // $aggregator_metadata['record_identifier'] = sanitize_text_field( $_POST['aggregator_record_identifier'] );
    $json_aggregator_metadata = json_encode($aggregator_metadata, JSON_HEX_APOS);
    // Update the meta field in the database.
    $post_meta_ID = update_post_meta($post_id, '_deposit_metadata', wp_slash($json_aggregator_metadata));
    if (defined('CORE_ERROR_LOG') && '' != CORE_ERROR_LOG) {
        humcore_write_error_log('WP Admin HumCORE Deposit Meta Update', $json_aggregator_metadata);
    }
    // Reindex solr doc.
    $resource_file_metadata = json_decode(get_post_meta($post_id, '_deposit_file_metadata', true), true);
    if (!empty($resource_file_metadata)) {
        $resource_pid = $resource_file_metadata['files'][0]['pid'];
        $resource_datastream_id = $resource_file_metadata['files'][0]['datastream_id'];
        $resource_filename = $resource_file_metadata['files'][0]['filename'];
        $resource_filetype = $resource_file_metadata['files'][0]['filetype'];
        $resource_filesize = $resource_file_metadata['files'][0]['filesize'];
        $resource_fileloc = $resource_file_metadata['files'][0]['fileloc'];
        $check_resource_filetype = wp_check_filetype($resource_filename, wp_get_mime_types());
        $resource_file_prefix = str_replace($resource_filename, '', $resource_fileloc);
        $resource_MODS_file = $resource_file_prefix . 'MODS.' . $resource_filename . '.xml';
        $thesePids = array($aggregator_metadata['pid'], $resource_pid);
        $metadata_MODS = create_mods_xml($aggregator_metadata);
        $file_write_status = file_put_contents($resource_MODS_file, $metadata_MODS);
        $upload_MODS = $fedora_api->upload(array('file' => $resource_MODS_file));
        if (is_wp_error($upload_MODS)) {
            echo 'Error - uploadMODS : ' . esc_html($upload_MODS->get_error_message());
            error_log(sprintf('*****WP Admin HumCORE Deposit Error***** - uploadMODS : %1$s-%2$s', $upload_MODS->get_error_code(), $upload_MODS->get_error_message()));
        }
        $mContent = $fedora_api->modify_datastream(array('pid' => $thesePids[0], 'dsID' => 'descMetadata', 'dsLocation' => $upload_MODS, 'dsLabel' => $aggregator_metadata['title'], 'mimeType' => 'text/xml', 'content' => false));
        if (is_wp_error($mContent)) {
            echo esc_html('Error - mContent : ' . $mContent->get_error_message());
            error_log(sprintf('*****WP Admin HumCORE Deposit Error***** - mContent : %1$s-%2$s', $mContent->get_error_code(), $mContent->get_error_message()));
        }
        $resource_Xml = create_resource_xml($aggregator_metadata, $resource_filetype);
        $rContent = $fedora_api->modify_datastream(array('pid' => $thesePids[1], 'dsID' => 'DC', 'mimeType' => 'text/xml', 'content' => $resource_Xml));
        if (is_wp_error($rContent)) {
            echo 'Error - rContent : ' . esc_html($rContent->get_error_message());
            error_log(sprintf('*****WP Admin HumCORE Deposit Error***** - rContent : %1$s-%2$s', $rContent->get_error_code(), $rContent->get_error_message()));
        }
        try {
            if (preg_match('~^audio/|^image/|^video/~', $check_resource_filetype['type'])) {
                $sResult = $solr_client->create_humcore_document('', $aggregator_metadata);
            } else {
                $sResult = $solr_client->create_humcore_extract($resource_fileloc, $aggregator_metadata);
            }
        } catch (Exception $e) {
            echo '<h3>', __('An error occurred while depositing your file!', 'humcore_domain'), '</h3>';
            error_log(sprintf('*****WP Admin HumCORE Deposit Error***** - solr : %1$s-%2$s', $e->getCode(), $e->getMessage()));
            return $post_id;
        }
        // Handle doi metadata changes.
        if (!empty($aggregator_metadata['deposit_doi'])) {
            $creators = array();
            foreach ($aggregator_metadata['authors'] as $author) {
                if ('author' === $author['role'] && !empty($author['fullname'])) {
                    $creators[] = $author['fullname'];
                }
            }
            $creator_list = implode(',', $creators);
            $eStatus = humcore_modify_handle($aggregator_metadata['deposit_doi'], $aggregator_metadata['title'], $creator_list, $aggregator_metadata['genre'], $aggregator_metadata['date_issued'], $aggregator_metadata['publisher']);
            if (false === $eStatus) {
                echo '<h3>', __('There was an EZID API error, the DOI was not sucessfully published.', 'humcore_domain'), '</h3><br />';
            }
        }
    }
    return $post_id;
}
Esempio n. 2
-1
/**
 * Prepare the metadata sent to Fedora and Solr from $_POST input.
 *
 * @param array $nextPids Array of fedora pids.
 * @return array metadata content
 */
function prepare_metadata($nextPids)
{
    global $fedora_api;
    /**
     * Prepare the metadata to be sent to Fedora and Solr.
     */
    $metadata = array();
    $metadata['id'] = $nextPids[0];
    $metadata['pid'] = $nextPids[0];
    $metadata['creator'] = 'HumCORE';
    $metadata['title'] = wp_strip_all_tags(stripslashes($_POST['deposit-title-unchanged']));
    $metadata['title_unchanged'] = wp_kses(stripslashes($_POST['deposit-title-unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $metadata['abstract'] = wp_strip_all_tags(stripslashes($_POST['deposit-abstract-unchanged']));
    $metadata['abstract_unchanged'] = wp_kses(stripslashes($_POST['deposit-abstract-unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $metadata['genre'] = sanitize_text_field($_POST['deposit-genre']);
    $metadata['committee_deposit'] = sanitize_text_field($_POST['deposit-on-behalf-flag']);
    $metadata['committee_id'] = sanitize_text_field($_POST['deposit-committee']);
    $metadata['submitter'] = bp_loggedin_user_id();
    /**
     * Get committee or author metadata.
     */
    if ('yes' === $metadata['committee_deposit']) {
        $committee = groups_get_group(array('group_id' => $metadata['committee_id']));
        $metadata['organization'] = 'MLA';
        $metadata['authors'][] = array('fullname' => $committee->name, 'given' => '', 'family' => '', 'uni' => $committee->slug, 'role' => 'creator', 'affiliation' => 'MLA');
    } else {
        $user_id = bp_loggedin_user_id();
        $user_firstname = get_the_author_meta('first_name', $user_id);
        $user_lastname = get_the_author_meta('last_name', $user_id);
        $user_affiliation = bp_get_profile_field_data(array('field' => 2, 'user_id' => $user_id));
        $metadata['organization'] = $user_affiliation;
        $metadata['authors'][] = array('fullname' => bp_get_loggedin_user_fullname(), 'given' => $user_firstname, 'family' => $user_lastname, 'uni' => bp_get_loggedin_user_username(), 'role' => 'author', 'affiliation' => $user_affiliation);
    }
    if ((empty($metadata['committee_deposit']) || 'yes' !== $metadata['committee_deposit']) && (!empty($_POST['deposit-other-authors-first-name']) && !empty($_POST['deposit-other-authors-last-name']))) {
        $other_authors = array_map(function ($first_name, $last_name) {
            return array('first_name' => sanitize_text_field($first_name), 'last_name' => sanitize_text_field($last_name));
        }, $_POST['deposit-other-authors-first-name'], $_POST['deposit-other-authors-last-name']);
        foreach ($other_authors as $author_array) {
            if (!empty($author_array['first_name']) && !empty($author_array['last_name'])) {
                $mla_user = bp_activity_find_mentions($author_array['first_name'] . $author_array['last_name']);
                if (!empty($mla_user)) {
                    foreach ($mla_user as $mla_userid => $mla_username) {
                        break;
                    }
                    // Only one, right?
                    $author_name = bp_core_get_user_displayname($mla_userid);
                    $author_firstname = get_the_author_meta('first_name', $mla_userid);
                    $author_lastname = get_the_author_meta('last_name', $mla_userid);
                    $author_affiliation = bp_get_profile_field_data(array('field' => 2, 'user_id' => $mla_userid));
                    $author_uni = $mla_username;
                } else {
                    $author_firstname = $author_array['first_name'];
                    $author_lastname = $author_array['last_name'];
                    $author_name = trim($author_firstname . ' ' . $author_lastname);
                    $author_uni = '';
                    $author_affiliation = '';
                }
                $metadata['authors'][] = array('fullname' => $author_name, 'given' => $author_firstname, 'family' => $author_lastname, 'uni' => $author_uni, 'role' => 'author', 'affiliation' => $author_affiliation);
            }
        }
    }
    usort($metadata['authors'], function ($a, $b) {
        return strcasecmp($a['family'], $b['family']);
    });
    /**
     * Format author info for solr.
     */
    $metadata['author_info'] = humcore_deposits_format_author_info($metadata['authors']);
    if (!empty($metadata['genre']) && in_array($metadata['genre'], array('Dissertation', 'Technical Report', 'Thesis')) && !empty($_POST['deposit-institution'])) {
        $metadata['institution'] = sanitize_text_field($_POST['deposit-institution']);
    } else {
        if (!empty($metadata['genre']) && in_array($metadata['genre'], array('Dissertation', 'Technical Report', 'Thesis')) && empty($_POST['deposit-institution'])) {
            $metadata['institution'] = $metadata['organization'];
        }
    }
    if (!empty($metadata['genre']) && ('Conference proceeding' == $metadata['genre'] || 'Conference paper' == $metadata['genre']) && !empty($_POST['deposit-conference-title'])) {
        $metadata['conference_title'] = sanitize_text_field($_POST['deposit-conference-title']);
        $metadata['conference_organization'] = sanitize_text_field($_POST['deposit-organization']);
    }
    $metadata['group'] = array();
    if (!empty($_POST['deposit-group'])) {
        foreach ($_POST['deposit-group'] as $group_id) {
            $group = groups_get_group(array('group_id' => sanitize_text_field($group_id)));
            $metadata['group'][] = $group->name;
            $metadata['group_ids'][] = $group_id;
        }
    }
    $metadata['subject'] = array();
    if (!empty($_POST['deposit-subject'])) {
        foreach ($_POST['deposit-subject'] as $subject) {
            $metadata['subject'][] = sanitize_text_field(stripslashes($subject));
            // Subject ids will be set later.
        }
    }
    $metadata['keyword'] = array();
    if (!empty($_POST['deposit-keyword'])) {
        foreach ($_POST['deposit-keyword'] as $keyword) {
            $metadata['keyword'][] = sanitize_text_field(stripslashes($keyword));
            // Keyword ids will be set later.
        }
    }
    $metadata['type_of_resource'] = sanitize_text_field($_POST['deposit-resource-type']);
    $metadata['language'] = 'English';
    $metadata['notes'] = sanitize_text_field(stripslashes($_POST['deposit-notes-unchanged']));
    // Where do they go in MODS?
    $metadata['notes_unchanged'] = wp_kses(stripslashes($_POST['deposit-notes-unchanged']), array('b' => array(), 'em' => array(), 'strong' => array()));
    $metadata['type_of_license'] = sanitize_text_field($_POST['deposit-license-type']);
    $metadata['record_content_source'] = 'HumCORE';
    $metadata['record_creation_date'] = gmdate('Y-m-d\\TH:i:s\\Z');
    $metadata['member_of'] = $fedora_api->collectionPid;
    if (!empty($_POST['deposit-publication-type'])) {
        $metadata['publication-type'] = sanitize_text_field($_POST['deposit-publication-type']);
        // Not stored in solr.
    } else {
        $metadata['publication-type'] = 'none';
    }
    if ('journal-article' == $metadata['publication-type']) {
        $metadata['publisher'] = sanitize_text_field($_POST['deposit-journal-publisher']);
        $metadata['date'] = sanitize_text_field($_POST['deposit-journal-publish-date']);
        if (!empty($metadata['date'])) {
            $temp_date = preg_replace('~^(winter(?:/|)|spring(?:/|)|summer(?:/|)|fall(?:/|)|autumn(?:/|))+\\s(\\d{4})$~i', 'Jan $2', $metadata['date']);
            $metadata['date_issued'] = date('Y', strtotime(preg_replace('/^(\\d{4})$/', 'Jan $1', $temp_date)));
        } else {
            $metadata['date_issued'] = date('Y', strtotime('today'));
        }
        $metadata['book_journal_title'] = sanitize_text_field($_POST['deposit-journal-title']);
        $metadata['volume'] = sanitize_text_field($_POST['deposit-journal-volume']);
        $metadata['issue'] = sanitize_text_field($_POST['deposit-journal-issue']);
        $metadata['start_page'] = sanitize_text_field($_POST['deposit-journal-start-page']);
        $metadata['end_page'] = sanitize_text_field($_POST['deposit-journal-end-page']);
        $metadata['issn'] = sanitize_text_field($_POST['deposit-journal-issn']);
        $metadata['doi'] = sanitize_text_field($_POST['deposit-journal-doi']);
    } elseif ('book' == $metadata['publication-type']) {
        $metadata['publisher'] = sanitize_text_field($_POST['deposit-book-publisher']);
        $metadata['date'] = sanitize_text_field($_POST['deposit-book-publish-date']);
        if (!empty($metadata['date'])) {
            $temp_date = preg_replace('~^(winter(?:/|)|spring(?:/|)|summer(?:/|)|fall(?:/|)|autumn(?:/|))+\\s(\\d{4})$~i', 'Jan $2', $metadata['date']);
            $metadata['date_issued'] = date('Y', strtotime(preg_replace('/^(\\d{4})$/', 'Jan $1', $temp_date)));
        } else {
            $metadata['date_issued'] = date('Y', strtotime('today'));
        }
        $metadata['book_journal_title'] = sanitize_text_field($_POST['deposit-book-title']);
        $metadata['book_author'] = sanitize_text_field($_POST['deposit-book-author']);
        $metadata['chapter'] = sanitize_text_field($_POST['deposit-book-chapter']);
        $metadata['start_page'] = sanitize_text_field($_POST['deposit-book-start-page']);
        $metadata['end_page'] = sanitize_text_field($_POST['deposit-book-end-page']);
        $metadata['isbn'] = sanitize_text_field($_POST['deposit-book-isbn']);
        $metadata['doi'] = sanitize_text_field($_POST['deposit-book-doi']);
    } elseif ('conference-proceeding' == $metadata['publication-type']) {
        $metadata['publisher'] = sanitize_text_field($_POST['deposit-proceeding-publisher']);
        $metadata['date'] = sanitize_text_field($_POST['deposit-proceeding-publish-date']);
        if (!empty($metadata['date'])) {
            $temp_date = preg_replace('~^(winter(?:/|)|spring(?:/|)|summer(?:/|)|fall(?:/|)|autumn(?:/|))+\\s(\\d{4})$~i', 'Jan $2', $metadata['date']);
            $metadata['date_issued'] = date('Y', strtotime(preg_replace('/^(\\d{4})$/', 'Jan $1', $temp_date)));
        } else {
            $metadata['date_issued'] = date('Y', strtotime('today'));
        }
        $metadata['book_journal_title'] = sanitize_text_field($_POST['deposit-proceeding-title']);
        $metadata['start_page'] = sanitize_text_field($_POST['deposit-proceeding-start-page']);
        $metadata['end_page'] = sanitize_text_field($_POST['deposit-proceeding-end-page']);
        $metadata['doi'] = sanitize_text_field($_POST['deposit-proceeding-doi']);
    } elseif ('none' == $metadata['publication-type']) {
        $metadata['date'] = sanitize_text_field($_POST['deposit-non-published-date']);
        if (!empty($metadata['date'])) {
            $temp_date = preg_replace('~^(winter(?:/|)|spring(?:/|)|summer(?:/|)|fall(?:/|)|autumn(?:/|))+\\s(\\d{4})$~i', 'Jan $2', $metadata['date']);
            $metadata['date_issued'] = date('Y', strtotime(preg_replace('/^(\\d{4})$/', 'Jan $1', $temp_date)));
        } else {
            $metadata['date_issued'] = date('Y', strtotime('today'));
        }
    }
    /**
     * Mint and reserve a DOI.
     */
    $creators = array();
    foreach ($metadata['authors'] as $author) {
        if ('author' === $author['role'] && !empty($author['fullname'])) {
            $creators[] = $author['fullname'];
        }
    }
    $creator_list = implode(',', $creators);
    $deposit_doi = humcore_create_handle($metadata['title'], $nextPids[0], $creator_list, $metadata['genre'], $metadata['date_issued'], $metadata['publisher']);
    if (!$deposit_doi) {
        $metadata['handle'] = sprintf(bp_get_root_domain() . '/deposits/item/%s/', $nextPids[0]);
        $metadata['deposit_doi'] = '';
        // Not stored in solr.
    } else {
        $metadata['handle'] = 'http://dx.doi.org/' . str_replace('doi:', '', $deposit_doi);
        $metadata['deposit_doi'] = $deposit_doi;
        // Not stored in solr.
    }
    return $metadata;
}