Browse Source

Oops forgot to add the new pub_form.inc file

spficklin 12 years ago
parent
commit
97a17838bf
1 changed files with 380 additions and 0 deletions
  1. 380 0
      tripal_pub/includes/pub_form.inc

+ 380 - 0
tripal_pub/includes/pub_form.inc

@@ -0,0 +1,380 @@
+<?php 
+
+/**
+ * Because we are using AJAX with a node form we need to provide a callback
+ * for the chado_pub node form.  This callback is different from the 
+ * default 'chado_pub_form' callback
+ */
+function tripal_pub_forms($form_id, $args) {
+  $forms = array();
+  if($form_id == 'chado_pub_node_form') {
+    $forms[$form_id] = array(
+      'callback' => 'chado_pub_node_form',
+      'callback arguments' => array($args)
+    );
+  }
+  return $forms;
+}
+
+/**
+ * This is the chado_pub node form callback. The arguments
+ * are out of order from a typical form because it's a defined callback 
+ */
+function chado_pub_node_form($form_state, $node) {   
+  tripal_core_ahah_init_form();
+  $form = array();
+
+  $type = node_get_types('type', $node);
+  $pub = $node->pub;
+  
+  $pub_id = $pub->pub_id;
+  
+  $d_title        = $form_state['values']['title']        ? $form_state['values']['title']       : $pub->title;
+  $d_uniquename   = $form_state['values']['uniquename']   ? $form_state['values']['uniquename']  : $pub->uniquename;
+  $d_type_id      = $form_state['values']['type_id']      ? $form_state['values']['type_id']     : $pub->type_id->cvterm_id;
+  $d_volume       = $form_state['values']['volume']       ? $form_state['values']['volume']      : $pub->volume;
+  $d_volumetitle  = $form_state['values']['volumetitle']  ? $form_state['values']['volumetitle'] : $pub->volumetitle;
+  $d_series_name  = $form_state['values']['series_name']  ? $form_state['values']['series_name'] : $pub->series_name;
+  $d_issue        = $form_state['values']['issue']        ? $form_state['values']['issue']       : $pub->issue;
+  $d_pyear        = $form_state['values']['pyear']        ? $form_state['values']['pyear']       : $pub->pyear;
+  $d_pages        = $form_state['values']['pages']        ? $form_state['values']['pages']       : $pub->pages;
+  $d_miniref      = $form_state['values']['miniref']      ? $form_state['values']['miniref']     : $pub->miniref;
+  $d_publisher    = $form_state['values']['publisher']    ? $form_state['values']['publisher']   : $pub->publisher;
+  $d_pubplace     = $form_state['values']['pubplace']     ? $form_state['values']['pubplace']    : $pub->pubplace;
+  $d_is_obsolete  = $form_state['values']['is_obsolete']  ? $form_state['values']['is_obsolete'] : $pub->is_obsolete;  
+  
+  // get the defaults first from the database and then from the form_state
+  $default_type = $pub->type_id->cvterm_id;
+
+  $form['pub_id'] = array(
+    '#type' => 'hidden',
+    '#value' => (isset($node->pub_id)) ? $node->pub_id->pub_id : NULL ,
+  );
+  
+  // get the list of publication types.  In the Tripal publication
+  // ontologies these are all grouped under the term 'Publication Type'
+  // we want the default to be 'Journal Article'
+  $sql = "
+    SELECT CVTS.cvterm_id, CVTS.name
+    FROM {cvtermpath} CVTP
+      INNER JOIN {cvterm} CVTS ON CVTP.subject_id = CVTS.cvterm_id
+      INNER JOIN {cvterm} CVTO ON CVTP.object_id = CVTO.cvterm_id
+      INNER JOIN {cv} ON CVTO.cv_id = CV.cv_id
+    WHERE CV.name = 'tripal_pub' and CVTO.name = 'Publication Type'
+    ORDER BY CVTS.name ASC 
+  ";
+  $results = chado_query($sql);
+  $pub_types = array();
+  while ($pub_type = db_fetch_object($results)) {
+    $pub_types[$pub_type->cvterm_id] = $pub_type->name;
+    // if we don't have a default type then set the default to be 'Journal Article'
+    if (strcmp($pub_type->name,"Journal Article") == 0 and !$d_type_id) {
+      $d_type_id = $pub_type->cvterm_id;
+    }
+  }
+  $form['type_id'] = array(
+    '#type' => 'select',
+    '#title' => t('Publication Type'),
+    '#options' => $pub_types,
+    '#required' => TRUE,
+    '#default_value' => $d_type_id,
+  );
+  
+  // Article Title.
+  $form['title'] = array(
+    '#type' => 'textfield',
+    '#title' => check_plain($type->title_label),
+    '#default_value' => $d_title,
+    '#required' => TRUE,
+  );
+  
+  $form['series_name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Series Name (e.g. Journal Name)'),
+    '#description' => t('Full name of (journal) series.'),
+    '#default_value' => $d_series_name,
+    '#required' => TRUE,
+  );
+  $form['pyear'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Publication Year'),
+    '#default_value' => $d_pyear,
+    '#required' => TRUE,
+  );
+  
+  $form['uniquename'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Citation'),
+    '#default_value' => $d_uniquename,
+    '#description' => t('All publications must have a unique citation. Please enter the full citation for this publication. 
+      For PubMed style citations list 
+      the last name of the author followed by initials. Each author should be separated by a comma. Next comes 
+      the title, followed by the series title (e.g. journal name), publication date (3 character Month, day, 4 
+      digit year), volume, issue and page numbers. You may also use HTML to provide a link in the citation.  
+      Below is an example: <pre>Medeiros PM, Ladio AH, Santos AM, Albuquerque UP. <a href="http://www.ncbi.nlm.nih.gov/pubmed/23462414" target="_blank">Does the selection of medicinal plants by Brazilian local populations 
+        suffer taxonomic influence?</a> J Ethnopharmacol. 2013 Apr 19; 146(3):842-52. PubMed PMID: 23462414</pre>'),
+    '#required' => TRUE,
+  );
+   
+  // get publication properties list and create the array that will be used for selecting a property type
+  $sql = "
+    SELECT CVTS.cvterm_id, CVTS.name
+    FROM {cvtermpath} CVTP
+      INNER JOIN {cvterm} CVTS ON CVTP.subject_id = CVTS.cvterm_id
+      INNER JOIN {cvterm} CVTO ON CVTP.object_id = CVTO.cvterm_id
+      INNER JOIN {cv} ON CVTO.cv_id = CV.cv_id
+    WHERE CV.name = 'tripal_pub' and CVTO.name = 'Publication Details'
+    ORDER BY CVTS.name ASC 
+  ";
+  $prop_types = chado_query($sql);  
+  $num_properties = 0;
+  $d_properties = array();  
+  $properties = array();  
+  while ($prop = db_fetch_object($prop_types)) {
+    $properties[$prop->cvterm_id] = $prop->name;
+    // if any of the properties match the fields in the pub table then we want to include those 
+    // automatically
+    if($prop->name == 'Volume' and $d_volume) {
+      $d_properties[$num_properties][0]['name'] =  $prop->name;     
+      $d_properties[$num_properties][0]['id'] = $prop->cvterm_id;
+      $d_properties[$num_properties][0]['value'] = $d_volume;
+      $num_properties++;
+    }
+    if($prop->name == 'Volume Title' and $d_volumetitle) {
+      $d_properties[$num_properties][0]['name'] =  $prop->name;
+      $d_properties[$num_properties][0]['id'] = $prop->cvterm_id;
+      $d_properties[$num_properties][0]['value'] = $d_volumetitle;
+      $num_properties++;
+    }
+    if($prop->name == 'Issue' and $d_issue) {
+      $d_properties[$num_properties][0]['name'] =  $prop->name;
+      $d_properties[$num_properties][0]['id'] = $prop->cvterm_id;
+      $d_properties[$num_properties][0]['value'] = $d_issue;
+      $num_properties++;
+    }
+    if($prop->name == 'Pages' and $d_pages) {
+      $d_properties[$num_properties][0]['name'] =  $prop->name;
+      $d_properties[$num_properties][0]['id'] = $prop->cvterm_id;
+      $d_properties[$num_properties][0]['value'] = $d_pages;
+      $num_properties++;
+    }
+  }
+  
+  // get the properties for this publication
+  if($pub_id) {
+    $sql = "
+      SELECT CVT.cvterm_id, CVT.name, PP.value, PP.rank
+      FROM {pubprop} PP
+        INNER JOIN {cvterm} CVT on CVT.cvterm_id = PP.type_id
+      WHERE PP.pub_id = %d
+      ORDER BY CVT.name, PP.rank
+    ";
+    $pub_props = chado_query($sql, $pub_id);
+    while ($prop = db_fetch_object($pub_props)) {
+      // skip properties that were handled above
+      if($prop->name == "Volume" or $prop->name == "Volume Title" or 
+         $prop->name == "Issue"  or $prop->name == "Pages" or
+         $prop->name == "Citation") {
+           continue;
+      }
+      // add new properties that weren't handled yet
+      if(array_key_exists($prop->cvterm_id, $properties)) {
+        $d_properties[$num_properties][$prop->rank]['name']  =  $prop->name;
+        $d_properties[$num_properties][$prop->rank]['id']    = $prop->cvterm_id;
+        $d_properties[$num_properties][$prop->rank]['value'] = $prop->value;
+        $num_properties++; 
+      }
+    }
+  }
+    
+  // build the fields for the properties  
+  for ($i = 0; $i < $num_properties; $i++) {
+    foreach ($d_properties[$i] as $rank => $d_property) {
+      $form['properties'][$i][$rank]["prop_id-$i-$rank"] = array(
+        '#type'          => 'select',
+        '#options'       => $properties,
+        '#default_value' => $d_property['id']
+      );
+      $rows = 2;
+      if  (preg_match('/Abstract/', $d_property['name'])) {
+        $rows = 10;
+      }
+      $form['properties'][$i][$rank]["prop_value-$i-$rank"] = array(
+        '#type'          => 'textarea',
+        '#options'       => $properties,
+        '#default_value' => $d_property['value'],
+        '#cols'          => 20,
+        '#rows'          => $rows
+      );
+      
+      $form['properties'][$i][$rank]["remove-$i-$rank"] = array(
+        '#type'         => 'image_button',
+        '#value'        => t('Remove'),
+        '#src'          => drupal_get_path('theme', 'tripal') . '/images/minus.png',
+        '#ahah' => array(
+          'path'    => "tripal_pub/properties/minus/$i",
+          'wrapper' => 'chado-pub-details',
+          'event'   => 'click',
+          'method'  => 'replace',
+        ), 
+        '#attributes' => array('onClick' => 'return false;'),
+      );
+      if($i == $num_properties - 1) {
+        $form['properties'][$i][$rank]["add-$i-$rank"] = array(
+          '#type'         => 'image_button',      
+          '#value'        => t('Add'),
+          '#src'          => drupal_get_path('theme', 'tripal') . '/images/add.png',
+          '#ahah' => array(
+            'path'    => "tripal_pub/properties/add/$i",
+            'wrapper' => 'chado-pub-details',
+            'event'   => 'click',
+            'method'  => 'replace',          
+          ),   
+          '#attributes' => array('onClick' => 'return false;'),
+        );
+      }
+    }
+  }
+  /*
+  $form['volume'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Volume'),
+    '#default_value' => $d_volume
+  );
+  
+  $form['issue'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Issue'),
+    '#default_value' => $d_issue
+  );
+
+  $form['pages'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Pages'),
+    '#description' => t('Page number range[s], e.g. 457--459, viii + 664pp, lv--lvii.'),
+    '#default_value' => $d_pages
+  );
+
+  $form['volumetitle'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Volume Title'),
+    '#description' => t('Title of part if one of a series.'),
+    '#default_value' => $d_volumetitle
+  );
+  $form['miniref'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Mini-Ref'),
+    '#required' => FALSE,
+    '#default_value' => $d_miniref
+  );
+
+  $form['publisher'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Publisher Name'),
+    '#required' => FALSE,
+    '#default_value' => $d_publisher
+  );
+
+  $form['pubplace'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Place of Publication'),
+    '#required' => FALSE,
+    '#default_value' => $d_pubplace
+  );
+  */
+  
+  $form['is_obsolete'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Is Obsolete? (Check for Yes)'),
+    '#required' => TRUE,
+    '#default_value' => $d_isobsolete
+  );
+  return $form;
+
+}
+/*
+ * 
+ */
+function theme_chado_pub_node_form($form) {
+  $rows = array();
+  if ($form['properties']) {
+    foreach ($form['properties'] as $i => $ranks) {
+      if (is_numeric($i)) {    
+        foreach ($ranks as $rank => $elements) {
+          if (is_numeric($rank)) {          
+            $rows[] = array(  
+              array('data' => drupal_render($elements["prop_id-$i-$rank"]), 'width' => '20%'),    
+              drupal_render($elements["prop_value-$i-$rank"]),
+              array('data' => drupal_render($elements["add-$i-$rank"]) . drupal_render($elements["remove-$i-$rank"]), 'width' => '5%'),
+            );
+          }
+        }
+      }
+    } 
+  }
+  $headers = array('Property Type','Value', '');
+  
+  $markup = '<div id="chado-pub-details">';
+  $markup .= drupal_render($form['pub_id']);
+  $markup .= drupal_render($form['title']);
+  $markup .= drupal_render($form['type_id']);
+  $markup .= drupal_render($form['series_name']);
+  $markup .= drupal_render($form['pyear']);
+  $markup .= drupal_render($form['uniquename']);
+  $markup .= "<b>Include Additional Details</b>";
+  $markup .= theme('table', $headers, $rows);
+  $markup .= "</div>";
+  
+  $form['properties'] = array(
+    '#type' => 'markup',
+    '#value' =>  $markup,
+  );
+  return drupal_render($form);
+}
+
+/*
+ * 
+ */
+function tripal_pub_property_add() {
+  $status = TRUE;
+
+  // prepare and render the form
+  $form = tripal_core_ahah_prepare_form();   
+  $data = theme('node_form', $form);
+
+  // bind javascript events to the new objects that will be returned 
+  // so that AHAH enabled elements will work.
+  $settings = tripal_core_ahah_bind_events();
+
+  // return the updated JSON
+  drupal_json(
+    array(
+      'status'   => $status, 
+      'data'     => $data,
+      'settings' => $settings,
+    )  
+  );
+}
+/*
+ * 
+ */
+function tripal_pub_property_delete() {
+  $status = TRUE;
+
+  // prepare and render the form
+  $form = tripal_core_ahah_prepare_form();   
+  $data = theme('chado_pub_node_form', $form);  
+
+  // bind javascript events to the new objects that will be returned 
+  // so that AHAH enabled elements will work.
+  $settings = tripal_core_ahah_bind_events();
+
+  // return the updated JSON
+  drupal_json(
+    array(
+      'status'   => $status, 
+      'data'     => $data,
+      'settings' => $settings,
+    )  
+  );
+}