Browse Source

Tripal Bulk Loader: Fixed Edit Record Form

Lacey Sanderson 11 years ago
parent
commit
924e97bf91
1 changed files with 118 additions and 102 deletions
  1. 118 102
      tripal_bulk_loader/includes/tripal_bulk_loader.admin.templates.inc

+ 118 - 102
tripal_bulk_loader/includes/tripal_bulk_loader.admin.templates.inc

@@ -708,11 +708,17 @@ function tripal_bulk_loader_import_export_template_form_submit($form, &$form_sta
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
+function tripal_bulk_loader_edit_template_record_form($form, $form_state) {
   $form['#cache'] = TRUE; // Make sure the form is cached.
 
-   // get template id from path
-  $template_id = ($_GET['template_id'] !== NULL) ? $_GET['template_id'] : $form_state['values']['template_id'];
+  // get args from path
+  $template_id = (isset($form_state['build_info']['args'][0])) ? $form_state['build_info']['args'][0] : FALSE;
+  $form_state['storage']['template_id'] = $template_id;
+
+  $record_id = (isset($form_state['build_info']['args'][1])) ? $form_state['build_info']['args'][1] : FALSE;
+  $form_state['storage']['record_id'] = $record_id;
+  $form_state['values']['field_group'] = $record_id;
+  $form_state['storage']['original_priority'] = $record_id;
 
   // if there is no template supplied don't return rest of form
   if (!$template_id) {
@@ -722,7 +728,7 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
   // Pre-process values/defaults ---------------------------
 
   // If this is the first load of the form (no form state) we need to initialize some variables
-  if (!$form_state['storage']['template']) {
+  if (!isset($form_state['storage']['template'])) {
     $sql = "SELECT * FROM {tripal_bulk_loader_template} WHERE template_id=:template";
     $template = db_query($sql, array(':template' => $template_id))->fetchObject();
     $form_state['storage']['template_array'] = unserialize($template->template_array);
@@ -742,16 +748,9 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
     $template = $form_state['storage']['template'];
   }
 
-  // get the record_id from the path
-  if ($_GET['record_id'] !== NULL) {
-    $form_state['values']['field_group'] = $_GET['record_id'];
-    $form_state['storage']['original_priority'] = $_GET['record_id'];
-  }
-
-
   // Tables and default table
   $tables = tripal_core_get_chado_tables(TRUE);
-  if ($form_state['values']['chado_table']) {
+  if (isset($form_state['values']['chado_table'])) {
     $table = $form_state['values']['chado_table'];
   }
   else {
@@ -759,37 +758,62 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
   }
 
   // get the default mode
-  $mode = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['mode'];
-  if (!$mode) {
-     $mode = 'insert';
-  }
+  if (isset($form_state['storage']['original_priority'])) {
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['mode'])) {
+      $mode = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['mode'];
+    }
+    else {
+      $mode = 'insert';
+    }
 
-  // get default for the select optional
-  $select_optional = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_optional'];
-  if (!isset($select_optional)) {
-    $select_optional = 0;
-  }
+    // get default for the select optional
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_optional'])) {
+      $select_optional = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_optional'];
+    }
+    else {
+      $select_optional = 0;
+    }
 
-  // get default for the select if duplicate
-  $select_if_duplicate = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_if_duplicate'];
-  if (!isset($select_if_duplicate)) {
-    $select_if_duplicate = 1;
-  }
+    // get default for the select if duplicate
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_if_duplicate'])) {
+      $select_if_duplicate = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['select_if_duplicate'];
+    }
+    else {
+      $select_if_duplicate = 1;
+    }
 
-  // get default for the update if duplicate
-  $update_if_duplicate = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['update_if_duplicate'];
-  if (!isset($update_if_duplicate)) {
-    $update_if_duplicate = 0;
-  }
+    // get default for the update if duplicate
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['update_if_duplicate'])) {
+      $update_if_duplicate = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['update_if_duplicate'];
+    }
+    else {
+      $update_if_duplicate = 0;
+    }
 
-  // get default for the select if duplicate
-  $optional = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['optional'];
-  if (!isset($optional)) {
-    $optional = 0;
-  }
+    // get default for the select if duplicate
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['optional'])) {
+      $optional = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['optional'];
+    }
+    else {
+      $optional = 0;
+    }
 
