#!/usr/local/bin/perl ############################################################################### # Program : ProcessProject.cgi # Author : Eric Deutsch # $Id$ # # Description : This CGI program that allows users to submit a processing # job to process a set of experiments in a project. # ############################################################################### ############################################################################### # Get the script set up with everything it will need ############################################################################### use strict; use lib qw (../../lib/perl); use vars qw ($q $sbeams $sbeamsMA $dbh $current_contact_id $current_username $current_work_group_id $current_work_group_name $current_project_id $current_project_name $TABLE_NAME $PROGRAM_FILE_NAME $CATEGORY $DB_TABLE_NAME $PK_COLUMN_NAME @MENU_OPTIONS $DEFAULT_COST_SCHEME); use DBI; #use CGI; use CGI::Carp qw(fatalsToBrowser croak); use POSIX; use SBEAMS::Connection qw($q); use SBEAMS::Connection::Settings; use SBEAMS::Connection::Tables; use SBEAMS::Microarray; use SBEAMS::Microarray::Settings; use SBEAMS::Microarray::Tables; use lib "/net/arrays/Pipeline/tools/lib"; #$q = new CGI; $sbeams = new SBEAMS::Connection; $sbeamsMA = new SBEAMS::Microarray; $sbeamsMA->setSBEAMS($sbeams); ############################################################################### # Global Variables ############################################################################### $TABLE_NAME = "MA_array_request"; $DEFAULT_COST_SCHEME = 1; main(); ############################################################################### # Main Program: #x # Call $sbeams->InterfaceEntry with pointer to the subroutine to execute if # the authentication succeeds. ############################################################################### sub main { #### Do the SBEAMS authentication and exit if a username is not returned exit unless ($current_username = $sbeams->Authenticate()); #### Read in the default input parameters my %parameters; my $n_params_found = $sbeams->parse_input_parameters(q=>$q,parameters_ref=>\%parameters); #$sbeams->printDebuggingInfo($q); #### Process generic "state" parameters before we start $sbeams->processStandardParameters(parameters_ref=>\%parameters); #### Print the header, do what the program does, and print footer $sbeamsMA->printPageHeader(); handle_request(parameters_ref=>\%parameters); $sbeamsMA->printPageFooter(); } # end main ############################################################################### # handleRequest # # Test for specific form variables and process the request # based on what the user wants to do. ############################################################################### sub handle_request { my %args = @_; my $parameters_ref = $args{'parameters_ref'}; my %parameters = %{$parameters_ref}; my $tab = $parameters{'tab'} || "main"; $parameters{'project_id'} = $sbeams->getCurrent_project_id(); $parameters{'username'} = $sbeams->getCurrent_username(); ## Print standard page header $sbeams->printUserContext(); #### Decide where to go based on form values if ($tab eq 'main') { # $sbeamsMA->printPageHeader(); print_start_screen(parameters_ref=>\%parameters); # $sbeamsMA->printPageFooter(); }elsif ($tab eq 'arrayCount') { # $sbeamsMA->printPageHeader(); print_array_request_screen(parameters_ref=>\%parameters); # $sbeamsMA->printPageFooter(); }elsif ($tab eq 'arrayInfo') { # $sbeamsMA->printPageHeader(); print_array_info_screen(parameters_ref=>\%parameters); # $sbeamsMA->printPageFooter(); }elsif ($tab eq 'finalize') { # $sbeamsMA->printPageHeader(); finalize(parameters_ref=>\%parameters); # $sbeamsMA->printPageFooter(); } } # end processRequests ############################################################################### # Print Start Screen ############################################################################### sub print_start_screen { my %args = @_; my $parameters_ref = $args{'parameters_ref'}; my %parameters = %{$parameters_ref}; ## Standard Variables my $sql; my @rows; my $current_project = $parameters{'project_selector'} || $sbeams->getCurrent_project_id(); print_start_screen_javascript(); ## Print Introductory Header print qq~

Welcome to the Microarray Data Entry Interface

\n
This tool is designed as a one-stop interface to recording information about your arrays.

