This question about Using an extension: Asked
Filling in Template from URLPARAMs
I want to give non-authenticated users the ability to fill in a form and submit the data by email. (i.e. it's a form like they would use if they were using a Wiki application, but they're not able to use the application because the site denies CHANGE access to non-authenticated users.)
I figured I'd use
Extensions.SendEmailPlugin.
I had hoped it would recognize and accept URLPARAMs; but it's crippled (sorry
ArthurClemens). It only understands five variables (form field names).
So, I thought I'd edit the code....
SendEmailPlugin looks fairly easy to understand:
# get SUBJECT
my $subject = $query->param('subject') || $query->param('Subject') || '';
_debug("subject=$subject") if $subject;
# get BODY
my $body = $query->param('body') || $query->param('Body') || '';
_debug("body=$body") if $body;
my $template = Foswiki::Func::readTemplate($templateName);
_debug("templateName=$templateName");
unless ($template) {
$template = <<'HERE';
From: %FROM%
To: %TO%
CC: %CC%
Subject: %SUBJECT%
%BODY%
HERE
}
_debug("template=$template");
# format email
my $mail = $template;
$mail =~ s/%FROM%/$from/go;
$mail =~ s/%TO%/$to/go;
$mail =~ s/%CC%/$cc/go;
$mail =~ s/%SUBJECT%/$subject/go;
$mail =~ s/%BODY%/$body/go;
$mail =~ s/\nCC:\s*\n/\n/;
I think I just need to loop over everything returned into
$query
...
my $query = Foswiki::Func::getCgiQuery();
but it's been a while since I wrote any Perl code of substance and it would be lovely to have a bit of bootstrapping assistance.
Can one of you wonderful devs recommend another plugin or function in the core that I can use for a sample of grabbing any and all URLPARAMs and stuffing them into a template?
--
VickiBrown - 25 Jun 2016
I have figured out to do this in sort of a brute-force manner. That is, I'm looping over the query parameters and doing a substitution on the mail template.
It would be nice to use the real URLPARAM functionality for this, but my head was spinning trying to figure out the right way to call that, so I invented my own variable, %EMAILPARAM%
Code Changes
$ diff Core.pm Core.pm_dist
26,27d25
< use Data::Dumper;
<
64d61
< my $debug = 1;
130,131d126
<
<
287d281
< my $bare_template = 0;
291d284
< $bare_template = 1;
312,336d304
< unless ($bare_template) {
< # Get any addition query params sent from the form
< _debug( "\t get query params=" . Dumper( $query->{param} ) );
<
< foreach my $name ( $query->param ) {
< next if ( $name =~ /^from$/i ||
< $name =~ /^to$/i ||
< $name =~ /^cc$/i ||
< $name =~ /^subject$/i ||
< $name =~ /^body$/i ||
< $name =~ /^redirectto$/i ||
< $name =~ /^mailtemplate$/i ||
< $name =~ /^validation_key$/i
< );
< my @values = $query->param("$name");
<
< if (@values == 1) {
< $mail =~ s/%EMAILPARAM{\"$name\"}%/$values[0]/g;
< } else {
< my $value_str = join(', ', @values);
< $mail =~ s/%EMAILPARAM{\"$name\"}%/$value_str/g;
< }
< }
< }
<
Sample template
From: %FROM%
To: %TO%
Subject: %SUBJECT%
Name: %EMAILPARAM{"FirstName"}% %EMAILPARAM{"LastName"}%
Company name: %EMAILPARAM{"Company"}%
Company URL: %EMAILPARAM{"URL"}%
City (location): %EMAILPARAM{"City"}%
Email: %EMAILPARAM{"Email"}%
Telephone: %EMAILPARAM{"Phone"}%
Message:
%BODY%
--
VickiBrown - 25 Jun 2016