Skip to content

Commit

Permalink
Item14216: Support utf-8 webs/topics in mailnotify
Browse files Browse the repository at this point in the history
Failed to utf-8 encode when run as a rest handler. Also it was not
setting the -charset utf-8 header in the response.
  • Loading branch information
gac410 committed Nov 16, 2016
1 parent 04fa967 commit 9884d56
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 24 deletions.
8 changes: 5 additions & 3 deletions MailerContrib/data/System/MailerContrib.txt
@@ -1,4 +1,4 @@
%META:TOPICINFO{author="ProjectContributor" comment="" date="1437500521" format="1.1" version="1"}% %META:TOPICINFO{author="ProjectContributor" comment="" date="1479268930" format="1.1" version="1"}%
%META:TOPICPARENT{name="Contribs"}% %META:TOPICPARENT{name="Contribs"}%
---+!! Mailer Contrib ---+!! Mailer Contrib
<a href="http://wikiring.com"><img src="%ATTACHURL%/logo.gif" style="float:right" /></a> <a href="http://wikiring.com"><img src="%ATTACHURL%/logo.gif" style="float:right" /></a>
Expand Down Expand Up @@ -268,6 +268,8 @@ Many thanks to the following sponsors for supporting this work:


| Copyright &copy;: | 2004, Wind River Systems; 2009-2014 Foswiki Contributors | | Copyright &copy;: | 2004, Wind River Systems; 2009-2014 Foswiki Contributors |
| Change History: | | | Change History: | |
| 2.83 (15 Nov 2016) | Foswiki 2.1.3 Foswikitask:Item13936: Allow From: address of emails to be separately configured<br />\
Foswikitask:Item14216: mailnotify fails with "Wide character in print" |
| 2.82 (14 Jun 2015) | Foswiki 2.0. Foswikitask:Item13423: Perl 5.22 deprecations<br />\ | 2.82 (14 Jun 2015) | Foswiki 2.0. Foswikitask:Item13423: Perl 5.22 deprecations<br />\
Foswikitask:Item13378: Foswikitask:Item13387: utf-8 foswiki core<br />\ Foswikitask:Item13378: Foswikitask:Item13387: utf-8 foswiki core<br />\
Foswikitask:Item13323: use /usr/bin/env perl in scripts<br />\ Foswikitask:Item13323: use /usr/bin/env perl in scripts<br />\
Expand Down Expand Up @@ -310,5 +312,5 @@ Many thanks to the following sponsors for supporting this work:
%META:FIELD{name="Support" title="Support" value="http://foswiki.org/Support/%25$ROOTMODULE%25"}% %META:FIELD{name="Support" title="Support" value="http://foswiki.org/Support/%25$ROOTMODULE%25"}%
%META:FIELD{name="Version" title="Version" value="%25$VERSION%25"}% %META:FIELD{name="Version" title="Version" value="%25$VERSION%25"}%
%META:FIELD{name="Repository" title="Repository" value="https://github.com/foswiki/distro"}% %META:FIELD{name="Repository" title="Repository" value="https://github.com/foswiki/distro"}%
%META:FILEATTACHMENT{name="logo.gif" attr="h" comment="" date="1437500521" size="11437" user="ProjectContributor" version="1"}% %META:FILEATTACHMENT{name="logo.gif" attr="h" comment="" date="1479268930" size="11437" user="ProjectContributor" version="1"}%
%META:FILEATTACHMENT{name="wikiringlogo20x20.png" attr="h" comment="" date="1437500521" size="1343" user="ProjectContributor" version="1"}% %META:FILEATTACHMENT{name="wikiringlogo20x20.png" attr="h" comment="" date="1479268930" size="1343" user="ProjectContributor" version="1"}%
49 changes: 30 additions & 19 deletions MailerContrib/lib/Foswiki/Contrib/MailerContrib.pm
Expand Up @@ -28,8 +28,8 @@ use Foswiki::Contrib::MailerContrib::WebNotify ();
use Foswiki::Contrib::MailerContrib::Change (); use Foswiki::Contrib::MailerContrib::Change ();
use Foswiki::Contrib::MailerContrib::UpData (); use Foswiki::Contrib::MailerContrib::UpData ();


our $VERSION = '2.82'; our $VERSION = '2.83';
our $RELEASE = '2.82'; our $RELEASE = '2.83';
our $SHORTDESCRIPTION = 'Supports email notification of changes'; our $SHORTDESCRIPTION = 'Supports email notification of changes';


# PROTECTED STATIC ensure the contrib is internally initialised # PROTECTED STATIC ensure the contrib is internally initialised
Expand Down Expand Up @@ -225,19 +225,19 @@ sub _processWeb {
return ''; return '';
} }


print "Processing $web\n" if $options->{verbose}; _UTF8print("Processing $web\n") if $options->{verbose};


# Read the webnotify and load subscriptions # Read the webnotify and load subscriptions
my $wn = my $wn =
Foswiki::Contrib::MailerContrib::WebNotify->new( $web, Foswiki::Contrib::MailerContrib::WebNotify->new( $web,
$Foswiki::cfg{NotifyTopicName}, 0 ); $Foswiki::cfg{NotifyTopicName}, 0 );
if ( $wn->isEmpty() ) { if ( $wn->isEmpty() ) {
print "\t$web has no subscribers\n" if $options->{verbose}; _UTF8print("\t$web has no subscribers\n") if $options->{verbose};
} }
else { else {


# create a DB object for parent pointers # create a DB object for parent pointers
print $wn->stringify(1) if $options->{verbose}; _UTF8print( $wn->stringify(1) ) if $options->{verbose};
my $db = Foswiki::Contrib::MailerContrib::UpData->new($web); my $db = Foswiki::Contrib::MailerContrib::UpData->new($web);
_processSubscriptions( $web, $wn, $db, $options ); _processSubscriptions( $web, $wn, $db, $options );
} }
Expand All @@ -260,8 +260,9 @@ sub _processSubscriptions {
} }