-  // get the default for disabling the record
-  $disable = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['disable'];
+    // get the default for disabling the record
+    if (isset($form_state['storage']['template_array'][$form_state['storage']['original_priority']]['disable'])) {
+      $disable = $form_state['storage']['template_array'][$form_state['storage']['original_priority']]['disable'];
+    }
+    else {
+      $disable = 0;
+    }
+  }
+  else {
+     $mode = 'insert';
+     $select_optional = 0;
+     $select_if_duplicate = 1;
+     $update_if_duplicate = 0;
+     $optional = 0;
+     $disable = 0;
+  }
 
   // this is just for backwards compatibility. the insert_unique mode type is no longer available
   if (strcmp($mode, 'insert_unique')==0) {
@@ -809,7 +833,7 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
   $form['template_name'] = array(
     '#type' => 'item',
     '#title' => 'Template',
-    '#value' => $template->name,
+    '#markup' => $template->name,
   );
 
   $form['template_id'] = array(
@@ -818,7 +842,7 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
   );
 
   $form['edit_record'] = array(
-    '#type' => 'fieldset',
+    '#type' => 'markup',
   );
 
   // check template array for records then add one more
@@ -866,7 +890,7 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
 
   $form['edit_record']['select_options'] = array(
      '#type' => 'markup',
-     '#value' => t('Additional Select Options:'),
+     '#markup' => t('Additional Select Options:'),
   );
   $form['edit_record']['select_optional'] = array(
      '#type' => 'checkbox',
@@ -878,7 +902,7 @@ function tripal_bulk_loader_edit_template_record_form(&$form_state = NULL) {
   $form['edit_record']['insert_options'] = array(
      '#type' => 'markup',
      '#prefix' => '<br>',
-     '#value' => t('Additional Insert Options:'),
+     '#markup' => t('Additional Insert Options:'),
   );
 
   $form['edit_record']['select_if_duplicate'] = array(
@@ -958,77 +982,69 @@ function tripal_bulk_loader_edit_template_record_form_validate($form, $form_stat
  * @ingroup tripal_bulk_loader
  */
 function tripal_bulk_loader_edit_template_record_form_submit($form, &$form_state) {
-  //dpm($form_state, 'form state -start submit');
 
-  if (!$form_state['ahah_submission']) {
-    if ($form_state['values']['op'] ==  'Edit Record') {
-
-      $template = $form_state['storage']['template_array'];
-      $original_record_name = $template[ $form_state['storage']['original_priority'] ]['record_id'];
-
-      // Edit Record
-      $record = $template[ $form_state['storage']['original_priority'] ];
-      $record['record_id'] = $form_state['values']['record_name'];
-      $record['mode'] = $form_state['values']['mode'];
-      $record['table'] = $form_state['values']['chado_table'];
-      $record['select_if_duplicate'] = $form_state['values']['select_if_duplicate'];
-      $record['update_if_duplicate'] = $form_state['values']['update_if_duplicate'];
-      $record['select_optional'] = $form_state['values']['select_optional'];
-      $record['disable'] = $form_state['values']['disable'];
-      $record['optional'] = $form_state['values']['optional'];
-
-      if ($form_state['storage']['original_priority'] != $form_state['values']['field_group']) {
-        $record['fields'] = array_merge($record['fields'], $template[ $form_state['values']['field_group'] ]['fields']);
-        $template[ $form_state['values']['field_group'] ] = $record;
-        unset($template[ $form_state['storage']['original_priority'] ]);
-      }
-      else {
-        $template[ $form_state['storage']['original_priority'] ] = $record;
-      }
+  if ($form_state['values']['op'] ==  'Edit Record') {
 
-      // Go through all records and update this record name where it was used for a foreign key
-      // Foreach field in each record that is of type: foreign key
-      foreach ($template as $priority => $record) {
-        foreach ($record['fields'] as $field_index => $field) {
-          if ($field['type'] === 'foreign key') {
-            // Check if this points to the old record name and if so, update it
-            if ($field['foreign key'] === $original_record_name) {
-              $template[$priority]['fields'][$field_index]['foreign key'] = $form_state['values']['record_name'];
-            }
+    $template = $form_state['storage']['template_array'];
+    $original_record_name = $template[ $form_state['storage']['original_priority'] ]['record_id'];
+
+    // Edit Record
+    $record = $template[ $form_state['storage']['original_priority'] ];
+    $record['record_id'] = $form_state['values']['record_name'];
+    $record['mode'] = $form_state['values']['mode'];
+    $record['table'] = $form_state['values']['chado_table'];
+    $record['select_if_duplicate'] = $form_state['values']['select_if_duplicate'];
+    $record['update_if_duplicate'] = $form_state['values']['update_if_duplicate'];
+    $record['select_optional'] = $form_state['values']['select_optional'];
+    $record['disable'] = $form_state['values']['disable'];
+    $record['optional'] = $form_state['values']['optional'];
+
+    if ($form_state['storage']['original_priority'] != $form_state['values']['field_group']) {
+      $record['fields'] = array_merge($record['fields'], $template[ $form_state['values']['field_group'] ]['fields']);
+      $template[ $form_state['values']['field_group'] ] = $record;
+      unset($template[ $form_state['storage']['original_priority'] ]);
+    }
+    else {
+      $template[ $form_state['storage']['original_priority'] ] = $record;
+    }
+
+    // Go through all records and update this record name where it was used for a foreign key
+    // Foreach field in each record that is of type: foreign key
+    foreach ($template as $priority => $record) {
+      foreach ($record['fields'] as $field_index => $field) {
+        if ($field['type'] === 'foreign key') {
+          // Check if this points to the old record name and if so, update it
+          if ($field['foreign key'] === $original_record_name) {
+            $template[$priority]['fields'][$field_index]['foreign key'] = $form_state['values']['record_name'];
           }
         }
       }
+    }
 
-      // Save Template
-      $form_state['storage']['template']->template_array = serialize($template);
-      $success = drupal_write_record('tripal_bulk_loader_template', $form_state['storage']['template'], array('template_id'));
+    // Save Template
+    $form_state['storage']['template']->template_array = serialize($template);
+    $success = drupal_write_record('tripal_bulk_loader_template', $form_state['storage']['template'], array('template_id'));
 
-      if ($success) {
-        drupal_set_message(t('Successfully Updated Template Record'));
-        drupal_set_message(t('Template Saved.'));
+    if ($success) {
+      drupal_set_message(t('Successfully Updated Template Record'));
+      drupal_set_message(t('Template Saved.'));
 
-        $path = explode('?', $form_state['storage']['referring URL']);
-        parse_str($path[1], $query);
-        $query['template_id'] = $form_state['storage']['template']->template_id;
-        drupal_goto($path[0], $query);
-      }
-      else {
-        drupal_set_message(t('Unable to Save Template!'), 'error');
-        watchdog('T_bulk_loader',
-          'Unable to save bulk loader template: %template',
-          array('%template' => print_r($form_state['storage']['template'], TRUE)),
-          WATCHDOG_ERROR
-        );
-      }
+      $form_state['rebuild'] = FALSE;
+      $form_state['redirect'] = 'admin/tripal/loaders/bulk/template/' . $form_state['storage']['template']->template_id . '/edit';
     }
-    elseif ($form_state['values']['op'] ==  'Cancel') {
-        $path = explode('?', $form_state['storage']['referring URL']);
-        parse_str($path[1], $query);
-        $query['template_id'] = $form_state['storage']['template']->template_id;
-        //dpm('Redirecting to: '.$path[0].'?'.print_r($query,TRUE).' where the referring URL:'.$form_state['storage']['referring URL']);
-        drupal_goto($path[0], $query);
+    else {
+      drupal_set_message(t('Unable to Save Template!'), 'error');
+      watchdog('T_bulk_loader',
+        'Unable to save bulk loader template: %template',
+        array('%template' => print_r($form_state['storage']['template'], TRUE)),
+        WATCHDOG_ERROR
+      );
     }
   }
+  elseif ($form_state['values']['op'] ==  'Cancel') {
+      $form_state['rebuild'] = FALSE;
+      $form_state['redirect'] = 'admin/tripal/loaders/bulk/template/' . $form_state['storage']['template']->template_id . '/edit';
+  }
 
 }