Вход Регистрация
Файл: adultscript-2.0.3-pro/files/mobile/components/video_search.php
Строк: 182
<?php
defined
('_VALID') or die('Restricted Access!');
class 
VComponent_mobile_video_search extends VComponent_mobile_video
{
    public function 
__construct()
    {
        
parent::__construct();
    }
    
    public function 
render()
    {
        
$query     = (isset($_GET['query'])) ? trim($_GET['query']) : null;
        if (!
$query) {
            
$this->notfound();
        }
        
        
$timelines    = array(
            
'all' => 1,
            
'today' => 1,
            
'yesterday'    => 1,
            
'week' => 1,
            
'month' => 1,
            
'year' => 1
        
);
        
        
$timeline    = (isset($_GET['time'])) ? trim($_GET['time']) : 'all';
        if (!isset(
$timelines[$timeline])) {
            
$this->notfound();
        }
        
        
$durations    = array(
            
'all'    => 1,
            
'short'    => 1,
            
'medium' => 1,
            
'long' => 1
        
);
        
        
$duration    = (isset($_GET['duration'])) ? trim($_GET['duration']) : 'all';
        if (!isset(
$durations[$duration])) {
            
$this->notfound();
        }

        
$sorts    = array(
            
'relevance'    => 1,
            
'added'    => 1,
            
'views' => 1,
            
'rating' => 1,
            
'duration' => 1
        
);
        
        
$sort    = (isset($_GET['sort'])) ? trim($_GET['sort']) : 'relevance';
        if (!isset(
$sorts[$sort])) {
            
$this->notfound();
        }
        
        
$page    = (isset($_GET['page'])) ? (int) trim($_GET['page']) : 1;
        
        
$this->mcfg['search_type']     = 'simple';
        if (
$this->mcfg['search_type'] == 'simple') {
            
$this->search_mysql($query$page$sort$timeline$duration);
        } else {
            
$this->search_sphinx($query$page$sort$timeline$duration);
        }
        
        
$page_add    = ($page 1) ? ' - '.__('page').' '.$page '';  
    
        
$this->tpl->menu        'video';
        
$this->tpl->title        __('search-title', array($query$page_add));
        
$this->tpl->meta_title    __('search-meta-title', array($query.$page_add$this->mcfg['site_name']));
        
$this->tpl->meta_desc    __('search-meta-desc', array($query.$page_add$this->mcfg['meta_desc']));
        
        
$this->tpl->canonical    BASE_URL.'/search/video/'.str_replace(' ''-'$query).'/';
        if (
$page 1) {
            
$this->tpl->canonical    .= $page.'/';
        }
        
        
$this->tpl->order        $sort;
        
$this->tpl->timeline    $timeline;
        
$this->tpl->duration    $duration;
        
$this->tpl->page        $page;
        
$this->tpl->query        $query;
        
        
$this->tpl->load(array('header''video_search''footer'));
        
$this->tpl->display();
    }
    
    private function 
search_mysql($query$page$sort 'relevance'$timeline 'all'$duration 'all')
    {
        
$sql_add        null;    
        
$today            strtotime('12:00:00');
        if (
$timeline == 'today') {
            
$sql_add    ' AND v.add_time > '.$today;
        } elseif (
$timeline == 'yesterday') {
            
$sql_add    ' AND v.add_time > '.strtotime('-1 day'$today).' AND v.add_time < '.$today;
        } elseif (
$timeline == 'week') {
            
$sql_add    ' AND v.add_time > '.strtotime('this week'time());
        } elseif (
$timeline == 'month') {
            
$sql_add    ' AND v.add_time > '.strtotime('first day of this month'time()); 
        } elseif (
$timeline == 'year') {
            
$sql_add    ' AND v.add_time > '.strtotime('first day of January'time());
        }
        
        if (
$duration == 'short') {
            
$sql_add    .= ' AND v.duration < 300';
        } elseif (
$duration == 'medium') {
            
$sql_add    .= ' AND v.duration >= 300 AND v.duration < 1200';            
        } elseif (
$duration == 'long') {
            
$sql_add    .= ' AND v.duration >= 1200';
        }
        
        
$orders    = array(
            
'relevance'    => 'relevance',
            
'added'        => 'v.add_time',
            
'views'        => 'v.total_views',
            
'rating'    => 'v.rating',
            
'duration'    => 'v.duration'
        
);
    
        
$search         str_replace('-'' '$query);
        
$sql_count      "SELECT COUNT(*) AS total_videos
                           FROM #__video AS v
                           WHERE MATCH (v.title) AGAINST ('"
.$this->db->escape($search)."')
                           AND v.status = 1
                           AND v.mobile = '1'"
.$sql_add;
        
$total_videos   $this->db->get_field($sql_count'total_videos');
        
$pagination     VPagination::get($page$total_videos$this->mcfg['videos_per_page']);
        
$sql            "SELECT v.video_id, v.title, v.slug, v.rating, v.rated_by, v.duration, v.thumb,
                                  v.thumbs, v.total_views, v.add_time, v.ext, v.premium,
                                  MATCH (v.title) AGAINST ('"
.$this->db->escape($search)."') AS relevance
                           FROM #__video AS v
                           WHERE MATCH (v.title) AGAINST ('"
.$this->db->escape($search)."')
                           AND v.status = 1
                           AND v.mobile = '1'"
.$sql_add."
                           ORDER BY "
.$orders[$sort]." DESC
                           LIMIT "
.$pagination['limit'];
                           
        
$this->tpl->pagination    $pagination;
        
$this->tpl->videos        $this->db->get_rows($sql);
    }
    
    private function 
search_sphinx($query$page$sort 'relevance'$timeline 'all'$duration 'all')
    {
          
VF::load('sphinxapi.sphinxapi');
        
$offset         = ($page >= 2) ? (($page 1) * $this->mcfg['browse_per_page']) : 0;
        
$sphinx         = new SphinxClient();
        
$sphinx->SetServer(VF::cfg_item('sphinx_host'), VF::cfg_item('sphinx_port'));
        
$sphinx->SetConnectTimeout(1);
        
$sphinx->SetFieldWeights(array('title' => 100));
        
        
$query      $sphinx->EscapeString($query);
        
        if (
$timeline == 'today') {
            
$sphinx->SetFilterRange('add_time'strtotime('today'), time());
        } elseif (
$timeline == 'yesterday') {
                
$sphinx->SetFilterRange('add_Time'strtotime('yesterday'), strtotime('today'));
        } 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 (
$duration == 'short') {
            
$sphinx->SetFilterRange('duration'1300);
        } elseif (
$duration == 'medium') {
            
$sphinx->SetFilterRange('duration'3011200);
        } elseif (
$duration == 'long') {
            
$sphinx->SetFilterRange('duration'1200100000);
        }
        
        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');
        }                
        
        
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
        
$sphinx->SetLimits($offset$this->mcfg['browse_per_page'], 1000);
        
$sphinx->SetFilter('mobile', array(1));
        
$results        $sphinx->Query(str_replace('-'' '$query), 'videos');
        
        
$pagination     VPagination::get($page$results['total'], $this->vcfg['videos_per_page']);
        
$videos            = array();
        if (isset(
$results['matches']) && is_array($results['matches'])) {
              
$ids        implode(','array_keys($results['matches']));
            
$sql        "SELECT v.video_id, v.title, v.slug, v.rating, v.duration, v.thumb,
                                  v.total_views, v.add_time
                           FROM #__video AS v
                           WHERE v.video_id IN ("
.$ids.")
                           ORDER BY FIELD(v.video_id,"
.$ids.")";
            
$videos        $this->db->get_rows($sql);
        }
        
        
$this->tpl->pagination    $pagination;
        
$this->tpl->videos        $videos;
    }
}

function 
build_search_url($query$page$sort$timeline$duration)
{
    
$url    MOBILE_REL.'/search/video/?query='.$query;
    if (
$page 1) {
        
$url    .= '&page='.$page;
    }
    
    if (
$sort != 'all') {
        
$url    .= '&sort='.$sort;
    }
    
    if (
$timeline != 'all') {
        
$url    .= '&time='.$timeline;
    }
    
    if (
$duration != 'all') {
        
$url    .= '&duration='.$duration;
    }
    
    return 
$url;
}
Онлайн: 1
Реклама