'; $output .= 'All Database References should strictly pertain to THE CURRENT Individual
'; $output .= '
Current Database References
'; $output .= list_dbreferences_for_node($node->db_references); $output .= '

'; $output .= drupal_get_form('tripal_feature_add_ONE_dbreference_form', $node); $output .= '
'; $output .= drupal_get_form('tripal_feature_implement_add_chado_properties_navigate', 'db_references', $node->nid); return $output; } /** * Implements Hook_form() * Handles adding of Database References to features * * @ingroup tripal_feature */ function tripal_feature_add_ONE_dbreference_form($form_state, $node) { $form['nid'] = array( '#type' => 'hidden', '#value' => $node->nid ); $form['feature_id'] = array( '#type' => 'hidden', '#value' => $node->feature->feature_id, ); $form['add_dbreference'] = array( '#type' => 'fieldset', '#title' => t('Add Database References') . '(optional)', ); $form['add_dbreference']['accession'] = array( '#type' => 'textfield', '#title' => t('Accession'), '#required' => TRUE, ); $form['add_dbreference']['description'] = array( '#type' => 'textarea', '#title' => t('Description of Reference') . '+', '#description' => t('Optionally enter a description about the database accession.'), ); $db_options = tripal_db_get_db_options(); $db_options[0] = 'Select a Database'; ksort($db_options); $form['add_dbreference']['db_id'] = array( '#type' => 'select', '#title' => t('Database'), '#options' => $db_options, '#required' => TRUE, ); $form['add_dbreference']['submit'] = array( '#type' => 'submit', '#value' => t('Add Database Reference') ); return $form; } /** * * * @ingroup tripal_feature */ function tripal_feature_add_ONE_dbreference_form_validate($form, &$form_state) { $db_id = $form_state['values']['db_id']; $accession = $form_state['values']['accession']; $description = $form_state['values']['description']; $feature_id = $form_state['values']['feature_id']; $nid = $form_state['values']['nid']; // Check database is valid db_id in chado $tmp_obj = db_fetch_object(chado_query("SELECT count(*) as count FROM {db} WHERE db_id=%d", $db_id)); if ($tmp_obj->count != 1) { form_set_error('database', 'The database you selected is not valid. Please choose another one.'); } // Check Accession is unique for database $sql = "SELECT count(*) as count FROM {dbxref} WHERE accession='%s' and db_id = %d"; $tmp_obj = db_fetch_object(chado_query($sql, $accession, $db_id)); if ($tmp_obj->count > 0) { form_set_error('accession', 'This accession has already been assigned to another feature in the selected database.'); } } /** * * * @ingroup tripal_feature */ function tripal_feature_add_ONE_dbreference_form_submit($form, &$form_state) { $db_id = $form_state['values']['db_id']; $accession = $form_state['values']['accession']; $description = $form_state['values']['description']; $feature_id = $form_state['values']['feature_id']; $nid = $form_state['values']['nid']; // create dbxref $isql = "INSERT INTO {dbxref} (db_id, accession, description) VALUES (%d, '%s', '%s')"; chado_query($isql, $db_id, $accession, $description); //create feature_dbxref $dbxref = tripal_db_get_dbxref( array('db_id' => array('type' => 'INT', 'value' => $form_state['values']['db_id']), 'accession' => array('type' => 'STRING', 'exact' => TRUE, 'value' => $form_state['values']['accession']) ) ); if (!empty($dbxref->dbxref_id)) { $isql = "INSERT INTO {feature_dbxref} (feature_id, dbxref_id) VALUES (%d, %d)"; chado_query($isql, $feature_id, $dbxref->dbxref_id); drupal_set_message(t('Successfully Added Database Reference')); drupal_goto('node/' . $nid); } else { drupal_set_message(t('Database reference NOT successfully created...'), 'error'); } //end of if dbxref was created successfully } /** * * * @ingroup tripal_feature */ function tripal_feature_edit_ALL_dbreferences_page($node) { $output = ''; $output .= drupal_get_form('tripal_feature_edit_ALL_db_references_form', $node); $output .= '
'; $output .= drupal_get_form('tripal_feature_add_ONE_dbreference_form', $node); $output .= '
'; $output .= drupal_get_form('tripal_feature_implement_back_to_feature_button', $node->nid); return $output; } /** * Implements Hook_form() * Handles adding of DB References to Features * * @ingroup tripal_feature */ function tripal_feature_edit_ALL_db_references_form($form_state, $node) { $form = array(); $form['nid'] = array( '#type' => 'hidden', '#value' => $node->nid ); $i=0; $feature = $node->feature; $references = tripal_feature_load_references($feature->feature_id); // pre populate the database options $db_options = tripal_db_get_db_options(); $db_options[0] = 'Select a Database'; ksort($db_options); if (sizeof($references) != 0) { foreach ($references as $ref) { $i++; $form["num-$i"] = array( '#type' => 'fieldset', '#title' => t("Database Reference") . " $i" ); $form["num-$i"]["accession-$i"] = array( '#type' => 'textfield', '#title' => t('Accession'), '#size' => 30, '#required' => TRUE, '#default_value' => $ref->accession ); $form["num-$i"]["db_id-$i"] = array( '#type' => 'select', '#title' => t('Database'), '#options' => $db_options, '#required' => TRUE, '#default_value' => $ref->db_id ); $form["num-$i"]["dbxref_id-$i"] = array( '#type' => 'hidden', '#value' => $ref->dbxref_id ); $form["num-$i"]["delete-$i"] = array( '#type' => 'submit', '#value' => t("Delete"), '#name' => "delete-$i", ); } $form['num_db_references'] = array( '#type' => 'hidden', '#value' => $i ); $form["submit-edits"] = array( '#type' => 'submit', '#value' => t('Update All References') ); } //end of foreach db ref return $form; } /** * * * @ingroup tripal_feature */ function tripal_feature_edit_ALL_db_references_form_submit($form, &$form_state) { $num_refs = $form_state['values']['num_db_references']; $action = $form_state['clicked_button']['#value']; $button = $form_state['clicked_button']['#name']; $nid = $form_state['values']['nid']; if (strcmp($action, 'Update All References')==0) { for ($i=1; $i<=$num_refs; $i++) { $dbxref_id = $form_state['values']["dbxref_id-$i"]; $db_id = $form_state['values']["db_id-$i"]; $accession = $form_state['values']["accession-$i"]; tripal_feature_update_db_reference($dbxref_id, $db_id, $accession); } drupal_set_message(t("Updated all Database References")); drupal_goto('node/' . $nid); } elseif (strcmp($action, 'Delete')==0) { if (preg_match('/delete-(\d+)/', $button, $matches) ) { $i = $matches[1]; $dbxref_id = $form_state['values']["dbxref_id-$i"]; tripal_feature_delete_db_reference($dbxref_id); drupal_set_message(t("Deleted Database Reference")); drupal_goto('node/' . $nid); } else { drupal_set_message(t("Could not remove database reference:"), 'error'); } } else { drupal_set_message(t("Unrecognized Button Pressed"), 'error'); } } /** * * * @ingroup tripal_feature */ function tripal_feature_update_db_reference($dbxref_id, $db_id, $accession) { $sql = "UPDATE {dbxref} SET db_id=%d, accession='%s' WHERE dbxref_id=%d"; chado_query($sql, $db_id, $accession, $dbxref_id); } /** * * * @ingroup tripal_feature */ function tripal_feature_delete_db_reference($dbxref_id) { chado_query( "DELETE FROM {dbxref} WHERE dbxref_id=%d", $dbxref_id ); chado_query( "DELETE FROM {feature_dbxref} WHERE dbxref_id=%d", $dbxref_id ); } /** * * * @ingroup tripal_feature */ function theme_tripal_feature_edit_ALL_db_references_form($form) { $output = ''; $output .= '
'; $output .= 'Edit Existing Database References(optional)'; $output .= '

Below is a list of already existing database references, one per line. When entering a database reference, the accession ' .'is a unique identifier for this feature in the specified database.

'; $output .= ''; $output .= ''; for ($i=1; $i<=$form['num_db_references']['#value']; $i++) { $output .= ''; } $output .= '
#DatabaseAccession
' . drupal_render($form["num-$i"]) . '' . drupal_render($form["database-$i"]) . '' . drupal_render($form["accession-$i"]) . '' . drupal_render($form["submit-$i"]) . '

'; $output .= drupal_render($form); $output .= '
'; return $output; } /** * * * @ingroup tripal_feature */ function list_dbreferences_for_node($db_references) { if (!empty($db_references) ) { $output = ''; $output .= ''; foreach ($db_references as $db) { $output .= ''; } // end of foreach db reference $output .= '
DatabaseAccession
' . $db->db_name . '' . $db->accession . '
'; } else { $output = 'No Database References Added to the Current Feature'; } return $output; }