function tripal_pub_add_authors

2.x tripal_pub.pub_importers.inc tripal_pub_add_authors($pub_id, $authors, $do_contact)
3.x tripal_chado.pub_importers.inc tripal_pub_add_authors($pub_id, $authors, $do_contact)
1.x tripal_pub.api.inc tripal_pub_add_authors($pub_id, $authors, $do_contact)

Add one or more authors to a publication

Parameters

$pub_id: The publication ID of the pub in Chado.

$authors: An array of authors. Each author should have a set of keys/value pairs describing the author.

$do_contact: Optional. Set to TRUE if a contact entry should be added to the Chado contact table for authors of the publication.

Related topics

1 call to tripal_pub_add_authors()
tripal_pub_add_publication in tripal_pub/includes/tripal_pub.pub_importers.inc
Adds a new publication to the Chado, along with all properties and database cross-references. If the publication does not already exist in Chado then it is added. If it does exist nothing is done. If the $update parameter is TRUE then theā€¦

File

tripal_pub/includes/tripal_pub.pub_importers.inc, line 1193
Management of importers

Code

function tripal_pub_add_authors($pub_id, $authors, $do_contact) {
  $rank = 0;

  // first remove any of the existing pubauthor entires
  $sql = "DELETE FROM {pubauthor} WHERE pub_id = :pub_id";
  chado_query($sql, array(':pub_id' => $pub_id));

  // iterate through the authors and add them to the pubauthors and contact
  // tables of chado, then link them through the custom pubauthors_contact table
  foreach ($authors as $author) {
    // skip invalid author entires
    if (isset($author['valid']) AND $author['valid'] == 'N') {
      continue;
    }
    // remove the 'valid' property as we don't have a CV term for it
    unset($author['valid']);

    // construct the contact.name field using the author information
    $name = '';
    $type = 'Person';
    if (isset($author['Given Name'])) {
      $name .= $author['Given Name'];
    }
    if (isset($author['Surname'])) {
      $name .= ' ' . $author['Surname'];
    }
    if (isset($author['Suffix'])) {
      $name .= ' ' . $author['Suffix'];
    }
    if (isset($author['Collective'])) {
      $name = $author['Collective'];
      $type = 'Collective';
    }
    $name = trim($name);

    // add an entry to the pubauthors table
    $values = array(
      'pub_id' => $pub_id,
      'rank' => $rank,
      'surname' => $author['Surname'] ? substr($author['Surname'], 0, 100) : substr($author['Collective'], 0, 100),
      'givennames' => $author['Given Name'],
      'suffix' => $author['Suffix'],
    );
    $options = array('statement_name' => 'ins_pubauthor_idrasugisu');
    $pubauthor = chado_insert_record('pubauthor', $values, $options);

    // if the user wants us to create a contact for each author then do it.
    if ($do_contact) {
      // Add the contact
      $contact = tripal_insert_contact(array(
        'name' => $name,
        'description' => '',
        'type_name' => $type,
        'properties' => $author
      ));

      // if we have succesfully added the contact and the pubauthor entries then we want to
      // link them together
      if ($contact and $pubauthor) {

        // link the pubauthor entry to the contact
        $values = array(
          'pubauthor_id' => $pubauthor['pubauthor_id'],
          'contact_id' => $contact['contact_id'],
        );
        $options = array('statement_name' => 'ins_pubauthorcontact_puco');
        $pubauthor_contact = chado_insert_record('pubauthor_contact', $values, $options);
        if (!$pubauthor_contact) {
          tripal_report_error('tripal_pub', TRIPAL_ERROR, "Cannot link pub authro and contact.", array());
        }
      }
    }
    $rank++;
  }
}