Вход Регистрация
Файл: sys/inc/classes/class.DB_Files.php
Строк: 221
<?php 

class DB_Files 
{
    public 
$args = array(
        
'files_type' => 'files',
        
'mimetype' => '*/*',
    ); 

    public 
$paged 1
    public 
$pages 1
    public 
$total 0
    public 
$files = array(); 

    public 
$request '';  


    public 
$mime_types = array(
        
'image/jpeg'
        
'image/gif'
        
'image/png'
        
'image/bmp'
        
'video/x-flv'
        
'application/x-javascript'
        
'application/json'
        
'image/tiff'
        
'text/css'
        
'application/xml'
        
'application/msword'
        
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        
'application/vnd.ms-excel'
        
'application/vnd.ms-powerpoint'
        
'application/rtf'
        
'application/pdf'
        
'text/html'
        
'text/plain'
        
'video/mpeg'
        
'audio/basic',  
        
'audio/mpeg'
        
'audio/wav'
        
'audio/L24'
        
'audio/aiff'
        
'audio/mp4'
        
'audio/aac'
        
'audio/mpeg'
        
'audio/ogg'
        
'audio/vorbis'
        
'audio/x-ms-wma'
        
'audio/x-ms-wax'
        
'audio/vnd.rn-realaudio'
        
'audio/vnd.wave'
        
'audio/webm'
        
'video/msvideo'
        
'video/x-ms-wmv'
        
'video/quicktime'
        
'application/zip'
        
'application/x-tar'
        
'application/x-shockwave-flash'
        
'application/vnd.oasis.opendocument.text'
        
'application/vnd.oasis.opendocument.text-template'
        
'application/vnd.oasis.opendocument.text-web'
        
'application/vnd.oasis.opendocument.text-master'
        
'application/vnd.oasis.opendocument.graphics'
        
'application/vnd.oasis.opendocument.graphics-template'
        
'application/vnd.oasis.opendocument.presentation'
        
'application/vnd.oasis.opendocument.presentation-template'
        
'application/vnd.oasis.opendocument.spreadsheet'
        
'application/vnd.oasis.opendocument.spreadsheet-template'
        
'application/vnd.oasis.opendocument.chart'
        
'application/vnd.oasis.opendocument.formula'
        
'application/vnd.oasis.opendocument.database'
        
'application/vnd.oasis.opendocument.image'
        
'application/vnd.openofficeorg.extension'
        
'application/vnd.ms-word.document.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.wordprocessingml.template'
        
'application/vnd.ms-word.template.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        
'application/vnd.ms-excel.sheet.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.spreadsheetml.template'
        
'application/vnd.ms-excel.template.macroEnabled.12'
        
'application/vnd.ms-excel.sheet.binary.macroEnabled.12'
        
'application/vnd.ms-excel.addin.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.presentationml.presentation'
        
'application/vnd.ms-powerpoint.presentation.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.presentationml.slideshow'
        
'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.presentationml.template'
        
'application/vnd.ms-powerpoint.template.macroEnabled.12'
        
'application/vnd.ms-powerpoint.addin.macroEnabled.12'
        
'application/vnd.openxmlformats-officedocument.presentationml.slide'
        
'application/vnd.ms-powerpoint.slide.macroEnabled.12'
        
'application/vnd.ms-officetheme'
        
'application/onenote'
        
'text/csv'
    );

    public function 
__construct($args = array()) 
    {
        
$set get_settings(); 

        if (!isset(
$args['p_str'])) {
            
$args['p_str'] = $set['p_str']; 
        }

        if (!isset(
$args['paged'])) {
            
$args['paged'] = get_paged(); 
        }

        if (!isset(
$args['order'])) {
            
$args['order'] = 'DESC'
        }

        if (!isset(
$args['orderby'])) {
            
$args['orderby'] = 'id'
        }

        
$this->paged $args['paged']; 

        
$this->args array_merge($this->args$args); 
        
$this->query($this->args); 
    }

    public function 
have_files() {
        return 
$this->total 0
    }

    public function 
query($args
    {
        
$SQLConst['%join%'] = "LEFT JOIN files_relation ON (files.id = files_relation.file_id)";
        
$SQLConst['%select%'] = "files.id"

        
$where = array(); 

        if (isset(
$args['term_id'])) {
            
$where[] = "(files_relation.term_id IN(" $args['term_id'] . "))"
        }

        
/**
        * ID каталогов которые небходимо исключить
        * Допускается строка через запятую или массив 
        */ 
        
if (isset($args['term_not_in'])) {
            
$terms_not_ids = (is_array($args['term_not_in']) ? implode(','$args['term_not_in']) : $args['term_not_in']); 
            
$where[] = "(files.id NOT IN (SELECT file_id FROM files_relation WHERE term_id IN (" $terms_not_ids ")))"
        }

        if (isset(
$args['file_type'])) {
            
$where[] = "(files.file_type = '" $args['file_type'] . "')"
        }

        if (isset(
$args['user_id'])) {
            
$where[] = "(files.user_id = '" $args['user_id'] . "')"
        }

        if (isset(
$args['where'])) {
            if (
is_array($args['where'])) {
                
$where[] = db::get_construct_query_where('files'$args['where'], ''); 
            } elseif (
is_string($args['where'])) {
                
$where[] = $args['where']; 
            }
        }
        
        if (
$args['mimetype'] != '*/*') {
            
$mimeexp explode('/'$args['mimetype']); 
            
$allowed = array(); 

            foreach(
$this->mime_types AS $mimetype) {
                if (
strpos($mimetype$mimeexp[0]) !== false) {
                    
$allowed[] = "files.mimetype = '" $mimetype "'"
                }
            }

            if (
$allowed) {
                
$where[] = "(" implode(' OR '$allowed) . ")"
            }    
        }

        
$SQLConst['%where%'] = ($where 'AND ' implode(' AND '$where) : ''); 
        
$SQLConst['%order%'] = "ORDER BY files." $args['orderby'] . " " $args['order']; 
        
        
$SQLConst['%limit%'] = ''
        if (
$args['p_str'] != '-1') {
            
$start  $args['p_str'] * $args['paged'] - $args['p_str'];
            
$SQLConst['%limit%'] = "LIMIT " $start ", " $args['p_str']; 
        }

        
$SQLCount str_replace(array_keys($SQLConst), array_values($SQLConst), "SELECT COUNT(%select%) FROM files %join% WHERE 1=1 %where%"); 
        
$this->total ceil(db::count($SQLCount)); 
        if (
$this->total $this->args['p_str']) {
            
$this->pages ceil($this->total $this->args['p_str']); 
        }
        
        
$SQLSelect str_replace(array_keys($SQLConst), array_values($SQLConst), "SELECT %select% FROM files %join% WHERE 1=1 %where% GROUP BY files.id %order% %limit%"); 

        
$this->request $SQLSelect

        
$ids_files db::select($SQLSelect); 

        
$files = array(); 
        foreach(
$ids_files AS $file) {
            
$files[] = get_file($file['id']); 
        }

        
$this->files $files
    }

}
Онлайн: 1
Реклама