Browse Source

updated functions for creating publication citations

spficklin 11 years ago
parent
commit
57290db0b5
2 changed files with 535 additions and 24 deletions
  1. 163 24
      tripal_pub/api/tripal_pub.api.inc
  2. 372 0
      tripal_pub/tripal_pub.views.inc

+ 163 - 24
tripal_pub/api/tripal_pub.api.inc

@@ -953,35 +953,174 @@ function tripal_pub_delete_property($pub_id, $property) {
   return tripal_core_delete_property('pub', $pub_id, $property, 'tripal_pub');
 }
 
-/*
- *
+
+
+/**
+ * This function generates an array suitable for use with the 
+ * tripal_pub_create_citation function for any publication
+ * already stored in the Chado tables.
+ *  
+ * @param $pub_id
+ *   The publication ID
+ * @param $skip_existing
+ *   Set to TRUE to skip publications that already have a citation
+ *   in the pubprop table.  Set to FALSE to generate a citation 
+ *   regardless if the citation already exists.
+ *   
+ * @return
+ *   An array suitable for the trpial_pub_create_citation function. On
+ *   failure returns FALSE.
  */
-function tripal_pub_create_citation($pub) {
-  $citation = $pub['Authors'] . '. ' . $pub['Title'] .  '. ';
 
-  if ($pub['Journal Name']) {
-    $citation .= $pub['Journal Name'] . '. ';
-  }
-  elseif ($pub['Journal Abbreviation']) {
-    $citation .= $pub['Journal Abbreviation'] . '. ';
-  }
-  $citation .= $pub['Publication Date'];
-  if ($pub['Volume'] or $pub['Issue'] or $pub['Pages']) {
-    $citation .= '; ';
+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', $options);
+
+  // ---------------------------------
+  // get the citation
+  // ---------------------------------
+	$values = array(
+	  'pub_id' => $pub->pub_id, 
+	  'type_id' => array(
+	    'name' => 'Citation',
+	  ),
+	);
+	$citation = tripal_core_generate_chado_var('pubprop', $values); 
+	$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;
   }
-  if ($pub['Volume']) {
-    $citation .= $pub['Volume'];
+  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); 
+  $ptypes = tripal_core_expand_chado_vars($ptypes, 'field', 'pubprop.value', $options);
+  $found_type = 0;
+  foreach ($ptypes as $ptype) {
+    if($ptype->value == 'Journal Article') { 
+      $pub['Publication Type'] = 'Journal Article';   
+      $found_type = 1;  
+    }
+    if($ptype->value == 'Book') {
+    	$pub['Publication Type'] = 'Book';
+      $found_type = 1;
+    }
+    if($ptype->value == 'Book Chapter') {
+    	$pub['Publication Type'] = 'Book Chapter';
+      $found_type = 1;
+    }    
+    if($ptype->value == 'Conference Proceedings') {
+    	$pub['Publication Type'] = 'Conference Proceedings';
+      $found_type = 1;
+    }
   }
-  if ($pub['Issue']) {
-    $citation .= '(' . $pub['Issue'] . ')';
+  if (!$found_type) {
+    watchdog('tripal_pub', "Publication type is not yet handled for creating citations: %pub_id", 
+      array('%pub_id' => $pub_id), WATCHDOG_ERROR);
+    return FALSE;
+  }  
+
+  // ---------------------------------
+  // 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;
   }
-  if ($pub['Pages']) {
-    if($pub['Volume']) {
-      $citation .= ':';
-    }
-    $citation .= $pub['Pages'];
+  else {
+    $pub['Authors'] = $authors->value;
   }
-  $citation .= '.';
+  
+  // if there is no 'Author's property then try to retreive authors from the pubauthor table
 
-  return $citation;
+  
+  return $pub;
+  
 }
+
+
+/**
+ * This function generates citations for publications.  It requires
+ * an array structure with keys being the terms in the Tripal
+ * publication ontology.  This function is intended to be used
+ * for any function that needs to generate a citation. 
+ * 
+ * @param $pub
+ *   An array structure containing publication details where the keys
+ *   are the publication ontology term names and values are the 
+ *   corresponding details.
+ * @param $type
+ *   The type of publication. Supported types include
+ *   'Journal Article', 'Book', 'Book Chapter', 
+ *   'Conference Proceedings',
+ * @return
+ *   A text string containing the citation
+ */
+function tripal_pub_create_citation($pub, $type = 'Journal Article') {
+	$citation = '';
+	
+	if ($type == 'Journal Article') {
+	  $citation = $pub['Authors'] . '. ' . $pub['Title'] .  '. ';
+	
+	  if ($pub['Journal Name']) {
+	    $citation .= $pub['Journal Name'] . '. ';
+	  }
+	  elseif ($pub['Journal Abbreviation']) {
+	    $citation .= $pub['Journal Abbreviation'] . '. ';
+	  }
+	  $citation .= $pub['Publication Date'];
+	  if ($pub['Volume'] or $pub['Issue'] or $pub['Pages']) {
+	    $citation .= '; ';
+	  }
+	  if ($pub['Volume']) {
+	    $citation .= $pub['Volume'];
+	  }
+	  if ($pub['Issue']) {
+	    $citation .= '(' . $pub['Issue'] . ')';
+	  }
+	  if ($pub['Pages']) {
+	    if($pub['Volume']) {
+	      $citation .= ':';
+	    }
+	    $citation .= $pub['Pages'];
+	  }
+	  $citation .= '.';
+	}
+	if ($type == 'Book') {
+	
+	}
+
+  return $citation;
+}

+ 372 - 0
tripal_pub/tripal_pub.views.inc

@@ -10,3 +10,375 @@
  *  http://views2.logrus.com/doc/html/index.html.
  */
 
+/**
+ *
+ * @ingroup tripal_pub_views
+ */
+function tripal_pub_views_default_views() {
+  $views = array();
+
+  if (!module_exists('tripal_views')) {
+    return $views;
+  }
+
+  // Main default view
+  $view = new view;
+  $view->name = 'pub_listing';
+  $view->description = 'This view lists all pubs by default.';
+  $view->tag = 'chado default';
+  $view->base_table = 'pub';
+  $view->core = 0;
+  $view->api_version = '2';
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+  $handler = $view->new_display('default', 'Defaults', 'default');
+  $handler->override_option('fields', array(
+    'title' => array(
+      'label' => 'Title',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'link_to_node' => 1,
+      'exclude' => 0,
+      'id' => 'title',
+      'table' => 'pub',
+      'field' => 'title',
+      'relationship' => 'none',
+    ),
+    'pyear' => array(
+      'label' => 'Year',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'name',
+      'table' => 'pub',
+      'field' => 'pyear',
+      'relationship' => 'none',
+    ),
+    'type' => array(
+      'label' => 'Type',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'type',
+      'table' => 'cvterm',
+      'field' => 'name',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('sorts', array(
+    'pyear' => array(
+      'order' => 'ASC',
+      'id' => 'year',
+      'table' => 'pub',
+      'field' => 'pyear',
+      'relationship' => 'none',
+    ),
+    'title' => array(
+      'order' => 'ASC',
+      'id' => 'title',
+      'table' => 'pub',
+      'field' => 'title',
+      'relationship' => 'none',
+    ),
+    'type' => array(
+      'order' => 'ASC',
+      'id' => 'type',
+      'table' => 'cvterm',
+      'field' => 'name',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('filters', array(
+    'search_results' => array(
+      'operator' => '=',
+      'value' => '',
+      'group' => '0',
+      'exposed' => FALSE,
+      'expose' => array(
+        'operator' => FALSE,
+        'label' => '',
+      ),
+      'id' => 'search_results',
+      'table' => 'views',
+      'field' => 'search_results',
+      'relationship' => 'none',
+      'apply_button' => 'Show',
+      'no_results_text' => 'Click "Show" to see a list of all pubs matching the entered criteria. If you leave a any of the criteria blank then the pubs will be not be filtered based on that field. Furthermore, if you leave all criteria blank then all pubs will be listed.',
+    ),
+    'title' => array(
+      'operator' => '=',
+      'value' => array(),
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'title_op',
+        'identifier' => 'pub_title',
+        'label' => 'Title',
+        'remember' => 0,
+      ),
+      'case' => 1,
+      'id' => 'title',
+      'table' => 'pub',
+      'field' => 'title',
+      'relationship' => 'none',
+    ),
+    'type_id' => array(
+      'operator' => '=',
+      'value' => '',
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'type_id_op',
+        'identifier' => 'type_id',
+        'label' => 'Type',
+        'remember' => 0,
+      ),
+      'case' => 1,
+      'id' => 'type_id',
+      'table' => 'pub',
+      'field' => 'type_id',
+      'relationship' => 'none',
+      'values_form_type' => 'select',
+      'multiple' => 1,
+      'optional' => 0,
+      'show_all' => 0,
+      'agg' => array(
+        'records_with' => 1,
+        'aggregates_with' => 1,
+      ),
+    ),
+    'year' => array(
+      'operator' => '=',
+      'value' => '',
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'name_op',
+        'identifier' => 'name',
+        'label' => 'Name Contains',
+        'remember' => 0,
+      ),
+      'case' => 0,
+      'id' => 'name',
+      'table' => 'pub',
+      'field' => 'name',
+      'relationship' => 'none',
+      'values_form_type' => 'select',
+      'multiple' => 1,
+      'optional' => 0,
+      'show_all' => 0,
+      'agg' => array(
+        'records_with' => 1,
+        'aggregates_with' => 1,
+      ),
+    ),
+  ));
+  $handler->override_option('access', array(
+    'type' => 'perm',
+    'perm' => 'access chado_pub content',
+  ));
+  $handler->override_option('cache', array(
+    'type' => 'none',
+  ));
+  $handler->override_option('title', 'Publications');
+  $handler->override_option('header', 'Click "Show" to see a list of all publications matching the entered criteria. If you leave a any of the criteria blank then the pubs will be not be filtered based on that field. Furthermore, if you leave all criteria blank then all publications will be listed.');
+  $handler->override_option('header_format', '2');
+  $handler->override_option('header_empty', 0);
+  $handler->override_option('empty', 'No publications match the supplied criteria.');
+  $handler->override_option('empty_format', '1');
+  $handler->override_option('items_per_page', 50);
+  $handler->override_option('use_pager', '1');
+  $handler->override_option('style_plugin', 'table');
+  $handler->override_option('style_options', array(
+    'grouping' => '',
+    'override' => 1,
+    'sticky' => 0,
+    'order' => 'asc',
+    'columns' => array(
+      'title' => 'title',
+      'pyear' => 'pyear',
+      'type' => 'type',
+      'all_dbxref' => 'all_dbxref',
+      'all_properties' => 'all_properties',
+      'all_relationships' => 'all_relationships',
+    ),
+    'info' => array(
+      'title' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'type' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'pyear' => array(
+        'sortable' => 1,
+        'separator' => '',
+      ),
+      'all_dbxref' => array(
+        'separator' => '',
+      ),
+      'all_properties' => array(
+        'separator' => '',
+      ),
+      'all_relationships' => array(
+        'separator' => '',
+      ),
+    ),
+    'default' => '-1',
+  ));
+  $default_handler = $handler;
+  $handler = $view->new_display('page', 'Page', 'page_1');
+  $handler->override_option('path', 'chado/pubs');
+  $handler->override_option('menu', array(
+    'type' => 'normal',
+    'title' => 'Publications',
+    'description' => 'A published article, book, conference proceeding, etc.',
+    'weight' => '10',
+    'name' => 'navigation',
+  ));
+  $handler->override_option('tab_options', array(
+    'type' => 'none',
+    'title' => '',
+    'description' => '',
+    'weight' => 0,
+    'name' => 'navigation',
+  ));
+  // Add code specific to a local chado installation
+  // NOTE: Edit $handler above to $default_handler for the default display
+  if (tripal_core_chado_schema_exists()) {
+    // Add nid field
+    $fields = $view->get_items('field', 'default');
+    $new_fields = array(
+      'nid' => array(
+        'label' => 'Nid',
+        'alter' => array(
+          'alter_text' => 0,
+          'text' => '',
+          'make_link' => 0,
+          'path' => '',
+          'absolute' => 0,
+          'link_class' => '',
+          'alt' => '',
+          'rel' => '',
+          'prefix' => '',
+          'suffix' => '',
+          'target' => '',
+          'help' => '',
+          'trim' => 0,
+          'max_length' => '',
+          'word_boundary' => 1,
+          'ellipsis' => 1,
+          'html' => 0,
+          'strip_tags' => 0,
+        ),
+        'empty' => '',
+        'hide_empty' => 0,
+        'empty_zero' => 0,
+        'hide_alter_empty' => 1,
+        'link_to_node' => 0,
+        'exclude' => 1,
+        'id' => 'nid',
+        'table' => 'node',
+        'field' => 'nid',
+        'relationship' => 'none',
+      )
+    );
+    $fields = $new_fields + $fields;
+    // Change analysis.name to have a link to the node
+    $fields['name_2']['alter']['link_to_node'] = 1;
+    $default_handler->override_option('fields', $fields);
+    // Adds pub => Node relationship
+    $default_handler->override_option('relationships', array(
+      'nid' => array(
+        'label' => 'Publication to Node',
+        'required' => 0,
+        'id' => 'nid',
+        'table' => 'chado_pub',
+        'field' => 'nid',
+        'relationship' => 'none',
+      ),
+    ));
+    // Only show records with published nodes
+    /**
+    $filters = $view->get_items('filter', 'default');
+    $filters['status'] = array(
+      'operator' => '=',
+      'value' => '1',
+      'group' => '0',
+      'exposed' => FALSE,
+      'expose' => array(
+        'operator' => FALSE,
+        'label' => '',
+      ),
+      'id' => 'status',
+      'table' => 'node',
+      'field' => 'status',
+      'relationship' => 'none',
+    );
+    $default_handler->override_option('filters', $filters);
+    */
+  }
+  $views[$view->name] = $view;
+
+  return $views;
+}