Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//   Copyright (C) 2006  Phorum Development Team                              //
//   http://www.phorum.org                                                    //
//                                                                            //
//   This program is free software. You can redistribute it and/or modify     //
//   it under the terms of either the current Phorum License (viewable at     //
//   phorum.org) or the Phorum License that was distributed with this file    //
//                                                                            //
//   This program is distributed in the hope that it will be useful,          //
//   but WITHOUT ANY WARRANTY, without even the implied warranty of           //
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     //
//                                                                            //
//   You should have received a copy of the Phorum License                    //
//   along with this program.                                                 //
//   July 19 Fixed by Dagon, Date format and Location default                 //
////////////////////////////////////////////////////////////////////////////////

define('phorum_page', 'rss');

include_once("./common.php");
include_once("./include/format_functions.php");

// check this forum allows RSS
if(!$PHORUM['use_rss']){
    exit();
}

$cache_key = $_SERVER["QUERY_STRING"].",".$PHORUM["user"]["user_id"]; 
$data = phorum_cache_get("rss", $cache_key);

if(empty($data)){

    if($PHORUM["forum_id"]==$PHORUM["vroot"]){
        $forums = phorum_db_get_forums(0, -1, $PHORUM["vroot"]);
        $forum_ids = array_keys($forums);
    } elseif($PHORUM["folder_flag"] && $PHORUM["vroot"]==0 && $PHORUM["forum_id"]!=0){
        // we don't support rss for normal folders
        exit();
    } else {
        $forum_ids = $PHORUM["forum_id"];
        $forums = phorum_db_get_forums($PHORUM["forum_id"]);
    }
    
    // find default forum for announcements
    foreach($forums as $forum_id=>$forum){
        if($forum["folder_flag"]){
            unset($forums[$forum_id]);
        } elseif(empty($default_forum_id)) { 
            $default_forum_id = $forum_id;
        }
    }
    
    $PHORUM["threaded_list"]=false;
    $PHORUM["float_to_top"]=false;
    
    // get the thread set started
    $rows = array();
    $thread = (isset($PHORUM["args"][1])) ? (int)$PHORUM["args"][1] : 0;

    $rows = phorum_db_get_recent_messages(30, $forum_ids, $thread);
    
    unset($rows["users"]);
    
    $items = array();
    $pub_date=0;
    foreach($rows as $key => $row){
    
        if(!$PHORUM["forum_id"]){
            $row["subject"]="[".$forums[$row["forum_id"]]["name"]."] ".$row["subject"];
        }
    
        $forum_id = ($row["forum_id"]==0) ? $default_forum_id : $row["forum_id"];
    
        $items[]=array(
            "pub_date" => date("r",$row["datestamp"]),
            "url" => phorum_get_url(PHORUM_FOREIGN_READ_URL, $forum_id, $row["thread"], $row["message_id"]),
            "headline" => $row["subject"],
            "description" => strip_tags($row["body"]),
            "author" => $row["author"],
            "category" => $forums[$row["forum_id"]]["name"]
        );
    
    
        $pub_date = max($row["datestamp"], $pub_date);
    
    }
    
    if (!$PHORUM['locale']) $PHORUM['locale'] ="en"; //if locale not set make it 'en'
    
    if($PHORUM["forum_id"]){
        $url = phorum_get_url(PHORUM_LIST_URL);
        $name = $PHORUM["name"];
        $description = strip_tags($PHORUM["description"]);
    } else {
        $url = phorum_get_url(PHORUM_INDEX_URL);
        $name = $PHORUM["title"];
        $description = "";
    }
    
    $channel = array(
    
        "name" => $name,
        "url" => $url,
        "description" => $description,
        "pub_date" => date("r",$pub_date),
        "language" => $PHORUM['locale']
    
    );
    
    $data = create_rss_feed($channel, $items);

}

$charset = '';
if (! empty($GLOBALS["PHORUM"]["DATA"]["CHARSET"])) {
    $charset = '; charset=' . htmlspecialchars($GLOBALS["PHORUM"]["DATA"]['CHARSET']);
}
header("Content-Type: text/xml$charset");

echo $data;

phorum_cache_put("rss", $cache_key, $data, 300);

/*******************************************************/

function create_rss_feed($channel, $items)
{

    if(empty($items)){
        return;
    }

    $encoding = '';
    if (! empty($GLOBALS["PHORUM"]["DATA"]["CHARSET"])) {
        $encoding = 'encoding="' . htmlspecialchars($GLOBALS["PHORUM"]["DATA"]['CHARSET']) . '"';
    }

    $data ="<?xml version=\"1.0\" $encoding ?>\n";
    $data.="<rss version=\"2.0\">\n";
    $data.="  <channel>\n";
    $data.="    <title>".htmlspecialchars(strip_tags($channel["name"]))."</title>\n";
    $data.="    <link>$channel[url]</link>\n";
    $data.="    <description><![CDATA[$channel[description]]]></description>\n";
    $data.="    <language>$channel[language]</language>\n";

    $data.="    <pubDate>$channel[pub_date]</pubDate>\n";
    $data.="    <lastBuildDate>$channel[pub_date]</lastBuildDate>\n";
    $data.="    <category>".htmlspecialchars(strip_tags($channel["name"]))."</category>\n";
    $data.="    <generator>Phorum ".PHORUM."</generator>\n";

    $data.="    <ttl>600</ttl>\n";

    foreach($items as $item){
        $data.="    <item>\n";
        $data.="      <title>".htmlspecialchars($item['headline'])."</title>\n";
        $data.="      <link>$item[url]</link>\n";
        $data.="      <author>".htmlspecialchars($item['author'])."</author>\n";
        $data.="      <description><![CDATA[".htmlspecialchars($item['description'])."]]></description>\n";
        $data.="      <category>".htmlspecialchars(strip_tags($item['category']))."</category>\n";
        $data.="      <guid isPermaLink=\"true\">$item[url]</guid>\n";
        $data.="      <pubDate>$item[pub_date]</pubDate>\n";
        $data.="    </item>\n";
    }

    $data.="  </channel>\n";
    $data.="</rss>\n";

    return $data;

}


?>