Sfoglia il codice sorgente

Tripal Bulk Loader module let users create template for loading tab-delimited data into chado and submit a job to load data.

ccheng 14 anni fa
parent
commit
b1f95f5102

+ 117 - 0
tripal_bulk_loader/tripal_bulk_loader.admin.inc

@@ -0,0 +1,117 @@
+<?php
+/*******************************************************************************
+ * tripal_bulk_loader_admin_template
+ */
+function tripal_bulk_loader_admin_template () {
+	$add_url = url("admin/tripal/tripal_bulk_loader_template/add");
+   $output = "<a href=\"$add_url\">Create a new bulk loader template</a><br>"; 
+   $del_url = url("admin/tripal/tripal_bulk_loader_template/delete");
+   $output .= "<a href=\"$del_url\">Delete a bulk loader template</a>";
+   return $output;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_admin_template_add
+ */
+function tripal_bulk_loader_admin_template_add () {
+	return drupal_get_form('tripal_bulk_loader_admin_template_form');
+}
+
+function tripal_bulk_loader_admin_template_form (&$form_state = NULL) {
+	$form = array();
+	$form['template_name'] = array(
+   	'#type'          => 'textfield',
+      '#title'         => t('Template Name'),
+      '#weight'        => 0,
+		'#attributes' => array('id' => 'tripal-bulk-loader-template-name'),
+      '#required'      => TRUE
+	);
+	$form['datafile'] = array(
+   	'#type' => 'fieldset',
+      '#title' => t("From"),
+      '#weight'        => 1,
+		'#attributes' => array('id' => 'tripal-bulk-loader-template-from-field'),
+	);
+	$form['template'] = array(
+   	'#type' => 'fieldset',
+      '#title' => t("To"),
+      '#weight'        => 1,
+		'#attributes' => array('id' => 'tripal-bulk-loader-template-to-field'),
+	);
+	$form['submit'] = array (
+     	'#type'         => 'submit',
+     	'#value'        => t('Create'),
+     	'#weight'       => 2,
+     	'#executes_submit_callback' => TRUE,
+	);
+	return $form;
+}
+
+/************************************************************************
+* tripal_bulk_loader_admin_template_form_submit
+*/
+function tripal_bulk_loader_admin_template_form_submit($form, &$form_state){
+	$name = $form_state['values']['template_name'];
+	$template_array = "array('DUMMY' => 'TEMPLATE ARRAY')";
+	$sql = "INSERT INTO {tripal_bulk_loader_template} (name, template_array) VALUES ('%s', '%s')";
+	if (db_query($sql, $name, $template_array)) {
+		drupal_set_message("Bulk loader template '$name' added.");
+	}
+}
+
+/************************************************************************
+* tripal_bulk_loader_admin_template_delete
+*/
+function tripal_bulk_loader_admin_template_delete () {
+	return drupal_get_form('tripal_bulk_loader_admin_template_del_form');
+}
+/************************************************************************
+* tripal_bulk_loader_admin_template_del_from
+*/
+function tripal_bulk_loader_admin_template_del_form (&$form_state = NULL) {
+	$form = array();
+	$sql = "SELECT * FROM {tripal_bulk_loader_template}";
+	$results = db_query($sql);
+	$templates = array();
+	while ($template = db_fetch_object($results)) {
+		$templates [$template->template_id] = $template->name;
+	}
+	if ($templates) {
+		$form['label'] = array(
+   	'#type'          => 'item',
+      '#title'         => t('Select a template to delete'),
+      '#weight'        => 0,
+		);
+		$form['template_name'] = array(
+   	'#type'          => 'select',
+      '#title'         => t('Template Name'),
+		'#options'       => $templates,
+      '#weight'        => 1,
+      '#required'      => TRUE
+		);
+		$form['submit'] = array (
+     	'#type'         => 'submit',
+     	'#value'        => t('Delete'),
+     	'#weight'       => 2,
+     	'#executes_submit_callback' => TRUE,
+		);
+	} else {
+		$form['label'] = array(
+   	'#type'          => 'item',
+      '#description'         => t('No template available'),
+      '#weight'        => 0,
+		);
+	}
+	return $form;
+}
+/************************************************************************
+* function tripal_bulk_loader_admin_template_del_form_submit
+*/
+function tripal_bulk_loader_admin_template_del_form_submit($form, &$form_state){
+	$template = $form_state['values']['template_name'];
+	$name = db_result(db_query("SELECT name FROM {tripal_bulk_loader_template} WHERE template_id = $template"));
+	$sql = "DELETE FROM {tripal_bulk_loader_template} WHERE template_id = %d";
+	if (db_query($sql, $template)) {
+		drupal_set_message("Bulk loader template '$name' deleted.");
+	}
+}

+ 7 - 0
tripal_bulk_loader/tripal_bulk_loader.info

@@ -0,0 +1,7 @@
+name = Tripal Bulk Loader
+description = A module for uploading tab-delimit data into GMOD chado database using templates.
+core = 6.x
+project = tripal_bulk_loader
+package = Tripal
+dependencies[] = tripal_core
+version = "0.3a"

+ 64 - 0
tripal_bulk_loader/tripal_bulk_loader.install

@@ -0,0 +1,64 @@
+<?php
+
+/*******************************************************************************
+* tripal_bulk_loader_install
+*/
+function tripal_bulk_loader_install(){
+   drupal_install_schema('tripal_bulk_loader');
+}
+
+/*******************************************************************************
+* tripal_bulk_loader_uninstall
+*/
+function tripal_bulk_loader_uninstall(){
+   drupal_uninstall_schema('tripal_bulk_loader');
+}
+
+/*******************************************************************************
+* tripal_bulk_loader_schema
+*/
+function tripal_bulk_loader_schema() {
+	$schema = array();
+	$schema['tripal_bulk_loader'] = array(
+      'fields' => array(
+         'nid' => array(
+            'type' => 'int',
+            'unsigned' => TRUE,
+            'not null' => TRUE,
+			),
+         'loader_name' => array(
+            'type' => 'varchar',
+			),
+         'template_id' => array(
+            'type' => 'varchar',
+			),
+			'file' => array(
+				'type' => 'varchar',
+			)
+		),
+  		'primary key' => array('nid'),
+  		'unique keys' => array(
+    		'name' => array('loader_name')
+		),
+	);
+	$schema['tripal_bulk_loader_template'] = array(
+      'fields' => array(
+         'template_id' => array(
+            'type' => 'serial',
+            'unsigned' => TRUE,
+            'not null' => TRUE,
+			),
+			'name' => array(
+            'type' => 'varchar',
+			),
+         'template_array' => array(
+            'type' => 'varchar',
+			)
+		),
+  		'primary key' => array('template_id'),
+		'unique keys' => array(
+    		'name' => array('name')
+		),
+	);
+	return $schema;
+}

+ 273 - 0
tripal_bulk_loader/tripal_bulk_loader.module

@@ -0,0 +1,273 @@
+<?php
+/*******************************************************************************
+ * tripal_bulk_loader_init
+ */
+function tripal_bulk_loader_init(){
+	// Add javascript and style sheet
+	drupal_add_css(drupal_get_path('theme', 'tripal').'/css/tripal_bulk_loader.css');
+}
+/*******************************************************************************
+ * tripal_bulk_loader_menu
+ */
+function tripal_bulk_loader_menu() {
+  $items = array();
+   // Show all loaders
+   $items['/tripal_bulk_loaders'] = array(
+     'title' => 'Tripal Bulk Loaders',
+     'description' => 'Tripal bulk loaders for loading tab-delimited file into chado database',
+     'page callback' => 'tripal_bulk_loader_list',
+     'access arguments' => array('access tripal_bulk_loader'),
+     'type' => MENU_NORMAL_ITEM,
+   );
+   // Admin page to create the template
+   $items['admin/tripal/tripal_bulk_loader_template'] = array(
+      'title' => 'Bulk Loader Template',
+      'description' => 'Create loader template for loading tab-delimited data',
+    	'page callback' => 'tripal_bulk_loader_admin_template',
+      'access arguments' => array('administer site configuration'),
+      'type' => MENU_NORMAL_ITEM,   
+		'file' => 'tripal_bulk_loader.admin.inc',
+	);
+	$items['admin/tripal/tripal_bulk_loader_template/add'] = array(
+      'title' => 'Create Bulk Loader Template',
+      'description' => 'Create loader template for loading tab-delimited data',
+      'page callback' => 'tripal_bulk_loader_admin_template_add',
+      'access arguments' => array('administer site configuration'),
+      'type' => MENU_NORMAL_ITEM,   
+		'file' => 'tripal_bulk_loader.admin.inc',
+	);
+	$items['admin/tripal/tripal_bulk_loader_template/delete'] = array(
+      'title' => 'Delete Bulk Loader Template',
+      'description' => 'Delete bulk loader template',
+      'page callback' => 'tripal_bulk_loader_admin_template_delete',
+      'access arguments' => array('administer site configuration'),
+      'type' => MENU_NORMAL_ITEM,   
+		'file' => 'tripal_bulk_loader.admin.inc',
+	);
+  return $items;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_list
+ */
+function tripal_bulk_loader_list () {
+	return "Loaders";
+}
+
+/*******************************************************************************
+ *  tripal_bulk_loader_access
+ */
+function tripal_bulk_loader_access($op, $node, $account){
+	if ($op == 'create') {
+		return user_access('create tripal_bulk_loader', $account);
+	}
+	if ($op == 'update') {
+		if (user_access('edit tripal_bulk_loader', $account)) {
+			return TRUE;
+		}
+	}
+	if ($op == 'delete') {
+		if (user_access('delete tripal_bulk_loader', $account)) {
+			return TRUE;
+		}
+	}
+	if ($op == 'view') {
+		if (user_access('access tripal_bulk_loader', $account)) {
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_perm
+ */
+function tripal_bulk_loader_perm(){
+	return array(
+      'access tripal_bulk_loader',
+      'create tripal_bulk_loader',
+      'delete tripal_bulk_loader',
+      'edit tripal_bulk_loader',
+	);
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_node_info
+ */
+function tripal_bulk_loader_node_info() {
+	$nodes = array();
+	$nodes['tripal_bulk_loader'] = array(
+      'name' => t('Bulk Loader'),
+      'module' => 'tripal_bulk_loader',
+      'description' => t('A bulk loader for inserting tab-delimited data into chado database'),
+      'has_title' => TRUE,
+      'has_body' => FALSE,
+      'locked' => TRUE
+	);
+	return $nodes;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_form
+ */
+function tripal_bulk_loader_form ($node){
+   $form = array();
+   $sql = "SELECT * FROM {tripal_bulk_loader_template}";
+   $results = db_query($sql);
+   $templates = array ();
+   while ($template = db_fetch_object ($results)) {
+   	$templates [$template->template_id] = $template->name;
+   }
+   if (!$templates) {
+   	$form['label'] = array(
+   	'#type' => 'item',
+      '#description' => t("Loader template needs to be created before any bulk loader can be added. Go to 'Tripal Management > Bulk Loader Template' to create the template."),
+      '#weight'        => 0,
+		);
+		return $form;
+   }
+   $form['loader_name'] = array(
+   	'#type'          => 'textfield',
+      '#title'         => t('Loader Name'),
+      '#weight'        => -3,
+      '#required'      => TRUE,
+   	'#default_value' => $node->loader_name
+   );
+   
+   $sql = "SELECT * FROM {tripal_bulk_loader_template}";
+   $results = db_query($sql);
+   $templates = array ();
+   while ($template = db_fetch_object ($results)) {
+   	$templates [$template->template_id] = $template->name;
+   }
+   $form['template_id'] = array(
+      '#type' => 'select',
+      '#title' => t('Template'),
+   	'#description'   => t('Please specify a template for this loader'),
+    	'#options'       => $templates,
+   	'#weight'        => -2,
+      '#required'      => TRUE,
+   	'#default_value' => $node->template_id
+   );
+   $form['file']= array(
+      '#type'          => 'textfield',
+      '#title'         => t('Data File'),
+      '#description'   => t('Please specify the data file to be loaded.'),
+      '#weight'        => -1,
+   	'#default_value' => $node->file
+   );
+   $form['job']= array(
+      '#type'          => 'checkbox',
+      '#title'         => t('Submit a job to load the data file using selected template'),
+      '#weight'        => 0
+   );
+   return $form;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_theme
+ */
+function tripal_bulk_loader_theme() {
+  return array(
+    'tripal_bulk_loader_node_form' => array(
+      'arguments' => array('form' => NULL),
+    ),
+  );
+}
+
+/*******************************************************************************
+ * theme_tripal_bulk_loader_node_form
+ */
+function theme_tripal_bulk_loader_node_form($form) {
+	// Do not show [Save] and [Preview] buttons if loader template is not available
+	if($form['label']['#type'] == "item") {
+		unset($form['buttons']);
+	}
+	unset($form['menu']);
+	unset($form['revision_information']);
+	unset($form['author']);
+	unset($form['path']);
+	unset($form['comment_settings']);
+	unset($form['options']);
+	return drupal_render($form);
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_load
+ */
+function tripal_bulk_loader_load($node){
+	$sql = "SELECT * FROM {tripal_bulk_loader} WHERE nid = %d";
+	$properties = db_fetch_object(db_query($sql, $node->nid));
+	return $properties;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_view
+ */
+function tripal_bulk_loader_view ($node, $teaser = FALSE, $page = FALSE) {
+	if (!$teaser) {
+		$node = node_prepare($node, $teaser);
+	}
+	return $node;
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_insert
+ */
+function tripal_bulk_loader_insert ($node) {
+	$sql = "INSERT INTO {tripal_bulk_loader} (nid, loader_name, template_id, file) VALUES (%d, '%s', %d, '%s')";
+	db_query($sql, $node->nid, $node->loader_name, $node->template_id, $node->file);
+	$node->title =$node->loader_name;
+	drupal_write_record('node',$node,'nid');
+	drupal_write_record('node_revision',$node,'nid');	
+	// Add a job if the user want to load the data
+	global $user;
+	if($node->job) {
+		$job_args[0] =$node->loader_name;
+		$job_args[1] = $node->template_id;
+		$job_args[2] = $node->file;
+		if (is_readable($node->file)) {
+			$fname = preg_replace("/.*\/(.*)/", "$1", $node->file);
+			tripal_add_job("Bulk Load: $fname",'tripal_bulk_loader', 'tripal_bulk_loader_load_data', $job_args, $user->uid);
+		} else {
+			drupal_set_message("Can not open $node->file. Job not scheduled.");
+		}
+	}
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_delete
+ */
+function tripal_bulk_loader_delete ($node) {
+	$sql = "DELETE FROM {tripal_bulk_loader} WHERE nid = %d";
+	db_query($sql, $node->nid);
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_update
+ */
+function tripal_bulk_loader_update ($node) {
+	$sql = "UPDATE {tripal_bulk_loader} SET nid = %d, loader_name = '%s', template_id = %d, file = '%s' WHERE nid = %d";
+	db_query($sql, $node->nid, $node->loader_name, $node->template_id, $node->file, $node->nid);
+	// Add a job if the user want to load the data
+	global $user;
+	if($node->job) {
+		$job_args[0] =$node->loader_name;
+		$job_args[1] = $node->template_id;
+		$job_args[2] = $node->file;
+		if (is_readable($node->file)) {
+			$fname = preg_replace("/.*\/(.*)/", "$1", $node->file);
+			tripal_add_job("Bulk Load: $fname",'tripal_bulk_loader', 'tripal_bulk_loader_load_data', $job_args, $user->uid);
+		} else {
+			drupal_set_message("Can not open $node->file. Job not scheduled.");
+		}
+	}
+}
+
+/*******************************************************************************
+ * tripal_bulk_loader_load_data
+ */
+function tripal_bulk_loader_load_data ($loader_name, $template_id, $file) {
+	
+
+}