if ( $options->{verbose} ) { if ( $options->{verbose} ) {
print "\tLast notification was at " _UTF8print( "\tLast notification was at "
. Foswiki::Time::formatTime( $timeOfLastNotify, 'iso' ) . "\n"; . Foswiki::Time::formatTime( $timeOfLastNotify, 'iso' )
. "\n" );
} }


my $timeOfLastChange = 0; my $timeOfLastChange = 0;
Expand Down Expand Up @@ -293,9 +294,9 @@ sub _processSubscriptions {


$timeOfLastChange = $change->{time} unless ($timeOfLastChange); $timeOfLastChange = $change->{time} unless ($timeOfLastChange);


print "\tChange to $change->{topic} at " _UTF8print( "\tChange to $change->{topic} at "
. Foswiki::Time::formatTime( $change->{time}, 'iso' ) . Foswiki::Time::formatTime( $change->{time}, 'iso' )
. ". New revision is $change->{revision}\n" . ". New revision is $change->{revision}\n" )
if ( $options->{verbose} ); if ( $options->{verbose} );


# Formulate a change record, irrespective of # Formulate a change record, irrespective of
Expand Down Expand Up @@ -458,19 +459,20 @@ sub _sendChangesMails {
$error = Foswiki::Func::sendEmail( $mail, 5 ); $error = Foswiki::Func::sendEmail( $mail, 5 );
} }
else { else {
print $mail if $options->{verbose}; _UTF8print($mail) if $options->{verbose};
} }


if ($error) { if ($error) {
print STDERR "Error sending mail for $web: $error\n"; print STDERR "Error sending mail for $web: $error\n";
print "$error\n"; _UTF8print("$error\n");
} }
else { else {
print "Notified $email of changes in $web\n" if $options->{verbose}; _UTF8print("Notified $email of changes in $web\n")
if $options->{verbose};
$sentMails++; $sentMails++;
} }
} }
print "\t$sentMails change notifications from $web\n" _UTF8print("\t$sentMails change notifications from $web\n")
if $options->{verbose}; if $options->{verbose};
} }


Expand Down Expand Up @@ -647,20 +649,20 @@ sub _sendNewsletterMail {
$error = Foswiki::Func::sendEmail( $mail, 5 ); $error = Foswiki::Func::sendEmail( $mail, 5 );
} }
else { else {
print $mail if $options->{verbose}; _UTF8print($mail) if $options->{verbose};
} }


if ($error) { if ($error) {
print STDERR "Error sending mail for $web: $error\n"; print STDERR "Error sending mail for $web: $error\n";
print "$error\n"; _UTF8print("$error\n");
} }
else { else {
print "Sent newsletter $web.$topic to $email\n" _UTF8print("Sent newsletter $web.$topic to $email\n")
if $options->{verbose}; if $options->{verbose};
$sentMails++; $sentMails++;
} }
} }
print "\t$sentMails newsletters from $web\n"; _UTF8print("\t$sentMails newsletters from $web\n");


Foswiki::Func::popTopicContext(); Foswiki::Func::popTopicContext();


Expand All @@ -675,11 +677,20 @@ sub _sendNewsletterMail {
} }
} }


sub _UTF8print {
if ($Foswiki::UNICODE) {
print Foswiki::encode_utf8( $_[0] );
}
else {
print $_[0];
}
}

1; 1;
__END__ __END__
Module of Foswiki - The Free and Open Source Wiki, http://foswiki.org/ Module of Foswiki - The Free and Open Source Wiki, http://foswiki.org/
Copyright (C) 2008-2015 Foswiki Contributors. All Rights Reserved. Copyright (C) 2008-2016 Foswiki Contributors. All Rights Reserved.
Foswiki Contributors are listed in the AUTHORS file in the root Foswiki Contributors are listed in the AUTHORS file in the root
of this distribution. NOTE: Please extend that file, not this notice. of this distribution. NOTE: Please extend that file, not this notice.
Expand Down
8 changes: 6 additions & 2 deletions MailerContrib/lib/Foswiki/Plugins/MailerContribPlugin.pm
Expand Up @@ -35,7 +35,11 @@ sub _restNotify {
# Don't use the $response; we want to see things happening # Don't use the $response; we want to see things happening
local $| = 1; # autoflush on local $| = 1; # autoflush on
require CGI; require CGI;
print CGI::header( -status => 200, -type => 'text/plain' ); print CGI::header(
-status => 200,
-type => 'text/plain',
-charset => $Foswiki::cfg{Site}{CharSet},
);


my $query = Foswiki::Func::getCgiQuery(); my $query = Foswiki::Func::getCgiQuery();
my %options = ( my %options = (
Expand Down Expand Up @@ -76,7 +80,7 @@ sub _restNotify {
__END__ __END__
Foswiki - The Free and Open Source Wiki, http://foswiki.org/ Foswiki - The Free and Open Source Wiki, http://foswiki.org/
Copyright (C) 2008-2015 Foswiki Contributors. Foswiki Contributors Copyright (C) 2008-2016 Foswiki Contributors. Foswiki Contributors
are listed in the AUTHORS file in the root of this distribution. are listed in the AUTHORS file in the root of this distribution.
NOTE: Please extend that file, not this notice. NOTE: Please extend that file, not this notice.
Expand Down

0 comments on commit 9884d56

Please sign in to comment.