'Update Chado cvtermpath table for GO terms', 'description' => 'Manage integration of Chado controlled vocabularies', 'page callback' => 'drupal_get_form', 'page arguments' => array('tripal_cv_cvtermpath_form'), 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, ); $items['admin/tripal/tripal_cv'] = array( 'title' => 'Controlled Vocabulary Management', 'description' => 'Manage controlled vocabularies/ontolgoies in Chado ', 'page callback' => 'tripal_cv_admin_page', 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, ); $items['admin/tripal/tripal_cv/new'] = array( 'title' => 'Add a Controlled Vocabulary', 'page callback' => 'drupal_get_form', 'page arguments' => array('tripal_cv_form'), 'access arguments' => array('access administration pages'), 'type' => MENU_NORMAL_ITEM, ); $items['admin/tripal/tripal_cv/edit/js'] = array( 'title' => 'Edit Controlled Vocabularies', 'page callback' => 'tripal_ajax_cv_edit', 'access arguments' => array('access administration pages'), 'type' => MENU_NORMAL_ITEM, ); $items['tripal_cv_chart'] = array( 'path' => 'tripal_cv_chart', 'title' => t('CV Chart'), 'page callback' => 'tripal_cv_chart', 'page arguments' => array(1), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK ); $items['tripal_cv_tree'] = array( 'path' => 'tripal_cv_tree', 'title' => t('CV Term Viewer'), 'page callback' => 'tripal_cv_tree', 'page arguments' => array(1), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK ); // menu items for working with the CV module tree browser /* $items['cv_browser'] = array( 'title' => t('CV Relationship Browser'), 'page callback' => 'tripal_cv_show_browser', 'access arguments' => array('access chado_cv content'), 'type' => MENU_NORMAL_ITEM ); */ $items['tripal_cv_init_browser'] = array( 'path' => 'tripal_cv_init_browser', 'title' => t('CV Browser'), 'page callback' => 'tripal_cv_init_browser', 'page arguments' => array(1), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK ); // menu item for interaction with the tree $items['tripal_cv_update_tree'] = array( 'path' => 'tripal_cv_update_tree', 'title' => t('CV Tree'), 'page callback' => 'tripal_cv_update_tree', 'page arguments' => array(2,3), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK ); // menu items for working with terms $items['tripal_cv_cvterm_info'] = array( 'path' => 'tripal_cv_cvterm_info', 'title' => t('CV Term Viewer'), 'page callback' => 'tripal_cv_cvterm_info', 'page arguments' => array(1), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK ); $items['tripal_cv_cvterm_edit'] = array( 'path' => 'tripal_cv_edit', 'title' => t('CV Term Editor'), 'page callback' => 'tripal_cv_cvterm_edit', 'page arguments' => array(1), 'access arguments' => array('edit chado_cv content'), 'type' => MENU_CALLBACK ); return $items; } /******************************************************************************* * The following function proves access control for users trying to * perform actions on data managed by this module */ function chado_cv_access($op, $node, $account){ if ($op == 'create') { return user_access('create chado_cv content', $account); } if ($op == 'update') { if (user_access('edit chado_cv content', $account)) { return TRUE; } } if ($op == 'delete') { if (user_access('delete chado_cv content', $account)) { return TRUE; } } if ($op == 'view') { if (user_access('access chado_cv content', $account)) { return TRUE; } } return FALSE; } /******************************************************************************* * Set the permission types that the chado module uses. Essentially we * want permissionis that protect creation, editing and deleting of chado * data objects */ function tripal_cv_perm(){ return array( 'access chado_cv content', 'create chado_cv content', 'delete chado_cv content', 'edit chado_cv content', ); } /************************************************************************* * */ function tripal_cv_admin_page(){ $add_url = url("admin/tripal/tripal_cv/new"); $cvtermpath_url = url("admin/tripal/tripal_cv/cvtermpath"); $output = "Add a new controlled vocabulary | "; $output .= "Update the cvtermpath table "; $output .= drupal_get_form('tripal_cv_select_form'); $output .= '
Please select a database above to view or edit
'; return $output; } /************************************************************************* * */ function tripal_cv_select_form(){ $previous_db = db_set_active('chado'); // use chado database // get a list of db from chado for user to choose $sql = "SELECT * FROM {cv} WHERE NOT name = 'tripal' ORDER BY name "; $results = db_query ($sql); db_set_active($previous_db); // use drupal database $cvs = array(); $cvs[] = ''; while ($cv = db_fetch_object($results)){ $cvs[$cv->cv_id] = $cv->name; } $form['cvid'] = array( '#title' => t('Controlled Vocabulary/Ontology Name'), '#type' => 'select', '#options' => $cvs, '#ahah' => array( 'path' => 'admin/tripal/tripal_cv/edit/js', 'wrapper' => 'db-edit-div', 'effect' => 'fade', 'event' => 'change', 'method' => 'replace', ), ); return $form; } /************************************************************************* * */ function tripal_ajax_cv_edit (){ // get the database id, build the form and then return the JSON object $cvid = $_POST['cvid']; $form = drupal_get_form('tripal_cv_form',$cvid); drupal_json(array('status' => TRUE, 'data' => $form)); } /************************************************************************* * */ function tripal_cv_form(&$form_state = NULL,$cvid = NULL){ // get this requested database if($cvid){ $sql = "SELECT * FROM {cv} WHERE cv_id = %d "; $previous_db = db_set_active('chado'); $cv = db_fetch_object(db_query($sql,$cvid)); db_set_active($previous_db); # set the default values. If there is a value set in the # form_state then let's use that, otherwise, we'll pull # the values from the database $default_db = $form_state['values']['name']; $default_desc = $form_state['values']['description']; $default_url = $form_state['values']['url']; $default_urlprefix = $form_state['values']['urlprefix']; if(!$default_db){ $default_cv = $cv->name; } if(!$default_desc){ $default_desc = $cv->definition; } $action = 'Update'; } else { $action = 'Add'; } $form['cvid'] = array( '#type' => 'hidden', '#value' => $cvid ); $form['name']= array( '#type' => 'textfield', '#title' => t("Controlled Vocabulary name"), '#description' => t('Please enter the name for this vocabulary.'), '#required' => TRUE, '#default_value' => $default_cv, '#weight' => 1 ); $form['definition']= array( '#type' => 'textarea', '#title' => t('Description'), '#description' => t('Please enter a description for this vocabulary'), '#default_value' => $default_desc, '#weight' => 2 ); if(strcmp($action,'Update')==0){ $form['update'] = array ( '#type' => 'submit', '#value' => t('Update'), '#weight' => 5, '#executes_submit_callback' => TRUE, ); $form['delete'] = array ( '#type' => 'submit', '#value' => t('Delete'), '#weight' => 6, '#executes_submit_callback' => TRUE, ); } else { $form['add'] = array ( '#type' => 'submit', '#value' => t('Add'), '#weight' => 5, '#executes_submit_callback' => TRUE, ); } $form['#redirect'] = 'admin/tripal/tripal_cv'; return $form; } /************************************************************************ * */ function tripal_cv_form_submit($form, &$form_state){ $name = $form_state['values']['name']; $desc = $form_state['values']['definition']; $cvid = $form_state['values']['cvid']; $op = $form_state['values']['op']; if($cvid){ if(strcmp($op,'Update')==0){ $sql = " UPDATE {cv} SET name = '%s', definition = '%s' WHERE cv_id = %d "; $previous_db = db_set_active('chado'); $db = db_query($sql,$name,$desc,$cvid); db_set_active($previous_db); if($db){ drupal_set_message("Controlled vocabulary updated"); } else { drupal_set_message("Failed to update controlled vocabulary."); } } if(strcmp($op,'Delete')==0){ $sql = " DELETE FROM {cv} WHERE cv_id = %d "; $previous_db = db_set_active('chado'); $db = db_query($sql,$cvid); db_set_active($previous_db); if($db){ drupal_set_message("Controlled vocabulary deleted"); } else { drupal_set_message("Failed to delete controlled vocabulary."); } } } else { $sql = " INSERT INTO {cv} (name,definition) VALUES ('%s','%s') "; $previous_db = db_set_active('chado'); $db = db_query($sql,$name,$desc); db_set_active($previous_db); if($db){ drupal_set_message("External database added"); } else { drupal_set_message("Failed to add external database."); } } return ''; } /************************************************************************* * */ function tripal_cv_cvtermpath_form () { $previous_db = db_set_active('chado'); // use chado database // get a list of db from chado for user to choose $sql = "SELECT * FROM {cv} WHERE NOT name = 'tripal' ORDER BY name "; $results = db_query ($sql); db_set_active($previous_db); // use drupal database $cvs = array(); $cvs[] = ''; while ($cv = db_fetch_object($results)){ $cvs[$cv->cv_id] = $cv->name; } $form['cvid'] = array( '#title' => t('Controlled Vocabulary/Ontology Name'), '#type' => 'select', '#options' => $cvs, '#description' => t('Select a controlled vocabulary for which you would like to upate the cvtermpath.'), ); $form['description'] = array( '#type' => 'item', '#value' => t("Submit a job to update chado cvtermpath table."), '#weight' => 1, ); $form['button'] = array( '#type' => 'submit', '#value' => t('Update cvtermpath'), '#weight' => 2, ); return $form; } /************************************************************************* * */ function tripal_cv_cvtermpath_form_validate($form, &$form_state) { global $user; $cvid = $form_state['values']['cvid']; // first get the controlled vocabulary name: $previous_db = db_set_active('chado'); $cv = db_fetch_object(db_query("SELECT * FROM {cv} WHERE cv_id = %d",$cvid)); db_set_active($previous_db); // Submit a job to update cvtermpath $job_args = array($cvid); if ($form_state['values']['op'] == t('Update cvtermpath')) { tripal_add_job("Update cvtermpath: $cv->name",'tripal_cv', 'tripal_cv_update_cvtermpath',$job_args,$user->uid); } } /*********************************************************** * Update the cvtermpath table */ function tripal_cv_update_cvtermpath($cvid = NULL, $job_id = NULL) { // first get the controlled vocabulary name: $previous_db = db_set_active('chado'); $cv = db_fetch_object(db_query("SELECT * FROM {cv} WHERE cv_id = %d",$cvid)); print "\nUpdating cvtermpath for $cv->name...\n"; // now fill the cvtermpath table $sql = "SELECT * FROM fill_cvtermpath('%s')"; db_query($sql,$cv->name); db_set_active($previous_db); return; } /******************************************************************************* * We need to let drupal know about our theme functions and their arguments. * We create theme functions to allow users of the module to customize the * look and feel of the output generated in this module */ function tripal_cv_theme () { return array( 'tripal_cv_cvterm_edit' => array ( 'arguments' => array('cvterm'), ), ); } /************************************************************************* */ function tripal_cv_get_cv_id($cv_name){ $sql = " SELECT cv_id FROM {cv} WHERE name = '%s' "; $previous_db = db_set_active('chado'); $cv = db_fetch_object(db_query($sql,$cv_name)); db_set_active($previous_db); return $cv->cv_id; } /************************************************************************* * */ function tripal_cv_cvterm_edit($cvterm_id){ $sql = " SELECT CVT.name as cvtermname, CVT.definition, CV.name as cvname FROM {CVTerm} CVT INNER JOIN CV on CVT.cv_id = CV.cv_id WHERE CVT.cvterm_id = %d "; $previous_db = db_set_active('chado'); $cvterm = db_fetch_object(db_query($sql,$cvterm_id)); db_set_active($previous_db); return theme('tripal_cv_cvterm_edit',$cvterm); } /************************************************************************* * */ function theme_tripal_cv_cvterm_edit(&$cvterm){ $output = "
Term$cvterm->cvtermname
Vocabulary$cvterm->cvname
Definition$cvterm->definition
"; return $output; }