#!/usr/bin/perl use strict; use Apache2::Const qw(:common); use Apache2::RequestUtil (); use IO::File; use Email::Valid; use PlantOntologyPage; use CGI; use CGI qw(:standard *table *TR *th *td *ul *ol); use Captcha::reCAPTCHA; use constant SITE_ADJECTIVE => ($ENV{'DevelopmentSite'} ? 'Development' : 'Live'); use constant EMAIL_FROM => 'feedback_submission@'; #use constant EMAIL_SUBJECT => 'Feedback Submission from Plant Ontology ' # . SITE_ADJECTIVE .' Site'; use constant EMAIL_SUBJECT => 'Feedback on POC'; use constant SENDMAIL => -e '/bin/sendmail' && '/bin/sendmail' || '/usr/sbin/sendmail'; use constant SENDMAIL_FLAGS => ' -t -oi'; # Location of public and private keys for reCAPTCHA my $pubpath = "/data/www/captcha/public.key"; my $privpath = "/data/www/captcha/private.key"; open INP,"<$pubpath" or die "Unable to open $pubpath"; my $pubkey = ; chomp $pubkey; close INP; open INP,"<$privpath" or die "Unable to open $privpath"; my $privkey = ; chomp $privkey; close INP; $| = 1; my @EMAIL_RECIPIENTS = ( #"po-dev ", #"Shuly Avraham ", "po-internal " ); my $page_title = "Feedback"; my $q = CGI->new(); my $page = PlantOntologyPage->new(Apache2::RequestUtil->request); #my $c = Captcha::reCAPTCHA->new; my $c = Captcha::reCAPTCHA->new(); my $error = undef; my $captcha_html = $c->get_html( $pubkey, $error ); print $q->header(); print $q->start_html( -title=>$page_title, -style=>{'src'=>$page->stylesheet} ); print $page->start_body(); #print "inc = @INC"; ######################################################################## my $refer_to = $q->param("refer_to") || $q->param("refer_to_url"); #my $refer_to = $q->param("refer_to_url") || "/index.html"; unless( $q->param("comments") ) { print $q->start_form(); print $q->start_table( {-border=>'0', -cellspacing=>'10', -cellpadding=>'5', -width=>'90%', -align=>'CENTER'} ); print $q->Tr( {-align=>'CENTER', -nowrap=>'nowrap'}, $q->td( {-align=>'CENTER', -valign=>'CENTER', -colspan=>'2'}, "

Suggestions? Comments? Please let us know.

" ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchtitle'}, $q->td( {-align=>'CENTER', -valign=>'CENTER'}," "), $q->td( {-align=>'LEFT', -valign=>'LEFT', -colspan=>'2'}, "
Note: Please provide a ", "valid", " email address so that we may respond. Thanks!" ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchtitle'}, $q->td( {-align=>'CENTER', -valign=>'CENTER'}," "), $q->td( {-align=>'LEFT', -valign=>'LEFT', -colspan=>'2'}, "", "** ", " required field

" ) ); if( $refer_to ) { $refer_to="http://".$q->virtual_host .( $q->server_port != 80 ? ":".$q->server_port : '') .$refer_to unless $refer_to =~ m!://!; print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Refer to URL:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $refer_to, "" ) ); } else { print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Refer to URL:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textfield( -name=>'refer_to_url', -size=>60, -maxlength=>100 ) ) ); } print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Subject:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textfield( -name=>'subject', -size=>60, -maxlength=>300 ), "**" ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Questions/Comments:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textarea( -name=>'comments', -rows=>10, -columns=>60 ) ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Your Name:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textfield( -name=>'name', -size=>60, -maxlength=>300 ), "**" ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Your Email:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textfield( -name=>'email', -size=>60, -maxlength=>100 ), "**" ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "Organization:", "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $q->textfield( -name=>'organization', -size=>60, -maxlength=>100 ) ) ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, ); # Generate the form print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'RIGHT', -valign=>'CENTER'}, "   " ), $q->td( {-align=>'LEFT', -valign=>'CENTER'}, $captcha_html) ); #print ""; #print $c->get_html( $pubkey, $error ); print $q->Tr( {-align=>'CENTER', -valign=>'CENTER', -nowrap=>'nowrap'}, # -class=>'searchbody'}, $q->td( {-align=>'CENTER', -colspan=>'2'}, $q->submit( -name=>'send_feedback', -value=>'Send your feedback' ), "   ", $q->reset(-name=>'Clear') ), ); print $q->end_table(); print $q->end_form(); } # End unless( $q->param("comments") ) ################################## if( $q->param("comments") ) { # my $name = $q->param("name"); my @param_names = $q->param; # get rid of params that are not needed @param_names = grep { $_ ne 'recaptcha_response_field' } @param_names; @param_names = grep { $_ ne 'recaptcha_challenge_field' } @param_names; @param_names = grep { $_ ne 'send_feedback'} @param_names; my $message = " *** Feedback from Plant Ontology ".SITE_ADJECTIVE." Site ***\n\n"; foreach my $pn ( @param_names ) { $message = $message.$pn.": ".$q->param( $pn )."\n\n"; } my $subject = $q->param('subject'); die "sendmail binary not present" unless -e SENDMAIL; die "sendmail binary not executable" unless -x _; my $user_email = $q->param("email"); my $is_valid = Email::Valid->address( -address => $user_email, -mxcheck => 1 ) ? 'yes' : 'no'; if( $is_valid eq "yes" ) { if ( $q->param( 'recaptcha_response_field' ) ) { my $result = $c->check_answer( $privkey, $ENV{'REMOTE_ADDR'}, $q->param( 'recaptcha_challenge_field' ), $q->param( 'recaptcha_response_field' ) ); if ( $result->{is_valid} ) { for my $address ( @EMAIL_RECIPIENTS ) { my $fh = IO::File->new( '|'.SENDMAIL.SENDMAIL_FLAGS ) or die "Can't open pipe to sendmail (".SENDMAIL."): $!"; #print $fh 'Subject: ', EMAIL_SUBJECT, "\n"; print $fh 'Subject: ', $subject, "\n"; print $fh "To: $address\n"; print $fh 'From: ', EMAIL_FROM,virtual_host(), "\n"; print $fh "Content-type: text/plain\n\n"; print $fh $message; $fh->close or die "Can't close sendmail pipe: $!"; } print ( "

Thanks for the feedback!

It has been sent to the Plant Ontology team.

" ); if( $q->param("refer_to_url") ) { my $back_page = $q->param("refer_to_url"); print( "

Back to the page I was viewing
" ); } } else { $error = $result->{error}; print ( "

Captcha did not match, Please go back and try again.

No message sent.

" ); } } } else { print ( "

Invalid email address.

No message sent.

" ); } } print $page->end_body;