5 CXGN::People::Organism - a class to deal with the favorite organisms of SGN users
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.
13 Lukas Mueller, John Binns, Robert Buels.
15 Copyleft (c) Sol Genomics Network. All rights reversed.
19 This class implements the following methods:
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);
48 my $self = $class->SUPER::new
($dbh);
53 my $success = $self->fetch($id);
54 if ( !$success ) { return undef; }
56 $self->{is_selected
} = $selected;
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();
79 my $sp_person_id = shift;
81 my $self = $class->SUPER::new
($dbh);
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);
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";
107 my $sth = $self->get_sql('fetch');
109 my $hashref = $sth->fetchrow_hashref();
110 foreach my $k ( keys(%$hashref) ) {
111 $self->{$k} = $$hashref{$k};
116 =head2 get_sp_organism_id
127 sub get_sp_organism_id
{
129 return $self->{organism_id
};
132 =head2 is_selected(), set_selected()
146 return $self->{is_selected
};
151 $self->{is_selected
} = 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.
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];
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
192 sub get_organism_id
{
194 return $self->{organism_id
};
197 =head2 accessors get_organism_name(), set_organism_name()
208 sub get_organism_name
{
210 return $self->{organism_name
};
213 sub set_organism_name
{
215 $self->{organism_name
} = shift;
219 # SQL helper functions
228 SELECT organism_id, organism_name
229 FROM sgn_people.sp_organisms
237 FROM sgn_people.sp_organisms
238 WHERE organism_name=?
244 INSERT INTO sgn_people.sp_organisms
253 sp_organisms.organism_id, organism_name,
254 CASE WHEN sp_person_id IS NULL THEN 0 ELSE 1 END
256 sgn_people.sp_organisms
258 sgn_people.sp_person_organisms
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);
278 return $self->{query_handles
}->{$name};