$LINESEPARATOR
Step 1: Select Project
Into which project are these arrays going?
[Don\'t have a project? Click here to set one up]

~; return; } ############################################################################### # Print Start Screen Javascript ############################################################################### sub print_start_screen_javascript { my $javascript = qq~ ~; print $javascript; } ############################################################################### # Print Array Request Screen ############################################################################### sub print_array_request_screen { my %args = @_; my $parameters_ref = $args{'parameters_ref'}; my %parameters = %{$parameters_ref}; ## Standard Variables my $sql; my @rows; my $project = $parameters{'projectSelector'}; my $contact_id = $sbeams->getCurrent_contact_id(); print_array_request_javascript(); # Create Slide Type Optionlist $sql = qq~ SELECT slide_type_id, name+' (\$'+CONVERT(varchar(50),price)+')' FROM $TBMA_SLIDE_TYPE WHERE record_status != 'D' ORDER BY name ~; my $slide_optionlist = $sbeams->buildOptionList($sql); # Create Budget Optionlist $sql = qq~ SELECT project_id, name + ' ['+budget+']' FROM $TB_PROJECT WHERE PI_contact_id='$contact_id' ORDER BY name ~; my $budget_optionlist = $sbeams->buildOptionList($sql); # Create Prep Optionlist $sql = qq~ SELECT option_key, option_value FROM $TBMA_ARRAY_REQUEST_OPTION WHERE option_type = 'hybridization_request' ORDER BY sort_order ~; my $prep_optionlist = $sbeams->buildOptionList($sql); # Create Analysis Optionlist $sql = qq~ SELECT option_key, option_value+' (\$'+CONVERT(varchar(50),price)+')' FROM $TBMA_ARRAY_REQUEST_OPTION WHERE option_type = 'scanning_request' ORDER BY sort_order ~; my $analysis_optionlist = $sbeams->buildOptionList($sql); ## Print Introductory Header print qq~

Microarray Data Entry Interface

\n

$LINESEPARATOR
Step 2: Select \# of Arrays
How many arrays will you be submitting today?  
On what budget are these being paid?
What type of arrays are these?
What was the requests prep?
What was the requested analysis?


