Merge pull request #5248 from solgenomics/topic/batch_update_trials
[sgn.git] / mason / gem / target / hybridization_composition.mas
blob98c0891af0bdcab130687c3c662919bbdbd7194b
1 <%doc>
3 =head1 NAME 
4  
5  hybridization_composition.mas
6  Mason component to show data about hybridizations.
8 =cut
10 =head1 VERSION 
12 0.1
14 =cut 
16 =head1 DESCRIPTION
18  Mason component to show information for hybridization web page.
19  This component is used by platform, experiment and target
20  Use as argument an array reference composed by CXGN::GEM::Target objects.
22  - Mason root page = platform_detail.mas, experiment_detail.mas, target_detail.mas
23  - Perl controller = platform.pl, experiment.pl, target.pl
25 =cut
27 =head 1 AUTHOR
29  Aureliano Bombarely (ab782@cornell.edu)
31 =cut 
33 </%doc>
36 <%args>
37 $target_list
38 </%args>
39 <%init>
40 use strict;
41 use warnings;
43 use CXGN::GEM::Schema;
44 use CXGN::GEM::Platform;
46 use CXGN::Page::FormattingHelpers  qw/ info_section_html info_table_html columnar_table_html page_title_html html_break_string /;
47 </%init>
49 <%perl>
52 my $hyb_comp_content;
54 ## If there aren't any experiment that comes from experimental design it will do nothing. 
55 ## The error message will returned by basic information
57 my @data;
58 my $hyb_composition_html;
60 my @target_list = @{ $target_list };
62 if (scalar(@target_list) > 0) {
63    
64     ## Get the schema
65     my $schema = $target_list[0]->get_schema();
67     foreach my $target (@target_list) {
68         my $target_id = $target->get_target_id();
69         my $target_name = $target->get_target_name();
70         my $target_link = '/gem/target.pl?id='.$target_id;
71         my $target_html = "<a href=$target_link>$target_name</a>";
73         my $exp = $target->get_experiment();
74         my $exp_id = $exp->get_experiment_id(); 
75         my $exp_name = $exp->get_experiment_name();
76         my $exp_link = '/gem/experiment.pl?id='.$exp_id;
77         my $exp_html = "<a href=$exp_link>$exp_name</a>";       
79         my @hyb_rows = $schema->resultset('GeHybridization')
80                               ->search({ target_id => $target_id });
81    
82         foreach my $hyb_row (@hyb_rows) {
83             my $hyb_id = $hyb_row->get_column('hybridization_id');
84             my $platform_id = $hyb_row->get_column('platform_id');
85             my $platform = CXGN::GEM::Platform->new($schema, $platform_id);
86    
87             my $platform_name = $platform->get_platform_name();
88             my $platform_link = '/gem/platform.pl?id='.$platform_id;
89             my $platform_html = "<a href=$platform_link>$platform_name</a>";
90         
91             push @data, [$hyb_id, $platform_html, $exp_html, $target_html];
92         }
93             
94     }
96     ## Use columnar table to give the html format. If don't exists any data, print message.
98     $hyb_composition_html = columnar_table_html(  headings => [ 'Hybridization id', 'Platform', 'Experiment', 'Target'],
99                                                   data     => \@data,
100                                                   __alt_freq => 2,
101                                                   __align  => ['c', 'l', 'l', 'l'],
102                                                );
103     
107 else {
108     $hyb_composition_html = "No hybridization associated with this element <br>";
111 my $hyb_n = scalar(@data);
112     $hyb_comp_content = info_section_html( title        => "Hybridizations (".$hyb_n.")", 
113                                            contents     => $hyb_composition_html,
114                                            collapsible  => 1,
115                                            collapsed    => 1, );
118 </%perl>
120 <% $hyb_comp_content %>
123 <& 
124    /util/import_javascript.mas, 
125    classes => 'CXGN.Effects'