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"}%
---+!! Mailer Contrib
<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 |
| 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 />\
Foswikitask:Item13378: Foswikitask:Item13387: utf-8 foswiki core<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="Version" title="Version" value="%25$VERSION%25"}%
%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="wikiringlogo20x20.png" attr="h" comment="" date="1437500521" size="1343" 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="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::UpData ();

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

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

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

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

# 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);
_processSubscriptions( $web, $wn, $db, $options );
}
Expand All @@ -260,8 +260,9 @@ sub _processSubscriptions {
}

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

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

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

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

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

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

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

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

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;
__END__
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
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
local $| = 1; # autoflush on
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 %options = (
Expand Down Expand Up @@ -76,7 +80,7 @@ sub _restNotify {
__END__
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.
NOTE: Please extend that file, not this notice.
Expand Down

0 comments on commit 9884d56

Please sign in to comment.