- From: Olivier Thereaux <ot@dev.w3.org>
- Date: Mon, 27 Dec 2004 05:11:22 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/validator/httpd/cgi-bin
In directory hutz:/tmp/cvs-serv2519
Added Files:
sendfeedback.pl
Log Message:
skeleton and basic features of a templated feedback system
--- NEW FILE: sendfeedback.pl ---
#!/usr/bin/perl -T
##
## feedback generator for W3C Markup Validation Service
# # $Id: sendfeedback.pl,v 1.1 2004/12/27 05:11:20 ot Exp $
## Pragmas.
use strict;
use warnings;
## Modules. See also the BEGIN block further down below.
use CGI qw();
use HTML::Template 2.6 qw();
use Config::General 2.19 qw(); # Need 2.19 for -AutoLaunder
use File::Spec qw();
use vars qw($DEBUG $CFG $RSRC $VERSION $HAVE_IPC_RUN);
# Define global constants
use constant TRUE => 1;
use constant FALSE => 0;
# Things inside BEGIN don't happen on every request in persistent
# environments, such as mod_perl. So let's do globals, eg. read config here.
BEGIN {
# Launder data for -T; -AutoLaunder doesn't catch this one.
if (exists $ENV{W3C_VALIDATOR_HOME}) {
$ENV{W3C_VALIDATOR_HOME} =~ /^(.*)$/;
$ENV{W3C_VALIDATOR_HOME} = $1;
}
#
# Read Config Files.
eval {
my %config_opts = (
-ConfigFile => ($ENV{W3C_VALIDATOR_CFG} || '/etc/w3c/validator.conf'),
-MergeDuplicateOptions => TRUE,
-MergeDuplicateBlocks => TRUE,
-SplitPolicy => 'equalsign',
-UseApacheInclude => TRUE,
-IncludeRelative => TRUE,
-InterPolateVars => TRUE,
-AutoLaunder => TRUE,
-AutoTrue => TRUE,
-DefaultConfig => {
Protocols => {Allow => 'http,https'},
Paths => {
Base => ($ENV{W3C_VALIDATOR_HOME} || '/usr/local/validator'),
SGML => {Parser => '/usr/bin/onsgmls'},
},
},
);
my %cfg = Config::General->new(%config_opts)->getall();
$CFG = \%cfg;
};
if ($@) {
die <<".EOF.";
Could not read configuration. Set the W3C_VALIDATOR_CFG environment variable
or copy conf/* to /etc/w3c/. Make sure that the configuration file and all
included files are readable by the web server user. The error was:\n'$@'
.EOF.
}
} # end of BEGIN block.
#
# Get rid of (possibly insecure) $PATH.
delete $ENV{PATH};
our $q = new CGI;
our $lang = 'en_US'; # @@@ TODO: conneg
# Read error message + explanations file
our $error_messages_list = File::Spec->catfile($CFG->{Paths}->{Templates}, $lang, 'error_messages.cfg');
our %config_opts = (-ConfigFile => $error_messages_list);
our %rsrc = Config::General->new(%config_opts)->getall();
$RSRC = \%rsrc;
our $T = HTML::Template->new(
filename => File::Spec->catfile($CFG->{Paths}->{Templates}, $lang, 'feedback.tmpl'),
die_on_bad_params => FALSE,
);
our $errnum;
our $errlist = "";
our $errmsg_text;
our $validated_uri;
our $errmsg_id;
sub process_query {
$validated_uri = $q->param('uri');
$errmsg_id = $q->param('errmsg_id');
if ($errmsg_id) {
$errmsg_text = "$RSRC->{msg}->{$errmsg_id}->{original}";
$errmsg_text = de_template_explanation($errmsg_text);
}
# Trigger "thanks for your message. If your query requires an answer,..." ack paragraph
my $sent = $q->param('send');
if ($sent) {
print "hello";
if ($sent == "yes") { $T->param(ack_ok => TRUE); }
}
}
sub send_message {
# sends message to www-validator list @@ TODO @@
}
sub error_choices {
# creates drop-down menu with all possible error messages to send feedback about
my @msgnumbers = keys( %{$RSRC->{msg}} );
@msgnumbers = sort { $a <=> $b } @msgnumbers;
my $errlabel;
for $errnum ( @msgnumbers ) {
$errlabel = $RSRC->{msg}->{$errnum}->{original};
$errlabel = de_template_explanation($errlabel);
if (length($errlabel) > 70) { $errlabel = substr($errlabel, 0, 67)."..." }
$errlist = $errlist.'<option value="'. $errnum.'"';
if ($errmsg_id) {
if ($errnum == $errmsg_id) { $errlist = $errlist.'selected="selected" '; }
}
$errlist = $errlist."> $errnum $errlabel</option>\n";
}
}
sub de_template_explanation {
# takes the error message template, and replace "template keywords" with real life keywords
my $explanation = shift;
if ($explanation){
$explanation =~ s/\%1/X/;
$explanation =~ s/\%2/Y/;
$explanation =~ s/\%3/Z/;
$explanation =~ s/\%4/a/;
$explanation =~ s/\%5/b/;
$explanation =~ s/\%6/c/;
}
return $explanation;
}
sub prepare_error_message {
# if the form sent contains errors (what kind exactly?)
# @@ TODO @@
}
sub print_prefilled_form {
$T->param(validated_uri => $validated_uri);
$T->param(errmsg_id => $errmsg_id);
$T->param(errlist => $errlist);
$T->param(explanation => $errmsg_text);
print $T->output;
}
process_query;
error_choices;
print_prefilled_form;
# END
Received on Monday, 27 December 2004 05:11:23 UTC