2007-09-07 00:33:58 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class RSSWidget extends Widget {
|
|
|
|
static $db = array(
|
2008-02-25 09:48:33 +01:00
|
|
|
"RSSTitle" => "Text",
|
2007-09-07 00:33:58 +02:00
|
|
|
"RssUrl" => "Text",
|
2008-02-25 09:48:33 +01:00
|
|
|
"NumberToShow" => "Int"
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
static $defaults = array(
|
2008-02-24 09:23:04 +01:00
|
|
|
"NumberToShow" => 10,
|
2008-02-25 09:48:33 +01:00
|
|
|
"RSSTitle" => 'RSS Feed'
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
|
|
|
static $cmsTitle = "RSS Feed";
|
|
|
|
static $description = "Shows the latest entries of a RSS feed.";
|
|
|
|
|
2008-06-13 01:39:47 +02:00
|
|
|
/**
|
|
|
|
* If the RssUrl is relative, convert it to absolute with the
|
|
|
|
* current baseURL to avoid confusing simplepie.
|
|
|
|
* Passing relative URLs to simplepie will result
|
|
|
|
* in strange DNS lookups and request timeouts.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
function getAbsoluteRssUrl() {
|
|
|
|
$urlParts = parse_url($this->RssUrl);
|
|
|
|
if(!isset($urlParts['host']) || !$urlParts['host']) {
|
|
|
|
return Director::absoluteBaseURL() . $this->RssUrl;
|
|
|
|
} else {
|
|
|
|
return $this->RssUrl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-09-07 00:33:58 +02:00
|
|
|
function getCMSFields() {
|
|
|
|
return new FieldSet(
|
2008-02-25 09:48:33 +01:00
|
|
|
new TextField("RSSTitle", _t('RSSWidget.CT', "Custom title for the feed")),
|
2007-12-18 02:41:51 +01:00
|
|
|
new TextField("RssUrl", _t('RSSWidget.URL', "URL of RSS Feed")),
|
|
|
|
new NumericField("NumberToShow", _t('RSSWidget.NTS', "Number of Items to show"))
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
|
|
|
}
|
2008-02-25 09:48:33 +01:00
|
|
|
function Title() {
|
|
|
|
return ($this->RSSTitle) ? $this->RSSTitle : 'RSS Feed';
|
|
|
|
}
|
2007-09-07 00:33:58 +02:00
|
|
|
|
|
|
|
function FeedItems() {
|
|
|
|
$output = new DataObjectSet();
|
2008-10-24 01:07:19 +02:00
|
|
|
|
|
|
|
if(class_exists('SimplePie')) {
|
|
|
|
$this->feed = new SimplePie($this->AbsoluteRssUrl);
|
|
|
|
$this->feed->init();
|
|
|
|
if($items = $this->feed->get_items(0, $this->NumberToShow)) {
|
|
|
|
foreach($items as $item) {
|
|
|
|
$output->push(new ArrayData(array(
|
|
|
|
"Title" => $item->get_title(),
|
|
|
|
"Link" => $item->get_link()
|
|
|
|
)));
|
|
|
|
}
|
|
|
|
return $output;
|
2007-09-11 08:38:05 +02:00
|
|
|
}
|
2007-09-07 00:33:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|