function tripal_pub_get_publication_array

2.x tripal_pub.pub_importers.inc tripal_pub_get_publication_array($pub_id, $skip_existing = TRUE)
3.x tripal_chado.pub_importers.inc tripal_pub_get_publication_array($pub_id, $skip_existing = TRUE)
1.x tripal_pub.api.inc tripal_pub_get_publication_array($pub_id, $skip_existing = TRUE)
1 call to tripal_pub_get_publication_array()

File

tripal_pub/api/tripal_pub.api.inc, line 995
The Tripal Pub API

Code

function tripal_pub_get_publication_array($pub_id, $skip_existing = TRUE) {

  $options = array('return_array' => 1);

  // ---------------------------------
  // get the publication
  // ---------------------------------
  $values = array('pub_id' => $pub_id);
  $pub = tripal_core_generate_chado_var('pub', $values);

  // expand the title
  $pub = tripal_core_expand_chado_vars($pub, 'field', 'pub.title');
  $pub = tripal_core_expand_chado_vars($pub, 'field', 'pub.volumetitle');
  $pub = tripal_core_expand_chado_vars($pub, 'field', 'pub.uniquename');
  $pub_array = array();
  if (trim($pub->title)) {
    $pub_array['Title'] = $pub->title;
  }
  if (trim($pub->volumetitle)) {
    $pub_array['Volume Title'] = $pub->volumetitle;
  }
  if (trim($pub->volume)) {
    $pub_array['Volume'] = $pub->volume;
  }
  if (trim($pub->series_name)) {
    $pub_array['Series Name'] = $pub->series_name;
  }
  if (trim($pub->issue)) {
    $pub_array['Issue'] = $pub->issue;
  }
  if (trim($pub->pyear)) {
    $pub_array['Year'] = $pub->pyear;
  }
  if (trim($pub->pages)) {
    $pub_array['Pages'] = $pub->pages;
  }
  if (trim($pub->miniref)) {
    $pub_array['Mini Ref'] = $pub->miniref;
  }
  if (trim($pub->uniquename)) {
    $pub_array['Uniquename'] = $pub->uniquename;
  }
  $pub_array['Publication Type'][] = $pub->type_id->name;

  // ---------------------------------
  // get the citation
  // ---------------------------------
  $values = array(
    'pub_id' => $pub->pub_id,
    'type_id' => array(
      'name' => 'Citation',
    ),
  );
  $citation = tripal_core_generate_chado_var('pubprop', $values);
  if ($citation) {
    $citation = tripal_core_expand_chado_vars($citation, 'field', 'pubprop.value', $options);
    if (count($citation) > 1) {
      watchdog('tripal_pub', "Publication has multiple citations already: %pub_id", 
      array('%pub_id' => $pubid), WATCHDOG_ERROR);
      return FALSE;
    }
    elseif (count($citation) == 1 and $skip_existing == TRUE) {
      // skip this publication, it already has a citation
      return FALSE;
    }
  }

  // ---------------------------------
  // get the publication types
  // ---------------------------------
  $values = array(
    'pub_id' => $pub->pub_id,
    'type_id' => array(
      'name' => 'Publication Type',
    ),
  );
  $ptypes = tripal_core_generate_chado_var('pubprop', $values, $options);
  if ($ptypes) {
    $ptypes = tripal_core_expand_chado_vars($ptypes, 'field', 'pubprop.value', $options);
    foreach ($ptypes as $ptype) {
      $pub_array['Publication Type'][] = $ptype->value;
    }
  }

  // ---------------------------------
  // get the authors list
  // ---------------------------------
  $values = array(
    'pub_id' => $pub->pub_id,
    'type_id' => array(
      'name' => 'Authors',
    ),
  );
  $authors = tripal_core_generate_chado_var('pubprop', $values);
  $authors = tripal_core_expand_chado_vars($authors, 'field', 'pubprop.value', $options);
  if (count($authors) > 1) {
    watchdog('tripal_pub', "Publication has multiple author lists. It should have only one list: %pub_id", 
    array('%pub_id' => $pubid), WATCHDOG_ERROR);
    return FALSE;
  }
  else if (trim($authors->value)) {
    $pub_array['Authors'] = $authors->value;
  }
  // if there is no 'Author's property then try to retreive authors from the pubauthor table
  else {
    $sql = "SELECT string_agg(surname || ' ' || givennames, ', ') FROM {pubauthor} WHERE pub_id = %d GROUP BY pub_id";
    $au = db_result(chado_query($sql));
    if ($au) {
      $pub_array['Authors'] = $au;
    }
  }

  //Get other props
  $props = array(
    'Journal Abbreviation',
    'Elocation',
    'Media Code',
    'Conference Name',
    'Keywords',
    'Series Name',
    'pISSN',
    'Publication Date',
    'Journal Code',
    'Journal Alias',
    'Journal Country',
    'Published Location',
    'Publication Model',
    'Language Abbr',
    'Alias',
    'Publication Dbxref',
    'Copyright',
    'Abstract',
    'Notes',
    'Citation',
    'Language',
    'URL',
    'eISSN',
    'DOI',
    'ISSN',
    'Publication Code',
    'Comments',
    'Publisher',
    'Media Alias',
    'Original Title');
  foreach ($props as $prop) {
    $sql =
      "SELECT value FROM {pubprop} 
       WHERE type_id = (SELECT cvterm_id FROM {cvterm} WHERE name = '%s' AND cv_id = (SELECT cv_id FROM cv WHERE name = 'tripal_pub')) 
       AND pub_id = %d";
    $val = trim(db_result(chado_query($sql, $prop, $pub->pub_id)));
    if ($val) {
      $pub_array[$prop] = $val;
    }
  }
  return $pub_array;
}