blob: 5754e0a50e7c6a946d0d54fdcabf954a5cdd8458 [file] [log] [blame]
<?php
#*****************************************************************************
#
# news.php
#
# Author: Wayne Beaton
# Date: 2005-11-07
#
# Description: This file contains the code required to read the RSS file
# into an object representation.
#
#****************************************************************************
require_once($_SERVER['DOCUMENT_ROOT'] . "/gmt/resources/scripts/xml_sax_parsing_extension.php");
/*
* This method extracts the RSS information from the file with the
* given name.
*/
function &get_rss_from_file($file_name) {
// PHP 5: simplexml_load_file($newsfile);
return parse_rss_xml_file($file_name);
}
function & get_news($file_name) {
$handler = new RssFileHandler();
parse_xml_file($file_name, $handler);
return $handler->feed;
}
/*
* The rest of the code in this file is concerned with reading XML
* into an object format. Once we update to PHP 5, we can get rid of
* all of this junk and just use the simpleXML apis.
*/
/*
* The XmlHandler class is the focal point of the SAX parser callbacks.
* It keeps track of a stack of element handlers. The element handlers
* are used to handle whatever elements come in.
*/
class RssFileHandler extends XmlFileHandler {
var $feed;
/*
* This method returns the root handler for a RSS file
* The root handler essentially represents the file itself
* rather than any actual element in the file. The returned
* element handler will deal with any elements that may occur
* in the root of the XML file.
*/
function get_root_element_handler() {
return new RssRootHandler();
}
function end_root_element_handler($handler) {
$this->feed = & $handler->feed;
}
}
/*
* The RssRootHandler class takes care of the root element
* in the file. This handler doesn't correspond to any particular
* element that may occur in the XML file. It represents the file
* itself and must deal with any elements that occur at the root
* level in that file.
*/
class RssRootHandler extends XmlElementHandler {
var $feed;
/*
* This method handles the <rss>...</rss> element.
*/
function & get_rss_handler($attributes) {
return new RssHandler();
}
function end_rss_handler($handler) {
$this->feed = & $handler->feed;
}
}
/*
* The FeedHandler class takes care of the root element in the file.
*/
class RssHandler extends XmlElementHandler {
var $feed;
function RssHandler() {
$this->feed = new Feed();
}
/*
* This method handles the <rss>...</rss> element.
*/
function & get_channel_handler($attributes) {
return new ChannelHandler();
}
function end_channel_handler($handler) {
$this->feed->add_channel($handler->channel);
}
}
class ChannelHandler extends XmlElementHandler {
var $channel;
function ChannelHandler() {
$this->channel = new Channel();
}
/*
* This method handles the <title>...</title> element.
*/
function & get_title_handler($attributes) {
return new SimplePropertyHandler($this->channel, "title");
}
/*
* This method handles the <link>...</link> element.
*/
function & get_link_handler($attributes) {
return new SimplePropertyHandler($this->channel, "link");
}
/*
* This method handles the <description>...</description> element.
*/
function & get_description_handler($attributes) {
return new SimplePropertyHandler($this->channel, "description");
}
/*
* This method handles the <title>...</title> element.
*/
function & get_item_handler($attributes) {
return new ItemHandler();
}
function end_item_handler($handler) {
$this->channel->add_item($handler->item);
}
function & get_image_handler($attributes) {
return new ImageHandler();
}
function end_image_handler($handler) {
$this->channel->image = $handler->image;
}
}
class ItemHandler extends XmlElementHandler {
var $item;
function ItemHandler() {
$this->item = new Item();
}
/*
* This method handles the <title>...</title> element.
*/
function & get_title_handler($attributes) {
return new SimplePropertyHandler($this->item, "title");
}
/*
* This method handles the <link>...</link> element.
*/
function & get_link_handler($attributes) {
return new SimplePropertyHandler($this->item, "link");
}
/*
* This method handles the <description>...</description> element.
*/
function & get_description_handler($attributes) {
return new ComplexPropertyHandler($this->item, "description");
}
/*
* This method handles the <pubDate>...</pubDate> element.
*/
function & get_pubdate_handler($attributes) {
return new SimpleTextHandler();
}
function end_pubdate_handler($handler) {
$this->item->pubDate = strtotime($handler->text);
}
}
class ImageHandler extends XmlElementHandler {
var $image;
function ImageHander() {
$this->image = new Image();
}
/*
* This method handles the <title>...</title> element.
*/
function & get_title_handler($attributes) {
return new SimplePropertyHandler($this->image, "title");
}
/*
* This method handles the <url>...</url> element.
*/
function & get_url_handler($attributes) {
return new SimplePropertyHandler($this->image, "url");
}
/*
* This method handles the <link>...</link> element.
*/
function & get_link_handler($attributes) {
return new SimplePropertyHandler($this->image, "link");
}
}
?>