Вход Регистрация
Файл: lib/rss.lib.php
Строк: 264
<?php
 
/** Управление rss лентами проекта
 * @author [Eugene]
 * @copyright 2011
 * @url http://forwebm.net
 */
 
if (!@defined('W_ENGINED_L')) exit('Can`t access to this file data!');
 
//-------------------------------------------------------------------------------------
 
class w_rss_object extends w_defext {
  private 
$lineBreak = "rn";  
  protected
   
$control;   
    
  function 
__construct(w_Control_obj $control) {
   
parent::__construct(); 
   
$this->control = & $control; 
  }    
  
  function 
SendHeader() {
   @
header('Content-Type: text/xml; charset=utf-8'); 
  }
//SendHeader
   
  
private function GetHeadBlock($body) {
   return 
'<?xml version="1.0" encoding="utf-8"?>'.$this->lineBreak.
   
'<rss version="2.0">'.$this->lineBreak.
   
$body.
   
'</rss>';    
  }
//GetHeadBlock
  
  
private function GetDateTimeFormatted($data, $named=false) {
   
$time = @strtotime($data);  
   
$res  = array(
    
'time'  => @date('r', $time),
    
'stamp' => $time
   
);
   return (!
$named) ? $res : $res[$named];
  }
//GetDateTimeFormatted
  
