<?php
/* Copyright (c) 2010 Obeo.
 * 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://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Obeo - initial API and implementation
 */
// URL of the feed that is to be converted. Can be either URL or absolute URI
$feedURL = "/home/data/httpd/writable/acceleo/rss20.xml";

// Limits the number of items that is to be displayed to the first n
$limitItem = 5;

// Limits the length of the displayed items' title to the first n characters
// -1 means the title length will not be limited
$limitTitleLength = -1;

// Limits the length of the displayed items' content to the first n characters
// -1 means the description will not be limited
// 0 Disables the description altogether
$limitDescriptionLength = 0;

// See http://www.php.net/manual/en/function.date.php for date formats
// Here, we use "June 1st, 2010" for example
$dateFormat = "F jS, Y";

class RSS2HTML_Blog {
	var $readError;

	function convert() {
		GLOBAL $limitItem;
		GLOBAL $limitTitleLength;
		GLOBAL $limitDescriptionLength;
		GLOBAL $dateFormat;

		$result = "";
		$xmlString = $this->readFeed();
		if ($xmlString === FALSE) {
			$result = $this->readError;
			return $result;
		}

		$xmlParser = xml_parser_create();
		$rssParser = new RSSParser();
		xml_set_object($xmlParser, $rssParser);
		xml_set_element_handler($xmlParser, "startElement", "endElement");
		xml_set_character_data_handler($xmlParser, "characterData");
		$parseResult = xml_parse($xmlParser, $xmlString, TRUE);
		if ($parseResult == 0) {
			$result = xml_error_string(xml_get_error_code($xmlParser));
			$result .= "\nat ".xml_get_current_line_number($xmlParser);
			$result .= ":".xml_get_current_column_number($xmlParser);
			return $result;
		}

		$itemCount = min($limitItem, count($rssParser->items));
		
		if ($itemCount > 0) {
			$feedLink = $rssParser->feed->link;
			// Custom fix for planet Acceleo : we don't have the accurate link
			$feedLink = "http://www.acceleo.org/planet/rss20.xml";
			$feedTitle = $rssParser->feed->title;
			
			$result = "<h6><a class='rss' href='$feedLink'><img align='right' src='images/rss2.gif' alt='RSS Feed'/></a>";
			$result .= "<a href='$feedLink'>$feedTitle</a></h6>\n";
			
			$result .= "<div class=\"modal\">\n<ul>\n";
			for ($i = 0; $i < $itemCount; $i++) {
				$item = $rssParser->items[$i];
				$itemTitle = $this->limitLength($item->title, $limitTitleLength);
				// Custom fix for planet Acceleo : trim the title up to the first ":"
				$itemTitle = trim(substr(strstr($itemTitle, ":"), 1));
				$itemDescription = "";
				if ($limitDescriptionLength > 0) {
					$itemDescription = $this->limitLength($item->description, $limitDescriptionLength);
				}
				$itemPubDate = date($dateFormat, $item->pubDate_time);
				
				$result .= "<li>\n";
				$result .= "<a href='$item->link' display='block'>$itemTitle</a><br/>\n";
				if (strlen($itemDescription) > 0) {
					$result .= "$itemDescription<br/>\n";
					$result .= "<span class='posted'>$itemPubDate</span><br/>\n";
					$result .= "<a href='$item->link'>read more...</a><br/>\n";
				} else {
					$result .= "<span class='posted'>$itemPubDate</span><br/>\n";
				}
				$result .= "</li>\n";
			}
			$result .= "</ul>\n</div>\n";
		}
		return $result;
	}

