Merge pull request #42 from solgenomics/topic/duplicate_image_warning
[cxgn-corelibs.git] / lib / CXGN / People / Organism.pm
blob074b6d8fe0b86445d3650fe249c3b69e6fc7184d
3 =head1 NAME
5 CXGN::People::Organism - a class to deal with the favorite organisms of SGN users
7 =head1 DESCRIPTION
9 The SGN user database can store people's favorite organisms, which are maintained in a table called 'organism' in the sgn_people schema - a table which should be re-named (TO DO!). This class is an interface to the favorite organisms table.
11 =head1 AUTHORS
13 Lukas Mueller, John Binns, Robert Buels.
15 Copyleft (c) Sol Genomics Network. All rights reversed.
17 =head1 METHODS
19 This class implements the following methods:
21 =head1 CONSTRUCTORS
23 =cut
25 use strict;
27 package CXGN::People::Organism;
29 use base qw | CXGN::DB::Object |;
31 =head2 constructor new()
33 Usage: my $o = CXGN::People::Organism->new($dbh, $id);
34 Desc:
35 Ret:
36 Args:
37 Side Effects:
38 Example:
40 =cut
42 sub new {
43 my $class = shift;
44 my $dbh = shift;
45 my $id = shift;
46 my $selected = shift;
48 my $self = $class->SUPER::new($dbh);
50 $self->set_sql();
52 if ($id) {
53 my $success = $self->fetch($id);
54 if ( !$success ) { return undef; }
56 $self->{is_selected} = $selected;
57 return $self;
61 # alternate constructor that generates a list of organism objects that have the is_selected already
62 # set for the sp_person_id supplied
65 =head2 constructor all_organisms()
67 Usage: my @org_objs = CXGN::People::Organisms->all_organisms();
68 Desc:
69 Ret:
70 Args:
71 Side Effects:
72 Example:
74 =cut
76 sub all_organisms {
77 my $class = shift;
78 my $dbh = shift;
79 my $sp_person_id = shift;
81 my $self = $class->SUPER::new($dbh);
83 $self->set_sql();
85 my @organisms = ();
87 my $sth = $self->get_sql("all");
88 $sth->execute($sp_person_id);
89 while ( my ( $id, $name, $selected ) = $sth->fetchrow_array() ) {
90 my $o = CXGN::People::Organism->new($self->get_dbh(), $id);
91 if ($selected) {
92 $o->set_selected(1);
94 #print STDERR $o->get_organism_name() ." is selected.\n";
96 else { $o->set_selected(0); }
98 #print STDERR "ORGANISM: ".$o->get_organism_name()." SELECTED: $selected.\n";
99 push @organisms, $o;
101 return @organisms;
104 sub fetch {
105 my $self = shift;
106 my ($id) = @_;
107 my $sth = $self->get_sql('fetch');
108 $sth->execute($id);
109 my $hashref = $sth->fetchrow_hashref();
110 foreach my $k ( keys(%$hashref) ) {
111 $self->{$k} = $$hashref{$k};
113 return $sth->rows();
116 =head2 get_sp_organism_id
118 Usage:
119 Desc:
120 Ret:
121 Args:
122 Side Effects:
123 Example:
125 =cut
127 sub get_sp_organism_id {
128 my $self = shift;
129 return $self->{organism_id};
132 =head2 is_selected(), set_selected()
134 Usage:
135 Desc:
136 Ret:
137 Args:
138 Side Effects:
139 Example:
141 =cut
144 sub is_selected {
145 my $self = shift;
146 return $self->{is_selected};
149 sub set_selected {
150 my $self = shift;
151 $self->{is_selected} = shift;
154 sub store {
155 my $self = shift;
156 if ( $self->get_organism_id() ) {
158 # if there is a organism id already we do nothing because we assume the names to be immutable.
161 else {
163 # check to see if such an organism is already defined.
164 my $sqh = $self->get_sql('id_from_name');
165 $sqh->execute( $self->get_organism_name() );
166 if ( $sqh->rows() > 0 ) {
167 $self->{organism_id} = ( $sqh->fetchrow_array() )[0];
169 else {
170 my $sqh = $self->get_sql("insert");
171 $sqh->execute( $self->get_organism_name() );
172 my $id = $self->get_dbh()->last_insert_id('sp_organisms', 'sgn_people');
173 $self->{organism_id} = $id;
178 return $self->{organism_id};
181 =head2 get_organism_id
183 Usage:
184 Desc:
185 Ret:
186 Args:
187 Side Effects:
188 Example:
190 =cut
192 sub get_organism_id {
193 my $self = shift;
194 return $self->{organism_id};
197 =head2 accessors get_organism_name(), set_organism_name()
199 Usage:
200 Desc:
201 Ret:
202 Args:
203 Side Effects:
204 Example:
206 =cut
208 sub get_organism_name {
209 my $self = shift;
210 return $self->{organism_name};
213 sub set_organism_name {
214 my $self = shift;
215 $self->{organism_name} = shift;
219 # SQL helper functions
221 sub set_sql {
222 my $self =shift;
223 $self->{queries} = {
225 fetch=>
228 SELECT organism_id, organism_name
229 FROM sgn_people.sp_organisms
230 WHERE organism_id=?
233 id_from_name =>
236 SELECT organism_id
237 FROM sgn_people.sp_organisms
238 WHERE organism_name=?
241 insert =>
244 INSERT INTO sgn_people.sp_organisms
245 (organism_name)
246 VALUES (?)
249 all =>
252 SELECT
253 sp_organisms.organism_id, organism_name,
254 CASE WHEN sp_person_id IS NULL THEN 0 ELSE 1 END
255 FROM
256 sgn_people.sp_organisms
257 LEFT JOIN
258 sgn_people.sp_person_organisms
259 ON (
260 sp_person_id=?
261 AND
262 sgn_people.sp_person_organisms.organism_id=sgn_people.sp_organisms.organism_id
269 while(my($name,$sql) = each %{$self->{queries}}){
270 $self->{query_handles}->{$name} = $self->get_dbh()->prepare($sql);
275 sub get_sql {
276 my $self =shift;
277 my $name = shift;
278 return $self->{query_handles}->{$name};
285 1;#do not remove