  /**
  * $info = array(
  *  'name' =>
  *  'link' =>
  *  'description' => 
  *  'date' =>
  *  'lastdate'
  * )
  */ 
  
private function GetChannelBlock($info, $items) { 
   
$space = '  ';
   
$res = $space.'<channel>'.$this->lineBreak;
   
   
$res .= "$space$space<title>{$info['name']}</title>{$this->lineBreak}";
   
   
$res .= "$space$space<link>{$info['link']}</link>{$this->lineBreak}";
   
   
$res .= "$space$space<description><![CDATA[{$info['description']}]]></description>{$this->lineBreak}";
   
   if (isset(
$info['date']))
    
$res .= "$space$space<pubDate>".$this->GetDateTimeFormatted($info['date'], 'time')."</pubDate>{$this->lineBreak}";
   
   if (isset(
$info['lastdate']))
    
$res .= "$space$space<lastBuildDate>".$this->GetDateTimeFormatted($info['lastdate'], 'time').
    
"</lastBuildDate>{$this->lineBreak}";
   
   
$res .= $items.$this->lineBreak;
    
   return 
$res.$space.'</channel>'.$this->lineBreak;    
  }
//GetArticlesSectionInfo
  
  
function GetRssArticlesSectionBlock($sectionName) {
   
$list = $this->control->GetNewsSectionListElements(false, $sectionName, "datecreate DESC");
   
   
$path = 'http://'.W_HOSTMYSITE.'/'.(($list) ? $list[0]['opt']['pathobjects'].'/' : '');
   
   
$channel_info = array(
    
'name'        => W_HOSTMYSITE.' :: '.(($list) ? $list[0]['opt']['newstitletospec'] : 'Unknow'),
    
'link'        => $path,
    
'description' => ($list) ? "RSS feed of {$list[0]['opt']['newstitletospec']}" : 'Unknow',
    
'lastdate'    => ($list) ? $list[0]['data']['datecreate'] : $this->GetThisDateTime()   
   );
   
   
$space = '  ';
   
$items = '';
   
   foreach (
$list as $data) { 
    
$items .= "{$this->lineBreak}{$space}$space<item>{$this->lineBreak}";
    
    
$items .= "$space$space$space<title>{$data['data']['sname']}</title>{$this->lineBreak}";
    
    
$items .= "$space$space$space<link>".$path.$data['data']['iditem']."/</link>{$this->lineBreak}";
    
    
$items .= "$space$space$space<description><![CDATA[".
    
$this->control->strings->CorrectTextFromDB($data['data']['sdescr'], false, true, false, 450, true).
    
"]]></description>{$this->lineBreak}";
    
    
$time = $this->GetDateTimeFormatted($data['data']['datecreate']);
  
    
$items .= "$space$space$space<pubDate>{$time['time']}</pubDate>{$this->lineBreak}";
    
$items .= "$space$space$space<pubDateUT>{$time['stamp']}</pubDateUT>{$this->lineBreak}";
    
    
$items .= "$space$space$space<guid>".$path.$data['data']['iditem']."/</guid>{$this->lineBreak}";
    
    
$items .= "$space$space</item>";
   }   
   return 
$this->GetHeadBlock($this->GetChannelBlock($channel_info, $items));
  }
//GetRssArticlesSectionBlock
  
  
function GetRssArticleSection($sectionID) { 
   if (
$sdata = $this->control->GetNewsSectionInfoData($sectionID, true)) {
    
    
$sect_data = array(
     
'data' => $sdata,
     
'opt'  => $this->control->GetNewsSectionInfoData($sdata, false, true)
    );     
 
   } else { 
$sect_data = false; }
   
   
$name = (!$sect_data) ? 'Unknow' : $sect_data['data']['sname'];
   
$path = 'http://'.W_HOSTMYSITE.'/'.(($sect_data && $sect_data['opt']['pathobjects']) ? 
   
$sect_data['opt']['pathobjects'].'/'.$sectionID.'/' : 'news/'.$sectionID.'/');
   
   
$channel_info = array(
    
'name'        => W_HOSTMYSITE.' :: '.$name,
    
'link'        => $path,
    
'description' => "RSS feed of $name",
    
'lastdate'    => ($sect_data) ? $sect_data['data']['datecreate'] : $this->GetThisDateTime()   
   );   
   
   
$space = '  ';
   
$items = '';
   
   
$articles_list = (!$sect_data) ? false : $this->control->db->mPost(
    
"select iditem,datecreate,newtitle,newdata,contenttype from {$this->control->tables_list['newslist']} where ".
    
"newtype='$sectionID' order by datecreate DESC limit ".W_NEWSPERPAGEINPUBLICSECT
   
);   
   
   if (
$articles_list) {
    
$firstID = false;
    while (
$row = $this->control->db->GetLineArray($articles_list)) { 

     if (!
$firstID) { 
      
$channel_info['lastdate'] = $row['datecreate'];
      
$firstID = true; 
     }
     
     
$link = $path.$row['iditem'].'/';
    
     
$items .= "{$this->lineBreak}{$space}$space<item>{$this->lineBreak}";
    
     
$items .= "$space$space$space<title>{$row['newtitle']}</title>{$this->lineBreak}";
    
     
$items .= "$space$space$space<link>$link</link>{$this->lineBreak}";
    
     
$items .= "$space$space$space<description><![CDATA[".
     
$this->control->strings->CorrectTextFromDB($row['newdata'], false, true, $row['contenttype'], 450, true).
     
"]]></description>{$this->lineBreak}";
    
     
$time = $this->GetDateTimeFormatted($row['datecreate']);
  
     
$items .= "$space$space$space<pubDate>{$time['time']}</pubDate>{$this->lineBreak}";
     
$items .= "$space$space$space<pubDateUT>{$time['stamp']}</pubDateUT>{$this->lineBreak}";
    
     
$items .= "$space$space$space<guid>$link</guid>{$this->lineBreak}";
    
     
$items .= "$space$space</item>";
    }
   }
   return 
$this->GetHeadBlock($this->GetChannelBlock($channel_info, $items));     
  }
//GetRssArticleSection
    
  
function GetRssObjectCommentsBlock($filesID, $objectID) {
   require_once 
W_LIBPATH.'/files.lib.php';
   
   
$obj = w_dw_files_object::CreateFromObjectID($filesID, $objectID, $this->control, true);   
   
   
$name = (!$obj) ? 'Unknow' : $obj->GetName(); 
   
$link = (!$obj) ? 'http://'.W_HOSTMYSITE : 'http://'.W_HOSTMYSITE.$obj->GetPath();
       
   
$channel_info = (!$obj) ? array(
   
    
'name'        => W_HOSTMYSITE.' :: Unknow',
    
'link'        => $link,
    
'description' => 'RSS feed of '.W_HOSTMYSITE,
    
'lastdate'    => $this->GetThisDateTime(),
   
   ) : array(
   
    
'name'        => W_HOSTMYSITE.' :: '.$name,
    
'link'        => $link,
    
'description' => "RSS feed of comments for $name",
    
'lastdate'    => $obj->GetResult('block.datecreate'),
        
   );
   
   
$count = 10;
   
$objIDcomment = false;
   
   if (
$obj) {    
    switch (
$filesID) {       
     case 
'1': $objIDcomment = '0'; $count = $obj->GetResult('info.setinfo.perpagecount'); break;    
     case 
'2': $objIDcomment = '1'; $count = $obj->GetResult('info.commperpa'); break;         
    }        
   }   
 
   
$comments = (!$obj) ? false : $this->control->db->mPost(
    
"select iditem,datecreate,commsource from {$this->control->tables_list['commtbl']} where commfor='".
    
$obj->GetID()."' and commisactive='1' and objectid='$objIDcomment' order by datecreate DESC limit $count"
   
);
   
   
$space = '  ';
   
$items = '';
     
   if (
$comments) {
    
$firstID = false;
    while (
$row = $this->control->db->GetLineArray($comments)) {
        
     if (!
$firstID) { 
      
$channel_info['lastdate'] = $row['datecreate'];
      
$firstID = true; 
     }   
     
     
$items .= "{$this->lineBreak}{$space}$space<item>{$this->lineBreak}";
    
     
$items .= "$space$space$space<title>Re: $name</title>{$this->lineBreak}";
    
     
$items .= "$space$space$space<link>$link#comment{$row['iditem']}</link>{$this->lineBreak}";
    
     
$items .= "$space$space$space<description><![CDATA[".
     
$this->control->strings->CorrectTextFromDB($row['commsource'], false, true, false, 450, true).
     
"]]></description>{$this->lineBreak}";
    
     
$time = $this->GetDateTimeFormatted($row['datecreate']);
  
     
$items .= "$space$space$space<pubDate>{$time['time']}</pubDate>{$this->lineBreak}";
     
$items .= "$space$space$space<pubDateUT>{$time['stamp']}</pubDateUT>{$this->lineBreak}";
    
     
$items .= "$space$space$space<guid>$link#comment{$row['iditem']}</guid>{$this->lineBreak}";
    
     
$items .= "$space$space</item>"; 
         
    }   
   } 
   if (isset(
$obj)) unset($obj);   
   return 
$this->GetHeadBlock($this->GetChannelBlock($channel_info, $items));     
  }
//GetRssArticleCommentsBlock
    
 
}//w_rss_object   
 //-------------------------------------------------------------------------------------
 /* Copyright (с) 2011 forwebm.net */
?>
Онлайн: 1
Реклама