'; $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 $previous_db = tripal_db_set_active('chado'); $tmp_obj = db_fetch_object(db_query("SELECT count(*) as count FROM db WHERE db_id=%d",$db_id)); tripal_db_set_active($previous_db); 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 $previous_db = tripal_db_set_active('chado'); $sql = "SELECT count(*) as count FROM dbxref WHERE accession='%s' and db_id = %d"; $tmp_obj = db_fetch_object(db_query($sql,$accession,$db_id)); tripal_db_set_active($previous_db); 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 $previous_db = tripal_db_set_active('chado'); $isql = "INSERT INTO dbxref (db_id, accession, description) VALUES (%d, '%s', '%s')"; db_query($isql,$db_id,$accession,$description); tripal_db_set_active($previous_db); //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)) { $previous_db = tripal_db_set_active('chado'); $isql = "INSERT INTO feature_dbxref (feature_id, dbxref_id) VALUES (%d, %d)"; db_query($isql,$feature_id,$dbxref->dbxref_id); tripal_db_set_active($previous_db); drupal_set_message('Successfully Added Database Reference'); drupal_goto('node/'.$nid); } else { drupal_set_message('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("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("Deleted Database Reference"); drupal_goto('node/'.$nid); } else { drupal_set_message("Could not remove database reference: ",'error'); } } else { drupal_set_message("Unrecognized Button Pressed",'error'); } } /** * * * @ingroup tripal_feature */ function tripal_feature_update_db_reference($dbxref_id, $db_id, $accession) { $previous_db = tripal_db_set_active('chado'); $sql = "UPDATE dbxref SET db_id=%d, accession='%s' WHERE dbxref_id=%d"; db_query($sql,$db_id,$accession,$dbxref_id); tripal_db_set_active($previous_db); } /** * * * @ingroup tripal_feature */ function tripal_feature_delete_db_reference($dbxref_id) { $previous_db = tripal_db_set_active('chado'); db_query( "DELETE FROM dbxref WHERE dbxref_id=%d", $dbxref_id ); db_query( "DELETE FROM feature_dbxref WHERE dbxref_id=%d", $dbxref_id ); tripal_db_set_active($previous_db); } /** * * * @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; }