~; return; } ############################################################################### # Print Array Request Javascript ############################################################################### sub print_array_request_javascript { my $javascript = qq~ ~; print $javascript; } ############################################################################### # Print Array Info Screen ############################################################################### sub print_array_info_screen { my %args = @_; my $parameters_ref = $args{'parameters_ref'}; my %parameters = %{$parameters_ref}; ## Standard Variables my $sql; my @rows; my $array_count = $parameters{'arrayNumber'}; my $successful = 1; my $status_report = ""; ## Hash of array layouts # Determine the organism $sql = qq~ SELECT O.organism_name FROM $TB_ORGANISM O LEFT JOIN $TBMA_SLIDE_TYPE S ON (S.organism_id = O.organism_id) WHERE S.slide_type_id = $parameters{'arrayType'} AND S.record_status != 'D' ~; @rows = $sbeams->selectOneColumn($sql); my $organism = $rows[0]; $organism =~ tr /A-Z/a-z/; ############################### ## SPECIAL ORGANISM HANDLING ## ############################### if ($organism eq "halobacterium") { $organism = "halo"; } $sql = qq~ SELECT layout_id, name FROM $TBMA_ARRAY_LAYOUT WHERE name LIKE '$organism%' ~; @rows = $sbeams->selectSeveralColumns($sql); my %array_layouts; foreach my $row (@rows) { my ($layout_id, $array_name) = @{$row}; $array_name =~ /.*\_(\d+)-(\d+)/; my $low_val = $1; my $hi_val = $2; $array_layouts{$low_val,$hi_val} = $layout_id; } ## Hash of printing batches $sql = qq~ SELECT slide_list, printing_batch_id FROM $TBMA_PRINTING_BATCH WHERE slide_type_id = $parameters{'arrayType'} AND record_status != 'D' ~; my %printing_batches = $sbeams->selectTwoColumnHash($sql); ## Create Labeling Optionlist $sql = qq~ SELECT labeling_method_id,name FROM $TBMA_LABELING_METHOD ORDER BY sort_order,name ~; my $optionlist=$sbeams->buildOptionList($sql); ## Create Labeling Protocol Optionlist $sql = qq~ SELECT P.protocol_id, P.name FROM $TB_PROTOCOL P LEFT JOIN $TB_PROTOCOL_TYPE PT ON (PT.protocol_type_id = P.protocol_type_id) WHERE PT.name IN ('extract_labeling', 'Genicon Labeling') ~; my $labeling_optionlist=$sbeams->buildOptionList($sql); ## Create Hybridization Protocol Optionlist $sql = qq~ SELECT P.protocol_id, P.name FROM $TB_PROTOCOL P LEFT JOIN protocol_type PT ON (PT.protocol_type_id = P.protocol_type_id) WHERE PT.name = 'hybridization' ~; my $hybridization_optionlist = $sbeams->buildOptionList($sql); ## Create Scanning Protocol Optionlist $sql = qq~ SELECT P.protocol_id, P.name FROM $TB_PROTOCOL P LEFT JOIN protocol_type PT ON (PT.protocol_type_id = P.protocol_type_id) WHERE PT.name = 'array_scanning' ~; my $scanning_optionlist = $sbeams->buildOptionList($sql); ## Create Quantitation Protocol Optionlist $sql = qq~ SELECT P.protocol_id, P.name FROM $TB_PROTOCOL P LEFT JOIN protocol_type PT ON (PT.protocol_type_id = P.protocol_type_id) WHERE PT.name = 'image_analysis' ~; my $spotfinding_optionlist = $sbeams->buildOptionList($sql); ## Array ID optionlist # 1) Gather all possible slides that have been created in the past year # 2) See if they have an appropriate array_layout and printing_batch # 3) make an optionlist of resultset # All possible slides that have been made in the past 12 months $sql = qq~ SELECT S.slide_id, slide_number FROM $TBMA_SLIDE S LEFT JOIN $TBMA_ARRAY A ON ( S.slide_id=A.slide_id ) WHERE A.slide_id IS NULL AND DATEDIFF(MONTH,S.date_created,GETDATE()) < 24 ORDER BY slide_number ~; @rows = $sbeams->selectSeveralColumns($sql); # Verify that slides have a valid array_layout and printing batch my @valid_arrays; foreach my $slide_ref (@rows) { my $found_array_layouts = 0; my $found_printing_batches = 0; my ($slide_id, $slide_number) = @{$slide_ref}; foreach my $key (keys %array_layouts){ my @temp = split /\W/,$key; my $low_val = $temp[0]; my $hi_val = $temp[1]; if ($low_val <= $slide_number && $hi_val >= $slide_number) { $found_array_layouts++; } } if ($found_array_layouts > 1) { $status_report .= "WARNING: Slide \#$slide_number has multiple array layouts associated with it. Contact the Array Core if you are planning on using this!
\n"; } foreach my $key (keys %printing_batches) { my @temp = split /-/, $key; my $low_val = $temp[0]; my $hi_val = $temp[1]; if ($low_val <= $slide_number && $hi_val >= $slide_number) { $found_printing_batches++; } } if ($found_printing_batches > 1) { $status_report .= "WARNING: Slide \#$slide_number has multiple printing batches associated with it. Contact the Array Core if you are planning on using this slide!
\n"; } if ($found_printing_batches == 1 && $found_array_layouts == 1) { push @valid_arrays, $slide_id; } } my $array_ids = join ',', @valid_arrays; # make optionlist $sql = qq~ SELECT slide_number, slide_number FROM $TBMA_SLIDE S LEFT JOIN $TBMA_ARRAY A ON ( S.slide_id=A.slide_id ) WHERE A.slide_id IS NULL AND DATEDIFF(MONTH,S.date_created,GETDATE()) < 24 AND S.slide_id IN ( $array_ids ) ORDER BY slide_number ~; my $array_optionlist = $sbeams->buildOptionList($sql); ## Print Introductory Header print qq~

Microarray Data Entry Interface

\n

$LINESEPARATOR
Step 3: Array Information

$status_report
~; for (my $m=0;$m<$array_count;$m++) { print qq~ ~; } print qq~
Array ID Sample \#1 Name Sample \#1 Label Dye Lot \# Sample \#2 Name Sample \#2 Label Dye Lot \# Labeling Protocol Date Labeled (YYYY-MM-DD) Hybridization Protocol Date Hybridized(YYYY-MM-DD) Scanning Protocol Scan Date(YYYY-MM-DD) Scan Data Flag Image Location Quantitation Protocol Quantitation Date(YYYY-MM-DD) Quantitation Data Flag Quantitation File Location


