Вход Регистрация
Файл: adultscript-2.0.3-pro/files/modules/video/components/rss.php
Строк: 214
<?php
defined
('_VALID') or die('Restricted Acess!');
class 
VComponent_video_rss extends VModule_video
{
    public function 
__construct()
    {
        
parent::__construct();
    }
    
    public function 
render()
    {
        
$args       $this->get_query(TRUE1);
        
$slug       $args['slug'];
        
$order      $args['order'];
        
$timeline   $args['timeline'];
        
$cat_id        0;
        
        if (
$slug != '') {
            
$categories $this->get_video_categories();
            foreach (
$categories as $category) {
                if (
$slug == $category['slug']) {
                    
$cat_id $category['cat_id'];
                    
$name    $category['name'];
                    break;
                }
            }
            
            if (!isset(
$cat_id)) {
                
VModule::load('404'true);
            }
        }
        
        if (
VCfg::get('video.rss_type') == 'simple') {
              
$videos    $this->get_rss_simple($order$timeline$cat_id);
        } else {
              
$videos    $this->get_rss_complex($order$timeline$cat_id);
        }
        
        
$site_name    VF::cfg_item('site_name');

        
header('Content-Type: text/xml');
        
ob_start();
print 
"<?xml version="1.0" encoding="utf-8" ?>n";
print 
"<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">n";
print "<channel>n";
print 
"<title>".htmlspecialchars($site_nameENT_QUOTES'UTF-8')."</title>n";
print 
"<link>".BASE_URL."/</link>n";
print 
"<description>".htmlspecialchars(VF::cfg_item('meta_desc'))."</description>n";
print 
"<copyright>Copyright (c) 2009-".date('Y-')." by ".htmlspecialchars($site_nameENT_QUOTES'UTF-8')." - All rights reserved.</copyright>n";
print 
"<pubDate>".date('r')."</pubDate>n";
print 
"<lastBuildDate>".date('r')."</lastBuildDate>n";
print 
"<language>en-us</language>n";
print 
"<image>n";
print 
"<url>".BASE_URL."/templates/".VF::cfg_item('template')."/images/logo.png</url>n";
print 
"<title>".htmlspecialchars($site_nameENT_QUOTES'UTF-8')."</title>n";
print 
"<link>".BASE_URL."/</link>n";
print 
"</image>n";
foreach (
$videos as $video) {
    
$link           BASE_URL.'/'.$video['video_id'].'/'.prepare_string($video['title'], true).'/';
    
$tags           explode(','$video['tags']);
    
$count            count($tags)-1;
    
$tag_string     '';
    foreach (
$tags as $index => $tag) {
          
$tag          trim($tag);
        
$tag_string .= "<a href="".BASE_URL."/tag/".str_replace(' ', '-', $tag)."/">".$tag."</a> ";
        if (
$index !== $count) {
            
$tag_string .= ', ';
        }
    }
    
    
$categories        explode(','$video['name']);
    
$slugs             explode(','$video['slug']);
    
$count             count($categories)-1;
    
$cat_string        '';
    foreach (
$categories as $index => $name) {
            
$cat_string .= "<a href="".BASE_URL."/".$slugs[$index]."">".htmlspecialchars($nameENT_QUOTES'UTF-8')."</a>";
            if (
$index !== $count) {
                
$cat_string .= ', ';
            }
    }
    
print 
"<item>n";
print 
"  <title>".htmlspecialchars($video['title'], ENT_QUOTES'UTF-8')."</title>n";
print 
"  <link>".$link."</link>n";
print 
"  <guid>".$link."</guid>n";
print 
"  <description>n";
print 
"    <![CDATA[";
print 
"<img src="".MEDIA_URL."/videos/tmb/".path($video['video_id'])."/".$video['thumb'].".jpg" align="left" border="0" width="160" height="120" vspace="4" hspace="4" />
<br />
           &nbsp; Category: "
.$cat_string."<br />
       &nbsp; Tags: "
.$tag_string."<br />
           &nbsp; Date: "
.$video['add_date']."<br /></p>";
print 
"    ]]>n";
print 
"  </description>n";
print 
"  <pubDate>".date('r'strtotime($video['add_date']))."</pubDate>n";
print 
"</item>n";    
}
print 
"</channel>n";
print 
"</rss>";
ob_end_flush();
    }
    
    private function 
get_rss_simple($order$timeline$cat_id=0)
    {
        if (
$cat_id !== 0) {            
            
$sql            'SELECT v.video_id, v.title, v.rating, v.rated_by, v.duration, v.thumb,
                                      v.thumbs, v.total_views, v.add_date, u.username, 
                                     GROUP_CONCAT(DISTINCT c.slug) AS slug,
                                     GROUP_CONCAT(DISTINCT c.name) AS name,
                                     GROUP_CONCAT(DISTINCT t.name) AS tags
                              FROM #__video_category AS vc
                              LEFT JOIN #__video AS v ON (v.video_id = vc.video_id AND v.status = 1)
                              LEFT JOIN #__video_categories AS c ON (vc.cat_id = c.cat_id)
                              LEFT JOIN #__video_tags AS t ON (t.video_id = v.video_id)
                              LEFT JOIN #__user AS u ON (u.user_id = v.video_id)
                              WHERE vc.cat_id = '
.$cat_id;
            
$sql_delim        ' AND';
        } else {
            
$sql            'SELECT v.video_id, v.title, v.rating, v.rated_by, v.duration, v.thumb,
                                      v.thumbs, v.total_views, v.add_date, u.username, 
                                     GROUP_CONCAT(DISTINCT c.slug) AS slug,
                                     GROUP_CONCAT(DISTINCT c.name) AS name,
                                     GROUP_CONCAT(DISTINCT t.name) AS tags
                              FROM #__video AS v
                              LEFT JOIN #__video_category AS vc ON (vc.video_id = v.video_id)
                              LEFT JOIN #__video_categories AS c ON (vc.cat_id = c.cat_id)
                              LEFT JOIN #__video_tags AS t ON (t.video_id = v.video_id)
                              LEFT JOIN #__user AS u ON (u.user_id = v.video_id)
                              WHERE v.status = 1'
;
            
$sql_delim        ' AND';        
        }
        
        switch (
$timeline) {
              case 
'today':
                  
$sql .= $sql_delim." DATE_FORMAT(v.view_date, '%y-%m-%d') = DATE_FORMAT(NOW(), '%y-%m-%d')";
                  break;
              case 
'yesterday':
                  
$sql .= $sql_delim." DATE_FORMAT(v.view_date, '%y-%m-%d') = DATE_ADD(CURDATE(), INTERVAL -1 DAY)";
                  break;
              case 
'week':
                  break;
              case 
'month':
                  
$sql .= $sql_delim." DATE_FORMAT(v.add_date, '%y-%m') = DATE_FORMAT(NOW(), '%y-%m')";
                  break;
              case 
'year':
                  
$sql .= $sql_delim." DATE_FORMAT(v.add_date, '%y') = DATE_FORMAT(NOW(), '%y')";
                  break;
        }
        
        
$sql .= $sql_delim." v.status = 1";
        
$sql .= ' GROUP BY v.video_id';
        
        switch (
$order) {
              case 
'watched':
                  
$sql .= ' ORDER BY v.view_time DESC';
                  break;
              case 
'popular':
                  
$sql .= ' ORDER BY v.total_views DESC';
                  break;
              case 
'rated':
                  
$sql .= ' ORDER BY v.rating DESC';
                  break;
              case 
'discussed':
                  
$sql .= ' ORDER BY v.total_comments DESC';
                  break;
              case 
'downloaded':
                  
$sql .= ' ORDER BY v.total_downloads DESC';
                  break;
              case 
'longest':
                  
$sql .= ' ORDER BY v.duration DESC';
                  break;
              case 
'recent':
              default:
                  
$sql .= ' ORDER BY v.add_time DESC';
                  break;
        }
        
        
$sql .= ' LIMIT '.VF::cfg_item('module.video.rss_per_page');
        
        
$db     VF::factory('database');
        
$cache     VF::factory('cache');
        if (!
$videos $cache->get($sql3600)) {
              
$videos $db->get_rows($sql);
              if (
$db->affected_rows()) {
                  
$cache->store($sql$videos3600);
              }
        }
        
        return 
$videos;
    }
    
    private function 
get_rss_complex($order$timeline$cat_id=0)
    {
        
$host    VF::cfg_item('sphinx_host');
        
$port   VF::cfg_item('sphinx_port');
        if (empty(
$host) OR empty($port)) {
              new 
VException('Please set your sphinx search host and port!');
        }
 
        
VF::load('sphinxapi.sphinxapi');
        
$sphinx         = new SphinxClient();
        
$sphinx->SetServer($host$port);
        
$sphinx->SetConnectTimeout(1);
        
$sphinx->SetFieldWeights(array('title' => 100'tags' => 70'description' => 30));
        
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
        
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
        
$sphinx->SetLimits(0VF::cfg_item('module.video.rss_per_page'), 1000);

        if (
$timeline == 'today') {                                                                                                                                      
            
$sphinx->SetFilterRange('add_time'strtotime('today'), time());                                                                                             
        } elseif (
$timeline == 'week') {                                                                                                                                 
            
$sphinx->SetFilterRange('add_time'strtotime('-1 week'), time());                                                                                           
        } elseif (
$timeline == 'month') {                                                                                                                                
            
$sphinx->SetFilterRange('add_time'strtotime('-1 month'), time());                                                                                          
        } elseif (
$timeline == 'year') {                                                                                                                                 
            
$sphinx->SetFilterRange('add_time'strtotime('-1 year'), time());                                                                                           
        }
        
        if (
$order == 'relevance' ) {                                                                                                                                    
            
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);                                                                                                                    
        } elseif (
$order == 'recent') {                                                                                                                                  
            
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC'add_time');                                                                                                        
        } elseif (
$order == 'views') {                                                                                                                                   
            
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC'total_views');                                                                                                     
        } elseif (
$order == 'longest') {                                                                                                                                 
            
$sphinx->SetSortMode(SPH_SORT_ATTR_DESC'duration');                                                                                                        
        }
        
        if (
$cat_id !== 0) {
              
$sphinx->SetFilter('categories'$cat_id);
          }
          
          
