| <?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; | |
| } | |
| $feed = simplexml_load_file($this->url); | |
| $feed_array = array(); | |
| $count = 0; | |
| 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), 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>'; | |
| } | |
| } | |
| print $output; | |
| } | |
| } |