~; print_array_info_javascript($array_count); return; } ############################################################################### # Print Array Info Javascript ############################################################################### sub print_array_info_javascript { my $array_requests = shift @_; my $javascript = qq~ ~; print $javascript; } ############################################################################### # finalize # NOTE: the 'array_name' field within microarray.dbo.array is named # the same as the 'slide_number' field in microarray.dbo.slide. # Also, the page is hinged upon the standardized naming of print # batches. We can intuit the print batch based upon slide number # and organism (from slide type). However, if the naming convention is # different, this won't work!! ############################################################################### sub finalize { my %args = @_; my $parameters_ref = $args{'parameters_ref'}; my %parameters = %{$parameters_ref}; ## Standard Variables my $sql; my @rows; my $contact_id = $sbeams->getCurrent_contact_id(); ## Other Variables my $project = $parameters{'project'}; my $cost_scheme_id = $DEFAULT_COST_SCHEME unless ( $parameters{'cost_scheme_id'} >= 1 ); my $successful = 1; my $error_messages =""; my $slide_type_id = $parameters{'slideType'}; my $analysis_type = $parameters{'analysisType'}; my %array_info; ## Determine Number of arrays my $array_count = $parameters{'arrayNumber'}; ## Print Introductory Header print qq~

Welcome to the Microarray Data Entry Interface

\n
This tool is designed as a one-stop interface to recording information about your arrays.

