blob: 2bf28c499e0db6af442a5ba6ee55cbbac25c259e [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2014 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christopher Guindon (Eclipse Foundation) - Initial implementation
*******************************************************************************/
class FeedParser {
private $url = "";
private $count = 4;
private $description = TRUE;
private $press_release = FALSE;
private $items = array();
private $more = "";
private $rssLink = "";
private $date_format = "Y/m/d";
private $limit = 200;
public function setUrl($url) {
$this->url = $url;
}
public function setRssLink($url) {
$this->rssLink = '<a href="' . $url . '" class="link-rss-feed orange" title="Subscribe to our RSS-feed"><i class="fa fa-rss"></i> <span>Subscribe to our RSS-feed</span></a>';
}
public function setPressReleaseFlag($flag = FALSE){
$this->press_release = $flag;
}
public function setCount($count) {
if (is_int($count)) {
$this->count = $count;
}
}
public function setLimit($limit) {
if (is_int($limit)) {
$this->limit = $limit;
}
}
public function setPressRelease($press_release = FALSE) {
$this->press_release = ($press_release) ? TRUE : FALSE;
}
public function setDescription($show = TRUE) {
$this->description = ($show) ? TRUE : FALSE;
}
public function setMore($url, $caption = 'View all', $prefix = '> ') {
$this->more = $prefix . '<a href="' . $url . '">' . $caption . '</a>';
}
private function parse_feed() {
if (empty($this->url)) {
return FALSE;
}
if (file_exists($this->url)) {
$feed = simplexml_load_file($this->url);
}
$feed_array = array();
$count = 0;
if(isset($feed) && $feed != FALSE) {
foreach($feed->channel->item as $item){
if ($count >= $this->count) {
break;
}
if ($this->press_release && $item->pressrelease != 1) {
continue;
}
$date = strtotime((string) $item->pubDate);
$date = date($this->date_format, $date);
$description = (string) $item->description;
if (strlen($description) > $this->limit) {
$description = substr(strip_tags($description, "<a>"), 0, $this->limit);
$description = strip_tags($description, "<a>");
$description .= "...";
}
$item_array = array (
'title' => (string) $item->title,
'description' => $description,
'link' => (string) $item->link,
'date' => $date,
);
array_push($feed_array, $item_array);
$count++;
}
}
$this->items = $feed_array;
}
public function output() {
$this->parse_feed();
$output = '<div class="news_item_header">' . $this->rssLink . '</div>';
if (!empty($this->items)) {
foreach ($this->items as $item) {
$output .= '<div class="news_item">';
$output .= '<div class="news_item_date">' .$item['date'] . '</div>';
$output .= '<div class="news_item_title">';
$output .= '<h3><a href="' . $item['link'] . '">' . $item['title'] . '</a></h3>';
$output .= '</div>';
if ($this->description) {
$output .= '<div class="news_item_description">' .$item['description'] . '</div>';
}
$output .= '</div>';
}
if (!empty($this->more) || !empty($this->rssLink)) {
$output .= '<div class="news_view_all">' . $this->more . $this->rssLink . '</div>';
}
}
else {
$output = '<p>This news feed is currently empty. Please try again later.</p>';
}
print $output;
}
}