and then
// for its contents
//
// Revision 2.1 2005/08/15 14:49:24 housley
// Convert ' to ' since ' is not HTML
//
// Revision 2.0 2005/07/30 14:09:38 housley
// Allow "allow_url_fopen" to be sellected, incase CURL is not available.
//
// Revision 1.33 2005/07/20 00:53:35 housley
// Fix it so the this PHP script can be used as a PHP include many time on the same page
//
// Revision 1.32 2005/07/20 00:36:27 housley
// Don't set allow_url_fopen any more
//
// Revision 1.31 2005/07/20 00:35:28 housley
// Use CURL to open URLs instead of fopen()
//
// Revision 1.30 2005/05/08 01:47:27 housley
// Add NoFutureItems
//
// Revision 1.29 2005/05/06 01:04:56 housley
// Make sure FeedMaxItems is not larger then the number of items.
//
// Revision 1.28 2005/04/30 18:08:41 housley
// ~~~SortByPubDate~~~ will force the sorting of the items by pubDate, with the newest being first.
//
// Revision 1.27 2005/04/30 17:49:17 housley
// Allow FeedMaxItems to be negative. A negative number will grab the last
// items
//
// Revision 1.26 2005/03/28 14:48:45 housley
// * Remove debug print statement
// * Fix the creation of the putDate for cases when the feed didn't have them, bad feed...bad feed.
//
// Revision 1.25 2005/03/23 23:22:48 housley
// Handle dc:date in RSS 2.0 feeds. If both pubData and dc:date exist, pubDate has priority
//
// Revision 1.24 2005/03/11 12:44:44 housley
// Exit with short message if a file can't be opened.
//
// Revision 1.23 2005/03/09 15:15:41 housley
// Add copyright header
//
// Revision 1.22 2005/03/08 15:25:04 housley
// * Add ID for full version number
// * Add Log to show change logs
// * Add support for and ~~~FeedContentEncoded~~~ and ~~~ ItemContentEncoded~~~
//
//
//
// Set the following variable useFopenURL to one if you want/need to use fopen instead of CURL
$useFopenURL = 0;
if ($useFopenURL) {
ini_set("allow_url_fopen", "1");
}
//
// If XLMfile is passed as part of the REQUEST_URI, then it will be used
// otherwise the the file below is used.
$XMLfilename = "http://www.schnews.org.uk/feed.xml";
//$XMLfilename = "feed.xml";
if (isset($_REQUEST["XMLFILE"])) {
if (stristr($_REQUEST["XMLFILE"], "file://")) {
// Not allowed
;
}
elseif (stristr($_REQUEST["XMLFILE"], "://")) {
// URL files are allowed
$XMLfilename = $_REQUEST["XMLFILE"];
} else {
// It is local and must be in the same directory
$XMLfilename = basename($_REQUEST["XMLFILE"]);
}
}
//
// If TEMPLATE is passed as part of the REQUEST_URI, then it will be used
// otherwise the the file below is used.
$TEMPLATEfilename = "index.htm";
if (isset($_REQUEST["TEMPLATE"])) {
if (stristr($_REQUEST["TEMPLATE"], "file://")) {
// Not allowed
;
}
elseif (stristr($_REQUEST["TEMPLATE"], "://")) {
// URL files are allowed
$TEMPLATEfilename = $_REQUEST["TEMPLATE"];
} else {
// It is local and must be in the same directory
$TEMPLATEfilename = basename($_REQUEST["TEMPLATE"]);
}
}
//
// date() function documented http://www.php.net/manual/en/function.date.php
//
$LongDateFormat = "F jS, Y"; // ie, "Jan 21st, 2004"
$ShortDateFormat = "m/d/Y"; // ie, "1/21/2004"
//$ShortDateFormat = "d/m/Y"; // ie, "21/1/2004"
$LongTimeFormat = "H:i:s T O"; // ie, "13:24:30 EDT -0400"
$ShortTimeFormat = "h:i A"; // ie, "1:24 PM"
//
// Maximum number of items to be displayed
//
$FeedMaxItems = 100;
if (isset($_REQUEST["MAXITEMS"])) {
$FeedMaxItems = $_REQUEST["MAXITEMS"];
}
$NoFutureItems = FALSE;
if (isset($_REQUEST["NOFUTUREITEMS"])) {
$NoFutureItems = TRUE;
}
//
// As much as I hate globals, they are needed due to the
// recusive nature of the parser
$insidechannel = FALSE;
$level_channel = 0;
$insidechannelimage = FALSE;
$level_channelimage = 0;
$insideitem = FALSE;
$level_item = 0;
if (function_exists("FeedForAll_rss2html_getRFDdate") === FALSE) {
Function FeedForAll_rss2html_getRFDdate($datestring) {
$year = substr($datestring, 0, 4);
$month = substr($datestring, 5, 2);
$day = substr($datestring, 8, 2);
$hour = substr($datestring, 11, 2);
$minute = substr($datestring, 14, 2);
$second = substr($datestring, 17, 2);
if (substr($datestring, 19, 1) == "Z") {
$offset_hour = 0;
$offset_minute = 0;
} else {
if (substr($datestring, 19, 1) == "+") {
$offset_hour = substr($datestring, 20, 2);
$offset_minute = substr($datestring, 23, 2);
} else {
$offset_hour = -1*substr($datestring, 20, 2);
$offset_minute = -1*substr($datestring, 23, 2);
}
}
return gmmktime($hour+$offset_hour, $minute+$offset_minute, $second, $month, $day, $year);
}
class FeedForAll_rss2html_RSSParser {
var $gotROOT = 0;
var $feedTYPE = "RSS";
var $level = 0;
var $tag = "";
var $title = "";
var $description = "";
var $contentEncoded = "";
var $link = "";
var $guid = "";
var $enclosureURL = "";
var $pubdate = "";
var $pubdateDC = "";
var $fimageURL = "";
var $fimageTitle = "";
var $fimageLink = "";
var $author = "";
var $DcCreator = "";
var $FeedTitle = "";
var $FeedDescription = "";
var $FeedContentEncoded = "";
var $FeedLink = "";
var $FeedPubDate = "";
var $FeedPubDateDC = "";
var $FeedPubDate_t = "";
var $FeedImageURL = "";
var $FeedImageTitle = "";
var $FeedImageLink = "";
// When adding new Item elements, be sure to update the sort below
var $ItemTitle = "";
var $ItemDescription = "";
var $ItemContentEncoded = "";
var $ItemLink = "";
var $ItemGuid = "";
var $ItemPubDate = "";
var $ItemPubDate_t = "";
var $ItemEnclosureURL = "";
var $ItemAuthor = "";
function startElement($parser, $tagName, $attrs) {
GLOBAL $insidechannel;
GLOBAL $level_channel;
GLOBAL $insidechannelimage;
GLOBAL $level_channelimage;
GLOBAL $insideitem;
GLOBAL $level_item;
$this->level++;
$this->tag = $tagName;
if ($this->gotROOT == 0) {
$this->gotROOT = 1;
if (strstr($tagName, "RSS")) {
$this->feedTYPE = "RSS";
}
elseif (strstr($tagName, "RDF")) {
$this->feedTYPE = "RDF";
}
elseif (strstr($tagName, "FEE")) {
$this->feedTYPE = "FEE";
$insidechannel = TRUE;
$level_channel = 1;
}
}
elseif ((($tagName == "ITEM") && ($this->feedTYPE != "FEE")) || (($tagName == "ENTRY") && ($this->feedTYPE == "FEE"))) {
$insideitem = TRUE;
$level_item = $this->level;
}
elseif (($insideitem) && ($tagName == "ENCLOSURE")) {
$this->enclosureURL = $attrs["URL"];
}
elseif (($tagName == "LINK") && ($this->feedTYPE == "FEE")) {
$this->link = $attrs["HREF"];
}
elseif ($tagName == "CHANNEL") {
$insidechannel = TRUE;
$level_channel = $this->level;
}
elseif (($tagName == "IMAGE") && ($insidechannel = TRUE)) {
$insidechannelimage = TRUE;
$level_channelimage = $this->level;
}
}
function endElement($parser, $tagName) {
GLOBAL $insidechannel;
GLOBAL $level_channel;
GLOBAL $insidechannelimage;
GLOBAL $level_channelimage;
GLOBAL $insideitem;
GLOBAL $level_item;
GLOBAL $NoFutureItems;
$this->level--;
if ((($tagName == "ITEM") && ($this->feedTYPE != "FEE")) || (($tagName == "ENTRY") && ($this->feedTYPE == "FEE"))) {
$UseItem = TRUE;
if ($NoFutureItems) {
$noon = strtotime("today at 12:00");
if (trim($this->pubdate) != "") {
$ItemPubDate = strtotime($this->pubdate);
}
else if (trim($this->pubdateDC) != "") {
$ItemPubDate = FeedForAll_rss2html_getRFDdate($this->pubdateDC);
} else {
$ItemPubDate = time();
}
if (($ItemPubDate - $noon) > 43200) {
$UseItem = FALSE;
}
}
if ($UseItem) {
$this->ItemTitle[] = trim($this->title);
$this->ItemDescription[] = trim($this->description);
$this->ItemContentEncoded[] = trim($this->contentEncoded);
if (trim($this->contentEncoded) == "") {
$this->ItemContentEncoded[] = $this->ItemDescription;
}
$this->ItemLink[] = trim($this->link);
//
// Get the pubDate from pubDate first and then dc:date
if (trim($this->pubdate) != "") {
$this->ItemPubDate[] = trim($this->pubdate);
$this->ItemPubDate_t[] = strtotime($this->pubdate);
}
else if (trim($this->pubdateDC) != "") {
$this->ItemPubDate[] = trim($this->pubdateDC);
$this->ItemPubDate_t[] = FeedForAll_rss2html_getRFDdate($this->pubdateDC);
} else {
$this->ItemPubDate[] = date("D, d M Y H:i:s +0000");
$this->ItemPubDate_t[] = time();
}
$this->ItemGuid[] = trim($this->guid);
$this->ItemEnclosureURL[] = trim($this->enclosureURL);
if ($this->author == "") {
$this->ItemAuthor[] = $this->DcCreator;
} else {
$this->ItemAuthor[] = $this->author;
}
}
$this->title = "";
$this->description = "";
$this->contentEncoded = "";
$this->link = "";
$this->pubdate = "";
$this->pubdateDC = "";
$this->guid = "";
$this->enclosureURL = "";
$this->author = "";
$this->DcCreator = "";
$insideitem = FALSE;
$level_item = 0;
}
elseif (($tagName == "IMAGE") && ($insidechannelimage)) {
$this->FeedImageURL = trim($this->fimageURL);
$this->FeedImageTitle = trim($this->fimageTitle);
$this->FeedImageLink = trim($this->fimageLink);
$this->fimageURL = "";
$this->fimageTitle = "";
$this->fimageLink = "";
$insidechannelimage = FALSE;
$level_channelimage = 0;
}
elseif ($tagName == "CHANNEL") {
//
// Get the pubDate from pubDate first and then dc:date
if (trim($this->pubdate) != "") {
$this->FeedPubDate_t = strtotime($this->FeedPubDate);
}
else if (trim($this->pubdateDC) != "") {
$this->FeedPubDate_t = FeedForAll_rss2html_getRFDdate($this->FeedPubDateDC);
} else {
$this->FeedPubDate = date("D, d M Y H:i:s +0000");
$this->FeedPubDate_t = time();
}
$insidechannel = FALSE;
$level_channel = 0;
}
elseif ($this->level == $level_channel) {
if ($tagName == "TITLE") {
$this->FeedTitle = trim($this->title);
$this->title = "";
}
elseif (($tagName == "DESCRIPTION") || ($tagName == "TAGLINE")) {
$this->FeedDescription = trim($this->description);
$this->description = "";
}
elseif ($tagName == "CONTENT:ENCODED") {
$this->FeedContentEncoded = trim($this->contentEncoded);
$this->contentEncoded = "";
}
elseif ($tagName == "LINK") {
$this->FeedLink = trim($this->link);
$this->link = "";
}
}
}
function characterData($parser, $data) {
GLOBAL $insidechannel;
GLOBAL $level_channel;
GLOBAL $insidechannelimage;
GLOBAL $level_channelimage;
GLOBAL $insideitem;
GLOBAL $level_item;
if (($data == "") || ($data == NULL)) {
} else {
if (($insideitem) && ($this->level == $level_item+1)) {
switch ($this->tag) {
case "TITLE":
$this->title .= $data;
break;
case "DESCRIPTION":
$this->description .= $data;
break;
case "CONTENT:ENCODED":
$this->contentEncoded .= $data;
break;
case "SUMMARY":
$this->description .= $data;
break;
case "LINK":
$this->link .= $data;
break;
case "PUBDATE":
$this->pubdate .= $data;
break;
case "DC:DATE":
$this->pubdateDC .= $data;
break;
case "MODIFIED":
$this->pubdateDC .= $data;
break;
case "GUID":
$this->guid .= $data;
break;
case "AUTHOR":
$this->author .= $data;
break;
case "DC:CREATOR":
$this->DcCreator .= $data;
break;
}
}
elseif ($insidechannelimage) {
switch ($this->tag) {
case "TITLE":
$this->fimageTitle .= $data;
break;
case "URL":
$this->fimageURL .= $data;
break;
case "LINK":
$this->fimageLink .= $data;
break;
}
}
elseif (($insidechannel) && ($this->level == $level_channel+1)) {
switch ($this->tag) {
case "TITLE":
$this->title .= $data;
break;
case "DESCRIPTION":
$this->description .= $data;
break;
case "CONTENT:ENCODED":
$this->contentEncoded .= $data;
break;
case "TAGLINE":
$this->description .= $data;
break;
case "LINK":
$this->link .= $data;
break;
case "PUBDATE":
$this->FeedPubDate .= $data;
break;
case "DC:DATE":
$this->FeedPubDateDC .= $data;
break;
case "MODIFIED":
$this->FeedPubDateDC .= $data;
break;
}
}
}
}
}
}
if (stristr($TEMPLATEfilename, "://")) {
if ($useFopenURL) {
if (($fd = @fopen($TEMPLATEfilename, "rb")) === FALSE) {
echo "Unable to open template $TEMPLATEfilename, exiting\n";
exit -1;
}
$template = NULL;
while (($data = fread($fd, 4096)) != "") {
$template .= $data;
}
fclose($fd);
}else {
// This is a URL so use CURL
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $TEMPLATEfilename);
curl_setopt($curlHandle, CURLOPT_HEADER, 0);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
$template = curl_exec($curlHandle);
if (curl_errno($curlHandle)) {
curl_close($curlHandle);
echo "Unable to open template $TEMPLATEfilename, exiting\n";
exit -1;
}
curl_close($curlHandle);
}
} else {
// This is a local file, so use fopen
if (($fd = @fopen($TEMPLATEfilename, "rb")) === FALSE) {
echo "Unable to open template $TEMPLATEfilename, exiting\n";
exit -1;
}
$template = NULL;
while (($data = fread($fd, 4096)) != "") {
$template .= $data;
}
fclose($fd);
}
if (strstr($template, "~~~NoFutureItems~~~")) {
$NoFutureItems = TRUE;
}
$xml_parser = xml_parser_create('');
$rss_parser = new FeedForAll_rss2html_RSSParser();
xml_set_object($xml_parser,$rss_parser);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,1);
if (stristr($XMLfilename, "://")) {
if ($useFopenURL) {
if (($fd = @fopen($XMLfilename, "rb")) === FALSE) {
echo "Unable to open RSS Feed $XMLfilename, exiting\n";
exit -1;
}
// Read the whole file 4k at a time so remote files can be read
while (($XML = fread($fd, 4096)) != "") {
xml_parse($xml_parser,$XML);
}
fclose($fd);
} else {
// This is a URL so use CURL
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $XMLfilename);
curl_setopt($curlHandle, CURLOPT_HEADER, 0);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
$XML = curl_exec($curlHandle);
if (curl_errno($curlHandle)) {
curl_close($curlHandle);
echo "Unable to open template $XMLfilename, exiting\n";
exit -1;
}
curl_close($curlHandle);
xml_parse($xml_parser,$XML);
}
} else {
// This is a local file, so use fopen
if (($fd = @fopen($XMLfilename, "rb")) === FALSE) {
echo "Unable to open RSS Feed $XMLfilename, exiting\n";
exit -1;
}
// Read the whole file 4k at a time so remote files can be read
while (($XML = fread($fd, 4096)) != "") {
xml_parse($xml_parser,$XML);
}
fclose($fd);
}
xml_parser_free($xml_parser);
// make sure the channel contentEncoded is not blank
if ($rss_parser->FeedContentEncoded == "") {
$rss_parser->FeedContentEncoded = $rss_parser->FeedDescription;
}
$template = str_replace("~~~FeedTitle~~~", $rss_parser->FeedTitle, $template);
$template = str_replace("~~~FeedDescription~~~", $rss_parser->FeedDescription, $template);
$template = str_replace("~~~FeedContentEncoded~~~", $rss_parser->FeedContentEncoded, $template);
$template = str_replace("~~~FeedLink~~~", $rss_parser->FeedLink, $template);
$template = str_replace("~~~FeedPubDate~~~", $rss_parser->FeedPubDate, $template);
$template = str_replace("~~~FeedPubLongDate~~~", date($LongDateFormat, $rss_parser->FeedPubDate_t), $template);
$template = str_replace("~~~FeedPubShortDate~~~", date($ShortDateFormat, $rss_parser->FeedPubDate_t), $template);
$template = str_replace("~~~FeedPubLongTime~~~", date($LongTimeFormat, $rss_parser->FeedPubDate_t), $template);
$template = str_replace("~~~FeedPubShortTime~~~", date($ShortTimeFormat, $rss_parser->FeedPubDate_t), $template);
$template = str_replace("~~~FeedImageUrl~~~", $rss_parser->FeedImageURL, $template);
$template = str_replace("~~~FeedImageTitle~~~", $rss_parser->FeedImageTitle, $template);
$template = str_replace("~~~FeedImageLink~~~", $rss_parser->FeedImageLink, $template);
$match = NULL;
$template = str_replace("~~~NoFutureItems~~~", "", $template);
// Sort by PubDate if requested
if (strstr($template, "~~~SortByPubDate~~~")) {
$template = str_replace("~~~SortByPubDate~~~", "", $template);
for ($x = 0; $x < count($rss_parser->ItemTitle)-1; $x++)
{
for ($y = $x+1; $y < count($rss_parser->ItemTitle); $y++)
{
if ($rss_parser->ItemPubDate_t[$x] < $rss_parser->ItemPubDate_t[$y])
{
// Swap them
$swapTemp = $rss_parser->ItemTitle[$x]; $rss_parser->ItemTitle[$x] = $rss_parser->ItemTitle[$y]; $rss_parser->ItemTitle[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemDescription[$x]; $rss_parser->ItemDescription[$x] = $rss_parser->ItemDescription[$y]; $rss_parser->ItemDescription[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemContentEncoded[$x]; $rss_parser->ItemContentEncoded[$x] = $rss_parser->ItemContentEncoded[$y]; $rss_parser->ItemContentEncoded[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemLink[$x]; $rss_parser->ItemLink[$x] = $rss_parser->ItemLink[$y]; $rss_parser->ItemLink[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemGuid[$x]; $rss_parser->ItemGuid[$x] = $rss_parser->ItemGuid[$y]; $rss_parser->ItemGuid[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemPubDate[$x]; $rss_parser->ItemPubDate[$x] = $rss_parser->ItemPubDate[$y]; $rss_parser->ItemPubDate[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemPubDate_t[$x]; $rss_parser->ItemPubDate_t[$x] = $rss_parser->ItemPubDate_t[$y]; $rss_parser->ItemPubDate_t[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemEnclosureURL[$x]; $rss_parser->ItemEnclosureURL[$x] = $rss_parser->ItemEnclosureURL[$y]; $rss_parser->ItemEnclosureURL[$y] = $swapTemp;
$swapTemp = $rss_parser->ItemAuthor[$x]; $rss_parser->ItemAuthor[$x] = $rss_parser->ItemAuthor[$y]; $rss_parser->ItemAuthor[$y] = $swapTemp;
}
}
}
}
// The the maximum items requested
if (strstr($template, "~~~FeedMaxItems=")) {
// Limit the maximun number of items displayed
if (preg_match("/~~~FeedMaxItems=([0-9-]*)~~~/", $template, $match) !== FALSE) {
if (($match[0] != "") && ($match[1] != "")) {
$FeedMaxItems = $match[1];
$template = str_replace("~~~FeedMaxItems=$match[1]~~~", "", $template);
if (abs($FeedMaxItems) > count($rss_parser->ItemTitle)) {
if ($FeedMaxItems > 0) {
$FeedMaxItems = count($rss_parser->ItemTitle);
} else {
$FeedMaxItems = -count($rss_parser->ItemTitle);
}
}
}
}
}
//
// Find the string, if it exists, between the ~~~EndItemsRecord~~~ and ~~~BeginItemsRecord~~~
//
while ((strstr($template, "~~~BeginItemsRecord~~~")) !== FALSE) {
$match = NULL;
$allitems = NULL;
$loop_limit = min(abs($FeedMaxItems), count($rss_parser->ItemTitle));
if (($parts = split("~~~BeginItemsRecord~~~", $template)) !== FALSE) {
if (($parts = split("~~~EndItemsRecord~~~", $parts[1])) !== FALSE) {
$WholeBlock = $parts[0];
//
// Check for ~~~BeginAlternateItemsRecord~~~
//
if (strstr($WholeBlock, "~~~BeginAlternateItemsRecord~~~")) {
$parts = split("~~~BeginAlternateItemsRecord~~~", $WholeBlock);
$block1 = $parts[0];
$block2 = $parts[1];
} else {
$block1 = $WholeBlock;
$block2 = $WholeBlock;
}
$edition = 99999;
if ($FeedMaxItems < 0) {
for ($x = count($rss_parser->ItemTitle)-1; $x >= count($rss_parser->ItemTitle) + $FeedMaxItems; $x--) {
$item = str_replace("~~~ItemTitle~~~", $rss_parser->ItemTitle[$x], $block1);
$item = str_replace("~~~ItemDescription~~~", $rss_parser->ItemDescription[$x], $item);
$item = str_replace("~~~ItemContentEncoded~~~", $rss_parser->ItemContentEncoded[$x], $item);
$item = str_replace("~~~ItemLink~~~", $rss_parser->ItemLink[$x], $item);
$item = str_replace("~~~ItemPubDate~~~", $rss_parser->ItemPubDate[$x], $item);
$item = str_replace("~~~ItemGuid~~~", urlencode($rss_parser->ItemGuid[$x]), $item);
$item = str_replace("~~~ItemPubLongDate~~~", date($LongDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortDate~~~", date($ShortDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubLongTime~~~", date($LongTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortTime~~~", date($ShortTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemEnclosureUrl~~~", $rss_parser->ItemEnclosureURL[$x], $item);
$item = str_replace("~~~ItemAuthor~~~", $rss_parser->ItemAuthor[$x], $item);
$allitems .= $item;
$x--;
if ($x >= count($rss_parser->ItemTitle) + $FeedMaxItems) {
//
// This is at least one more item so use the Alternate definition
//
$item = str_replace("~~~ItemTitle~~~", $rss_parser->ItemTitle[$x], $block2);
$item = str_replace("~~~ItemDescription~~~", $rss_parser->ItemDescription[$x], $item);
$item = str_replace("~~~ItemContentEncoded~~~", $rss_parser->ItemContentEncoded[$x], $item);
$item = str_replace("~~~ItemLink~~~", $rss_parser->ItemLink[$x], $item);
$item = str_replace("~~~ItemPubDate~~~", $rss_parser->ItemPubDate[$x], $item);
$item = str_replace("~~~ItemGuid~~~", urlencode($rss_parser->ItemGuid[$x]), $item);
$item = str_replace("~~~ItemPubLongDate~~~", date($LongDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortDate~~~", date($ShortDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubLongTime~~~", date($LongTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortTime~~~", date($ShortTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemEnclosureUrl~~~", $rss_parser->ItemEnclosureURL[$x], $item);
$item = str_replace("~~~ItemAuthor~~~", $rss_parser->ItemAuthor[$x], $item);
$allitems .= $item;
}
}
} else {
for ($x = 0; $x < $loop_limit; $x++) {
$edition_temp = substr($rss_parser->ItemLink[$x], strrpos($rss_parser->ItemLink[$x], "/news")+5, 3);
$item = str_replace("~~~ItemTitle~~~", $rss_parser->ItemTitle[$x], $block1);
$item = str_replace("~~~ItemDescription~~~", $rss_parser->ItemDescription[$x], $item);
$item = str_replace("~~~ItemContentEncoded~~~", $rss_parser->ItemContentEncoded[$x], $item);
$item = str_replace("~~~ItemLink~~~", $rss_parser->ItemLink[$x], $item);
$item = str_replace("~~~ItemPubDate~~~", $rss_parser->ItemPubDate[$x], $item);
$item = str_replace("~~~ItemGuid~~~", urlencode($rss_parser->ItemGuid[$x]), $item);
$item = str_replace("~~~ItemPubLongDate~~~", date($LongDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortDate~~~", date($ShortDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubLongTime~~~", date($LongTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortTime~~~", date($ShortTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemEnclosureUrl~~~", $rss_parser->ItemEnclosureURL[$x], $item);
$item = str_replace("~~~ItemAuthor~~~", $rss_parser->ItemAuthor[$x], $item);
if ($edition_temp < $edition){
$edition = $edition_temp;
$item = str_replace($rss_parser->ItemTitle[$x],
"
Edition $edition
ItemLink[$x]."\">".$rss_parser->ItemTitle[$x]."",
$item);
$item = str_replace("",
"",
$item);
}
$allitems .= $item;
$x++;
if ($x < $loop_limit) {
//
// This is at least one more item so use the Alternate definition
//
$edition_temp = substr($rss_parser->ItemLink[$x], strrpos($rss_parser->ItemLink[$x], "/news")+5, 3);
$item = str_replace("~~~ItemTitle~~~", $rss_parser->ItemTitle[$x], $block2);
$item = str_replace("~~~ItemDescription~~~", $rss_parser->ItemDescription[$x], $item);
$item = str_replace("~~~ItemContentEncoded~~~", $rss_parser->ItemContentEncoded[$x], $item);
$item = str_replace("~~~ItemLink~~~", $rss_parser->ItemLink[$x], $item);
$item = str_replace("~~~ItemPubDate~~~", $rss_parser->ItemPubDate[$x], $item);
$item = str_replace("~~~ItemGuid~~~", urlencode($rss_parser->ItemGuid[$x]), $item);
$item = str_replace("~~~ItemPubLongDate~~~", date($LongDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortDate~~~", date($ShortDateFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubLongTime~~~", date($LongTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemPubShortTime~~~", date($ShortTimeFormat, $rss_parser->ItemPubDate_t[$x]), $item);
$item = str_replace("~~~ItemEnclosureUrl~~~", $rss_parser->ItemEnclosureURL[$x], $item);
$item = str_replace("~~~ItemAuthor~~~", $rss_parser->ItemAuthor[$x], $item);
if ($edition_temp < $edition){
$edition = $edition_temp;
$item = str_replace($rss_parser->ItemTitle[$x],
"
Edition $edition
ItemLink[$x]."\">".$rss_parser->ItemTitle[$x]."",
$item);
$item = str_replace("",
"",
$item);
}
$allitems .= $item;
}
}
}
$template = str_replace("~~~BeginItemsRecord~~~".$WholeBlock."~~~EndItemsRecord~~~", $allitems, $template);
}
}
}
// Since ' is not HTML, but is XML convert.
$template = str_replace("'", "'", $template);
echo $template;
?>