cv_id] = $cv->name; } $form['cv_id'] = array( '#title' => t('Controlled Vocabulary Name'), '#type' => 'select', '#options' => $cvs, '#ajax' => array( 'callback' => 'tripal_cv_edit_form_ajax', 'wrapper' => 'cv-edit-div', 'effect' => 'fade', 'event' => 'change', 'method' => 'replace', ), '#default_value' => $cv_id, ); // if we don't have a db_id then we can return the form, otherwise // add in the other fields if ($cv_id) { tripal_cv_add_cv_form_fields($form, $form_state, $cv_id); $form['update'] = array( '#type' => 'submit', '#value' => t('Update'), ); $form['delete'] = array( '#type' => 'submit', '#value' => t('Delete'), '#attributes' => array('onclick' => 'if(!confirm("Really Delete?")){return false;}'), ); } else { // if we don't have a dbid then this is the first time the form has // benn loaded and we need to create the div where ajax replacement elements get stored $form['div_replace'] = array( '#type' => 'item', '#prefix' => '
', '#suffix' => '
', ); } return $form; } /** * * @param $form * @param $form_state * * @ingroup tripal_db */ function tripal_cv_cv_add_form($form, $form_state) { // add in the form fields to this form tripal_cv_add_cv_form_fields($form, $form_state); $form['add'] = array( '#type' => 'submit', '#value' => t('Add'), '#weight' => 5, ); return $form; } /** * * @param $form * @param $form_state * @param $cv_id * * @ingroup tripal_db */ function tripal_cv_add_cv_form_fields(&$form, $form_state, $cv_id = NULL) { $default_name = ''; $default_desc = ''; if ($cv_id) { $values = array('cv_id' => $cv_id); $result = tripal_core_chado_select('cv', array('*'), $values); $cv = $result[0]; $default_name = $cv->name; $default_desc = $cv->definition; } // add a fieldset for the Drupal Schema API $form['fields'] = array( '#type' => 'fieldset', '#title' => 'Controlled Vocabulary Details', '#collapsible' => 0, ); $form['fields']['name']= array( '#type' => 'textfield', '#title' => t("Controlled Vocabulary name"), '#description' => t('Please enter the name for this vocabulary.'), '#required' => TRUE, '#default_value' => $default_name, '#maxlength' => 255, ); $form['fields']['definition']= array( '#type' => 'textarea', '#title' => t('Description'), '#description' => t('Please enter a definition for this vocabulary'), '#default_value' => $default_desc, ); return $form; } /** * Validation fucntion for tripal_cv_cv_add_form * @param $form * @param $form_state * * @ingroup tripal_cv */ function tripal_cv_cv_add_form_validate($form, &$form_state) { tripal_cv_form_fields_validate($form, $form_state); } /** * Validation fucntion for tripal_cv_cv_edit_form * @param unknown_type $form * @param unknown_type $form_state * * @ingroup tripal_cv */ function tripal_cv_cv_edit_form_validate($form, &$form_state) { tripal_cv_form_fields_validate($form, $form_state); } /** * Genetic validation form for shared fields of both the edit and add forms * @param $form * @param $form_state * * @ingroup tripal_cv */ function tripal_cv_form_fields_validate($form, &$form_state) { $name = array_key_exists('name', $form_state['values']) ? trim($form_state['values']['name']) : ''; $desc = array_key_exists('definition', $form_state['values']) ? trim($form_state['values']['definition']) : ''; $cv_id = array_key_exists('cv_id', $form_state['values']) ? trim($form_state['values']['cv_id']) : ''; // make sure the cv name is unique $values = array('name' => $name); $results = tripal_core_chado_select('cv', array('cv_id'), $values); if (count($results) > 0 and $results[0]->cv_id != $cv_id) { form_set_error('name', 'The vocabulary name must be unique'); } } /** * * @param $form * @param $form_state */ function tripal_cv_cv_add_form_submit($form, &$form_state) { $name = array_key_exists('name', $form_state['values']) ? trim($form_state['values']['name']) : ''; $desc = array_key_exists('definition', $form_state['values']) ? trim($form_state['values']['definition']) : ''; $values = array( 'name' => $name, 'definition' => $desc, ); $success = tripal_core_chado_insert('cv', $values); if ($success) { drupal_set_message(t("Controlled vocabulary added")); } else { drupal_set_message(t("Failed to add controlled vocabulary.")); } } /** * * @param unknown_type $form * @param unknown_type $form_state */ function tripal_cv_cv_edit_form_submit($form, &$form_state) { $name = array_key_exists('name', $form_state['values']) ? trim($form_state['values']['name']) : ''; $desc = array_key_exists('definition', $form_state['values']) ? trim($form_state['values']['definition']) : ''; $cv_id = array_key_exists('cv_id', $form_state['values']) ? trim($form_state['values']['cv_id']) : ''; $op = array_key_exists('op', $form_state['values']) ? trim($form_state['values']['op']) : ''; $values = array( 'name' => $name, 'definition' => $desc, ); if (strcmp($op, 'Update')==0) { $match = array('cv_id' => $cv_id); $success = tripal_core_chado_update('cv', $match, $values); if ($success) { drupal_set_message(t("Controlled vocabulary updated")); } else { drupal_set_message(t("Failed to update controlled vocabulary.")); } } if (strcmp($op, 'Delete')==0) { $match = array('cv_id' => $cv_id); $success = tripal_core_chado_delete('cv', $match); if ($success) { drupal_set_message(t("Controlled vocabulary deleted")); } else { drupal_set_message(t("Failed to delete controlled vocabulary.")); } } } /** * Ajax callback for the tripal_cv_form * @ingroup tripal_cv */ function tripal_cv_edit_form_ajax($form, $form_state) { $elements = array(); // add in the form fields and the buttons if (array_key_exists('cv_id', $form_state['values'])) { $elements['fields'] = $form['fields']; $elements['update'] = $form['update']; $elements['delete'] = $form['delete']; } // add back in the cv-edit-div that is used for the next round of AJAX $elements['fields']['#prefix'] = '
'; $elements['fields']['#suffix'] = ''; // reset the values for the fields to the defaults $elements['fields']['name']['#value'] = $elements['fields']['name']['#default_value']; $elements['fields']['definition']['#value'] = $elements['fields']['definition']['#default_value']; //drupal_set_message('
' . print_r($elements, TRUE) . '
', "status"); return $elements; }