|  | @@ -0,0 +1,837 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +// $Id:
 | 
	
		
			
				|  |  | +// Copyright 2009 Clemson University
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * Note: When we pull information for an analysis from chado database. We use
 | 
	
		
			
				|  |  | + * 'analysisname' instead of just 'name' to avoid name collision with drupal's
 | 
	
		
			
				|  |  | + * node->name variable. Therefore, the SQL statement used is 'SELECT name AS
 | 
	
		
			
				|  |  | + * analysisname FROM Analysis', instead of 'SELECT name FROM Analysis'. All
 | 
	
		
			
				|  |  | + * other node variables have exact same name as the column name.
 | 
	
		
			
				|  |  | + ******************************************************************************/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*************************************************************************
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  | +function tripal_analysis_register_child($modulename){
 | 
	
		
			
				|  |  | +   $sql = "INSERT INTO {tripal_analysis} (modulename) VALUES ('%s')";
 | 
	
		
			
				|  |  | +   db_query($sql, $modulename);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*************************************************************************
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  | +function tripal_analysis_unregister_child($modulename){
 | 
	
		
			
				|  |  | +   if (db_table_exists('tripal_analysis')) {
 | 
	
		
			
				|  |  | +      $sql = "DELETE FROM {tripal_analysis} WHERE modulename = '%s'";
 | 
	
		
			
				|  |  | +      db_query($sql, $modulename);
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/******************************************************************************
 | 
	
		
			
				|  |  | + * Tripal Analysis lets users display/hide analysis results associated
 | 
	
		
			
				|  |  | + * with a tripal feature. Load javascript when module initialized
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_init(){
 | 
	
		
			
				|  |  | +   drupal_add_js(drupal_get_path('theme', 'tripal').
 | 
	
		
			
				|  |  | +                                 '/js/tripal_analysis.js');
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * tripal_analysis_menu()
 | 
	
		
			
				|  |  | + * HOOK: Implementation of hook_menu()
 | 
	
		
			
				|  |  | + * Entry points and paths of the module
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_menu() {
 | 
	
		
			
				|  |  | +	// Display available analyses
 | 
	
		
			
				|  |  | +	$items['analyses'] = array(
 | 
	
		
			
				|  |  | +      'menu_name' => ('primary-links'), //Enable the 'Analysis' primary link
 | 
	
		
			
				|  |  | +      'title' => t('Analyses'),
 | 
	
		
			
				|  |  | +      'page callback' => 'tripal_analysis_show_analyses',
 | 
	
		
			
				|  |  | +      'access arguments' => array('access chado_analysis content'),
 | 
	
		
			
				|  |  | +      'type' => MENU_NORMAL_ITEM
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	//Sync analysis
 | 
	
		
			
				|  |  | +	$items['chado_sync_analyses'] = array(
 | 
	
		
			
				|  |  | +     'title' => t('Sync Data'),
 | 
	
		
			
				|  |  | +     'page callback' => 'tripal_analysis_sync_analyses',
 | 
	
		
			
				|  |  | +     'access arguments' => array('administer site configuration'),
 | 
	
		
			
				|  |  | +     'type' => MENU_CALLBACK
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	// Tripal Analysis administrative settings
 | 
	
		
			
				|  |  | +	$items['admin/tripal/tripal_analysis'] = array(
 | 
	
		
			
				|  |  | +      'title' => 'Analyses',
 | 
	
		
			
				|  |  | +      'description' => 'Settings for the displays of analysis results.',
 | 
	
		
			
				|  |  | +      'page callback' => 'drupal_get_form',
 | 
	
		
			
				|  |  | +      'page arguments' => array('tripal_analysis_admin'),
 | 
	
		
			
				|  |  | +      'access arguments' => array('administer site configuration'),
 | 
	
		
			
				|  |  | +      'type' => MENU_NORMAL_ITEM,
 | 
	
		
			
				|  |  | +      'file' => 'tripal_analysis.admin.inc',
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	return $items;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * Display the summary view of analyses when click on the 'Analyses'
 | 
	
		
			
				|  |  | + * primary-link
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_show_analyses (){
 | 
	
		
			
				|  |  | +	// Show libraries stored in Drupal's {chado_analysis} table
 | 
	
		
			
				|  |  | +	$sql = "SELECT COUNT(analysis_id) FROM {chado_analysis}";
 | 
	
		
			
				|  |  | +	$no_ana = db_result(db_query ($sql));
 | 
	
		
			
				|  |  | +	if($no_ana != 0) {
 | 
	
		
			
				|  |  | +		$analyses = get_chado_analyses ();
 | 
	
		
			
				|  |  | +		return theme('tripal_analysis_analysis_table', $analyses);
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		return t("No analysis available at this time.");
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  Provide information to drupal about the node types that we're creating
 | 
	
		
			
				|  |  | + *  in this module
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_node_info() {
 | 
	
		
			
				|  |  | +	$nodes = array();
 | 
	
		
			
				|  |  | +	$nodes['chado_analysis'] = array(
 | 
	
		
			
				|  |  | +      'name' => t('Analysis'),
 | 
	
		
			
				|  |  | +      'module' => 'chado_analysis',
 | 
	
		
			
				|  |  | +      'description' => t('An analysis from the chado database'),
 | 
	
		
			
				|  |  | +      'has_title' => FALSE,
 | 
	
		
			
				|  |  | +      'title_label' => t('Analysis'),
 | 
	
		
			
				|  |  | +      'has_body' => FALSE,
 | 
	
		
			
				|  |  | +      'body_label' => t('Analysis Description'),
 | 
	
		
			
				|  |  | +      'locked' => TRUE
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	return $nodes;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  When a new chado_analysis node is created we also need to add information
 | 
	
		
			
				|  |  | + *  to our chado_analysis table.  This function is called on insert of a new
 | 
	
		
			
				|  |  | + *  node of type 'chado_analysis' and inserts the necessary information.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_insert($node){
 | 
	
		
			
				|  |  | +	global $user;
 | 
	
		
			
				|  |  | +	// Create a timestamp so we can insert it into the chado database
 | 
	
		
			
				|  |  | +	$time = $node->timeexecuted;
 | 
	
		
			
				|  |  | +	$month = $time['month'];
 | 
	
		
			
				|  |  | +	$day = $time['day'];
 | 
	
		
			
				|  |  | +	$year = $time['year'];
 | 
	
		
			
				|  |  | +	$timestamp = $month.'/'.$day.'/'.$year;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// If this analysis already exists then don't recreate it in chado
 | 
	
		
			
				|  |  | +	$analysis_id = $node->analysis_id;
 | 
	
		
			
				|  |  | +	if ($analysis_id) {
 | 
	
		
			
				|  |  | +		$sql = "SELECT analysis_id ".
 | 
	
		
			
				|  |  | +               "FROM {Analysis} ".
 | 
	
		
			
				|  |  | +               "WHERE analysis_id = %d ";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');
 | 
	
		
			
				|  |  | +		$analysis = db_fetch_object(db_query($sql, $node->analysis_id));
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// If the analysis doesn't exist then let's create it in chado.
 | 
	
		
			
				|  |  | +	if(!$analysis){
 | 
	
		
			
				|  |  | +		// First add the item to the chado analysis table
 | 
	
		
			
				|  |  | +		$sql = "INSERT INTO {analysis} ".
 | 
	
		
			
				|  |  | +             "  (name, description, program, programversion, algorithm, ".
 | 
	
		
			
				|  |  | +             "   sourcename, sourceversion, sourceuri, timeexecuted) ".
 | 
	
		
			
				|  |  | +             "VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		db_query($sql,$node->analysisname, $node->description,
 | 
	
		
			
				|  |  | +		$node->program,$node->programversion,$node->algorithm,
 | 
	
		
			
				|  |  | +		$node->sourcename, $node->sourceversion, $node->sourceuri,
 | 
	
		
			
				|  |  | +		$timestamp);
 | 
	
		
			
				|  |  | +      db_set_active($previous_db);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// Make sure the entry for this analysis doesn't already exist in the
 | 
	
		
			
				|  |  | +	// chado_analysis table if it doesn't exist then we want to add it.
 | 
	
		
			
				|  |  | +	$node_check_sql = "SELECT * FROM {chado_analysis} ".
 | 
	
		
			
				|  |  | +                     "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +	$node_check = db_fetch_object(db_query($node_check_sql, $analysis_id));
 | 
	
		
			
				|  |  | +	if(!$node_check){
 | 
	
		
			
				|  |  | +		// next add the item to the drupal table
 | 
	
		
			
				|  |  | +		$sql = "INSERT INTO {chado_analysis} (nid, vid, analysis_id) ".
 | 
	
		
			
				|  |  | +             "VALUES (%d, %d, %d)";
 | 
	
		
			
				|  |  | +		db_query($sql,$node->nid,$node->vid,$analysis_id);
 | 
	
		
			
				|  |  | +		// Create a title for the analysis node using the unique keys so when the
 | 
	
		
			
				|  |  | +		// node is saved, it will have a title
 | 
	
		
			
				|  |  | +		$record = new stdClass();
 | 
	
		
			
				|  |  | +		// If the analysis has a name, use it as the node title. If not, construct
 | 
	
		
			
				|  |  | +		// the title using program, programversion, and sourcename
 | 
	
		
			
				|  |  | +		if ($node->analysisname) {
 | 
	
		
			
				|  |  | +			$record->title = $node->analysisname;
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			//Construct node title as "program (version)
 | 
	
		
			
				|  |  | +			$record->title = "$node->program ($node->programversion)";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		$record->nid = $node->nid;
 | 
	
		
			
				|  |  | +		drupal_write_record('node',$record,'nid');
 | 
	
		
			
				|  |  | +		drupal_write_record('node_revisions',$record,'nid');
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_delete($node){
 | 
	
		
			
				|  |  | +	// Before removing, get analysis_id so we can remove it from chado database
 | 
	
		
			
				|  |  | +	// later
 | 
	
		
			
				|  |  | +	$sql_drupal = "SELECT analysis_id ".
 | 
	
		
			
				|  |  | +                 "FROM {chado_analysis} ".
 | 
	
		
			
				|  |  | +                 "WHERE nid = %d ".
 | 
	
		
			
				|  |  | +                 "AND vid = %d";
 | 
	
		
			
				|  |  | +	$analysis_id = db_result(db_query($sql_drupal, $node->nid, $node->vid));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// Remove data from the {chado_analysis}, {node}, and {node_revisions} tables
 | 
	
		
			
				|  |  | +	$sql_del = "DELETE FROM {chado_analysis} ".
 | 
	
		
			
				|  |  | +              "WHERE nid = %d ".
 | 
	
		
			
				|  |  | +              "AND vid = %d";
 | 
	
		
			
				|  |  | +	db_query($sql_del, $node->nid, $node->vid);
 | 
	
		
			
				|  |  | +	$sql_del = "DELETE FROM {node} ".
 | 
	
		
			
				|  |  | +              "WHERE nid = %d ".
 | 
	
		
			
				|  |  | +              "AND vid = %d";
 | 
	
		
			
				|  |  | +	db_query($sql_del, $node->nid, $node->vid);
 | 
	
		
			
				|  |  | +	$sql_del = "DELETE FROM {node_revisions} ".
 | 
	
		
			
				|  |  | +              "WHERE nid = %d ".
 | 
	
		
			
				|  |  | +              "AND vid = %d";
 | 
	
		
			
				|  |  | +	db_query($sql_del, $node->nid, $node->vid);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//Remove from analysis and analysisprop tables of chado database as well
 | 
	
		
			
				|  |  | +	$previous_db = db_set_active('chado');
 | 
	
		
			
				|  |  | +	db_query("DELETE FROM {analysis} WHERE analysis_id = %d", $analysis_id);
 | 
	
		
			
				|  |  | +	db_set_active($previous_db);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * Update analyses
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_update($node){
 | 
	
		
			
				|  |  | +	global $user;
 | 
	
		
			
				|  |  | +	if($node->revision){
 | 
	
		
			
				|  |  | +		// TODO -- decide what to do about revisions
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		// Create a timestamp so we can insert it into the chado database
 | 
	
		
			
				|  |  | +		$time = $node->timeexecuted;
 | 
	
		
			
				|  |  | +		$month = $time['month'];
 | 
	
		
			
				|  |  | +		$day = $time['day'];
 | 
	
		
			
				|  |  | +		$year = $time['year'];
 | 
	
		
			
				|  |  | +		$timestamp = $month.'/'.$day.'/'.$year;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// get the analysis_id for this node:
 | 
	
		
			
				|  |  | +		$sql = "SELECT analysis_id ".
 | 
	
		
			
				|  |  | +             "FROM {chado_analysis} ".
 | 
	
		
			
				|  |  | +             "WHERE vid = %d";
 | 
	
		
			
				|  |  | +		$analysis_id = db_fetch_object(db_query($sql, $node->vid))->analysis_id;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		$sql = "UPDATE {analysis} ".
 | 
	
		
			
				|  |  | +             "SET name = '%s', ".
 | 
	
		
			
				|  |  | +             "    description = '%s', ".
 | 
	
		
			
				|  |  | +             "    program = '%s', ".
 | 
	
		
			
				|  |  | +             "    programversion = '%s', ".
 | 
	
		
			
				|  |  | +             "    algorithm = '%s', ".
 | 
	
		
			
				|  |  | +             "    sourcename = '%s', ".
 | 
	
		
			
				|  |  | +             "    sourceversion = '%s', ".
 | 
	
		
			
				|  |  | +             "    sourceuri = '%s', ".
 | 
	
		
			
				|  |  | +             "    timeexecuted = '%s' ".
 | 
	
		
			
				|  |  | +             "WHERE analysis_id = %d ";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		db_query($sql, $node->analysisname, $node->description, $node->program,
 | 
	
		
			
				|  |  | +		$node->programversion,$node->algorithm,$node->sourcename,
 | 
	
		
			
				|  |  | +		$node->sourceversion, $node->sourceuri, $timestamp, $analysis_id);
 | 
	
		
			
				|  |  | +      db_set_active($previous_db);  // switch back to drupal database
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  | +		// Create a title for the analysis node using the unique keys so when the
 | 
	
		
			
				|  |  | +		// node is saved, it will have a title
 | 
	
		
			
				|  |  | +		$record = new stdClass();
 | 
	
		
			
				|  |  | +		// If the analysis has a name, use it as the node title. If not, construct
 | 
	
		
			
				|  |  | +		// the title using program, programversion, and sourcename
 | 
	
		
			
				|  |  | +		if ($node->analysisname) {
 | 
	
		
			
				|  |  | +			$record->title = $node->analysisname;
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			//Construct node title as "program (version)
 | 
	
		
			
				|  |  | +			$record->title = "$node->program ($node->programversion)";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		$record->nid = $node->nid;
 | 
	
		
			
				|  |  | +		drupal_write_record('node',$record,'nid');
 | 
	
		
			
				|  |  | +		drupal_write_record('node_revisions',$record,'nid');
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  When editing or creating a new node of type 'chado_analysis' we need
 | 
	
		
			
				|  |  | + *  a form.  This function creates the form that will be used for this.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_form ($node){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	$type = node_get_types('type', $node);
 | 
	
		
			
				|  |  | +	$form = array();
 | 
	
		
			
				|  |  | +	$form['title']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'hidden',
 | 
	
		
			
				|  |  | +      '#default_value' => $node->title,
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['analysisname']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Analysis Name'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->analysisname,
 | 
	
		
			
				|  |  | +      '#weight' => 1
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['program']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Program'),
 | 
	
		
			
				|  |  | +      '#required' => TRUE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->program,
 | 
	
		
			
				|  |  | +      '#weight' => 2
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['programversion']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Program Version'),
 | 
	
		
			
				|  |  | +      '#required' => TRUE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->programversion,
 | 
	
		
			
				|  |  | +      '#weight' => 3
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['algorithm']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Algorithm'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->algorithm,
 | 
	
		
			
				|  |  | +      '#weight' => 4
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['sourcename']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Source Name'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->sourcename,
 | 
	
		
			
				|  |  | +      '#weight' => 5
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['sourceversion']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Source Version'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->sourceversion,
 | 
	
		
			
				|  |  | +      '#weight' => 6
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['sourceuri']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +      '#title' => t('Source URI'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => $node->sourceuri,
 | 
	
		
			
				|  |  | +      '#weight' => 7
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	// Get time saved in chado
 | 
	
		
			
				|  |  | +	$default_time = $node->timeexecuted;
 | 
	
		
			
				|  |  | +	$year = preg_replace("/^(\d+)-\d+-\d+ .*/", "$1", $default_time);
 | 
	
		
			
				|  |  | +	$month = preg_replace("/^\d+-0?(\d+)-\d+ .*/", "$1", $default_time);
 | 
	
		
			
				|  |  | +	$day = preg_replace("/^\d+-\d+-0?(\d+) .*/", "$1", $default_time);
 | 
	
		
			
				|  |  | +	// If the time is not set, use current time
 | 
	
		
			
				|  |  | +	if (!$default_time) {
 | 
	
		
			
				|  |  | +		$default_time = time();
 | 
	
		
			
				|  |  | +		$year = format_date($default_time, 'custom', 'Y');
 | 
	
		
			
				|  |  | +		$month = format_date($default_time, 'custom', 'n');
 | 
	
		
			
				|  |  | +		$day = format_date($default_time, 'custom', 'j');
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	$form['timeexecuted']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'date',
 | 
	
		
			
				|  |  | +      '#title' => t('Time Executed'),
 | 
	
		
			
				|  |  | +      '#required' => TRUE,
 | 
	
		
			
				|  |  | +      '#default_value' => array(
 | 
	
		
			
				|  |  | +         'year' => $year,
 | 
	
		
			
				|  |  | +         'month' => $month,
 | 
	
		
			
				|  |  | +         'day' => $day,
 | 
	
		
			
				|  |  | +	),
 | 
	
		
			
				|  |  | +      '#weight' => 8
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	$form['description']= array(
 | 
	
		
			
				|  |  | +      '#type' => 'textarea',
 | 
	
		
			
				|  |  | +      '#rows' => 15,
 | 
	
		
			
				|  |  | +      '#title' => t('Description and/or Program Settings'),
 | 
	
		
			
				|  |  | +      '#required' => FALSE,
 | 
	
		
			
				|  |  | +      '#default_value' => check_plain($node->description),
 | 
	
		
			
				|  |  | +      '#weight' => 9
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	return $form;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  When a node is requested by the user this function is called to allow us
 | 
	
		
			
				|  |  | + *  to add auxiliary data to the node object.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_load($node){
 | 
	
		
			
				|  |  | +	// get the analysis_id for this node:
 | 
	
		
			
				|  |  | +	$sql = "SELECT analysis_id FROM {chado_analysis} WHERE vid = %d";
 | 
	
		
			
				|  |  | +	$ana_node = db_fetch_object(db_query($sql, $node->vid));
 | 
	
		
			
				|  |  | +	$additions = new stdClass();
 | 
	
		
			
				|  |  | +	if ($ana_node) {
 | 
	
		
			
				|  |  | +		// get analysis information
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, name AS analysisname, description, program, ".
 | 
	
		
			
				|  |  | +             "  programversion, algorithm, sourcename, sourceversion, ".
 | 
	
		
			
				|  |  | +             "  sourceuri, timeexecuted ".
 | 
	
		
			
				|  |  | +             "FROM {Analysis} ".
 | 
	
		
			
				|  |  | +             "WHERE Analysis_id = $ana_node->analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$additions = db_fetch_object(db_query($sql));
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	// If the analysis has a name, use it as the node title. If not, construct
 | 
	
		
			
				|  |  | +	// the title using program programversion, and sourcename
 | 
	
		
			
				|  |  | +	if ($additions->analysisname) {
 | 
	
		
			
				|  |  | +		$additions->title = $additions->analysisname;
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		// Construct node title as "program version (source)
 | 
	
		
			
				|  |  | +		$additions->title = "$additions->program ($additions->programversion)";
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return $additions;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  This function customizes the view of the chado_analysis node.  It allows
 | 
	
		
			
				|  |  | + *  us to generate the markup.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_view ($node, $teaser = FALSE, $page = FALSE) {
 | 
	
		
			
				|  |  | +	// use drupal's default node view:
 | 
	
		
			
				|  |  | +	if (!$teaser) {
 | 
	
		
			
				|  |  | +		$node = node_prepare($node, $teaser);
 | 
	
		
			
				|  |  | +		// When previewing a node submitting form, it shows 'Array' instead of
 | 
	
		
			
				|  |  | +		// correct date format. We need to format the date here
 | 
	
		
			
				|  |  | +		$time = $node->timeexecuted;
 | 
	
		
			
				|  |  | +		if(is_array($time)){
 | 
	
		
			
				|  |  | +			$month = $time['month'];
 | 
	
		
			
				|  |  | +			$day = $time['day'];
 | 
	
		
			
				|  |  | +			$year = $time['year'];
 | 
	
		
			
				|  |  | +			$timestamp = $year.'-'.$month.'-'.$day;
 | 
	
		
			
				|  |  | +			$node->timeexecuted = $timestamp;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return $node;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * Synchronize analyses from chado to drupal
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_sync_analyses ($analysis_id = NULL, $job_id = NULL){
 | 
	
		
			
				|  |  | +	global $user;
 | 
	
		
			
				|  |  | +	$page_content = '';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if(!$analysis_id){
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, name AS analysisname, description, program, ".
 | 
	
		
			
				|  |  | +   		 "  programversion, algorithm, sourcename, sourceversion, sourceuri, ".
 | 
	
		
			
				|  |  | +          "  timeexecuted ".
 | 
	
		
			
				|  |  | +          "FROM {Analysis} ".
 | 
	
		
			
				|  |  | +          "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, name AS analysisname, description, program, ".
 | 
	
		
			
				|  |  | +   		  "  programversion, algorithm, sourcename, sourceversion, sourceuri, ".
 | 
	
		
			
				|  |  | +          "  timeexecuted ".
 | 
	
		
			
				|  |  | +          "FROM {Analysis} ".
 | 
	
		
			
				|  |  | +          "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +          "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql,$analysis_id);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// We'll use the following SQL statement for checking if the analysis
 | 
	
		
			
				|  |  | +	// already exists as a drupal node.
 | 
	
		
			
				|  |  | +	$sql = "SELECT * FROM {chado_analysis} ".
 | 
	
		
			
				|  |  | +          "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	while($analysis = db_fetch_object($results)){
 | 
	
		
			
				|  |  | +		// check if this analysis already exists in the drupal database. if it
 | 
	
		
			
				|  |  | +		// does then skip this analysis and go to the next one.
 | 
	
		
			
				|  |  | +		if(!db_fetch_object(db_query($sql,$analysis->analysis_id))){
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			$new_node = new stdClass();
 | 
	
		
			
				|  |  | +			// try to access analysisprop for this analysis
 | 
	
		
			
				|  |  | +			$sql = "SELECT * FROM {analysisprop} WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +			$previous_db = db_set_active('chado');
 | 
	
		
			
				|  |  | +			$analysisprop = db_fetch_object(db_query($sql, $analysis->analysis_id));
 | 
	
		
			
				|  |  | +			// If analysisprop exists, this analysis can be a blast analysis or 
 | 
	
		
			
				|  |  | +			// interpro analysis. Get its type using cvterm_id
 | 
	
		
			
				|  |  | +			if ($analysisprop) {
 | 
	
		
			
				|  |  | +				$sql = "SELECT name, definition FROM {cvterm} WHERE cvterm_id = %d";
 | 
	
		
			
				|  |  | +				$result = db_fetch_object(db_query($sql, $analysisprop->type_id));
 | 
	
		
			
				|  |  | +				// This is a blast analysis
 | 
	
		
			
				|  |  | +				if ($result->name == 'analysis_blast_settings') {
 | 
	
		
			
				|  |  | +					$new_node->type = 'chado_analysis_blast';
 | 
	
		
			
				|  |  | +			   // This is a interpro analysis
 | 
	
		
			
				|  |  | +				} else if ($result->name == 'analysis_interpro_settings') {
 | 
	
		
			
				|  |  | +					$new_node->type = 'chado_analysis_interpro';
 | 
	
		
			
				|  |  | +			   // This is a kegg analysis
 | 
	
		
			
				|  |  | +				} else if ($result->name == 'analysis_kegg_settings' ||
 | 
	
		
			
				|  |  | +	              		  $result->name == 'kegg_brite_data' ||
 | 
	
		
			
				|  |  | +				           preg_match("/KEGG BRITE term:/", $result->definition)) {
 | 
	
		
			
				|  |  | +				   $new_node->type = 'chado_analysis_kegg';
 | 
	
		
			
				|  |  | +				} else {
 | 
	
		
			
				|  |  | +				   $new_node->type = 'chado_analysis';
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			// If it doesn't exist, this analysis is generic
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				$new_node->type = 'chado_analysis';
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			db_set_active($previous_db);
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			$new_node->uid = $user->uid;
 | 
	
		
			
				|  |  | +			$new_node->analysis_id = $analysis->analysis_id;
 | 
	
		
			
				|  |  | +			$new_node->analysisname = $analysis->analysisname;
 | 
	
		
			
				|  |  | +			$new_node->description = $analysis->description;
 | 
	
		
			
				|  |  | +			$new_node->program = $analysis->program;
 | 
	
		
			
				|  |  | +			$new_node->programversion = $analysis->programversion;
 | 
	
		
			
				|  |  | +			$new_node->algorithm = $analysis->algorithm;
 | 
	
		
			
				|  |  | +			$new_node->sourcename = $analysis->sourcename;
 | 
	
		
			
				|  |  | +			$new_node->sourceversion = $analysis->sourceversion;
 | 
	
		
			
				|  |  | +			$new_node->sourceuri = $analysis->sourceuri;
 | 
	
		
			
				|  |  | +			$new_node->timeexecuted = $analysis->timeexecuted;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// If the analysis has a name, use it as the node title. If not,
 | 
	
		
			
				|  |  | +			// construct the title using program, programversion, and sourcename
 | 
	
		
			
				|  |  | +			if ($new_node->analysisname) {
 | 
	
		
			
				|  |  | +				$new_node->title = $new_node->analysisname;
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				//Construct node title as "program (version)
 | 
	
		
			
				|  |  | +				$new_node->title = "$analysis->program ($analysis->programversion)";
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			node_validate($new_node);
 | 
	
		
			
				|  |  | +			if(!form_get_errors()){
 | 
	
		
			
				|  |  | +				$node = node_submit($new_node);
 | 
	
		
			
				|  |  | +				node_save($node);
 | 
	
		
			
				|  |  | +				if($node->nid){
 | 
	
		
			
				|  |  | +					$page_content .= "Added $new_node->title<br>";
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			$page_content .= "Skipped $new_node->title<br>";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return $page_content;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * Display help and module information
 | 
	
		
			
				|  |  | + * @param path which path of the site we're displaying help
 | 
	
		
			
				|  |  | + * @param arg array that holds the current path as would be returned from arg()
 | 
	
		
			
				|  |  | + * function
 | 
	
		
			
				|  |  | + * @return help text for the path
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_help($path, $arg) {
 | 
	
		
			
				|  |  | +	$output = '';
 | 
	
		
			
				|  |  | +	switch ($path) {
 | 
	
		
			
				|  |  | +		case "admin/help#tripal_analysis":
 | 
	
		
			
				|  |  | +			$output = '<p>'.
 | 
	
		
			
				|  |  | +			t("Displays links to nodes created on this date").
 | 
	
		
			
				|  |  | +                '</p>';
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return $output;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  The following function proves access control for users trying to
 | 
	
		
			
				|  |  | + *  perform actions on data managed by this module
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function chado_analysis_access($op, $node, $account){
 | 
	
		
			
				|  |  | +	if ($op == 'create') {
 | 
	
		
			
				|  |  | +		return user_access('create chado_analysis content', $account);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if ($op == 'update') {
 | 
	
		
			
				|  |  | +		if (user_access('edit chado_analysis content', $account)) {
 | 
	
		
			
				|  |  | +			return TRUE;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if ($op == 'delete') {
 | 
	
		
			
				|  |  | +		if (user_access('delete chado_analysis content', $account)) {
 | 
	
		
			
				|  |  | +			return TRUE;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if ($op == 'view') {
 | 
	
		
			
				|  |  | +		if (user_access('access chado_analysis 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_analysis_perm(){
 | 
	
		
			
				|  |  | +	return array(
 | 
	
		
			
				|  |  | +      'access chado_analysis content',
 | 
	
		
			
				|  |  | +      'create chado_analysis content',
 | 
	
		
			
				|  |  | +      'delete chado_analysis content',
 | 
	
		
			
				|  |  | +      'edit chado_analysis content',
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *  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_analysis_theme () {
 | 
	
		
			
				|  |  | +	return array(
 | 
	
		
			
				|  |  | +      'tripal_analysis_analysis_table' => array (
 | 
	
		
			
				|  |  | +         'arguments' => array('analyses'),
 | 
	
		
			
				|  |  | +	),
 | 
	
		
			
				|  |  | +	);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + * This function uses analysis_id's of all drupal analysis nodes as input and
 | 
	
		
			
				|  |  | + * pull the analysis information (name, description, program, programversion,
 | 
	
		
			
				|  |  | + * algorithm, sourcename, sourceversion, sourceuri, timeexecuted) from
 | 
	
		
			
				|  |  | + * chado database. The return type is an object array that stores $analysis
 | 
	
		
			
				|  |  | + * objects sorted by program
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function get_chado_analyses() {
 | 
	
		
			
				|  |  | +	$sql_drupal = "SELECT COUNT (analysis_id) FROM {chado_analysis}";
 | 
	
		
			
				|  |  | +	$no_orgs = db_result(db_query($sql_drupal));
 | 
	
		
			
				|  |  | +	if ($no_orgs != 0) {
 | 
	
		
			
				|  |  | +		$sql = "SELECT analysis_id, CA.nid, type FROM {chado_analysis} CA INNER JOIN node ON CA.nid = node.nid";
 | 
	
		
			
				|  |  | +		$result = db_query($sql);
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, name AS analysisname, description, program, 
 | 
	
		
			
				|  |  | +		                       programversion, algorithm, sourcename, sourceversion, 
 | 
	
		
			
				|  |  | +		                       sourceuri, timeexecuted
 | 
	
		
			
				|  |  | +		           FROM {Analysis} 		           WHERE analysis_id=%d";
 | 
	
		
			
				|  |  | +		$analyses = array();
 | 
	
		
			
				|  |  | +		$count = 0;
 | 
	
		
			
				|  |  | +		while ($data = db_fetch_object($result)) {
 | 
	
		
			
				|  |  | +			$analysis = db_fetch_object(db_query($sql, $data->analysis_id));
 | 
	
		
			
				|  |  | +			$analysis->node_id = $data->nid;
 | 
	
		
			
				|  |  | +			$analysis->node_type = $data->type;
 | 
	
		
			
				|  |  | +			// Use node_type as the key so we can sort by node type
 | 
	
		
			
				|  |  | +			// Since node_type is not unique by itself, we need to add
 | 
	
		
			
				|  |  | +			// $count to the key
 | 
	
		
			
				|  |  | +			$sortedBy = $analysis->timeexecuted;
 | 
	
		
			
				|  |  | +			$analyses ["$sortedBy$count"] = $analysis;
 | 
	
		
			
				|  |  | +			$count ++;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//Sort analyses by time, descending order
 | 
	
		
			
				|  |  | +		krsort($analyses, SORT_STRING);
 | 
	
		
			
				|  |  | +		return $analyses;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/************************************************************************
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function theme_tripal_analysis_analysis_table (&$analyses) {
 | 
	
		
			
				|  |  | +   
 | 
	
		
			
				|  |  | +	$output = "<br>Analyses are listed in the descending order of their execution time.<br><a id=\"tripal_expandableBox_toggle_button\" onClick=\"toggleExpandableBoxes()\">[-] Collapse All</a>";
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +   foreach($analyses as $analysis){
 | 
	
		
			
				|  |  | +		// Prepare information for html output
 | 
	
		
			
				|  |  | +		$ana_node_url = url("node/$analysis->node_id");
 | 
	
		
			
				|  |  | +	   if ($analysis->sourceversion) {
 | 
	
		
			
				|  |  | +         $ver = "($analysis->sourceversion)";
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $date =  preg_replace("/^(\d+-\d+-\d+) .*/","$1",$analysis->timeexecuted);
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      // Generate html output
 | 
	
		
			
				|  |  | +		$output .= "<div class=\"tripal_chado_analysis-info-box\" style=\"padding:5px\">
 | 
	
		
			
				|  |  | +                         <div class=\"tripal_expandableBox\">
 | 
	
		
			
				|  |  | +                           <h3>$analysis->analysisname ($date)</h3>
 | 
	
		
			
				|  |  | +                         </div>
 | 
	
		
			
				|  |  | +                         <div class=\"tripal_expandableBoxContent\">
 | 
	
		
			
				|  |  | +                           <span>
 | 
	
		
			
				|  |  | +                             <table class=\"tripal_chado_analysis_content\">
 | 
	
		
			
				|  |  | +                               <tr><td>
 | 
	
		
			
				|  |  | +                                 Name: <a href=\"$ana_node_url\">$analysis->analysisname</a>
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +                               <tr><td>
 | 
	
		
			
				|  |  | +                                 Program: $analysis->program ($analysis->programversion)
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +                               <tr><td>
 | 
	
		
			
				|  |  | +                                 Algorithm: $analysis->algorithm
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +		                         <tr><td>
 | 
	
		
			
				|  |  | +                                 Source: $analysis->sourcename $ver
 | 
	
		
			
				|  |  | +		                         </td></tr>
 | 
	
		
			
				|  |  | +		                         <tr><td>
 | 
	
		
			
				|  |  | +                                 Source URI: $analysis->sourceuri
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +                               <tr><td>
 | 
	
		
			
				|  |  | +                                 Executed Time:$date
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +                               <tr><td>
 | 
	
		
			
				|  |  | +                                 Description: $analysis->description
 | 
	
		
			
				|  |  | +                               </td></tr>
 | 
	
		
			
				|  |  | +                             </table>
 | 
	
		
			
				|  |  | +                           </span>
 | 
	
		
			
				|  |  | +                         </div>
 | 
	
		
			
				|  |  | +                       </div>";
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return $output;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/************************************************************************
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analyses_cleanup($dummy = NULL, $job_id = NULL) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// build the SQL statments needed to check if nodes point to valid analyses
 | 
	
		
			
				|  |  | +	$dsql = "SELECT * FROM {node} WHERE type = 'chado_analysis' order by nid";
 | 
	
		
			
				|  |  | +	$nsql = "SELECT * FROM {node} WHERE nid = %d";
 | 
	
		
			
				|  |  | +	$csql = "SELECT * FROM {chado_analysis} where nid = %d ";
 | 
	
		
			
				|  |  | +	$cosql= "SELECT * FROM {chado_analysis}";
 | 
	
		
			
				|  |  | +	$tsql = "SELECT * FROM {analysis} O ".
 | 
	
		
			
				|  |  | +           "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// load into nodes array
 | 
	
		
			
				|  |  | +	$results = db_query($dsql);
 | 
	
		
			
				|  |  | +	$count = 0;
 | 
	
		
			
				|  |  | +	$nodes = array();
 | 
	
		
			
				|  |  | +	while($node = db_fetch_object($results)){
 | 
	
		
			
				|  |  | +		$nodes[$count] = $node;
 | 
	
		
			
				|  |  | +		$count++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// load the chado_analyses into an array
 | 
	
		
			
				|  |  | +	$results = db_query($cosql);
 | 
	
		
			
				|  |  | +	$cnodes = array();
 | 
	
		
			
				|  |  | +	while($node = db_fetch_object($results)){
 | 
	
		
			
				|  |  | +		$cnodes[$count] = $node;
 | 
	
		
			
				|  |  | +		$count++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	$interval = intval($count * 0.01);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// iterate through all of the chado_analysis nodes and delete those that aren't valid
 | 
	
		
			
				|  |  | +	foreach($nodes as $nid){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// update the job status every 1% analyses
 | 
	
		
			
				|  |  | +		if($job_id and $i % $interval == 0){
 | 
	
		
			
				|  |  | +			tripal_job_set_progress($job_id,intval(($i/$count)*100));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// first check to see if the node has a corresponding entry
 | 
	
		
			
				|  |  | +		// in the chado_analysis table. If not then delete the node.
 | 
	
		
			
				|  |  | +		$analysis = db_fetch_object(db_query($csql,$nid->nid));
 | 
	
		
			
				|  |  | +		if(!$analysis){
 | 
	
		
			
				|  |  | +			node_delete($nid->nid);
 | 
	
		
			
				|  |  | +			$message = "Missing in chado_analysis table.... DELETING: $nid->nid\n";
 | 
	
		
			
				|  |  | +			watchdog('tripal_analysis',$message,array(),WATCHDOG_WARNING);
 | 
	
		
			
				|  |  | +			continue;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		$i++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// iterate through all of the chado_analysis nodes and delete those  that aren't valid
 | 
	
		
			
				|  |  | +	foreach($cnodes as $nid){
 | 
	
		
			
				|  |  | +		// update the job status every 1% analyses
 | 
	
		
			
				|  |  | +		if($job_id and $i % $interval == 0){
 | 
	
		
			
				|  |  | +			tripal_job_set_progress($job_id,intval(($i/$count)*100));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		$node = db_fetch_object(db_query($nsql,$nid->nid));
 | 
	
		
			
				|  |  | +		if(!$node){
 | 
	
		
			
				|  |  | +			db_query("DELETE FROM {chado_analysis} WHERE nid = $nid->nid");
 | 
	
		
			
				|  |  | +			$message = "chado_analysis missing node.... DELETING: $nid->nid\n";
 | 
	
		
			
				|  |  | +			watchdog('tripal_analysis',$message,array(),WATCHDOG_WARNING);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		$i++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return '';
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_reindex_features ($analysis_id = NULL, $job_id = NULL){
 | 
	
		
			
				|  |  | +	$i = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// if the caller provided a analysis_id then get all of the features
 | 
	
		
			
				|  |  | +	// associated with the analysis. Otherwise get all sequences assoicated
 | 
	
		
			
				|  |  | +	// with all libraries.
 | 
	
		
			
				|  |  | +	if(!$analysis_id){
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, Feature_id ".
 | 
	
		
			
				|  |  | +          "FROM {Analysisfeature} ".
 | 
	
		
			
				|  |  | +          "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, Feature_id ".
 | 
	
		
			
				|  |  | +             "FROM {Analysisfeature} ".
 | 
	
		
			
				|  |  | +             "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +             "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql,$analysis_id);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// load into ids array
 | 
	
		
			
				|  |  | +	$count = 0;
 | 
	
		
			
				|  |  | +	$ids = array();
 | 
	
		
			
				|  |  | +	while($id = db_fetch_object($results)){
 | 
	
		
			
				|  |  | +		$ids[$count] = $id->feature_id;
 | 
	
		
			
				|  |  | +		$count++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	$interval = intval($count * 0.01);
 | 
	
		
			
				|  |  | +	foreach($ids as $feature_id){
 | 
	
		
			
				|  |  | +		// update the job status every 1% features
 | 
	
		
			
				|  |  | +		if($job_id and $i % interval == 0){
 | 
	
		
			
				|  |  | +			tripal_job_set_progress($job_id,intval(($i/$count)*100));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		tripal_feature_sync_feature ($feature_id);
 | 
	
		
			
				|  |  | +		$i++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/*******************************************************************************
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_analysis_taxonify_features ($analysis_id = NULL, $job_id = NULL){
 | 
	
		
			
				|  |  | +	$i = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// if the caller provided a analysis_id then get all of the features
 | 
	
		
			
				|  |  | +	// associated with the analysis. Otherwise get all sequences assoicated
 | 
	
		
			
				|  |  | +	// with all libraries.
 | 
	
		
			
				|  |  | +	if(!$analysis_id){
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, Feature_id ".
 | 
	
		
			
				|  |  | +          "FROM {Analysisfeature} ".
 | 
	
		
			
				|  |  | +          "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		$sql = "SELECT Analysis_id, Feature_id ".
 | 
	
		
			
				|  |  | +             "FROM {Analysisfeature} ".
 | 
	
		
			
				|  |  | +             "WHERE analysis_id = %d";
 | 
	
		
			
				|  |  | +             "ORDER BY analysis_id";
 | 
	
		
			
				|  |  | +		$previous_db = db_set_active('chado');  // use chado database
 | 
	
		
			
				|  |  | +		$results = db_query($sql,$analysis_id);
 | 
	
		
			
				|  |  | +		db_set_active($previous_db);  // now use drupal database
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// load into ids array
 | 
	
		
			
				|  |  | +	$count = 0;
 | 
	
		
			
				|  |  | +	$ids = array();
 | 
	
		
			
				|  |  | +	while($id = db_fetch_object($results)){
 | 
	
		
			
				|  |  | +		$ids[$count] = $id->feature_id;
 | 
	
		
			
				|  |  | +		$count++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// make sure our vocabularies are set before proceeding
 | 
	
		
			
				|  |  | +	tripal_feature_set_vocabulary();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// use this SQL for getting the nodes
 | 
	
		
			
				|  |  | +	$nsql =  "SELECT * FROM {chado_feature} CF ".
 | 
	
		
			
				|  |  | +            "  INNER JOIN {node} N ON N.nid = CF.nid ".
 | 
	
		
			
				|  |  | +            "WHERE feature_id = %d";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// iterate through the features and set the taxonomy
 | 
	
		
			
				|  |  | +	$interval = intval($count * 0.01);
 | 
	
		
			
				|  |  | +	foreach($ids as $feature_id){
 | 
	
		
			
				|  |  | +		// update the job status every 1% features
 | 
	
		
			
				|  |  | +		if($job_id and $i % interval == 0){
 | 
	
		
			
				|  |  | +			tripal_job_set_progress($job_id,intval(($i/$count)*100));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		$node = db_fetch_object(db_query($nsql,$feature_id));
 | 
	
		
			
				|  |  | +		tripal_feature_set_taxonomy($node,$feature_id);
 | 
	
		
			
				|  |  | +		$i++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 |