$table_id)); $custom_table = $results->fetchObject(); // create a table with each row containig stats for // an individual job in the results set. $return_url = url("admin/tripal/custom_tables/"); $output .= "
" . t("Return to list of custom tables") . "
"; $output .= "Details for $custom_table->table_name:
"; $output .= "Table Name | " . "$custom_table->table_name | " . "
---|---|
Table Field Definitions | " . "" . var_export(unserialize($custom_table->schema), 1) . " | " .
"
Actions | " . "" . " Edit, " . " Delete |
array ( 'table' => 'library_stock', 'fields' => array ( 'library_stock_id' => array( 'type' => 'serial', 'not null' => TRUE, ), 'library_id' => array( 'type' => 'int', 'not null' => TRUE, ), 'stock_id' => array( 'type' => 'int', 'not null' => TRUE, ), ), 'primary key' => array( 'library_stock_id' ), 'unique keys' => array( 'library_stock_c1' => array( 'library_id', 'stock_id' ), ), 'foreign keys' => array( 'library' => array( 'table' => 'library', 'columns' => array( 'library_id' => 'library_id', ), ), 'stock' => array( 'table' => 'stock', 'columns' => array( 'stock_id' => 'stock_id', ), ), ), )", ); return $form; } /** * Validate the Create/Edit custom table form * Implements hook_form_validate(). * * @ingroup tripal_core */ function tripal_custom_tables_form_validate($form, &$form_state) { $action = $form_state['values']['action']; $table_id = $form_state['values']['table_id']; $schema = $form_state['values']['schema']; $force_drop = $form_state['values']['force_drop']; if (!$schema) { form_set_error($form_state['values']['schema'], t('Schema array field is required.')); } // make sure the array is valid $schema_array = array(); if ($schema) { $success = preg_match('/^\s*array/', $schema); if (!$success) { form_set_error($form_state['values']['schema'], t("The schema array should begin with the word 'array'.")); } else { $success = eval("\$schema_array = $schema;"); if ($success === FALSE) { $error = error_get_last(); form_set_error($form_state['values']['schema'], t("The schema array is improperly formatted. Parse Error : " . $error["message"])); } if (is_array($schema_array) and !array_key_exists('table', $schema_array)) { form_set_error($form_state['values']['schema'], t("The schema array must have key named 'table'")); } if ($action == 'Edit') { // see if the table name has changed. If so, then check to make sure // it doesn't already exists. We don't want to drop a table we didn't mean to $sql = "SELECT * FROM {tripal_custom_tables} WHERE table_id = :table_id"; $results = db_query($sql, array(':table_id' => $table_id)); $ct = $results->fetchObject(); if ($ct->table_name != $schema_array['table']) { $exists = db_table_exists('chado.' . $schema_array['table']); if ($exists) { form_set_error($form_state['values']['schema'], t("The table name already exists, please choose a different name.")); } } } } } } /** * Submit the Create/Edit Custom table form * Implements hook_form_submit(). * * @ingroup tripal_core */ function tripal_custom_tables_form_submit($form, &$form_state) { $ret = array(); $action = $form_state['values']['action']; $table_id = $form_state['values']['table_id']; $schema = $form_state['values']['schema']; $force_drop = $form_state['values']['force_drop']; $skip_creation = 1; if ($force_drop) { $skip_creation = 0; } // conver the schema into a PHP array $schema_arr = array(); eval("\$schema_arr = $schema;"); if (strcmp($action, 'Edit') == 0) { tripal_core_edit_custom_table($table_id, $schema_arr['table'], $schema_arr, $skip_creation); } elseif (strcmp($action, 'Add') == 0) { tripal_core_create_custom_table($schema_arr['table'], $schema_arr, $skip_creation); } else { drupal_set_message(t("No action performed.")); } return ''; } /** * Does the specified action for the specified custom table * * @param $op * The action to be taken. Currenly only delete is available * @param $table_id * The unique ID of the custom table for the action to be performed on * @param $redirect * TRUE/FALSE depending on whether you want to redirect the user to admin/tripal/custom_tables * * @ingroup tripal_core */ function tripal_custom_tables_action($op, $table_id, $redirect = FALSE) { global $user; $args = array("$table_id"); if (!$table_id) { return ''; } // get this table details $sql = "SELECT * FROM {tripal_custom_tables} WHERE table_id = :table_id"; $results = db_query($sql, array(':table_id' => $table_id)); $custom_table = $results->fetchObject(); if ($op == 'delete') { // remove the entry from the tripal_custom tables table $sql = "DELETE FROM {tripal_custom_tables} " . "WHERE table_id = $table_id"; db_query($sql); // drop the table from chado if it exists if (db_table_exists($custom_table->table_name)) { $success = chado_query("DROP TABLE %s", $custom_table->table_name); if ($success) { drupal_set_message(t("Custom Table '%name' dropped", array('%name' => $custom_table->table_name))); } } } // Redirect the user if ($redirect) { drupal_goto("admin/tripal/custom_tables"); } }