Adding link rewriting so that uri are complete.

This commit is contained in:
Martin Kamerbeek 2010-05-07 11:49:54 +02:00
parent 39b27f39c4
commit c4115cc82a

View file

@ -3,6 +3,8 @@ package WebGUI::Mailing::Email;
use strict;
use warnings;
use HTML::TreeBuilder;
use base 'WebGUI::Crud';
sub crud_definition {
@ -83,6 +85,32 @@ sub error {
return;
}
sub absolutifyURIs {
my $self = shift;
my $content = shift;
my $pageUrl = shift;
my $siteUrl = $self->session->url->getSiteURL;
my $tb = HTML::TreeBuilder->new;
my $root = $tb->parse( $content );
foreach my $link ( @{ $root->extract_links } ) {
my ($uri, $element, $attr, $tag) = @{ $link };
if ( $uri !~ m{ ^ [a-z]+:// }xmsi ) {
my $new =
( $uri =~ m{ ^ / }xmsi ) # Is url absolute?
? $siteUrl . $uri
: $siteUrl . $pageUrl . '/' . $uri
;
# replace attribute
$element->attr( $attr, $new );
}
}
return $tb->as_HTML;
}
sub send {
my $self = shift;
@ -90,7 +118,9 @@ sub send {
#### TODO: Error checking
my $mailing = $self->getMailing;
my $body = $mailing->getAsset->processContentAsUser( $mailing->get('issueId'), $self->get('userId') );
my $asset = $mailing->getAsset;
my $content = $asset->processContentAsUser( $mailing->get('issueId'), $self->get('userId') );
my $body = $self->absolutifyURIs( $content, $asset->getUrl );
# Mail is a test mail but there is noone to send the result to
if ( $self->get( 'isTest' ) && !$self->get('recipientEmail') ) {