$LINESEPARATOR
~; ###################################################################################### # Verify that we won't have any problems INSERTing the records. # # Intuit print batch and array layout. SKETCHY! Is there a cleaner way to do this? # ###################################################################################### # Determine the organism $sql = qq~ SELECT O.organism_name FROM $TB_ORGANISM O LEFT JOIN $TBMA_SLIDE_TYPE S ON (S.organism_id = O.organism_id) WHERE S.slide_type_id = $slide_type_id AND S.record_status != 'D' ~; @rows = $sbeams->selectOneColumn($sql); my $organism = $rows[0]; $organism =~ tr /A-Z/a-z/; ############################### ## SPECIAL ORGANISM HANDLING ## ############################### if ($organism eq "halobacterium") { $organism = "halo"; } ## Determine array_layout information $sql = qq~ SELECT layout_id, name FROM $TBMA_ARRAY_LAYOUT WHERE name LIKE '$organism%' ~; @rows = $sbeams->selectSeveralColumns($sql); # Create hash of array layouts my %array_layouts; foreach my $row (@rows) { my ($layout_id, $array_name) = @{$row}; $array_name =~ /.*\_(\d+)-(\d+)/; my $low_val = $1; my $hi_val = $2; $array_layouts{$low_val,$hi_val} = $layout_id; } ## Get printing_batch information $sql = qq~ SELECT slide_list, printing_batch_id FROM $TBMA_PRINTING_BATCH WHERE slide_type_id = $slide_type_id AND record_status != 'D' ~; my %printing_batches = $sbeams->selectTwoColumnHash($sql); ## Get slide information $sql = qq~ SELECT slide_number, slide_id FROM $TBMA_SLIDE WHERE record_status != 'D' ~; my %slides = $sbeams->selectTwoColumnHash($sql); ## Verify that, in the form, the user hasn't selected the array twice my %unique_check; for (my $m=0;$m<$array_count;$m++) { my $array = $parameters{'array_'.$m}; if ($unique_check{$array}) { $successful = 0; $error_messages .= "It appears as if you're trying to associate multiple records with array $array
\n"; } } undef %unique_check; ## Verify that all the prerequisite records are created. for (my $m=0;$m<$array_count;$m++) { my $file = $parameters{'quantfile_'.$m}; my $array = $parameters{'array_'.$m}; $array_info{$array,'quantitation_file'} = $file; ## Verify that Array Locations are correct if (-e $file) { print "File $file: Location VERIFIED
\n"; }else { $error_messages.= "$file is not valid
\n"; $successful = 0; } ## Verify that record from 'array' table exists and isn't taken $sql = qq~ SELECT COUNT(*) FROM $TBMA_ARRAY WHERE array_name = '$array' ~; @rows = $sbeams->selectOneColumn($sql); unless (scalar(@rows) == 1) { $successful = 0; $error_messages .= qq~ Array \#$array already has a record in SBEAMS. Contact Array Core.
~; } ### LEGACY CODE: I think we can get rid of this error check! ## Verify that we have an appropriate array layout my $foundit = 0; foreach my $key (keys %array_layouts){ my @temp = split /\W/,$key; my $low_val = $temp[0]; my $hi_val = $temp[1]; if ($low_val <= $array && $hi_val >= $array) { $array_info{$array,'array_layout_id'} = $array_layouts{$key}; print "$array_layouts{$key} found for array $array
\n"; $foundit++; } } if ($foundit != 1) { $successful = 0; $error_messages .= qq~ Error in determining array layout for array \#$array. Contact Array Core
~; } ### LEGACY CODE: I think we can get rid of this error check! ## Verify that we have an appropriate printing batch $foundit = 0; foreach my $key (keys %printing_batches) { my @temp = split /-/, $key; my $low_val = $temp[0]; my $hi_val = $temp[1]; if ($low_val <= $array && $hi_val >= $array) { $array_info{$array,'printing_batch_id'} = $printing_batches{$key}; $foundit++; } } if ($foundit != 1) { $successful = 0; $error_messages .= qq~ Error in determining printing batch for array \#$array. Contact Array Core
~; } ## Verify that we have a slide_id for each quantitation file # hack to remove seroes from beginning of number my $zeroless_array = scalar($array); $zeroless_array++; $zeroless_array--; unless (defined($slides{$zeroless_array})) { $successful = 0; $error_messages .= qq~ No corresponding slide record for array \#$array. Contact Array Core
~; } } ## If there are any errors, report them now or continue with adding records to SBEAMS unless ($successful == 1) { print $error_messages; print "
Due to the listed errors, this transaction failed. Please go back and make the corrections."; print "
\n"; return; } ######################################################### ## At this point, we should be clear to INSERT records ## ######################################################### # Determine price of all the arrays (NOTE: NO LABELING/HYBRIDIZATION COSTS ARE INCLUDED) $sql = "SELECT price FROM $TBMA_ARRAY_REQUEST_OPTION WHERE option_key = '$analysis_type' AND option_type LIKE 'scanning%' "; @rows = $sbeams->selectOneColumn($sql); my $scan_cost = $rows[0]; $sql = " SELECT price FROM $TBMA_SLIDE_TYPE WHERE slide_type_id = '$slide_type_id' "; @rows = $sbeams->selectOneColumn($sql); my $array_cost = $rows[0]; my $price = $scan_cost + ($array_count * $array_cost); ## Start the transaction # print "
\n BEGIN TRANSACTION
\n"; $sbeams->executeSQL("BEGIN TRANSACTION"); ## Insert Array Request Records my %rowdata; my $rowdata_ref; $rowdata{'contact_id'} = $contact_id; $rowdata{'project_id'} = $project; $rowdata{'cost_scheme_id'} = $cost_scheme_id; $rowdata{'slide_type_id'} = $slide_type_id; $rowdata{'n_slides'} = $array_count; $rowdata{'n_samples_per_slide'} = 2; $rowdata{'hybridization_request'} = $parameters{'prepType'}; $rowdata{'scanning_request'}= $analysis_type; $rowdata{'request_status'} = "Finished"; $rowdata{'price'} = $price; $rowdata_ref= \%rowdata; my $array_request_id; $array_request_id = $sbeams->updateOrInsertRow(table_name=>$TBMA_ARRAY_REQUEST, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1 ); undef %rowdata; ## INSERT array_request_slide record for each array for (my $m=0;$m<$array_count;$m++) { my $array = $parameters{'array_'.$m}; ## Format array_id so that it's a five digit number (e.g. '2886' --> '02886') # BUGFIX - this actually never ran until the array ids got > 9999, whereupon # it caused an infinite loop. Will comment out, since it was a no-op # while ($array =~ /\d{5}/){ # $array = "0".$array; # } $rowdata{'array_request_id'} = $array_request_id; $rowdata{'slide_index'}= $m; $rowdata_ref = \%rowdata; my $array_request_slide_id; $array_request_slide_id = $sbeams->updateOrInsertRow(table_name=>$TBMA_ARRAY_REQUEST_SLIDE, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); $array_info{$array,'array_request_id'} = $array_request_id; $array_info{$array,'array_request_slide_id'} = $array_request_slide_id; undef %rowdata; ## INSERT array_request_sample, labeling record, and hybridization my $sample0_name = substr( $parameters{'sample0name_'.$m}, 0, 46).".."; my $sample1_name = substr( $parameters{'sample1name_'.$m}, 0, 46).".."; for (my $sample_index=0;$sample_index<2;$sample_index++) { ## INSERT array_request_sample record $rowdata{'array_request_slide_id'} = $array_request_slide_id; $rowdata{'sample_index'} = $sample_index; my $full_name = $parameters{'sample'.$sample_index.'name_'.$m}; $rowdata{'full_name'} = $full_name; $rowdata{'name'} = substr($full_name, 0, 46).".."; $rowdata{'labeling_method_id'} = $parameters{'sample'.$sample_index.'labmeth_'.$m}; $rowdata_ref = \%rowdata; my $array_request_sample_id; $array_request_sample_id = $sbeams->updateOrInsertRow (table_name=>$TBMA_ARRAY_REQUEST_SAMPLE, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); $array_info{$array,'array_request_sample_'.$sample_index.'_id'} = $array_request_sample_id; undef %rowdata; ## INSERT Labeling Record $rowdata{'array_request_sample_id'} = $array_request_sample_id; $rowdata{'protocol_id'} = $parameters{'labprot_'.$m}; $rowdata{'date_labeled'} = $parameters{'labdate_'.$m}; $rowdata{'dilution_factor'} = "-1"; $rowdata{'volume'} = "-1"; $rowdata{'absorbance_lambda'} = "-1"; $rowdata{'absorbance_260'} = "-1"; $rowdata{'dye_lot_number'} = $parameters{'sample'.$sample_index.'dye_'.$m}; $rowdata_ref = \%rowdata; my $labeling_id; $labeling_id = $sbeams->updateOrInsertRow (table_name=>$TBMA_LABELING, rowdata_ref=>$rowdata_ref, insert=>1, add_audit_parameters=>1); $array_info{$array,'labeling_id'} = $labeling_id; undef %rowdata; } ## INSERT Array Record $rowdata{'project_id'} = $project; $rowdata{'layout_id'} = $array_info{$array,'array_layout_id'}; $rowdata{'printing_batch_id'} = $array_info{$array,'printing_batch_id'}; $rowdata{'slide_id'} = $slides{$array}; $rowdata{'array_name'} = $array; $rowdata{'array_request_slide_id'} = $array_request_slide_id; $rowdata_ref = \%rowdata; my $array_id; $array_id = $sbeams->updateOrInsertRow(table_name=>$TBMA_ARRAY, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); ## Format array_id so that it's a five digit number (e.g. '2886' --> '02886') while ($array_id =~ /\A\d{5}\Z/){ $array_id = "0".$array_id; } $array_info{$array,'array_id'} = $array_id; undef %rowdata; ## INSERT Hybridization Record $rowdata{'name'} = $sample0_name.'_vs_'.$sample1_name; $rowdata{'array_id'} = $array_id; $rowdata{'protocol_id'} = $parameters{'hybprot_'.$m}; $rowdata{'date_hybridized'} = $parameters{'hybdate_'.$m}; $rowdata{'comment'} = 'Created by ArrayRecorder.cgi'; $rowdata_ref = \%rowdata; my $hybridization_id; $hybridization_id = $sbeams->updateOrInsertRow (table_name=>$TBMA_HYBRIDIZATION, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); $array_info{$array,'hybridization_id'} = $hybridization_id; undef %rowdata; ## INSERT array_scan record $rowdata{'array_id'} = $array_id; $rowdata{'protocol_id'} = $parameters{'scanprot_'.$m}; $rowdata{'data_flag'} = $parameters{'scanflag_'.$m}; $rowdata{'date_scanned'} = $parameters{'scandate_'.$m}; $rowdata{'resolution'} = '10.00'; $rowdata{'stage_location'} = $parameters{'scanfile_'.$m}; $rowdata{'comment'} = 'Created by ArrayRecorder.cgi'; $rowdata_ref = \%rowdata; my $array_scan_id; $array_scan_id = $sbeams->updateOrInsertRow (table_name=>$TBMA_ARRAY_SCAN, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); $array_info{$array,'array_scan_id'} = $array_scan_id; undef %rowdata; ## INSERT array_quantitation_record $rowdata{'array_scan_id'} = $array_scan_id; $rowdata{'protocol_id'} = $parameters{'quantprot_'.$m}; $rowdata{'stage_location'} = $parameters{'quantfile_'.$m}; $rowdata{'data_flag'} = $parameters{'quantflag_'.$m}; $rowdata{'date_quantitated'} = $parameters{'quantdate_'.$m}; $rowdata{'comment'} = 'Created by ArrayRecorder.cgi'; $rowdata_ref = \%rowdata; my $array_quantitation_id; $array_quantitation_id = $sbeams->updateOrInsertRow (table_name=>$TBMA_ARRAY_QUANTITATION, rowdata_ref=>$rowdata_ref, insert=>1, return_PK=>1, add_audit_parameters=>1); $array_info{$array,'array_quantitation_id'} = $array_quantitation_id; undef %rowdata; } ## End transaction # print "
\n COMMIT TRANSACTION
\n"; $sbeams->executeSQL("COMMIT TRANSACTION"); ## Print Successful Handling Screen print qq~ Array Records Inserted Successfully!
To see the array request record:
$SERVER_BASE_DIR$CGI_BASE_DIR/Microarray/SubmitArrayRequest.cgi?TABLE_NAME=MA_ARRAY_REQUEST&array_request_id=$array_request_id

