123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- <?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,
- )
- );
- }
|