Merge branch 'master' into WebGUI8

This commit is contained in:
Graham Knop 2010-04-13 07:50:02 -05:00
commit 2400f19099
797 changed files with 33894 additions and 27196 deletions

View file

@ -68,6 +68,13 @@ property hasTerms => (
hoverHelp => ['hasTermsLabel description', 'Asset_SyndicatedContent'],
maxlength => 255,
);
property sortItems => (
tab => 'properties',
fieldType => 'yesNo',
default => 1,
label => ['sortItemsLabel', 'Asset_SyndicatedContent'],
hoverHelp => ['sortItemsLabel description', 'Asset_SyndicatedContent'],
);
has '+uiLevel' => (
default => 6,
);
@ -110,7 +117,7 @@ sub generateFeed {
my $limit = shift || $self->maxHeadlines;
my $feed = XML::FeedPP::Atom->new();
my $log = $self->session->log;
# build one feed out of many
my $newlyCached = 0;
my $cache = $self->session->cache;
@ -131,33 +138,47 @@ sub generateFeed {
utf8::downgrade($value, 1);
eval {
my $singleFeed = XML::FeedPP->new($value, utf8_flag => 1, -type => 'string');
$feed->merge($singleFeed);
$feed->merge_channel($singleFeed);
$feed->merge_item($singleFeed);
};
if ($@) {
$log->error("Syndicated Content asset (".$self->getId.") has a bad feed URL (".$url."). Failed with ".$@);
}
}
# build a new feed that matches the term the user is interested in
if ($self->hasTerms ne '') {
my @terms = split /,\s*/, $self->hasTerms; # get the list of terms
my $termRegex = join("|", map quotemeta($_), @terms); # turn the terms into a regex string
my @items = $feed->match_item(title=>qr/$termRegex/msi, description=>qr/$termRegex/msi);
$feed->clear_item;
foreach my $item (@items) {
$feed->add_item($item);
}
my @items = $feed->match_item(title => qr/$termRegex/msi);
push @items, $feed->match_item(description => qr/$termRegex/msi);
$feed->clear_item;
ITEM: foreach my $item (@items) {
$feed->add_item($item);
}
}
# sort them by date
$feed->sort_item();
my %seen = {};
my @items = $feed->get_item;
$feed->clear_item;
ITEM: foreach my $item (@items) {
my $key = join "\n", $item->link, $item->pubDate, $item->description, $item->title;
next ITEM if $seen{$key}++;
$feed->add_item($item);
}
# sort them by date and remove any duplicate from the OR based term matching above
if ($self->sortItems) {
$feed->sort_item();
}
# limit the feed to the maximum number of headlines (or the feed generator limit).
$feed->limit_item($limit);
# mark this asset as updated
$self->update({}) if ($newlyCached);
return $feed;
}
@ -222,7 +243,8 @@ sub getTemplateVariables {
$item{author} = WebGUI::HTML::filter(scalar $object->author, 'javascript');
$item{guid} = WebGUI::HTML::filter(scalar $object->guid, 'javascript');
$item{link} = WebGUI::HTML::filter(scalar $object->link, 'javascript');
$item{description} = WebGUI::HTML::filter(scalar($object->description), 'javascript');
my $description = WebGUI::HTML::filter(scalar($object->description), 'javascript');
$item{description} = defined $description ? $description : '';
$item{descriptionFirst100words} = $item{description};
$item{descriptionFirst100words} =~ s/(((\S+)\s+){100}).*/$1/s;
$item{descriptionFirst75words} = $item{descriptionFirst100words};