To visit this project\'s homepage:
$SERVER_BASE_DIR$CGI_BASE_DIR/Microarray/ProjectHome.cgi?set_current_project_id=$project
~; ## Fire off an email alerting the admins that a request has been added. alert_admins($array_request_id); alert_developers($array_request_id,\%array_info); } ############################################################################### # alert_admins ############################################################################### sub alert_admins{ my $PK = shift @_; my $mailprog = "/usr/lib/sendmail"; my $recipient_name = "Microarray_admin Contact"; my $recipient = "bmarzolf\@systemsbiology.org"; my $cc_name = "SBEAMS"; my $cc = "edeutsch\@systemsbiology.org"; my $current_username = $sbeams->getCurrent_username(); #### But if we're running as a dev version then just mail to administrator if ($DBVERSION =~ /Dev/) { $recipient_name = $cc_name; $recipient = $cc; } open (MAIL, "|$mailprog $recipient,$cc") || croak "Can't open $mailprog!\n"; print MAIL "From: SBEAMS \n"; print MAIL "To: $recipient_name <$recipient>\n"; print MAIL "Cc: $cc_name <$cc>\n"; print MAIL "Reply-to: $current_username <${current_username}\@systemsbiology.org>\n"; print MAIL "Subject: Microarray request submission\n\n"; print MAIL "A microarray request was just entered into SBEAMS by ${current_username}. This was sent by ArrayRecorder.cgi\n\n"; print MAIL "To see the request view this link:\n\n"; print MAIL "$SERVER_BASE_DIR$CGI_BASE_DIR/Microarray/SubmitArrayRequest.cgi?TABLE_NAME=MA_ARRAY_REQUEST&array_request_id=$PK\n\n"; close (MAIL); print "

