440 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			440 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php 
 | 
						|
 | 
						|
$month = 0;
 | 
						|
$year = 0;
 | 
						|
$sort='';
 | 
						|
$category='';
 | 
						|
$category_id = 0;
 | 
						|
$author = '';
 | 
						|
$dest = '';
 | 
						|
$rums = false;
 | 
						|
$blgs = false;
 | 
						|
 | 
						|
$q = '';
 | 
						|
$glbs = false;
 | 
						|
 | 
						|
$pagenum = 1;
 | 
						|
$articles_page = 20;
 | 
						|
$startrecord = 0;
 | 
						|
 | 
						|
  $query_saved = substr($_SERVER['QUERY_STRING'],2); // strip '?=', save
 | 
						|
  
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
  $query_original = substr($query_saved,4);      // strip 'atom'
 | 
						|
 | 
						|
  $query_original = trim($query_original,'/');
 | 
						|
 | 
						|
  ereg("[/]?page=([0-9]*)",$query_original,$va);
 | 
						|
  
 | 
						|
  if(((count($va)) > 1) && ($va[1] > 0)) {
 | 
						|
    $pagenum = $va[1];
 | 
						|
    $query_original = ereg_replace("([/]?page=[0-9]*)","",$query_original);
 | 
						|
    $startrecord = ($pagenum * $articles_page) - $articles_page;
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  if(substr($query_original,-4,4) == 'text') {
 | 
						|
    $type = 'text';
 | 
						|
    $query_original = substr($query_original,0,-4);
 | 
						|
  }
 | 
						|
 | 
						|
  $query_original = trim($query_original,'/');
 | 
						|
  
 | 
						|
  if(substr($query_original,0,5) == 'forum') {
 | 
						|
    $rums = true;
 | 
						|
    $query_original = substr($query_original,5);
 | 
						|
  }
 | 
						|
 | 
						|
  $query_original = trim($query_original,'/');
 | 
						|
  
 | 
						|
  $cmd = explode('/',$query_original);
 | 
						|
 | 
						|
  if($rums) {
 | 
						|
    if($cmd[0] == 'category') {
 | 
						|
      $category = $cmd[1];       
 | 
						|
    }
 | 
						|
    else
 | 
						|
      $dest = $cmd[0];
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    switch (count($cmd)) {
 | 
						|
      case 2:
 | 
						|
        if($cmd[0] == 'share') {
 | 
						|
          $share = $cmd[1];
 | 
						|
          break;
 | 
						|
        }
 | 
						|
        if(strlen($cmd[1])) {
 | 
						|
          $blgs     = true;
 | 
						|
          $category = $cmd[1];
 | 
						|
        }
 | 
						|
 | 
						|
        $author     = $cmd[0];
 | 
						|
        break;
 | 
						|
 | 
						|
      case 1:
 | 
						|
        if(strlen($cmd[0])) {
 | 
						|
          $blgs       = true;
 | 
						|
          $author     = $cmd[0];
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
      default:
 | 
						|
        break;
 | 
						|
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
// build the return link
 | 
						|
 | 
						|
$href = $SITE_URL;
 | 
						|
if($blgs)
 | 
						|
  $href .= preg_replace("@^atom@","/weblog",$query_saved);
 | 
						|
else
 | 
						|
  $href .= preg_replace("@^atom@","",$query_saved);
 | 
						|
$href = preg_replace("@/text$@","",$href);
 | 
						|
$href = preg_replace("@/share/@","/view/",$href);
 | 
						|
 | 
						|
session_start();
 | 
						|
session_write_close();
 | 
						|
 | 
						|
if((xint($SITE_RESTRICTED)) && (! xint($_SESSION['authenticated'])))
 | 
						|
  exit;
 | 
						|
 | 
						|
if($type == "text")
 | 
						|
  header("Content-type: text/plain");
 | 
						|
else
 | 
						|
  header("Content-type: application/atom+xml");
 | 
						|
echo '<?xml version="1.0" encoding="utf-8" ?>'."\r\n"; 
 | 
						|
 | 
						|
include("globs.php");
 | 
						|
include("sql.php");
 | 
						|
 | 
						|
$sitesubs = get_default_subs();
 | 
						|
 | 
						|
// system defaults
 | 
						|
$blog_url    = $SITE_URL;
 | 
						|
$blog_title  = xmlificator($SITE_TITLE);
 | 
						|
$blog_desc   = xmlificator($BLOG_DESC);
 | 
						|
$blog_author = xmlificator($BLOG_AUTHOR);
 | 
						|
$blog_email  = xmlificator($BLOG_EMAIL);
 | 
						|
$blog_logo   = $BLOG_LOGO;
 | 
						|
if((strlen($blog_logo)) && (! strstr($blog_logo,"://")))
 | 
						|
  $blog_logo = $SITE_URL.'/'.$blog_logo;
 | 
						|
 | 
						|
$category = dbesc($category);
 | 
						|
$author = dbesc($author);
 | 
						|
$dest = dbesc($dest);
 | 
						|
 | 
						|
if(strlen($category) && (! ($category_id = category::get_cat_id($category,$author))))
 | 
						|
  $category = '';
 | 
						|
 | 
						|
if(strlen($author)) {
 | 
						|
  $author_info = get_author($author);
 | 
						|
  if(count($author_info)) {
 | 
						|
    $blog_url = xmlificator($SITE_URL.'/weblog/'.$author);
 | 
						|
    if(strlen($author_info[0]['blogname']))
 | 
						|
      $blog_title = xmlificator($author_info[0]['blogname']);
 | 
						|
    if(strlen($author_info[0]['blogdesc']))
 | 
						|
      $blog_desc = xmlificator($author_info[0]['blogdesc']);
 | 
						|
    if(strlen($author_info[0]['fullname']))
 | 
						|
      $blog_author = xmlificator($author_info[0]['fullname']);
 | 
						|
    if(strlen($author_info[0]['email']))
 | 
						|
      $blog_email = xmlificator($author_info[0]['email']);
 | 
						|
    if(strlen($author_info[0]['bloglogo'])) {
 | 
						|
      $blog_logo = xmlificator($author_info[0]['bloglogo']);
 | 
						|
    if((strlen($blog_logo)) && (! strstr($blog_logo,"://")))
 | 
						|
        $blog_logo = $SITE_URL.'/'.$blog_logo;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
if(strlen($share)) {
 | 
						|
  $x = get_user($share);
 | 
						|
  if(count($x) 
 | 
						|
    && ($x[0]['share']) 
 | 
						|
    && (! $x[0]['lurker'])
 | 
						|
    && (! $x[0]['sharecensor'])
 | 
						|
    && (! $x[0]['sharemutual'])) {
 | 
						|
 | 
						|
    if(xstr($x[0]['sitetitle']))
 | 
						|
      $blog_title = $x[0]['sitetitle'];
 | 
						|
    if(xstr($x[0]['sitedesc']))
 | 
						|
      $blog_desc = $x[0]['sitedesc'];
 | 
						|
    if(xstr($x[0]['sitelogo']))
 | 
						|
      $blog_logo = $x[0]['sitelogo'];
 | 
						|
 | 
						|
    $newsubs = get_subs($x[0]['name']);
 | 
						|
    $groups = groupsinit();
 | 
						|
    unset($sitesubs);
 | 
						|
    $sitesubs = array();
 | 
						|
    foreach($newsubs as $sub) {
 | 
						|
      $p = fetch_permissions('forum',$sub);
 | 
						|
      if(check_access($_SESSION['username'], $groups, '',$p))
 | 
						|
        $sitesubs[] = $sub;
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
$media = getmediamap();
 | 
						|
$build_date = gmdate('c');
 | 
						|
$copyright = 'Copyright '.date('Y').' '.$blog_author;
 | 
						|
$canonical = $SITE_URL;
 | 
						|
if(substr($canonical,0,-1) != '/')
 | 
						|
  $canonical .= '/';
 | 
						|
 | 
						|
$self = $canonical;
 | 
						|
if(substr($query_saved,0,1) == '/')
 | 
						|
 $self .= substr($query_saved,1);
 | 
						|
else
 | 
						|
 $self .= $query_saved;
 | 
						|
 | 
						|
$subtitle = '';
 | 
						|
if(strlen($blog_desc))
 | 
						|
  $subtitle = "<subtitle>$blog_desc</subtitle>";
 | 
						|
 | 
						|
echo <<< EOT
 | 
						|
<feed xmlns="http://www.w3.org/2005/Atom"
 | 
						|
      xmlns:thr="http://purl.org/syndication/thread/1.0" >
 | 
						|
 | 
						|
 <id>$canonical</id>
 | 
						|
 <title>$blog_title</title>
 | 
						|
 <link rel="alternate" href="$href" />
 | 
						|
 <updated>$build_date</updated>
 | 
						|
 $subtitle
 | 
						|
 | 
						|
EOT;
 | 
						|
 | 
						|
if(strlen($blog_logo)) {
 | 
						|
echo <<< EOT
 | 
						|
 <logo>$blog_logo</logo>
 | 
						|
 | 
						|
EOT;
 | 
						|
}
 | 
						|
 | 
						|
  $article_id_list = array();
 | 
						|
 | 
						|
    $ss = array();
 | 
						|
 | 
						|
    $ss['tolerance'] = 0;
 | 
						|
 | 
						|
    if($category_id)
 | 
						|
      $ss['category_id'] = $category_id;
 | 
						|
 | 
						|
    if($blgs) {
 | 
						|
      $ss['type'] = 'weblog';
 | 
						|
      $ss['author'] = $author;
 | 
						|
    }
 | 
						|
 | 
						|
    if($rums) {
 | 
						|
      $ss['type'] = 'forum';
 | 
						|
      $ss['forum'] = $dest;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    $ss['countonly'] = true;
 | 
						|
 | 
						|
    $rt = article_query($ss);
 | 
						|
    $totalarticles = $rt[0]['total'];
 | 
						|
 | 
						|
    echo " <link rel=\"self\" href=\"$self\" />\r\n";
 | 
						|
 | 
						|
    $self = ereg_replace("([/]?page=[0-9]*)","",$self);
 | 
						|
 | 
						|
    if($totalarticles > $articles_page) {
 | 
						|
 | 
						|
      if($pagenum != 1) {
 | 
						|
        $ppage = $pagenum - 1;
 | 
						|
        echo " <link rel=\"previous\" href=\"$self/page=$ppage\" />\r\n";
 | 
						|
      }
 | 
						|
      echo " <link rel=\"first\" href=\"$self/".'page=1'."\" />\r\n";
 | 
						|
 | 
						|
      $numpages = $totalarticles / $articles_page;
 | 
						|
 | 
						|
      $lastpage = (($numpages > intval($numpages)) 
 | 
						|
         ? intval($numpages)+1 
 | 
						|
         : $numpages);
 | 
						|
 | 
						|
      echo " <link rel=\"last\" href=\"$self/page=$lastpage\" />\r\n";
 | 
						|
 | 
						|
      if(($totalarticles - ($articles_page * $pagenum)) > 0) {
 | 
						|
        $npage = $pagenum + 1;
 | 
						|
        echo " <link rel=\"next\" href=\"$self/page=$npage\" />\r\n";
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    unset($ss['countonly']);
 | 
						|
 | 
						|
    $ss['startat'] = $startrecord;
 | 
						|
    $ss['articles_page'] = $articles_page;
 | 
						|
 | 
						|
    $r = article_query($ss);    
 | 
						|
 | 
						|
  if(count($r)) {
 | 
						|
    foreach($r as $rr) {
 | 
						|
      $article_id_list[] = "'".$rr['id']."'";
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if(count($article_id_list)) {
 | 
						|
    $rcc = fetch_comments_by_list($article_id_list,'article');
 | 
						|
    $ratt = fetch_attachments_by_list($article_id_list);
 | 
						|
  }
 | 
						|
 | 
						|
  foreach($r as $rr) {
 | 
						|
 | 
						|
    $link = "{$SITE_URL}/article/{$rr['guid']}";
 | 
						|
    $datestr = $rr['created'];    
 | 
						|
    $pubdate = gmdate('c',strtotime($datestr.' +0000'));
 | 
						|
    $datestr = $rr['edited'];    
 | 
						|
    $editdate = gmdate('c',strtotime($datestr.' +0000'));
 | 
						|
    if(strstr($rr['type'],'news')) {
 | 
						|
      if(strlen($rr['ext_author']))
 | 
						|
        $authorstr = "<author><name>{$rr['ext_author']}</name></author>\r\n";
 | 
						|
      else
 | 
						|
        $authorstr = "<author><name>External Author</name></author>\r\n";
 | 
						|
       
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      if(strlen($rr['fullname']))
 | 
						|
        $authorstr = "<author><name>{$rr['fullname']}</name></author>\r\n";
 | 
						|
      else
 | 
						|
        $authorstr = "<author><name>{$rr['author']}</name></author>\r\n";
 | 
						|
    }
 | 
						|
    $guid = "urn:uuid:{$rr[guid]}";
 | 
						|
    $comments = "{$SITE_URL}/comments/{$rr['guid']}";
 | 
						|
 | 
						|
    $contents = $rr['body'];
 | 
						|
 | 
						|
    if((! $rr['approved']) && (! strstr($rr['type'], 'news')))
 | 
						|
      $contents = filter_images($contents);
 | 
						|
 | 
						|
    $contents = macro_youtube($contents);
 | 
						|
    $contents = reltoabs($contents,$SITE_URL.'/');
 | 
						|
 | 
						|
    $title = xmlificator($rr['title']);
 | 
						|
    if(! strlen($title)) {
 | 
						|
      $title = xmlificator(substr($datestr,0,11));
 | 
						|
 | 
						|
      // Use the first 28 chars of text for the title-summary. Watch that 
 | 
						|
      // we don't end up with a  _partial_ escape sequence at the end.
 | 
						|
 | 
						|
      $stripped = xmlificator(strip_tags($contents));
 | 
						|
 | 
						|
      $len = 28;
 | 
						|
      $ok = 0;
 | 
						|
      while(! $ok) {
 | 
						|
        $summary=substr($stripped,0,$len);
 | 
						|
        if(($teststr = strrchr($summary,"&")) && (! strchr($teststr,";"))) {
 | 
						|
          $len --;
 | 
						|
        }
 | 
						|
        else {
 | 
						|
          $ok = 1;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      // Chopped off words don't look pretty in an RSS title
 | 
						|
 
 | 
						|
      if(strrpos($summary,' ') > 10)
 | 
						|
        $title .= ' '.substr($summary,0,(strrpos($summary,' ')));
 | 
						|
    }
 | 
						|
 | 
						|
    $contents .= feed_attachments($ratt,$rr['id']);
 | 
						|
    $contents .= feed_comments($rcc,$rr['id'],$rr['guid'],$rr['rank']);
 | 
						|
 | 
						|
    $contents = reltoabs($contents,$SITE_URL.'/');
 | 
						|
 | 
						|
    $contents = xmlificator($contents);
 | 
						|
 | 
						|
    // output the item
 | 
						|
 | 
						|
echo <<< EOT
 | 
						|
 | 
						|
<entry>
 | 
						|
 <id>$guid</id>
 | 
						|
 <title type="html">$title</title>
 | 
						|
 <published>$pubdate</published>
 | 
						|
 <updated>$editdate</updated>
 | 
						|
 <link rel="alternate" href="$link" />
 | 
						|
 <content type="html">$contents</content>
 | 
						|
 $authorstr
 | 
						|
 | 
						|
EOT;
 | 
						|
 | 
						|
    $rc = category::categories_by_article($rr['id']);
 | 
						|
    if(count($rc))
 | 
						|
      for($x = 0; $x < count($rc); $x ++)
 | 
						|
        echo ' <category term="'.xmlificator($rc[$x]).'"/>'."\r\n";
 | 
						|
 | 
						|
    $rat = attachments_fetch($rr['id']);
 | 
						|
    if(count($rat)) {
 | 
						|
      foreach($rat as $att) {
 | 
						|
        $filename = $att['filename'];
 | 
						|
        $ext = substr($filename,strrpos($filename,'.'));
 | 
						|
        $type = 'application/octet-stream';
 | 
						|
        foreach($media as $m) {
 | 
						|
          if($m[0] != $ext)
 | 
						|
            continue;
 | 
						|
          $type = $m[2];
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        echo ' <link rel="enclosure" href="'.$SITE_URL.'/'.xmlificator($filename).'" length="'.$att['size'].'" type="'.$type.'" />'."\r\n";
 | 
						|
        
 | 
						|
      }
 | 
						|
    }
 | 
						|
    echo "</entry>\r\n\r\n";
 | 
						|
 | 
						|
//    if(($ALLOW_COMMENTS == "1") && (count($rcc))) {
 | 
						|
//      foreach($rcc as $c) { 
 | 
						|
//        if($c['tid'] != $rr['id'])
 | 
						|
//          continue;
 | 
						|
//        $cguid = "urn:uuid:{$c['guid']}";
 | 
						|
//        $datestr = $c['created'];    
 | 
						|
//        $cpubdate = date(c,strtotime($datestr));
 | 
						|
//        
 | 
						|
//        $ccontents = format_avatar($c['avatar'],$c['author'],$c['userid'],
 | 
						|
//                                   $c['censored'],0,'',64).'<br />';
 | 
						|
//        $ccontents .= $c['body'];
 | 
						|
//
 | 
						|
//        $ccontents = filter_images($ccontents);
 | 
						|
//        $ccontents = reltoabs($ccontents,$SITE_URL.'/');
 | 
						|
//        $ccontents = xmlificator($ccontents);
 | 
						|
//        if(strlen($c['fullname']))
 | 
						|
//          $cauthor = xmlificator($c['fullname']);
 | 
						|
//        else
 | 
						|
//          $cauthor = xmlificator($c['author']);        
 | 
						|
//        $cauthorstr = '<author><name>'.$cauthor.'</name>';
 | 
						|
//        if(strlen($c['url']))
 | 
						|
//          $cauthorstr .= '<uri>'.xmlificator($c['url']).'</uri>';
 | 
						|
//        $cauthorstr .= '</author>';
 | 
						|
//
 | 
						|
//echo <<< EOT
 | 
						|
//<entry>
 | 
						|
//<thr:in-reply-to ref="$guid" />
 | 
						|
//<id>$cguid</id>
 | 
						|
//<title type="html">Re: $title</title>
 | 
						|
//<link rel="related" href="$link" />
 | 
						|
//<published>$cpubdate</published>
 | 
						|
//<updated>$cpubdate</updated>
 | 
						|
//<content type="html">$ccontents</content>
 | 
						|
//$cauthorstr
 | 
						|
//</entry>
 | 
						|
//
 | 
						|
//EOT;
 | 
						|
//}
 | 
						|
//}
 | 
						|
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  echo "</feed>\r\n";
 | 
						|
 | 
						|
?>
 |