'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:
Medeiros PM, Ladio AH, Santos AM, Albuquerque UP. Does the selection of medicinal plants by Brazilian local populations 
        suffer taxonomic influence? J Ethnopharmacol. 2013 Apr 19; 146(3):842-52. PubMed PMID: 23462414
'), '#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 = '
'; $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 .= "Include Additional Details"; $markup .= theme('table', $headers, $rows); $markup .= "
"; $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, ) ); }