#------------------------------------------------------------------- # WebGUI is Copyright 2001-2002 Plain Black Software. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- BEGIN { unshift (@INC, "./lib"); } use DBI; use HTTP::Request; use LWP::UserAgent; use strict; use Data::Config; use WebGUI::SQL; use RSSLite; my $config = new Data::Config './etc/WebGUI.conf'; our $dbh = DBI->connect($config->param('dsn'), $config->param('dbuser'), $config->param('dbpass')); deleteExpiredSessions(); updateSyndicatedContent(); $dbh->disconnect(); #------------------------------------------------------------------- sub deleteExpiredSessions { WebGUI::SQL->write("delete from userSession where expires<".time(),$dbh); } #------------------------------------------------------------------- sub getRSS { my ($userAgent, $request, $response, $content, %result); $userAgent = new LWP::UserAgent; $request = new HTTP::Request (GET => $_[0]); $response = $userAgent->request($request); $content = $response->content; parseXML(\%result, \$content); return %result; } #------------------------------------------------------------------- sub generateHTML { my (%rss, $html, $item); %rss = @_; $html = $rss{title}; $html = ''.$html.'' if ($rss{link}); $html = '

'.$html.'

'; $html .= $rss{description}.'

' if ($rss{description}); foreach $item (@{$rss{items}}) { $html .= '

  • '; if ($item->{link}) { $html .= ''.$item->{title}.''; } else { $html .= $item->{title}; } $html .= ' - '.$item->{description} if ($item->{description}); $html .= '
    '; } return ($html); } #------------------------------------------------------------------- sub updateSyndicatedContent { my ($sth, @data, %rss, $html); $sth = WebGUI::SQL->read("select widget.widgetId, SyndicatedContent.rssURL, SyndicatedContent.content from widget,SyndicatedContent where widget.WidgetId=SyndicatedContent.widgetId and widget.pageId<>3",$dbh); while (@data = $sth->array) { %rss = getRSS($data[1]); $html = generateHTML(%rss); if ($html ne "") { WebGUI::SQL->write("update SyndicatedContent set content=".$dbh->quote($html).", lastFetched=".time()." where widgetId=$data[0]",$dbh); } elsif (substr($data[2],6) ne "Unable" && substr($data[2],7) ne "Not yet") { # then just leave the existing content in place } else { WebGUI::SQL->write("update SyndicatedContent set content='Unable to fetch content. Perhaps the RSS is improperly formated.', lastFetched=".time()." where widgetId=$data[0]",$dbh); } } $sth->finish; }