An email was just sent to the Microarray_admin Group informing them of your request.
\n"; } ############################################################################### # alert_developers ############################################################################### sub alert_developers{ my $PK = shift @_; my $parameters_ref = shift @_; my %parameters = %{$parameters_ref}; my $mailprog = "/usr/lib/sendmail"; my $recipient_name = "Microarray_admin Developer Contact"; my $recipient = "bmarzolf\@systemsbiology.org"; my $current_username = $sbeams->getCurrent_username(); open (MAIL, "|$mailprog $recipient") || croak "Can't open $mailprog!\n"; print MAIL "From: SBEAMS \n"; print MAIL "To: $recipient_name <$recipient>\n"; print MAIL "Reply-to: $current_username <${current_username}\@systemsbiology.org>\n"; print MAIL "Subject: Microarray request submission\n\n"; print MAIL "A microarray request was just entered into SBEAMS by ${current_username}. This was sent by ArrayRecorder.cgi\n\n"; print MAIL "To see the request view this link:\n\n"; print MAIL "$SERVER_BASE_DIR$CGI_BASE_DIR/Microarray/SubmitArrayRequest.cgi?TABLE_NAME=MA_ARRAY_REQUEST&array_request_id=$PK\n\n"; print MAIL "Here is a listing of the data that was inserted:\n"; print MAIL "KEY(array,data type) \t VALUE\n"; foreach my $key (keys %parameters) { print MAIL "$key - $parameters{$key}\n"; } close (MAIL); print "

An email was just sent to the Microarray_admin Group informing them of your request.
\n"; }