$results        $sphinx->Query('''videos');
        if (isset(
$results['matches']) && is_array($results['matches'])) {
              
$ids        implode(', 'array_keys($results['matches']));
            
$sql        'SELECT v.video_id, v.title, v.rating, v.rated_by, v.duration, v.thumb,
                                  v.thumbs, v.total_views, v.add_date, u.username, 
                                  GROUP_CONCAT(DISTINCT c.slug) AS slug,
                                  GROUP_CONCAT(DISTINCT c.name) AS name,
                                  GROUP_CONCAT(DISTINCT t.name) AS tags
                           FROM #__video AS v
                           LEFT JOIN #__video_category AS vc ON (vc.video_id = v.video_id)
                           LEFT JOIN #__video_categories AS c ON (vc.cat_id = c.cat_id)
                           LEFT JOIN #__video_tags AS t ON (t.video_id = v.video_id)
                           LEFT JOIN #__user AS u ON (u.user_id = v.video_id)
                           WHERE v.video_id IN ('
.$ids.')
                           AND v.status = 1
                           GROUP BY v.video_id
                           ORDER BY FIELD(v.video_id, '
.$ids.')';
        }

        if (!isset(
$sql)) {
            return array();
        }
        
        return 
VF::factory('database')->get_rows($sql);
    }
}
Онлайн: 0
Реклама