4 my $locus_synonym_detail_page = CXGN
::Phenome
::LocusSynonymDetailPage
->new();
6 package CXGN
::Phenome
::LocusSynonymDetailPage
;
10 use CXGN
::Page
::FormattingHelpers qw
/ info_section_html page_title_html /;
11 use CXGN
::Phenome
::LocusSynonym
;
12 use CXGN
::Phenome
::Locus
;
15 use base qw
/ CXGN::Page::Form::SimpleFormPage /;
19 my $self = $class->SUPER::new
(@_);
20 $self->set_script_name("locus_synonym.pl");
28 # call set_object_id, set_object and set_primary_key here
29 # with the appropriate parameters.
31 my %args = $self->get_args();
32 $self->set_object_id($args{locus_alias_id
});
33 $self->set_object(CXGN
::Phenome
::LocusSynonym
->new($self->get_dbh(), $self->get_object_id())
35 $self->set_primary_key("locus_alias_id");
39 # override store to check if a locus synonym with the submitted name already exists
44 my $locus_synonym = $self->get_object();
46 my $locus_synonym_id = $self->get_object_id();
47 my %args = $self->get_args();
49 my $not_new_locus_synonym = "";
50 my ($existing_id, $obsolete) = CXGN
::Phenome
::LocusSynonym
::exists_locus_synonym_named
($self->get_dbh(), $args{locus_alias
}, $args{locus_id
});
51 if ($existing_id && $obsolete == 0) {
53 $self->get_page()->header();
54 print $not_new_locus_synonym = "Locus synonym '".$args{locus_alias
}. "' already exists <br />";
55 print qq { <a href
="javascript:history.back(1)">back to locus synonyms
</a
> };
56 $self->get_page()->footer();
59 $self->SUPER::store
(1);
60 $self->send_synonym_email();
63 my $locus_id= $args{locus_id
};
64 $self->get_page()->client_redirect("/phenome/locus_synonym.pl?locus_id=$locus_id&action=new");
74 my %args = $self->get_args();
76 $self->check_modify_privileges();
83 my $locus_synonym_name = $self->get_object()->get_locus_alias();
85 if ($args{locus_id
}) {
86 $locus = CXGN
::Phenome
::Locus
->new($self->get_dbh(), $args{locus_id
});
87 $locus_name = $locus->get_locus_name();
88 $locus->remove_locus_alias($args{locus_alias_id
});
89 $self->send_synonym_email('delete');
92 my $locus_id= $args{locus_id
};
93 $self->get_page()->client_redirect("/phenome/locus_synonym.pl?locus_id=$locus_id&action=new");
100 my %args = $self->get_args();
101 my $locus_synonym = $self->get_object();
102 my $locus_synonym_id = $self->get_object_id();
106 # generate the form with the appropriate values filled in.
107 # if we view, then take the data straight out of the database
108 # if we edit, take data from database and override with what's
109 # in the submitted form parameters.
110 # if we store, only take the form parameters into account.
111 # for new, we don't do anything - we present an empty form.
116 $self->get_form()->add_field(display_name
=>"Locus synonym: ",
117 field_name
=>"locus_alias",
119 object
=>$locus_synonym,
120 getter
=>"get_locus_alias",
121 setter
=>"set_locus_alias",
125 $self->get_form()->add_hidden( field_name
=>"action", contents
=>"store" );
126 $self->get_form()->add_hidden( field_name
=>"locus_alias_id", contents
=>$locus_synonym_id );
128 $self->get_form()->add_hidden( field_name
=>"locus_id",
129 contents
=>$args{locus_id
},
130 object
=>$locus_synonym,
131 getter
=>"get_locus_id",
132 setter
=>"set_locus_id"
134 $self->get_form()->add_hidden (
135 field_name
=> "sp_person_id",
136 contents
=>$self->get_user()->get_sp_person_id(),
137 object
=> $locus_synonym,
138 setter
=>"set_sp_person_id",
142 # (do nothing here because synonyms cannot be edited).
143 #if ($self->get_action()=~/view|edit/i) {
144 # $self->get_form()->from_database();
146 if ($self->get_action()=~/store/i) {
147 $args{locus_alias
}=lc($args{locus_alias
}); # somehow this doesn't work -- would like to lowercase all tags...
148 $self->get_form()->from_request(%args);
156 my %args = $self->get_args();
158 # generate an appropriate edit link
160 my $script_name = $self->get_script_name();
162 # generate some locus and/or image information
169 my @locus_synonyms = ();
171 my @experiment_tags = ();
175 $self->get_page()->header();
177 print page_title_html
( qq { SGN
<a href
="/search/direct_search.pl?search=loci">genes
</a
> database
} );
179 print qq { <b
>Locus synonyms
</b
> };
181 if ($args{locus_id
}) {
182 $locus = CXGN
::Phenome
::Locus
->new($self->get_dbh(), $args{locus_id
});
183 @locus_synonyms=$locus->get_locus_aliases('f', 'f');
184 my $locus_id = $locus->get_locus_id();
185 print "for locus ".$locus->get_locus_name()."<br /><br />\n";
186 foreach my $ls (@locus_synonyms) {
187 my $locus_synonym_id = $ls->get_locus_alias_id();
188 print $ls->get_locus_alias(). qq { \n <a href
="locus_synonym.pl?locus_id=$locus_id&locus_alias_id=$locus_synonym_id&action=confirm_delete">[Remove
]</a> <br />\n };
192 if (!@locus_synonyms && !@image_tags) { print "<b>None found</b><br /><br />\n"; }
194 print qq { <br
/><br /><b
>Add another locus synonym
</b
>: };
196 print qq { <center
> };
198 $self->get_form()->as_table();
200 print qq { </center
> };
202 print qq { <a href
="/locus/$args{locus_id}/view">back to locus page
</a
> };
204 $self->get_page()->footer();
208 sub send_synonym_email
{
211 my %args = $self->get_args();
212 my $locus_id= $args{locus_id
};
214 my $locus_synonym_id=$self->get_object()->get_locus_alias_id();
215 my $locus_synonym_name= $self->get_object->get_locus_alias();
217 my $username= $self->get_user()->get_first_name()." ".$self->get_user()->get_last_name();
218 my $sp_person_id=$self->get_user()->get_sp_person_id();
219 my $usermail=$self->get_user()->get_private_email();
220 my $locus_link= qq |http
://solgenomics
.net
/locus/$locus_id/view
|;
221 my $user_link = qq |http
://solgenomics
.net
/solpeople/personal
-info
.pl?sp_person_id
=$sp_person_id|;
225 if ($action eq 'delete') {
226 $subject="[A locus synonym deleted] locus $locus_id";
227 $fdbk_body="$username ($user_link)\n has deleted locus synonym $locus_synonym_name \n from locus ($locus_link)\n"; }
229 $subject="[New locus synonym stored] locus $locus_id";
230 $fdbk_body="$username ($user_link)\n has submitted a new synonym $locus_synonym_name \n for locus ($locus_link)\n"; }
232 CXGN
::Contact
::send_email
($subject,$fdbk_body, 'sgn-db-curation@sgn.cornell.edu');
233 CXGN
::Feed
::update_feed
($subject,$fdbk_body);