123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- /**
- * [Discuz!] (C)2001-2099 Comsenz Inc.
- * This is NOT a freeware, use is subject to license terms
- *
- * $Id: portal_rss.php 24992 2011-10-20 09:41:00Z liulanbo $
- */
- if(!defined('IN_DISCUZ')) {
- exit('Access Denied');
- }
- if(!$_G['setting']['rssstatus']) {
- exit('RSS Disabled');
- }
- $ttl = $_G['setting']['rssttl'] ? $_G['setting']['rssttl']: 30;
- $num = 20;
- $_G['groupid'] = 7;
- $_G['uid'] = 0;
- $_G['username'] = $_G['member']['password'] = '';
- $rsscatid = empty($_GET['catid']) ? 0 : intval($_GET['catid']);
- $catname = '';
- if(empty($rsscatid)) {
- foreach($_G['cache']['portalcategory'] as $catid => $category) {
- $catarray[] = $catid;
- }
- } else {
- if(isset($_G['cache']['portalcategory'][$rsscatid])) {
- $catarray = array($rsscatid);
- $catname = dhtmlspecialchars($_G['cache']['portalcategory'][$rsscatid]['catname']);
- } else {
- exit('Specified article not found');
- }
- }
- $rewriteflag = 0;
- $havedomain = implode('', $_G['setting']['domain']['app']);
- if(is_array($_G['setting']['rewritestatus']) && in_array('portal_article', $_G['setting']['rewritestatus'])) {
- $rewriteflag = 1;
- }
- $charset = $_G['config']['output']['charset'];
- dheader("Content-type: application/xml");
- echo "<?xml version=\"1.0\" encoding=\"".$charset."\"?>\n".
- "<rss version=\"2.0\">\n".
- " <channel>\n".
- (count($catarray) > 1 ?
- " <title>{$_G[setting][bbname]}</title>\n".
- " <link>{$_G[siteurl]}forum.php</link>\n".
- " <description>Latest $num articles of all categories</description>\n"
- :
- " <title>{$_G[setting][bbname]} - $catname</title>\n".
- " <link>{$_G[siteurl]}portal.php?mod=list&catid=$rsscatid</link>\n".
- " <description>Latest $num articles of $catname</description>\n"
- ).
- " <copyright>Copyright(C) {$_G[setting][bbname]}</copyright>\n".
- " <generator>Discuz! Board by Comsenz Inc.</generator>\n".
- " <lastBuildDate>".gmdate('r', TIMESTAMP)."</lastBuildDate>\n".
- " <ttl>$ttl</ttl>\n".
- " <image>\n".
- " <url>{$_G[siteurl]}static/image/common/logo_88_31.gif</url>\n".
- " <title>{$_G[setting][bbname]}</title>\n".
- " <link>{$_G[siteurl]}</link>\n".
- " </image>\n";
- if($catarray) {
- $alldata = C::t('portal_rsscache')->fetch_all_by_catid($catarray, $num);
- if($alldata) {
- foreach($alldata as $article) {
- if(TIMESTAMP - $article['lastupdate'] > $ttl * 60) {
- updatersscache($num);
- break;
- } else {
- list($article['description'], $attachremote, $attachfile, $attachsize) = explode("\t", $article['description']);
- if($attachfile) {
- if($attachremote) {
- $filename = $_G['setting']['ftp']['attachurl'].'portal/'.$attachfile;
- } else {
- $filename = $_G['siteurl'].$_G['setting']['attachurl'].'portal/'.$attachfile;
- }
- }
- echo " <item>\n".
- " <title>".$article['subject']."</title>\n".
- " <link>$_G[siteurl]".($rewriteflag ? rewriteoutput('portal_article', 1, '', $article[aid]) : "portal.php?mod=view&aid=$article[aid]")."</link>\n".
- " <description><![CDATA[".dhtmlspecialchars($article['description'])."]]></description>\n".
- " <category>".dhtmlspecialchars($article['catname'])."</category>\n".
- " <author>".dhtmlspecialchars($article['author'])."</author>\n".
- ($attachfile ? '<enclosure url="'.$filename.'" length="'.$attachsize.'" type="image/jpeg" />'."\n" : '').
- " <pubDate>".gmdate('r', $article['dateline'])."</pubDate>\n".
- " </item>\n";
- }
- }
- } else {
- updatersscache($num);
- }
- }
- echo " </channel>\n".
- "</rss>";
- function updatersscache($num) {
- global $_G;
- $processname = 'portal_rss_cache';
- if(discuz_process::islocked($processname, 600)) {
- return false;
- }
- C::t('portal_rsscache')->truncate();
- require_once libfile('function/post');
- foreach($_G['cache']['portalcategory'] as $catid => $catarray) {
- $query = C::t('portal_article_title')->fetch_all_for_cat($catid, 0, 1, 0, $num);
- $catarray['catname'] = addslashes($catarray['catname']);
- foreach($query as $article) {
- $article['author'] = $article['author'] != '' ? addslashes($article['author']) : ($article['username'] ? addslashes($article['username']) : 'Anonymous');
- $article['title'] = addslashes($article['title']);
- $articleattach = C::t('portal_attachment')->fetch_by_aid_image($article['aid']);
- $attachdata = '';
- if(!empty($articleattach)) {
- $attachdata = "\t".$articleattach['remote']."\t".$articleattach['attachment']."\t".$articleattach['filesize'];
- }
- $article['description'] = addslashes(messagecutstr($article['summary'], 250 - strlen($attachdata)).$attachdata);
- C::t('portal_rsscache')->insert(array(
- 'lastupdate'=>$_G['timestamp'],
- 'catid'=>$catid,
- 'aid'=>$article['aid'],
- 'dateline'=>$article['dateline'],
- 'catname'=>$catarray['catname'],
- 'author'=>$article['author'],
- 'subject'=>$article['title'],
- 'description'=>$article['description']
- ));
- }
- }
- discuz_process::unlock($processname);
- return true;
- }
- ?>
|