	/*
	 * Reads the feed denoted by URL $feedURL in memory.
	 */
	function readFeed() {
		GLOBAL $feedURL;

		if (strpos($feedURL, "http") === 0) {
			$parsedURL = parse_url($feedURL);

			$host = $parsedURL['host'];
			$path = $parsedURL['path'];

			$result = "";

			$ip = gethostbyname($host);
			$handle = fsockopen($ip, 80, $errno, $errstr, 10);
			if(!$handle) {
				$this->readError = $errstr;
				return FALSE;
			}

			$httpRequest = "GET ".$path." HTTP/1.1\r\n";
			$httpRequest .= "Host: ".$host."\r\n";
			$httpRequest .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n";
			$httpRequest .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
			$httpRequest .= "Accept-Language: en-us,en;q=0.8,fr;q=0.5,fr-fr;q=0.3\r\n";
			$httpRequest .= "Keep-Alive: 115\r\n";
			$httpRequest .= "Connection: keep-alive\r\n";
			$httpRequest .= "Referer: http://".$host."\r\n";
			$httpRequest .= "\r\n";

			fputs($handle, $httpRequest);

			// Read the very first line of the header in order to retrieve the HTTP response code
			$firstHeaderLine = fgets($handle, 1024);
			$headerParts = explode(" ", $firstHeaderLine);
			if ($headerParts[1] < 200 || $headerParts[1] >= 300) {
				$this->readError = "HTTP ERROR: ".$headerParts[1];
				@fclose($handle);
				return FALSE;
			}

			$data = fread($handle, 16384);
			while (!feof($handle)) {
				$result .= $data;
				$data = fread($handle, 16384);
			}
			fclose($handle);

			// strip headers out of the result
			$pos = strpos($result, "\r\n\r\n");
			$result = substr($result, $pos + 4);
		} else {
			return file_get_contents($feedURL);
		}

		return $result;
	}

	/*
	 * Limit the length of the given HTML String to the given number of characters. Take note that this will strip all html information
	 * out of the text and only return the raw text itself (save for xml entities).
	 */
	function limitLength($initialValue, $limit = -1) {
		if ($limit == -1 || strlen($initialValue) <= $limit) {
			return $initialValue;
		}

		$result = "";
		$pruneChar = FALSE;
		for ($i = 0; $i < strlen($initialValue) && strlen($result) <= $limit; $i++) {
			if (!$pruneChar && $initialValue[$i] == "<") {
				$pruneChar = TRUE;
			} elseif ($pruneChar && $initialValue[$i] == ">") {
				$pruneChar = FALSE;
			} else if (!$pruneChar) {
				$result .= $initialValue[$i];
			}
		}

		$lastSpace = strrchr($result, ' ');
		if ($lastSpace != FALSE) {
			$result = substr($result, 0, -strlen($lastSpace));
			$result .= " [...]";
		}

		return $result;
	}
}

class RSSParser_Blog {
	var $tag = "";
	var $currentItem = NULL;
	var $insideChannel = FALSE;
	var $insideItem = FALSE;

	var $feed;
	var $items = Array();

	function startElement($parser, $tagName, $attrs) {
		$this->tag = $tagName;
		if ($tagName == "ITEM") {
			$this->insideItem = TRUE;
			$this->currentItem = new RSSItem();
		} elseif ($tagName == "CHANNEL") {
			$this->insideChannel = TRUE;
			$this->feed = new BlogFeed();
		}
	}

	function endElement($parser, $tagName) {
		$this->tag = "";
		if ($tagName == "ITEM") {
			$this->currentItem->pubDate = trim($this->currentItem->pubDate);
			$this->currentItem->title = trim($this->currentItem->title);
			$this->currentItem->description = trim($this->currentItem->description);
			$this->currentItem->link = trim($this->currentItem->link);
			$this->currentItem->author = trim($this->currentItem->author);

			$this->currentItem->pubDate_time = strtotime($this->currentItem->pubDate);

			$this->items[] = $this->currentItem;

			$this->insideItem = FALSE;
		} elseif ($tagName == "CHANNEL") {
			$this->feed->title = trim($this->feed->title);
			$this->feed->link = trim($this->feed->link);

			$this->insideChannel = FALSE;
		}
	}

	function characterData($parser, $data) {
		if ($data != NULL && $data != "" && ($this->insideItem || $this->insideChannel)) {
			switch ($this->tag) {
				case "TITLE":
					if ($this->insideItem) {
						$this->currentItem->title .= $data;
					} else if ($this->insideChannel) {
						$this->feed->title .= $data;
					}
					break;

				case "DESCRIPTION":
					if ($this->insideItem) {
						$this->currentItem->description .= $data;
					}
					break;

				case "LINK":
					if ($this->insideItem) {
						$this->currentItem->link .= $data;
					} else if ($this->insideChannel) {
						$this->feed->link .= $data;
					}
					break;

				case "PUBDATE":
					$this->currentItem->pubDate .= $data;
					break;

				case "AUTHOR":
					$this->currentItem->author .= $data;
					break;

				default:
			}
		}
	}
}

class BlogFeed {
	var $title = "";
	var $link = "";
}

class RSSItem_Blog {
	var $title = "";
	var $description = "";
	var $link = "";
	var $pubDate = "";
	var $pubDate_time = 0;
	var $author = "";
}
?>