Browse Source

Bulk Loader: Fixed Node functionality (create,edit,delete,view) including management of constants

Lacey Sanderson 11 years ago
parent
commit
fbd7dbcbef

+ 112 - 114
tripal_bulk_loader/includes/tripal_bulk_loader.constants.inc

@@ -41,15 +41,15 @@ function tripal_bulk_loader_update_constant($nid, $group_id, $table, $field, $re
   );
 
   // Check to see if already exists
-  $exists = db_query(
-    "SELECT constant_id FROM {tripal_bulk_loader_constants} WHERE nid=:nid AND record_id=:record AND field_id=:field AND group_id=:group",
-    array(
-      ':nid' => $record['nid'],
-      ':record' => $record['record_id'],
-      ':field' => $record['field_id'],
-      ':group' => $record['group_id']
-  ))->fetchObject();
-  if ($exists->constant_id) {
+  $exists = db_select('tripal_bulk_loader_constants', 'c')
+    ->fields('c',array('constant_id'))
+    ->condition('nid',$record['nid'])
+    ->condition('record_id',$record['record_id'])
+    ->condition('field_id',$record['field_id'])
+    ->condition('group_id',$record['group_id'])
+    ->execute();
+  $exists = $exists->fetchObject();
+  if (!isset($exists)) {
     $record['constant_id'] = $exists->constant_id;
     $status = drupal_write_record('tripal_bulk_loader_constants', $record, 'constant_id');
     if ($status) {
@@ -121,7 +121,7 @@ function tripal_bulk_loader_has_exposed_fields($node) {
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_set_constants_form($form_state, $node) {
+function tripal_bulk_loader_set_constants_form($form, $form_state, $node) {
   $form = array();
 
   $form['nid'] = array(
@@ -149,40 +149,70 @@ function tripal_bulk_loader_set_constants_form($form_state, $node) {
 
   // Display table of already added constant sets with the ability to re-arrange and delete
   $first_constant = reset($node->constants);
-  if (sizeof($node->constants) > 0 AND !empty($first_constant)) {
+  if (sizeof($node->constants) > 0) {
     $form['exposed_fields']['explanation-1'] = array(
       '#type' => 'item',
-      '#value' => t('You have already added constants to this bulk loading job. Each '
+      '#markup' => t('You have already added constants to this bulk loading job. Each '
         .'row in the following table represents a set of constants. Each set will be used '
         .'to load your data file with the specified template resulting in the each record '
         .'in the template to be loaded x number of times where there are x sets of '
         .'constants (rows in the following table).')
     );
 
-    $form['exposed_fields']['existing'] = array(
-      '#tree' => TRUE,
-    );
-
-    foreach ($node->constants as $set) {
-
+    $rows = array();
+    foreach ($node->constants as $group_id => $set) {
+      $row = array();
+      $row['group_id'] = $group_id;
+      $header['group_id'] = t('Group');
       foreach ($set as $record) {
         foreach ($record as $field) {
           $index = $field['record_id'] . '-' . $field['field_id'];
-          $group = $field['group_id'];
-          $form['exposed_fields']['existing'][$group][$index] = array(
-            '#type' => 'markup',
-            '#value' => filter_xss($field['value']),
-          );
+          $header[$index] = $field['value'];
+          $row[$index] = $field['value'];
         }
       }
+      $header['operations'] = t('Operations');
+      $row['operations'] = filter_xss(l(t('Edit'), 'node/' . $node->nid . '/constants/' . $group_id . '/edit') . '  |  '  .
+            l(t('Delete'), 'node/' . $node->nid . '/constants/' . $group_id . '/delete'));
 
-      $form['exposed_fields']['existing'][$group]['delete'] = array(
-        '#type' => 'markup',
-        '#value' => filter_xss(l(t('Edit'), 'node/' . $node->nid . '/constants/' . $group . '/edit') . '  |  '  .
-          l(t('Delete'), 'node/' . $node->nid . '/constants/' . $group . '/delete')),
-      );
+      $rows[] = $row;
+    }
 
+    //get the header using the last constant set
+    $header = array();
+    $header['group_id'] = '';
+    $header_row = array();
+    $header_row[0]['group_id'] = array('data' => t('Group'),'header'=>TRUE);
+    foreach ($set as $record) {
+      foreach ($record as $field) {
+        $header[$field['record_id']]['data'] = $node->template->template_array[$field['record_id']]['record_id'];
+        $header[$field['record_id']]['colspan'] = sizeof($record);
+
+        $index = $field['record_id'] . '-' . $field['field_id'];
+        $header_row[0][$index] = array(
+          'data' => $node->template->template_array[$field['record_id']]['fields'][$field['field_id']]['title'],
+          'header' => TRUE
+        );
+      }
     }
+    $header['operations'] = '';
+    $header_row[0]['operations'] = array('data' => t('Operations'),'header'=>TRUE);
+
+    $full_header = array(
+      0 => $header,
+      1 => $header_row[0]
+    );
+    $all_rows = array_merge($header_row, $rows);
+    $form['exposed_fields']['existing'] = array(
+      '#type' => 'markup',
+      '#markup' => theme('table', array(
+        'header' => $header,
+        'rows' => $all_rows
+      )),
+      // Added to make accessible to subthemeing
+      '#rows' => serialize($rows),
+      '#header' => serialize($full_header)
+    );
   }
 
   $form['exposed_fields']['new'] = array(
@@ -192,7 +222,7 @@ function tripal_bulk_loader_set_constants_form($form_state, $node) {
 
   $form['exposed_fields']['new']['explanation-2'] = array(
     '#type' => 'item',
-    '#value' => t('The following fields are constants in the selected template that you need to set values for.')
+    '#markup' => t('The following fields are constants in the selected template that you need to set values for.')
   );
 
   // Add textifelds for exposed fields of the current template
@@ -209,13 +239,24 @@ function tripal_bulk_loader_set_constants_form($form_state, $node) {
         $exposed_fields = TRUE;
         $indexes[$record_id][] = $field_id;
 
+        $default_value = '';
+        if (isset($node->constants[$record_id])) {
+          if (isset($node->constants[$record_id][$field_id])) {
+            $default_value = $node->constants[$record_id][$field_id]['value'];
+          }
+        } elseif (isset($field['constant value'])) {
+          $default_value = $field['constant value'];
+        } elseif(isset($field['spreadsheet column'])) {
+          $default_value = $field['spreadsheet column'];
+        }
+
         switch ($field['type']) {
           case 'table field':
             $form['exposed_fields']['new'][$record_id . '-' . $field_id] = array(
               '#type' => 'textfield',
               '#title' => t('%title', array('%title' => $field['title'])),
               '#description' => t('%exposed_description', array('%exposed_description' => $field['exposed_description'])),
-              '#default_value' => (isset($node->constants[$record_id][$field_id]['value'])) ? $node->constants[$record_id][$field_id]['value'] : $field['constant value'],
+              '#default_value' => $default_value,
             );
           break;
           case 'constant':
@@ -223,7 +264,7 @@ function tripal_bulk_loader_set_constants_form($form_state, $node) {
               '#type' => 'textfield',
               '#title' => t('%title', array('%title' => $field['title']) ),
               '#description' => t('Enter the case-sensitive value of this constant for your data file'),
-              '#default_value' => (isset($node->constants[$record_id][$field_id]['value'])) ? $node->constants[$record_id][$field_id]['value'] : $field['constant value'],
+              '#default_value' => $default_value,
             );
           break;
         }
@@ -285,28 +326,30 @@ function tripal_bulk_loader_set_constants_form_validate($form, $form_state) {
   if (strcmp('Add Constant Set', $op) == 0) {
       foreach ($indexes as $record_id => $array) {
         foreach ($array as $field_id) {
-          if ($template[$record_id]['fields'][$field_id]['exposed_validate']) {
-            $result = db_fetch_object(chado_query(
-              "SELECT 1 as valid FROM {%s} WHERE %s='%s'",
-              $template[$record_id]['table'],
-              $template[$record_id]['fields'][$field_id]['field'],
-              $form_state['values'][$record_id . '-' . $field_id]
-            ));
-
-            if (!$result->valid) {
-              $msg = 'A ' . $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#title'] . ' of "' . $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#value'] . '" must already exist!';
-              form_set_error($record_id . '-' . $field_id, $msg);
-            }
-            else {
-              drupal_set_message(
-                t(
-                  'Confirmed a %title of "%value" already exists.',
-                  array(
-                    '%title' => $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#title'],
-                    '%value' => $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#value']
+          if (isset($template[$record_id]['fields'][$field_id]['exposed_validate'])) {
+            if ($template[$record_id]['fields'][$field_id]['exposed_validate']) {
+              $result = db_fetch_object(chado_query(
+                "SELECT 1 as valid FROM {%s} WHERE %s='%s'",
+                $template[$record_id]['table'],
+                $template[$record_id]['fields'][$field_id]['field'],
+                $form_state['values'][$record_id . '-' . $field_id]
+              ));
+
+              if (!$result->valid) {
+                $msg = 'A ' . $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#title'] . ' of "' . $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#value'] . '" must already exist!';
+                form_set_error($record_id . '-' . $field_id, $msg);
+              }
+              else {
+                drupal_set_message(
+                  t(
+                    'Confirmed a %title of "%value" already exists.',
+                    array(
+                      '%title' => $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#title'],
+                      '%value' => $form['exposed_fields']['new'][$record_id . '-' . $field_id]['#value']
+                    )
                   )
-                )
-              );
+                );
+              }
             }
           }
         }
@@ -346,57 +389,6 @@ function tripal_bulk_loader_set_constants_form_submit($form, $form_state) {
 
 }
 
-/**
- * Themes the bulk loading job set constants form
- *
- * @ingroup tripal_bulk_loader
- */
-function theme_tripal_bulk_loader_set_constants_form($form) {
-  $output = '';
-
-  $exposed_fields = unserialize($form['exposed_array']['#value']);
-  // need to put in the context of a node so we can use the has_exposed_fields function
-  if ($exposed_fields) {
-    $node->exposed_fields = $exposed_fields;
-  }
-  else {
-    $node->exposed_fields = array();
-  }
-
-  // Add draggable table for constant sets
-  if (tripal_bulk_loader_has_exposed_fields($node)) {
-    $i=1;
-    foreach (element_children($form['exposed_fields']['existing']) as $key) {
-      $element = &$form['exposed_fields']['existing'][$key];
-      $element['group']['#attributes']['class'] = 'weight-group';
-
-      $row = array();
-      foreach ($exposed_fields as $exposed) {
-        if ($i==1) {
-          $header[] = $exposed['title'];
-        }
-        $k = $exposed['record_id'] . '-' . $exposed['field_id'];
-        $row[] = drupal_render($element[$k]);
-      }
-      $row[] = drupal_render($element['delete']);
-      $row[] = drupal_render($element['group']) . drupal_render($element['id']);
-      if (!empty($row[0])) {
-        $rows[] = array('data' => $row, 'class' => 'draggable');
-      }
-      $i++;
-    }
-    //drupal_add_tabledrag('mytable', 'order', 'sibling', 'weight-group');
-    // @coder-ignore: no user input thus don't need to filter
-    $form['exposed_fields']['existing'] = array(
-      '#type' => 'markup',
-      '#value' => theme('table', $header, $rows, array('id' => 'mytable')) . '<br />',
-    );
-  }
-
-  $output .= drupal_render($form);
-  return $output;
-}
-
 ///////////////////////////////////////////////////////////
 // Set Constants Form (on Bulk Loader Node)
 ///////////////////////////////////////////////////////////
@@ -416,11 +408,9 @@ function theme_tripal_bulk_loader_set_constants_form($form) {
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_edit_constant_set_form($form_state, $node, $group_id) {
+function tripal_bulk_loader_edit_constant_set_form($form, $form_state, $node, $group_id) {
   $form = array();
 
-  $form['#redirect'] = 'node/' . $node->nid;
-
   $form['nid'] = array(
     '#type' => 'hidden',
     '#value' => $node->nid,
@@ -503,8 +493,9 @@ function tripal_bulk_loader_edit_constant_set_form($form_state, $node, $group_id
   );
 
   $form['cancel'] = array(
-    '#type' => 'submit',
-    '#value' => 'Cancel',
+    '#type' => 'link',
+    '#title' => 'Cancel',
+    '#href' => 'node/'.$node->nid
   );
 
   return $form;
@@ -515,14 +506,17 @@ function tripal_bulk_loader_edit_constant_set_form($form_state, $node, $group_id
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_edit_constant_set_form_submit($form, $form_state) {
+function tripal_bulk_loader_edit_constant_set_form_submit($form, &$form_state) {
 
   // Update constants
   $template = unserialize($form_state['values']['template']);
   $indexes = unserialize($form_state['values']['indexes']);
+  $nid = $form_state['values']['nid'];
 
   $op = $form_state['values'][ $form_state['clicked_button']['#name'] ];
   if (strcmp('Save', $op) == 0) {
+    $form_state['redirect'] = 'node/' . $nid;
+    $form_state['rebuild'] = FALSE;
 
     foreach ($indexes as $record_id => $array) {
       foreach ($array as $field_id) {
@@ -558,11 +552,9 @@ function tripal_bulk_loader_edit_constant_set_form_submit($form, $form_state) {
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_delete_constant_set_form($form_state, $node, $group_id) {
+function tripal_bulk_loader_delete_constant_set_form($form, $form_state, $node, $group_id) {
   $form = array();
 
-  $form['#redirect'] = 'node/' . $node->nid;
-
   $form['nid'] = array(
     '#type' => 'value',
     '#value' => $node->nid,
@@ -588,12 +580,18 @@ function tripal_bulk_loader_delete_constant_set_form($form_state, $node, $group_
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_delete_constant_set_form_submit($form, $form_state) {
+function tripal_bulk_loader_delete_constant_set_form_submit($form, &$form_state) {
 
   $group_id = $form_state['values']['group_id'];
   $nid = $form_state['values']['nid'];
   if ($nid && $form_state['values']['confirm']) {
-    db_query("DELETE FROM {tripal_bulk_loader_constants} WHERE nid=:nid AND group_id=:group", array(':nid' => $nid, ':group' => $group_id))->execute();
+    $form_state['redirect'] = 'node/' . $nid;
+    $form_state['rebuild'] = FALSE;
+
+    db_delete('tripal_bulk_loader_constants')
+      ->condition('nid', $nid)
+      ->condition('group_id',$group_id)
+      ->execute();
     drupal_set_message(t('Constant set successfully deleted.'));
   }
 

+ 14 - 8
tripal_bulk_loader/includes/tripal_bulk_loader.loader.inc

@@ -13,7 +13,7 @@
  *
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_add_loader_job_form($form_state, $node) {
+function tripal_bulk_loader_add_loader_job_form($form, $form_state, $node) {
   $form = array();
 
   // --notify--
@@ -74,10 +74,10 @@ function tripal_bulk_loader_add_loader_job_form_submit($form, $form_state) {
       $job_id = tripal_add_job("Bulk Loading Job: $fname", 'tripal_bulk_loader', 'tripal_bulk_loader_load_data', $job_args, $user->uid);
 
       // add job_id to bulk_loader node
-      $success = db_query("UPDATE {tripal_bulk_loader} SET job_id=:job WHERE nid=:nid", array(':job' => $job_id, ':nid' => $form_state['values']['nid']))->execute();
-
-      // change status
-      db_query("UPDATE {tripal_bulk_loader} SET job_status=:status' WHERE nid=:nid", array(':status' => 'Submitted to Queue', ':nid' => $form_state['values']['nid']))->execute();
+      $success = db_update('tripal_bulk_loader')->fields(array(
+        'job_id' => $job_id,
+        'job_status' => 'Submitted to Queue'
+      ))->condition('nid',$form_state['values']['nid'])->execute();
     }
     else {
       drupal_set_message(t("Can not open %file. Job not scheduled.", array('%file' => $form_state['values']['file'])));
@@ -85,10 +85,14 @@ function tripal_bulk_loader_add_loader_job_form_submit($form, $form_state) {
   }
   elseif (preg_match('/Re-Submit Job/', $form_state['values']['op'])) {
     tripal_jobs_rerun($form_state['values']['job_id']);
-    db_query("UPDATE {tripal_bulk_loader} SET job_status=:status WHERE nid=:nid", array(':status' => 'Submitted to Queue', 'nid' => $form_state['values']['nid']))->execute();
+    $success = db_update('tripal_bulk_loader')->fields(array(
+        'job_status' => 'Submitted to Queue'
+      ))->condition('nid',$form_state['values']['nid'])->execute();
   }
   elseif (preg_match('/Cancel Job/', $form_state['values']['op'])) {
-    db_query("UPDATE {tripal_bulk_loader} SET job_status=:status WHERE nid=:nid", array(':status' => 'Job Cancelled', ':nid' => $form_state['values']['nid']))->execute();
+    $success = db_update('tripal_bulk_loader')->fields(array(
+        'job_status' => 'Job Cancelled'
+      ))->condition('nid',$form_state['values']['nid'])->execute();
     tripal_jobs_cancel($form_state['values']['job_id']);
   }
   elseif (preg_match('/Revert/', $form_state['values']['op'])) {
@@ -109,7 +113,9 @@ function tripal_bulk_loader_add_loader_job_form_submit($form, $form_state) {
     }
 
     // reset status
-    db_query("UPDATE {tripal_bulk_loader} SET job_status=:status WHERE nid=:nid", array(':status' => 'Reverted -Data Deleted', ':nid' => $form_state['values']['nid']))->execute();
+    $success = db_update('tripal_bulk_loader')->fields(array(
+        'job_status' => 'Reverted -Data Deleted'
+      ))->condition('nid',$form_state['values']['nid'])->execute();
   }
 
 }

+ 67 - 0
tripal_bulk_loader/theme/node--tripal-bulk-loader.tpl.php

@@ -0,0 +1,67 @@
+<div id="tripal_bulk_loader-base-box" class="tripal_bulk_loader-info-box tripal-info-box">
+  <div class="tripal_bulk_loader-info-box-title tripal-info-box-title">
+  	<?php if ($teaser) { print l($node->title, 'node/'.$node->nid); } ?>
+  </div>
+  <div class="tripal_bulk_loader-info-box-desc tripal-info-box-desc"></div>
+
+	<table id="tripal_bulk_loader-base-table" class="tripal_bulk_loader-table tripal-table tripal-table-vert">
+		<tr class="tripal_bulk_loader-table-odd-row tripal-table-odd-row">
+			<th>Job Name</th>
+			<td><?php print $node->loader_name;?></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-even-row tripal-table-even-row">
+			<th>Submitted By</th>
+			<td><span class="author"><?php //print theme('username', $node); ?></span></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-odd-row tripal-table-odd-row">
+			<th>Job Creation Date</th>
+			<td><?php print format_date($node->created, 'custom', "F j, Y, g:i a"); ?></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-even-row tripal-table-even-row">
+			<th>Last Updated</th>
+			<td><?php print format_date($node->changed, 'custom', "F j, Y, g:i a"); ?></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-odd-row tripal-table-odd-row">
+			<th>Template Name</th>
+			<td><?php print $node->template->name; ?></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-even-row tripal-table-even-row">
+			<th>Data File</th>
+			<td><?php print $node->file;?></td>
+		</tr>
+		<tr class="tripal_bulk_loader-table-odd-row tripal-table-odd-row">
+			<th>Job Status</th>
+			<td><?php print $node->job_status;?></td>
+		</tr>
+		<?php if (isset($node->job)) { if (isset($node->job->progress)) { ?>
+		<tr class="tripal_bulk_loader-table-even-row tripal-table-even-row">
+			<th>Job Progress</th>
+			<td><?php print $node->job->progress . '% (' . l('view job', 'admin/tripal/tripal_jobs/view/' . $node->job_id) . ')';?></td>
+		</tr>
+		<?php }} ?>
+	</table>
+</div>
+
+<?php if (!$teaser) { ?>
+<?php print drupal_render(drupal_get_form('tripal_bulk_loader_add_loader_job_form', $node)); ?>
+
+  <?php if (!empty($node->inserted_records)) {
+    print '<h3>Loading Summary</h3>';
+    $rows = array();
+    $total = 0;
+    foreach ($node->inserted_records as $r) {
+      $row = array();
+      $row[] = $r->table_inserted_into;
+      $row[] = $r->num_inserted;
+      $rows[] = $row;
+      $total = $total + $r->num_inserted;
+    }
+    $rows[] = array('<b>TOTAL</b>','<b>'.$total.'</b>');
+    print theme('table',array('header'=>array('Chado Table', 'Number of Records Inserted'), 'rows'=>$rows));
+  } ?>
+  <br>
+
+  <?php print drupal_render(drupal_get_form('tripal_bulk_loader_set_constants_form', $node)); ?>
+
+<?php print theme('tripal_bulk_loader_template', $node->template->template_id); ?>
+<?php } ?>

+ 1 - 1
tripal_bulk_loader/theme/tripal_bulk_loader_template.tpl.php

@@ -12,7 +12,7 @@
 			if (preg_match('/table field/', $field['type'])) {
 				$field['table'] = $table;
 				$field['record'] = $record;
-				$sheet = $field['spreadsheet sheet'];
+				$sheet = 0;//$field['spreadsheet sheet'];
 				$column = $field['spreadsheet column'];
 				$fields[$sheet.'-'.$column][] = $field;
 			} elseif ($field['type'] == 'constant') {

+ 131 - 101
tripal_bulk_loader/tripal_bulk_loader.module

@@ -236,13 +236,11 @@ function tripal_bulk_loader_views_api() {
  */
 function tripal_bulk_loader_theme() {
   return array(
-    'node' => array(
-      'variables' => array('node' => NULL),
+    'node__tripal_bulk_loader' => array(
+      'template' => 'node--tripal-bulk-loader',
       'path' => drupal_get_path('module', 'tripal_bulk_loader') . '/theme',
-    ),
-    'tripal_bulk_loader_set_constants_form' => array(
-      'function' => 'theme_tripal_bulk_loader_set_constants_form',
-      'variables' => array('form' => NULL),
+      'render element' => 'node',
+      'base hook' => 'node',
     ),
     'tripal_bulk_loader_template' => array(
       'variables' => array('template_id' => NULL),
@@ -250,7 +248,7 @@ function tripal_bulk_loader_theme() {
       'path' => drupal_get_path('module', 'tripal_bulk_loader') . '/theme',
     ),
     'tripal_bulk_loader_modify_template_base_form' => array(
-      'arguments' => array('form' => NULL),
+      'variables' => array('form' => NULL),
       'template' => 'tripal_bulk_loader_modify_template_base_form',
       'path' => drupal_get_path('module', 'tripal_bulk_loader') . '/theme',
       'render element' => 'form'
@@ -269,7 +267,6 @@ function tripal_bulk_loader_theme() {
     */
     'tripal_bulk_loader_admin' => array(
       'template' => 'tripal_bulk_loader_admin',
-      'variables' =>  array(NULL),
       'path' => drupal_get_path('module', 'tripal_bulk_loader') . '/theme',
     ),
   );
@@ -373,8 +370,9 @@ function tripal_bulk_loader_form($node, $form_state) {
     $node = (object) $node;
   }
 
-  $sql = "SELECT * FROM {tripal_bulk_loader_template}";
-  $results = db_query($sql)->execute();
+  $results = db_select('tripal_bulk_loader_template', 't')
+              ->fields('t', array('template_id','name'))
+              ->execute();
   $templates = array();
   foreach ($results as $template) {
     $templates [$template->template_id] = $template->name;
@@ -400,7 +398,7 @@ function tripal_bulk_loader_form($node, $form_state) {
     '#title'         => t('Loading Job Name'),
     '#weight'        => -10,
     '#required'      => TRUE,
-    '#default_value' => $node->loader_name
+    '#default_value' => (isset($node->loader_name)) ? $node->loader_name : ''
   );
 
   $form['loader']['template_id'] = array(
@@ -410,7 +408,7 @@ function tripal_bulk_loader_form($node, $form_state) {
     '#options'       => $templates,
     '#weight'        => -9,
     '#required'      => TRUE,
-    '#default_value' => $node->template_id,
+    '#default_value' => (isset($node->template_id)) ? $node->template_id : current($templates),
   );
 
   $form['loader']['file']= array(
@@ -418,7 +416,7 @@ function tripal_bulk_loader_form($node, $form_state) {
     '#title'         => t('Data File'),
     '#description'   => t('Please specify the data file to be loaded. This must be a tab-delimited text file with UNIX line endings.'),
     '#weight'        => -8,
-    '#default_value' => $node->file,
+    '#default_value' => (isset($node->file)) ? $node->file : '',
     '#maxlength'     => 1024,
   );
 
@@ -427,7 +425,7 @@ function tripal_bulk_loader_form($node, $form_state) {
     '#title' => t('File has a Header'),
     '#options' => array( 1 => 'Yes', 2 => 'No'),
     '#weight' => -7,
-    '#default_value' => $node->file_has_header,
+    '#default_value' => (isset($node->file_has_header)) ? $node->file_has_header : 1,
   );
 
   $form['loader']['keep_track_inserted'] = array(
@@ -438,7 +436,7 @@ function tripal_bulk_loader_form($node, $form_state) {
       .'successfully inserted into each table.'),
     '#options' => array( 1 => 'Yes', 0 => 'No'),
     '#weight' => -7,
-    '#default_value' => (isset($node->keep_track_inserted)) ? $node->keep_track_inserted : variable_get('tripal_bulk_loader_keep_track_inserted', FALSE),
+    '#default_value' => (isset($node->keep_track_inserted)) ? $node->keep_track_inserted : variable_get('tripal_bulk_loader_keep_track_inserted', 0),
   );
 
   return $form;
@@ -448,102 +446,123 @@ function tripal_bulk_loader_form($node, $form_state) {
 /**
  * Implements node_load
  *
+ * D7 Changes: now loads all $nodes at once so need to add loops
  * @ingroup tripal_bulk_loader
  */
-function tripal_bulk_loader_load($node) {
-  $sql = "SELECT * FROM {tripal_bulk_loader} WHERE nid = :nid";
-  $node = db_query($sql, array(':nid' => $node->nid))->fetchObject();
-
-  $node->title = 'Bulk Loading Job: ' . $node->loader_name;
-
-  // Add job details
-  $progress = tripal_bulk_loader_progess_file_get_progress($node->job_id);
-  $sql = "SELECT * FROM {tripal_jobs} WHERE job_id=:job_id";
-  $node->job = db_query($sql, array(':job_id' => $node->job_id))->fetchObject();
-
-  // Add the loader template
-  $sql = "SELECT * FROM {tripal_bulk_loader_template} WHERE template_id=:template";
-  $results = db_query($sql, array(':template' => $node->template_id))->fetchObject();
-  $template = unserialize($results->template_array);
-  $node->template = $results;
-  $node->template->template_array = $template;
+function tripal_bulk_loader_load($nodes) {
+
+  // Loading Job Details
+  // Add fields from the tripal_bulk_loader
+  $result = db_select('tripal_bulk_loader', 'tbl')
+    ->fields('tbl')
+    ->condition('nid',array_keys($nodes),'IN')
+    ->execute();
+  foreach ($result as $record) {
+    $nodes[$record->nid]->loader_name = $record->loader_name;
+    $nodes[$record->nid]->template_id = $record->template_id;
+    $nodes[$record->nid]->file = $record->file;
+    $nodes[$record->nid]->job_id = $record->job_id;
+    $nodes[$record->nid]->job_status = $record->job_status;
+    $nodes[$record->nid]->file_has_header = $record->file_has_header;
+    $nodes[$record->nid]->keep_track_inserted = $record->keep_track_inserted;
+
+    $nodes[$record->nid]->exposed_fields = array();
+    $nodes[$record->nid]->constants = array();
+  }
 
-  // Add inserted records
-  $sql = 'SELECT * FROM {tripal_bulk_loader_inserted} WHERE nid=:nid';
-  $resource = db_query($sql, array(':nid' => $node->nid))->execute();
-  foreach ($resource as $r) {
-    $r->num_inserted = sizeof(preg_split('/,/', $r->ids_inserted));
-    $node->inserted_records->{$r->table_inserted_into} = $r;
+  // Job Details
+  // Add fields from tripal_jobs
+  $result = db_query('SELECT tbl.nid, tj.* FROM {tripal_jobs} tj '
+    . 'LEFT JOIN {tripal_bulk_loader} tbl ON tbl.job_id=tj.job_id '
+    . 'WHERE tbl.nid IN (:nids)',
+    array(':nids' => array_keys($nodes))
+  );
+  foreach ($result as $record) {
+    $nodes[$record->nid]->job = $record;
   }
 
-  // Add exposed field list
-  $node->exposed_fields = array();
-  if ($template) {
-    foreach ($template as $record_id => $record) {
-      foreach ($record['fields'] as $field_id => $field) {
-        if ($field['exposed']) {
-          $node->exposed_fields[] = array(
-            'record_id' => $record_id,
-            'field_id' => $field_id,
-            'title' => $field['title'],
-          );
+  // Add the Loader Template
+  // Add fields from tripal_bulk_loader_template
+  $result = db_query('SELECT tbl.nid, tblt.* FROM {tripal_bulk_loader_template} tblt '
+    . 'LEFT JOIN {tripal_bulk_loader} tbl ON tbl.template_id=tblt.template_id '
+    . 'WHERE tbl.nid IN (:nids)',
+    array(':nids' => array_keys($nodes))
+  );
+  foreach ($result as $dbrecord) {
+    $nodes[$dbrecord->nid]->template = $dbrecord;
+    $nodes[$dbrecord->nid]->template->template_array = unserialize($dbrecord->template_array);
+
+    // Add exposed field list
+    $template = $nodes[$dbrecord->nid]->template->template_array;
+    $nodes[$dbrecord->nid]->exposed_fields = array();
+    if ($template) {
+      foreach ($template as $record_id => $record) {
+        foreach ($record['fields'] as $field_id => $field) {
+          if (isset($field['exposed'])) {
+            if ($field['exposed']) {
+              $nodes[$dbrecord->nid]->exposed_fields[] = array(
+                'record_id' => $record_id,
+                'field_id' => $field_id,
+                'title' => $field['title'],
+              );
+            }
+          }
         }
       }
     }
-
-    if (empty($node->exposed_fields)) {
-      $node->exposed_fields[] = array();
-    }
   }
 
+  // Add inserted records
+  // Add fields from tripal_bulk_loader_inserted
+  $result = db_query('SELECT tbli.* FROM {tripal_bulk_loader_inserted} tbli '
+    . 'WHERE tbli.nid IN (:nids)',
+    array(':nids' => array_keys($nodes))
+  );
+  foreach ($result as $record) {
+    $record->num_inserted = sizeof(preg_split('/,/', $record->ids_inserted));
+    $nodes[$record->nid]->inserted_records->{$record->table_inserted_into} = $record;
+  }
 
   // Add constants
-  $sql = 'SELECT * FROM {tripal_bulk_loader_constants} WHERE nid=:nid ORDER BY group_id, record_id, field_id';
-  $resource = db_query($sql, array(':nid' => $node->nid))->execute();
-  foreach ($resource as $r) {
-    $node->constants[$r->group_id][$r->record_id][$r->field_id] = array(
-      'constant_id' => $r->constant_id,
-      'group_id' => $r->group_id,
-      'chado_table' => $r->chado_table,
-      'chado_field' => $r->chado_field,
-      'record_id' => $r->record_id,
-      'field_id' => $r->field_id,
-      'value' => $r->value
+  // Add fields from tripal_bulk_loader_constants
+  $result = db_query('SELECT tblc.* FROM {tripal_bulk_loader_constants} tblc '
+    . 'WHERE tblc.nid IN (:nids) '
+    . 'ORDER BY group_id, record_id, field_id',
+    array(':nids' => array_keys($nodes))
+  );
+  foreach ($result as $record) {
+    $nodes[$record->nid]->constants[$record->group_id][$record->record_id][$record->field_id] = array(
+      'constant_id' => $record->constant_id,
+      'group_id' => $record->group_id,
+      'chado_table' => $record->chado_table,
+      'chado_field' => $record->chado_field,
+      'record_id' => $record->record_id,
+      'field_id' => $record->field_id,
+      'value' => $record->value
     );
   }
-  if (!$node->constants) {
-    $node->constants[] = array();
-  }
 
-  return $node;
 }
 
 /**
  * Implements node_insert
  * Insert the data from the node form on Create content
  *
+ * D7 Changes: seems to need db_insert; not recommended to change $node
  * @ingroup tripal_bulk_loader
  */
 function tripal_bulk_loader_insert($node) {
 
-  // Insert into tripal_bulk_loader
-  $sql = "INSERT INTO {tripal_bulk_loader} (nid, loader_name, template_id, file, file_has_header, job_status, keep_track_inserted) VALUES (:nid, :loader, :template, :file, :header, :status, :ids)";
-  db_query($sql,
-    array(':nid' => $node->nid,
-      ':loader' => $node->loader_name,
-      ':template' => $node->template_id,
-      ':file' => $node->file,
-      ':header' => $node->has_header,
-      ':status' => 'Initialized',
-      ':ids' => $node->keep_track_inserted
-    )
-  )->execute();
-
-  // Update title
-  $node->title =$node->loader_name;
-  drupal_write_record('node', $node, 'nid');
-  drupal_write_record('node_revision', $node, 'nid');
-
+  $node->title = $node->loader_name;
+  db_insert('tripal_bulk_loader')->fields(array(
+    'nid' => $node->nid,
+    'loader_name' => $node->loader_name,
+    'template_id' => $node->template_id,
+    'file' => $node->file,
+    'file_has_header' => $node->has_header,
+    'job_status' => 'Initialized',
+    'keep_track_inserted' => $node->keep_track_inserted
+  ))->execute();
   drupal_set_message(t('After reviewing the details, please Submit this Job (by clicking the "Submit Job" button below). No data will be loaded until the submitted job is reached in the queue.'));
 
 }
@@ -555,32 +574,39 @@ function tripal_bulk_loader_insert($node) {
  * @ingroup tripal_bulk_loader
  */
 function tripal_bulk_loader_delete($node) {
-  $sql = "DELETE FROM {tripal_bulk_loader} WHERE nid = :nid";
-  db_query($sql, array(':nid' => $node->nid))->execute();
+  $tables = array();
+  $tables[] = 'tripal_bulk_loader';
+  $tables[] = 'tripal_bulk_loader_constants';
+  $tables[] = 'tripal_bulk_loader_inserted';
+  foreach($tables as $table) {
+    db_delete($table)
+      ->condition('nid',$node->nid)
+      ->execute();
+  }
 }
 
 /**
  * Implements node_update
  * Updates the data submitted by the node form on edit
  *
+ * D7 Changes: db_update is much easier
  * @ingroup tripal_bulk_loader
  */
 function tripal_bulk_loader_update($node) {
 
   // Update tripal_bulk_loader
-  $sql = "UPDATE {tripal_bulk_loader} SET nid = :nid, loader_name = :loader, template_id = :template, file = :file, file_has_header = :header, keep_track_inserted = :ids WHERE nid = :wherenid";
-  db_query($sql,
-    array(':nid' => $node->nid,
-      ':loader' => $node->loader_name,
-      ':template' => $node->template_id,
-      ':file' => $node->file,
-      ':header' => $node->has_header,
-      ':ids' => $node->keep_track_inserted,
-      ':wherenid' => $node->nid
-    )
-  )->execute();
+  db_update('tripal_bulk_loader')->fields(array(
+    'nid' => $node->nid,
+    'loader_name' => $node->loader_name,
+    'template_id' => $node->template_id,
+    'file' => $node->file,
+    'file_has_header' => $node->has_header,
+    'keep_track_inserted' => $node->keep_track_inserted
+  ))->condition('nid',$node->nid)->execute();
 
   // Add a job if the user want to load the data
+  /**
+  No job checkbox in the form
   global $user;
   if ($node->job) {
     $job_args[0] =$node->loader_name;
@@ -594,6 +620,7 @@ function tripal_bulk_loader_update($node) {
       drupal_set_message(t("Can not open %file. Job not scheduled.", array('%file' => $node->file)));
     }
   }
+  */
 
 }
 
@@ -606,8 +633,11 @@ function tripal_bulk_loader_update($node) {
  */
 function tripal_bulk_loader_preprocess_tripal_bulk_loader_template(&$variables) {
 
-  $sql = "SELECT * FROM {tripal_bulk_loader_template} WHERE template_id=%d";
-  $template = db_query($sql, array(':template' => $variables['template_id']))->fetchObject();
+  $resource = db_select('tripal_bulk_loader_template','t')
+    ->fields('t')
+    ->condition('template_id', $variables['template_id'])
+    ->execute();
+  $template = $resource->fetchObject();
   $template->template_array = unserialize($template->template_array);
   $variables['template'] = $template;