$template = FeedForAll_rss2html_str_replace("~~~FeedTitle~~~", FeedForAll_rss2html_limitLength($rss_parser->FeedTitle, $limitFeedTitleLength), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedDescription~~~", FeedForAll_rss2html_limitLength($rss_parser->FeedDescription, $limitFeedDescriptionLength), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedContentEncoded~~~", $rss_parser->FeedContentEncoded, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedLink~~~", FeedForAll_rss2html_EscapeLink($rss_parser->FeedLink), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedPubDate~~~", $rss_parser->FeedPubDate, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedPubLongDate~~~", date($LongDateFormat, $rss_parser->FeedPubDate_t), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedPubShortDate~~~", date($ShortDateFormat, $rss_parser->FeedPubDate_t), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedPubLongTime~~~", date($LongTimeFormat, $rss_parser->FeedPubDate_t), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedPubShortTime~~~", date($ShortTimeFormat, $rss_parser->FeedPubDate_t), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageUrl~~~", FeedForAll_rss2html_EscapeLink($rss_parser->FeedImageURL), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageTitle~~~", $rss_parser->FeedImageTitle, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageLink~~~", FeedForAll_rss2html_EscapeLink($rss_parser->FeedImageLink), $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageDescription~~~", $rss_parser->FeedImageDescription, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageHeight~~~", $rss_parser->FeedImageWidth, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedImageWidth~~~", $rss_parser->FeedImageWidth, $template); $template = FeedForAll_rss2html_str_replace("~~~FeedCreativeCommons~~~", FeedForAll_rss2html_EscapeLink($rss_parser->FeedCreativeCommons), $template); if (FeedForAll_parseExtensions() === TRUE) { $template = FeedForAll_parseExtensions_replaceInChannel($rss_parser, $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->Items) - 1; $x++) { for ($y = $x + 1; $y < count($rss_parser->Items); $y++) { if ($rss_parser->Items[$x]->pubDate_t < $rss_parser->Items[$y]->pubDate_t) { // Swap them $swapTemp = $rss_parser->Items[$x]; $rss_parser->Items[$x] = $rss_parser->Items[$y];
function endElement($parser, $tagName) { global $debugLevel; $this->tag = ""; $this->level--; if ($this->insideItem && $tagName == "CATEGORY") { $this->currentItem->categoryArray[] = array("Category" => $this->currentItem->category, "Domain" => $this->currentItem->categoryDomain); $this->currentItem->category = ""; $this->currentItem->categoryDomain = ""; } elseif ($tagName == "ITEM" && $this->feedTYPE != "FEE" || $tagName == "ENTRY" && $this->feedTYPE == "FEE") { if (isset($debugLevel) && $debugLevel >= 2) { echo "DIAG: endElement(\$parser, {$tagName})<br>\n"; } $this->UseItem = TRUE; // // Do any special processing to convert ATOM to RSS 2.0 if ($this->feedTYPE == "FEE") { if ($this->currentItem->guid == "") { // There was no GUID, use ID $this->currentItem->guid = $this->currentItem->atomID; $this->currentItem->guidIsPermaLink = "false"; } } // // The the whole item string $pos = xml_get_current_byte_index($parser); // // Find the element that opened this all up. $endingString = '</' . substr($this->wholeString, $this->currentItem->ItemStartPos + 1, 4); if ($endingString == substr($this->wholeString, $pos, 6)) { // We are good just where we are } else { for (; $pos > 0; $pos--) { /* Look for a closing angle */ if ($endingString == substr($this->wholeString, $pos, 6)) { break; } } } $pos++; $hereToEnd = substr($this->wholeString, $pos); $closePos = strpos($hereToEnd, '>'); $this->currentItem->itemFullText = substr($this->wholeString, $this->currentItem->ItemStartPos, $pos + $closePos - $this->currentItem->ItemStartPos + 1); // // Get the pubDate from pubDate first and then dc:date if (trim($this->currentItem->pubDate) != "") { $this->currentItem->pubDate = trim($this->currentItem->pubDate); $this->currentItem->pubDate_t = strtotime($this->currentItem->pubDate); } elseif ($this->feedTYPE == "FEE" && trim($this->currentItem->atomUpdated) != "") { $this->currentItem->atomUpdated = trim($this->currentItem->atomUpdated); $this->currentItem->pubDate_t = FeedForAll_scripts_getRFDdate($this->currentItem->atomUpdated); $this->currentItem->pubDate = date("D, d M Y H:i:s O", $this->currentItem->pubDate_t); } elseif (trim($this->currentItem->pubDateDC) != "") { $this->currentItem->pubDate_t = FeedForAll_scripts_getRFDdate($this->currentItem->pubDateDC); $this->currentItem->pubDate = date("D, d M Y H:i:s O", $this->currentItem->pubDate_t); } else { $this->currentItem->pubDate_t = time(); $this->currentItem->pubDate = date("D, d M Y H:i:s O", $this->currentItem->pubDate_t); } if ($this->operateAs == "rssFilter" && function_exists("rssFilter_useItem")) { global $_REQUEST; $this->UseItem = rssFilter_useItem($this->currentItem); if (isset($_REQUEST["testScript"])) { if ($this->UseItem) { echo "USING Item: " . htmlentities($this->currentItem->title) . "<br>\n"; } else { echo "NOT Using: " . htmlentities($this->currentItem->title) . "<br>\n"; } } } if ($this->operateAs == "rssMesh") { if ($this->itemLimit >= 0 && count($this->Items) >= $this->itemLimit) { $this->UseItem = FALSE; } } elseif ($this->operateAs == "rss2html") { if (($useUniq = FeedForAll_rss2html_UseUniqueLink($this->currentItem->title, $this->currentItem->description, $this->currentItem->link, $this->currentItem->guid)) != -1) { if ($useUniq == 0) { if (isset($debugLevel) && $debugLevel >= 2) { echo "DIAG: FeedForAll_rss2html_UseUniqueLink() => 0, Not using<br>\n"; } $this->UseItem = FALSE; } } if ($this->noFutureItems) { if ($this->currentItem->pubDate_t - $this->noon_t > 43200) { if (isset($debugLevel) && $debugLevel >= 2) { echo "DIAG: future pubdate, Not using<br>\n"; } $this->UseItem = FALSE; } } } if ($this->UseItem) { if (isset($debugLevel) && $debugLevel >= 2) { echo "DIAG: Using item \"" . $this->currentItem->title . "\"<br>\n"; } // // Clean up some of the values $this->currentItem->title = trim($this->currentItem->title); $this->currentItem->description = trim($this->currentItem->description); if ($this->feedTYPE == "FEE") { $this->currentItem->atomContent = trim($this->currentItem->atomContent); if ($this->currentItem->atomContent != "") { $this->currentItem->description = $this->currentItem->atomContent; } else { $this->currentItem->description = trim($this->currentItem->description); } } else { $this->currentItem->description = $this->currentItem->description; } if (trim($this->currentItem->contentEncoded) == "") { if ($this->operateAs != "rssMesh") { $this->currentItem->contentEncoded = $this->currentItem->description; } } else { $this->currentItem->contentEncoded = trim($this->currentItem->contentEncoded); } if (trim($this->currentItem->description) == "") { $this->currentItem->description = trim($this->currentItem->contentEncoded); } $this->currentItem->link = trim($this->currentItem->link); $this->currentItem->guid = trim($this->currentItem->guid); $this->currentItem->guidIsPermaLink = trim($this->currentItem->guidIsPermaLink); if ($this->feedTYPE == "FEE") { $this->currentItem->atomAuthorEmail = trim($this->currentItem->atomAuthorEmail); $this->currentItem->author = trim($this->currentItem->atomAuthorEmail); } $this->currentItem->author = trim($this->currentItem->author); if ($this->currentItem->creativeCommons == "") { $this->currentItem->creativeCommons = trim($this->FeedCreativeCommons); } else { $this->currentItem->creativeCommons = trim($this->currentItem->creativeCommons); } if ($this->operateAs == "rss2sql") { if ($this->currentItem->source == "" && $this->sourceFeedURL != "") { $this->currentItem->source = $this->FeedTitle; $this->currentItem->sourceURL = $this->sourceFeedURL; } } $this->currentItem->source = trim($this->currentItem->source); $this->currentItem->sourceURL = trim($this->currentItem->sourceURL); $this->currentItem->enclosureURL = trim($this->currentItem->enclosureURL); $this->currentItem->enclosureLength = trim($this->currentItem->enclosureLength); $this->currentItem->enclosureType = trim($this->currentItem->enclosureType); $this->currentItem->comments = trim($this->currentItem->comments); $this->currentItem->rssMeshExtra = trim($this->currentItem->rssMeshExtra); $this->currentItem->rssMeshExtra1 = trim($this->currentItem->rssMeshExtra1); $this->currentItem->rssMeshExtra2 = trim($this->currentItem->rssMeshExtra2); $this->currentItem->rssMeshExtra3 = trim($this->currentItem->rssMeshExtra3); $this->currentItem->rssMeshFeedImageTitle = trim($this->currentItem->rssMeshFeedImageTitle); $this->currentItem->rssMeshFeedImageUrl = trim($this->currentItem->rssMeshFeedImageUrl); $this->currentItem->rssMeshFeedImageLink = trim($this->currentItem->rssMeshFeedImageLink); $this->currentItem->rssMeshFeedImageDescription = trim($this->currentItem->rssMeshFeedImageDescription); $this->currentItem->rssMeshFeedImageHeight = trim($this->currentItem->rssMeshFeedImageHeight); $this->currentItem->rssMeshFeedImageWidth = trim($this->currentItem->rssMeshFeedImageWidth); if ($this->operateAs == "rss2html") { // // Escape any links $this->currentItem->link = FeedForAll_rss2html_EscapeLink($this->currentItem->link); $this->currentItem->guid = FeedForAll_rss2html_EscapeLink($this->currentItem->guid); $this->currentItem->creativeCommons = FeedForAll_rss2html_EscapeLink($this->currentItem->creativeCommons); $this->currentItem->sourceURL = FeedForAll_rss2html_EscapeLink($this->currentItem->sourceURL); $this->currentItem->enclosureURL = FeedForAll_rss2html_EscapeLink($this->currentItem->enclosureURL); $this->currentItem->comments = FeedForAll_rss2html_EscapeLink($this->currentItem->comments); $this->currentItem->rssMeshFeedImageUrl = FeedForAll_rss2html_EscapeLink($this->currentItem->rssMeshFeedImageUrl); $this->currentItem->rssMeshFeedImageLink = FeedForAll_rss2html_EscapeLink($this->currentItem->rssMeshFeedImageLink); } // if ($this->currentItem->contentEncodedUsed) { $this->contentEncodedUsed = 1; } if (FeedForAll_parseExtensions() === TRUE) { FeedForAll_parseExtensions_endElemend($parser, $this, $tagName); } if ($this->UseItem) { $this->Items[] = $this->currentItem; if (isset($debugLevel) && $debugLevel >= 3) { echo "DIAG: adding to items, count=" . count($this->Items) . "<br>\n"; } } } else { unset($this->currentItem); } $this->insideItem = FALSE; $this->level_item = 0; return; } elseif ($this->insideAtomAuthor && $tagName == "AUTHOR") { $this->insideAtomAuthor = FALSE; } elseif ($tagName == "IMAGE" && $this->insideChannelImage) { $this->FeedImageTitle = trim($this->FeedImageTitle); $this->FeedImageURL = trim($this->FeedImageURL); $this->FeedImageLink = trim($this->FeedImageLink); $this->FeedImageDescription = trim($this->FeedImageDescription); $this->FeedImageHeight = trim($this->FeedImageHeight); $this->FeedImageWidth = trim($this->FeedImageWidth); if ($this->operateAs == "rss2html") { // // Escape any links $this->FeedImageURL = FeedForAll_rss2html_EscapeLink($this->FeedImageURL); $this->FeedImageLink = FeedForAll_rss2html_EscapeLink($this->FeedImageLink); } if (FeedForAll_parseExtensions() === TRUE) { FeedForAll_parseExtensions_endElemend($parser, $this, $tagName); } $this->insideChannelImage = FALSE; $this->level_channelImage = 0; return; } elseif ($tagName == "CHANNEL" && $this->feedTYPE != "FEE" || $tagName == "FEED" && $this->feedTYPE == "FEE") { $this->FeedPubDate = trim($this->FeedPubDate); $this->FeedPubDateDC = trim($this->FeedPubDateDC); $this->FeedAtomUpdated = trim($this->FeedAtomUpdated); // // Get the pubDate from pubDate first and then dc:date if (trim($this->FeedPubDate) != "") { $this->FeedPubDate_t = strtotime($this->FeedPubDate); } elseif ($this->feedTYPE == "FEE" && $this->FeedAtomUpdated != "") { $this->FeedAtomUpdated = trim($this->FeedAtomUpdated); $this->FeedPubDate_t = FeedForAll_scripts_getRFDdate($this->FeedAtomUpdated); $this->FeedPubDate = date("D, d M Y H:i:s O", $this->FeedPubDate_t); } elseif (trim($this->FeedPubDateDC) != "") { $this->FeedPubDate_t = FeedForAll_scripts_getRFDdate($this->FeedPubDateDC); $this->FeedPubDate = date("D, d M Y H:i:s O", $this->FeedPubDate_t); } elseif (trim($this->FeedLastBuildDate) != "") { $this->FeedPubDate_t = strtotime($this->FeedLastBuildDate); $this->FeedPubDate = date("D, d M Y H:i:s O", $this->FeedPubDate_t); } else { $this->FeedPubDate_t = time(); $this->FeedPubDate = date("D, d M Y H:i:s O", $this->FeedPubDate_t); } $this->FeedTitle = trim($this->FeedTitle); if ($this->feedTYPE == "FEE") { $this->FeedAtomContent = trim($this->FeedAtomContent); $this->FeedDescription = $this->FeedAtomContent; } else { $this->FeedDescription = $this->FeedDescription; } if (trim($this->FeedContentEncoded) == "") { $this->FeedContentEncoded = $this->FeedDescription; } $this->FeedLink = trim($this->FeedLink); if ($this->operateAs == "rss2html") { // // Escape any links $this->FeedLink = FeedForAll_rss2html_EscapeLink($this->FeedLink); $this->FeedCreativeCommons = FeedForAll_rss2html_EscapeLink($this->FeedCreativeCommons); } if (FeedForAll_parseExtensions() === TRUE) { FeedForAll_parseExtensions_endElemend($parser, $this, $tagName); } $this->insideChannel = FALSE; $this->level_channel = 0; return; } elseif ($this->level == $this->level_channel) { if ($tagName == "TITLE") { $this->FeedTitle = trim($this->FeedTitle); } elseif ($tagName == "DESCRIPTION" || $tagName == "TAGLINE") { $this->FeedDescription = trim($this->FeedDescription); } elseif ($tagName == "CONTENT:ENCODED") { $this->FeedContentEncoded = trim($this->FeedContentEncoded); } elseif ($tagName == "LINK") { $this->FeedLink = trim($this->FeedLink); } } elseif ($tagName == "CONTENT") { if ($this->insideItem == TRUE) { // Lets look to see if the content is if ($this->currentItem->atomContentStartPos) { // // The the whole <content ... > string $pos = xml_get_current_byte_index($parser); for (; $pos > 0; $pos--) { /* Look for a closing angle */ if ($this->wholeString[$pos] == ">") { break; } } $pos++; $hereToEnd = substr($this->wholeString, $pos); $closePos = strpos($hereToEnd, ">"); $fullContentText = substr($this->wholeString, $this->currentItem->atomContentStartPos, $pos + $closePos - $this->currentItem->atomContentStartPos + 1); // Find the end of <content $start = strpos($fullContentText, ">"); $fullContentText = substr($fullContentText, $start + 1); // Find the end of <div $start = strpos($fullContentText, ">"); $fullContentText = substr($fullContentText, $start + 1); // Find the start of </content $start = strrpos($fullContentText, "<"); $fullContentText = substr($fullContentText, 0, $start - 1); // Find the start of </div $start = strrpos($fullContentText, "<"); $this->currentItem->atomContent = substr($fullContentText, 0, $start - 1); $this->currentItem->atomContentStartPos = 0; } } else { // Lets look to see if the content is if ($this->FeedAtomContentStartPos) { // // The the whole <content ... > string $pos = xml_get_current_byte_index($parser); for (; $pos > 0; $pos--) { /* Look for a closing angle */ if ($this->wholeString[$pos] == ">") { break; } } $pos++; $hereToEnd = substr($this->wholeString, $pos); $closePos = strpos($hereToEnd, ">"); $fullContentText = substr($this->wholeString, $this->FeedAtomContentStartPos, $pos + $closePos - $this->FeedAtomContentStartPos + 1); // Find the end of <content $start = strpos($fullContentText, ">"); $fullContentText = substr($fullContentText, $start + 1); // Find the end of <div $start = strpos($fullContentText, ">"); $fullContentText = substr($fullContentText, $start + 1); // Find the start of </content $start = strrpos($fullContentText, "<"); $fullContentText = substr($fullContentText, 0, $start - 1); // Find the start of </div $start = strrpos($fullContentText, "<"); $this->FeedAtomContent = substr($fullContentText, 0, $start - 1); $this->FeedAtomContentStartPos = 0; } } } if (FeedForAll_parseExtensions() === TRUE) { FeedForAll_parseExtensions_endElemend($parser, $this, $tagName); } }