Вход Регистрация
Файл: mc-2.6.3/modules/downloads/controllers/downloads_admin.php
Строк: 503
<?php
/**
     * MobileCMS
     *
     * Open source content management system for mobile sites
     *
     * @author MobileCMS Team <support@mobilecms.ru>
     * @copyright Copyright (c) 2011, MobileCMS Team
     * @link http://mobilecms.ru Official site
     * @license http://opensource.org/licenses/gpl-license.php GNU Public License
     */

/**
 * Контроллер управления загруз центром
 */
class Downloads_Admin_Controller extends Controller {
    
/**
     * Доступ
     */
    
public $access_level 8;
    
/**
     * Тема
     */
    
public $template_theme 'admin';
    
/**
     * Папка для загрузки по фтп
     */
    
public $ftp_directory '_ftp_upload/';

    
/**
     * Construct
     */
    
public function __construct() {
        
parent::__construct();

        
define('DOWNLOADS_DIRECTORY''files/downloads/');
        
# Хелпер загрузок
        
a_import('modules/downloads/helpers/downloads');
    }

    
/**
     * Метод по умолчанию
     */
    
public function action_index() {
        
$this->action_list_files();
    }

    
/**
     * Конфигурация модуля
     */
    
public function action_config() {
        
$_config $this->config['downloads'];

        if (isset(
$_POST['submit'])) {
            
main::is_demo();
            
$_config $_POST;

            
main::config($_config'downloads'$this->db);

            
a_notice('Данные успешно изменены!'a_url('downloads/admin/config'));
        }

        if (!isset(
$_POST['submit']) || $this->error) {
            
$this->tpl->assign(array(
                
'_config' => $_config
            
));

            
$this->tpl->display('config');
        }
    }

    
/**
     * Список файлов и папок
     */
    
public function action_list_files() {
        if (empty(
$_GET['directory_id']) or !is_numeric($_GET['directory_id'])) $directory_id 0;
        else 
$directory_id intval($_GET['directory_id']);

        if (
$directory_id != && !$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '$directory_id'")) {
            
a_error('Папка не найдена!');
        }
        else {
            
# Определяем папка с файлами или папками
            
if ($this->db->get_one("SELECT directory_id FROM #__downloads_directories WHERE parent_id = $directory_id")) {
                
$files_directory false;
                
$this->per_page 100;
            }
            else {
                
$files_directory true;
                
$this->per_page 20;
            }
        }

        
$directory_path downloads::get_path($directory_id$this->db);
        
$namepath downloads::get_namepath($directory_path'/'TRUE);

        
# Получаем список папок и файлов
        
$sql "SELECT SQL_CALC_FOUND_ROWS
                    directory_id AS file_id,
                    name,
                    'directory' AS type,
                    0 AS real_name,
                    0 AS path_to_file,
                position
                    FROM #__downloads_directories
                    WHERE parent_id = '
$directory_id'".PHP_EOL;
        
$sql .= "UNION ALL".PHP_EOL;
        
$sql .= "SELECT
                    file_id,
                    name,
                    'file' AS type,
                    real_name,
                    path_to_file,
                0 AS position
                    FROM #__downloads_files
                    WHERE directory_id = '
$directory_id' AND status = 'active' AND real_name != ''".PHP_EOL;

        
$sql .= "ORDER BY type ASC, position ASC, file_id DESC LIMIT $this->start$this->per_page";

        
$result $this->db->query($sql);
        
$total $this->db->get_one("SELECT FOUND_ROWS()");

        
$min_p $this->db->get_one("SELECT MIN(position) FROM #__downloads_directories WHERE parent_id = '$directory_id'");
         
$max_p $this->db->get_one("SELECT MAX(position) FROM #__downloads_directories WHERE parent_id = '$directory_id'");

        
$files = array();
        while (
$file $this->db->fetch_array($result)) {
            if (
$file['type'] == 'directory') {
                if (
$file['position'] != $min_p$file['up'] = '<a href="'.a_url('downloads/admin/directory_up''directory_id='.$file['file_id']).'"><img src="'.URL.'views/admin/images/up.png" alt="" /></a>';
                else 
$file['up'] = '';
    
                if (
$file['position'] != $max_p$file['down'] = '<a href="'.a_url('downloads/admin/directory_down''directory_id='.$file['file_id']).'"><img src="'.URL.'views/admin/images/down.png" alt="" /></a>';
                else 
$file['down'] = '';
            }
            else {
                
$file['up'] = '-';
                
$file['down'] = '-';
            }

            
$files[] = $file;
        }

        
# Пагинация
        
$pg_conf['base_url'] = a_url('downloads/admin/list_files''directory_id='.intval($_GET['directory_id']).'&amp;start=');
        
$pg_conf['total_rows'] = $total;
        
$pg_conf['per_page'] = $this->per_page;

        
a_import('libraries/pagination');
        
$pg = new CI_Pagination($pg_conf);

        
$this->tpl->assign(array(
            
'files' => $files,
            
'total' => $total,
            
'namepath' => $namepath,
            
'pagination' => $pg->create_links(),
            
'directory' => $directory
        
));

        
$this->tpl->display('list_files');
    }

    
/**
     * Создание / редактирование папки
     */
    
public function action_directory_edit() {
        if (
is_numeric(@$_GET['directory_id'])) {
            
$directory_id intval($_GET['directory_id']);
             if (!
$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '$directory_id'")) {
                
a_error('Папка не найдена!');
            }
            
$parent_directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '".$directory['parent_id']."'");
            
$action 'edit';
        }
        else {
            if (
$_GET['parent_id'] != '' && !$parent_directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '".intval($_GET['parent_id'])."'"))
                
a_error('Директория предок не найдена!');
            
$directory = array();
            
$action 'add';
        }

        if (isset(
$_POST['submit'])) {
            
main::is_demo();
            if (empty(
$_POST['name'])) {
                
$this->error .= 'Укажите название папки!<br />';
            }

            if (!
$this->error) {
                
# Определяем, является ли папка c изображениями
                
if (isset($_POST['images'])) $images 'yes';
                else 
$images 'no';
    
                
# Определяем, является ли папка c файлами пользователей
                
if (isset($_POST['user_files']) OR $parent_directory['user_files'] == 'yes'$user_files 'yes';
                else 
$user_files 'no';

                
# Создаем нувую папку
                
if ($action == 'add') {
                    
# Получаем позицию папки
                    
if (!isset($_POST['in_up'])) {
                        
$position $this->db->get_one("SELECT MAX(position) FROM #__downloads_directories WHERE parent_id = '".$parent_directory['directory_id']."'") + 1;
                    }
                    else {
                        
$position 1;
                        
$this->db->query("UPDATE #__downloads_directories SET position = position + 1 WHERE parent_id = '".$parent_directory['directory_id']."'");
                    }
    
                    
$this->db->query("INSERT INTO #__downloads_directories SET
                        name = '"
a_safe($_POST['name'])."',
                        images = '"
$images."',
                        user_files = '"
$user_files."',
                        parent_id = '"
. @$parent_directory['directory_id']."',
                        position = '
$position'
                    "
);
    
                    
$directory_id $this->db->insert_id();

                    
# Создаем папку в файловой системе
                    # Получаем директорию для папки
                    
$directory_path downloads::get_path($directory_id$this->db);
                    
$realpath downloads::get_realpath($directory_path);

                    
mkdir(ROOT.DOWNLOADS_DIRECTORY.$realpath.'/'.$directory_id);
                     
chmod(ROOT.DOWNLOADS_DIRECTORY.$realpath.'/'.$directory_id0777);

                    
a_notice('Папка успешно создана!'a_url('downloads/admin/list_files''directory_id='.@$parent_directory['directory_id']));
                 }
                elseif (
$action == 'edit') {
                    
# Изменяем имя папки
                    
$this->db->query("UPDATE #__downloads_directories SET
                        name = '"
a_safe($_POST['name'])."',
                        images = '"
$images."',
                        user_files = '"
$user_files."'
                        WHERE
                        directory_id = '"
$directory_id."'
                    "
);

                    
a_notice('Папка успешно изменена!'a_url('downloads/admin/list_files''directory_id='.$parent_directory['directory_id']));
                }
            }
        }
        if (!isset(
$_POST['submit']) || $this->error) {
            
$this->tpl->assign(array(
                
'error' => $this->error,
                
'directory' => $directory,
                
'action' => $action,
                
'_config' => $this->config['downloads'],
            ));
            
$this->tpl->display('directory_edit');
        }
    }

    
/**
     * Модерация файлов пользователей
     */
    
public function action_list_moderate_files() {
        
$sql "SELECT SQL_CALC_FOUND_ROWS *, u.username, (SELECT name FROM #__downloads_directories WHERE directory_id = f.directory_id) AS directory_name
            FROM #__downloads_files AS f LEFT JOIN #__users AS u USING(user_id) WHERE f.status = 'moderate'"
;
        
$files $this->db->get_array($sql);
        
$total $this->db->get_one("SELECT FOUND_ROWS()");

        
# Пагинация
        
$pg_conf['base_url'] = a_url('downloads/admin/list_moderate_files''start=');
        
$pg_conf['total_rows'] = $total;
        
$pg_conf['per_page'] = $this->per_page;

        
a_import('libraries/pagination');
        
$pg = new CI_Pagination($pg_conf);

        
$this->tpl->assign(array(
            
'files' => $files,
            
'directory' => $directory
        
));

        
$this->tpl->display('list_moderate_files');
    }

    
/**
     * Удаление папки
     */
    
public function action_directory_delete() {
        
main::is_demo();
        
$directory_id intval($_GET['directory_id']);

        if (!
$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '$directory_id'")) {
            
a_error('Папка не найдена!');
        }

        
# Удаление из ФС
        
$directory_path downloads::get_path($directory_id$this->db);
        
$realpath downloads::get_realpath($directory_path);
        
main::delete_dir(ROOT.DOWNLOADS_DIRECTORY.$realpath.'/'.$directory_id);

        
# Удаляем все файлы из базы
        
$this->db->query("DELETE FROM #__downloads_files WHERE path_to_file LIKE CONCAT('%/', $directory_id, '/%')");
        
# Удаляем всех потомков данной папки
        
downloads::delete_directories($directory_id);

        
# Удаление папки из базы
        
$this->db->query("DELETE FROM #__downloads_directories WHERE directory_id = '$directory_id'");

        
# Меняем позиции
        
$this->db->query("UPDATE #__downloads_directories SET position = position - 1 WHERE parent_id = '"$directory['parent_id'] ."' AND position > '"$directory['position'] ."'");

        
a_notice('Папка успешно удалена!'a_url('downloads/admin/list_files''directory_id='$directory['parent_id']));
    }

    
/**
     * Загрузка файла
     */
    
public function action_file_upload() {
        if(
function_exists('set_time_limit')) {
            
set_time_limit(0);
        }
        
# Редактирование файла
        
if(is_numeric(@$_GET['file_id'])) {
            if(!
$file $this->db->get_row("SELECT * FROM #__downloads_files WHERE file_id = '"intval($_GET['file_id']) ."'")) {
                
a_error('Файл не найден!');
            }
            
$action 'edit';
            
$file_id intval($_GET['file_id']);
            
$directory_id $file['directory_id'];
            
$new_file false;
        }
        
# Добавление файла
        
else {
            
$file = array();
            
$action 'add';
            
$new_file true;

            
# Получем данные о папке для загрузки
            
if (empty($_GET['directory_id']) OR !is_numeric($_GET['directory_id'])) $directory_id 0;
            else 
$directory_id intval($_GET['directory_id']);

            if (
$directory_id != && !$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '".$directory_id."'")) {
                  
a_error('Папка для загрузки не найдена!');
              }
        }

        if (isset(
$_POST['submit'])) {
            
main::is_demo();
            if (!
$this->error) {
                
# Получаем путь к папке
                
$directory_path downloads::get_path($directory_id$this->db);
                   
$realpath downloads::get_realpath($directory_path);
                
$realpath = ($realpath != '' $realpath.'/' '').($directory_id == '' $directory_id.'/');

                if (
$action == 'add') {
                    
# Создаем пустую строку в базе для файла (чтобы получить его ID)
                    
$this->db->query("INSERT INTO #__downloads_files SET file_id = 'NULL'");
                    
$file_id $this->db->insert_id();

                    
# Создаем папку для файла
                    
mkdir(ROOT.DOWNLOADS_DIRECTORY.$realpath.$file_id);
                    
chmod(ROOT.DOWNLOADS_DIRECTORY.$realpath.$file_id0777);
                }

                
$path_to_file DOWNLOADS_DIRECTORY.($realpath != '' $realpath '').$file_id;

                
# Загружаем основной файл
                
if (!empty($_FILES['file_upload']['tmp_name'])) {
                    if (
copy($_FILES['file_upload']['tmp_name'], ROOT.$path_to_file.'/'.$_FILES['file_upload']['name'])) {
                        
# Удаляем файл, если он был перезагружен
                        
if ($action == 'edit') {
                            if (
$file['real_name'] != $_FILES['file_upload']['name']) {
                                @
unlink(ROOT.$path_to_file.'/'.$file['real_name']);
                            }
                        }
                        
$file['real_name'] = $_FILES['file_upload']['name'];
                    }
                }
                elseif (!empty(
$_POST['file_import']) && $_POST['file_import'] != 'http://') {
                    
$import_file_path downloads::get_real_file_path($_POST['file_import']);
                    
$import_file_name basename($import_file_path);
                    if (
copy($import_file_pathROOT.$path_to_file.'/'.$import_file_name)) {
                        
# Удаляем файл, если он был перезагружен
                        
if ($action == 'edit') {
                            if (
$file['real_name'] != $import_file_name) {
                                @
unlink(ROOT.$path_to_file.'/'.$file['real_name']);
                            }
                        }
                        
$file['real_name'] = $import_file_name;
                    }
                }

                
# Работа со скринами
                
for ($i 1$i <= 3$i++) {
                    if (!empty(
$_FILES['screen'.$i]['tmp_name'])) {
                        
$screen_path ROOT.$path_to_file.'/'.$_FILES['screen'.$i]['name'];
                        if (
copy($_FILES['screen'.$i]['tmp_name'], $screen_path)) {
                            
# Изменяем скриншот
                            
if ($this->config['downloads']['screens_width'] > 0) {
                                
main::image_resize($screen_path$screen_pathintval($this->config['downloads']['screens_width']), 090);
                            }

                            
# Удаляем файл, если он был перезагружен
                            
if ($action == 'edit') {
                                if (
$file['screen'.$i] != '' && $file['screen'.$i] != $_FILES['screen'.$i]['name']) {
                                    @
unlink(ROOT.$path_to_file.'/'.$file['screen'.$i]);
                                }
                            }
                            
$file['screen'.$i] = $_FILES['screen'.$i]['name'];
                        }
                    }
                    elseif (!empty(
$_POST['screen'.$i]) && $_POST['screen'.$i] != 'http://') {
                        
$import_file_path downloads::get_real_file_path($_POST['screen'.$i]);
                        
$import_file_name basename($import_file_path);
                        if (
copy($import_file_pathROOT.$path_to_file.'/'.$import_file_name)) {
                            
# Удаляем файл, если он был перезагружен
                            
if ($action == 'edit') {
                                if (
$file['screen'.$i] != '' && $file['screen'.$i] != $import_file_name) {
                                    @
unlink(ROOT.$path_to_file.'/'.$file['screen'.$i]);
                                }
                            }
                            
$file['screen'.$i] = $import_file_name;
                        }
                    }
                }

                
# Дополнительные файлы
                
for ($i 1$i <= 5$i++) {
                    if (!empty(
$_FILES['add_file_file_'.$i]['tmp_name'])) {
                        if (
copy($_FILES['add_file_file_'.$i]['tmp_name'], ROOT.$path_to_file.'/'.$_FILES['add_file_file_'.$i]['name'])) {
                            
# Удаляем файл, если он был перезагружен
                            
if ($action == 'edit') {
                                if (
$file['add_file_file_'.$i] != '' && $file['add_file_file_'.$i] != $_FILES['add_file_file_'.$i]['name']) {
                                    @
unlink(ROOT.$path_to_file.'/'.$file['add_file_file_'.$i]);
                                }
                            }
                            
$file['add_file_real_name_'.$i] = $_FILES['add_file_file_'.$i]['name'];
                        }
                    }
                    elseif (!empty(
$_POST['add_file_file_'.$i]) && $_POST['add_file_file_'.$i] != 'http://') {
                        
$import_file_path downloads::get_real_file_path($_POST['add_file_file_'.$i]);
                        
$import_file_name basename($import_file_path);
                        if (
copy($import_file_pathROOT.$path_to_file.'/'.$import_file_name)) {
                            
# Удаляем файл, если он был перезагружен
                            
if ($action == 'edit') {
                                if (
$file['add_file_real_name_'.$i] != '' && $file['add_file_real_name_'.$i] != $import_file_name) {
                                    @
unlink(ROOT.$path_to_file.'/'.$file['add_file_real_name_'.$i]);
                                }
                            }
                            
$file['add_file_real_name_'.$i] = $import_file_name;
                        }
                    }
                }

                if (!
$this->error) {
                    
# Получаем размер файла
                    
$file['filesize'] = filesize(ROOT.$path_to_file.'/'.$file['real_name']) OR a_error('Ошибка в определении размера файла, возможно, он не был загружен!');
                    
# Получаем расширение файла
                    
$file['file_ext'] = array_pop(explode('.'$file['real_name']));

                    
$file['path_to_file'] = $path_to_file;
                    
$file['directory_id'] = $directory_id;
                    
$file['about'] = $_POST['about'];
                    
$file['status'] = $_POST['status'];
                    
$file['name'] = $_POST['name'];

                    
# Выполняем действия над определенными типами файлов
                    
$file downloads::filetype_actions($file);

                    
# Изменяем файл в базе
                    
downloads::update_file($this->db$file_id$file$new_file);

                    if (
$action == 'add'$message 'Файл успешно добавлен!';
                    if (
$action == 'edit'$message 'Файл успешно изменен!';

                    
a_notice($messagea_url('downloads/admin/list_files''directory_id='.$directory_id));
                }
            }
        }
        if (!isset(
$_POST['submit']) || $this->error) {
              
$this->tpl->assign(array(
                
'error' => $this->error,
                
'error_file' => $error_file,
                
'file' => $file,
                
'action' => $action
              
));
              
$this->tpl->display('file_upload');
        }
    }

    
/**
     * Удаление файла
     */
    
public function action_file_delete() {
        
main::is_demo();
        
# Получаем информацию о файле
        
if(!$file $this->db->get_row("SELECT * FROM #__downloads_files WHERE file_id = '"intval($_GET['file_id']) ."'")) {
            
a_error('Удаляемый файл не найден!');
        }

        
# Удаление папки из ФС
        
main::delete_dir(ROOT $file['path_to_file']);

        
# Удаляем файл из БД
        
$this->db->query("DELETE FROM #__downloads_files WHERE file_id = '"$file['file_id'] ."'");

        
a_notice('Файл успешно удален!'a_url('downloads/admin/list_files''directory_id='$file['directory_id']));
    }

    
/**
     * Переименование файла
     */
    
public function action_file_rename() {
        if(!
$file $this->db->get_row("SELECT * FROM #__downloads_files WHERE file_id = '"intval($_GET['file_id']) ."'")) {
                    
a_error("Файл не найден!");
        }

        
$fields = array('real_name''add_file_real_name_1''add_file_real_name_2''add_file_real_name_3''add_file_real_name_4''add_file_real_name_5');
        if(!
in_array($_GET['field_name'], $fields)) {
                    
a_error("Неверное имя поля!");
        }

        if(empty(
$file[$_GET['field_name']])) {
                    
a_error("Данный файл не был загружен!");
        }

        if(isset(
$_POST['submit'])) {
            if(empty(
$_POST['new_name'])) {
                            
$this->error .= 'Имя файла необходимо указывать!<br />';
            }

            if(!
$this->error) {
                
$this->db->query("UPDATE #__downloads_files SET "a_safe($_GET['field_name']) ." = '"a_safe($_POST['new_name']) ."' WHERE file_id = '"$file['file_id'] ."'");
                
rename(ROOT $file['path_to_file'] .'/'$file[$_GET['field_name']], ROOT $file['path_to_file'] .'/'$_POST['new_name']);
                
header("Location: "a_url('downloads/admin/file_upload''file_id='$file['file_id']));
                exit;
            }
        }
        if(!isset(
$_POST['submit']) OR $this->error) {
            
$this->tpl->assign(array(
                
'error' => $this->error,
                
'file' => $file
            
));

            
$this->tpl->display('file_rename');
        }
    }

    
/**
     * Загрузка файлов с фтп
     */
    
public function action_ftp_upload() {
        
set_time_limit(0);
        
ignore_user_abort(TRUE);

        if (!
$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = '".intval($_GET['directory_id'])."'"))
            
a_error('Папка не найдена!');

        if (isset(
$_POST['submit'])) {
            if (!
file_exists(ROOT.DOWNLOADS_DIRECTORY.$this->ftp_directory.$_POST['from_directory'])) {
                
$this->error .= 'ФТП папка не найдена!<br />';
            }

              if (!
$this->error) {
                  
$translite = isset($_POST['translite']) ? TRUE FALSE;
                
$this->_ftp_upload_copy_files($directory['directory_id'], $_POST['from_directory'], $translite);

                
a_notice("Копирование файлов завершено!"a_url('downloads/admin/list_files''directory_id='.$directory['directory_id']));
              }
        }
        if (!isset(
$_POST['submit']) OR $this->error) {
            
$this->tpl->assign(array(
                
'error' => $this->error,
                
'directory' => $directory
            
));
            
$this->tpl->display('ftp_upload');
        }
    }

    
/**
     * Увеличение позиции папки
     */
    
public function action_directory_up() {
        if(!
$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = "intval($_GET['directory_id'])))
            
a_error('Папка не найдена!');

        
# Меняем позиции
        
$this->db->query("UPDATE #__downloads_directories SET position = "$directory['position'] ." WHERE parent_id = '"$directory['parent_id'] ."' AND position = ". ($directory['position'] - 1));
        
$this->db->query("UPDATE #__downloads_directories SET position = ". ($directory['position'] - 1) ." WHERE directory_id = "intval($_GET['directory_id']));
    
        
header("Location: "a_url('downloads/admin''directory_id='$directory['parent_id'], TRUE));
        exit;
    }

    
/**
     * Уменьшение позиции папки
     */
    
public function action_directory_down() {
        if(!
$directory $this->db->get_row("SELECT * FROM #__downloads_directories WHERE directory_id = "intval($_GET['directory_id'])))
            
a_error('Папка не найдена!');

        
# Меняем позиции
        
$this->db->query("UPDATE #__downloads_directories SET position = "$directory['position'] ." WHERE parent_id = '"$directory['parent_id'] ."' AND position = ". ($directory['position'] + 1));
        
$this->db->query("UPDATE #__downloads_directories SET position = ". ($directory['position'] + 1) ." WHERE directory_id = "intval($_GET['directory_id']));
    
        
header("Location: "a_url('downloads/admin''directory_id='$directory['parent_id'], TRUE));
        exit;
    }

    
/**
     * Получение списка файлов для загрузки файлов по фтп
     */
    
public function action_ftp_upload_get_directories() {
        
$directories = array();
        
$directory = (!empty($_GET['directory']) ? $_GET['directory'].'/' '');
        
$directory_for_scan ROOT.DOWNLOADS_DIRECTORY.$this->ftp_directory.'/';
        
$dir opendir($directory_for_scan.$directory);
        while (
$directory1 readdir($dir)) {
            if (
$directory1 == '.' || $directory1 == '..') continue;
            if (
is_dir($directory_for_scan.$directory.$directory1)) {
                
$directories[$directory.$directory1] = $directory1;
            }
        }

        
header('Content-Type: text/javascript; charset=utf-8');
         echo 
json_encode($directories);
    }

    
/**
     * Копирование фтп файлов в ЗЦ
     *
     * @access private
     */
    
private function _ftp_upload_copy_files($directory_id$ftp_directory$translite TRUE) {
        
# Получаем путь к папке
        
$directory_path downloads::get_path($directory_id$this->db);
        
$directory_realpath downloads::get_realpath($directory_path) .'/'$directory_id;

        
# Сканируем фтп папку
        
$ftp_directory_full ROOT DOWNLOADS_DIRECTORY $this->ftp_directory $ftp_directory;
        
$dir opendir($ftp_directory_full);
        while(
$f readdir($dir)) {
            if(
$f == '.' || $f == '..') {
                continue;
            }

            
# Если это папка
            
if(is_dir($ftp_directory_full .'/'$f)) {
                  
# Создаем новую папку в ЗЦ
                  
$this->db->query("INSERT INTO #__downloads_directories SET
                       name = '"
a_safe(main::translite($f)) ."',
                       parent_id = '"
$directory_id ."'
                  "
);

                  
$new_directory_id $this->db->insert_id();

                   
# Создаем папку в файловой системе
                
mkdir(ROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_directory_id);
                 
chmod(ROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_directory_id0777);

                 
# Запускаем сканер для новой папки
                 
$this->_ftp_upload_copy_files($new_directory_id$ftp_directory .'/'$f$translite);
            }

            
# Если это файл
            
if(is_file($ftp_directory_full .'/'$f)) {
                
# Создаем пустую строку в базе для файла (чтобы получить его ID)
                
$this->db->query("INSERT INTO #__downloads_files SET file_id = 'NULL'");
                
$new_file_id $this->db->insert_id();

                
# Создаем папку для файла
                
mkdir(ROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_file_id);
                
chmod(ROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_file_id0777);

                
# Копируем файл в новую папку
                
copy($ftp_directory_full .'/'$fROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_file_id .'/'$f);

                
# Получаем размер файла
                
$file['filesize'] = filesize(ROOT DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_file_id .'/'$f) OR a_error('Ошибка в определении размера файла, возможно, он не был загружен!');
                
# Получаем расширение файла
                
$file['file_ext'] = array_pop(explode('.'$f));
                
# Определяем имя файла
                
$file['name'] = str_replace('.'$file['file_ext'], ''$f);
                if(
$translite) {
                    
$file['name'] = main::translite($file['name']);
                }
                
$file['directory_id'] = $directory_id;
                
$file['real_name'] = $f;
                
$file['path_to_file'] = DOWNLOADS_DIRECTORY $directory_realpath .'/'$new_file_id;
                
$file['status'] = 'active';

                
# Выполняем действия над определенными типами файлов
                
$file downloads::filetype_actions($file);

                
# Изменяем файл в базе
                
downloads::update_file($this->db$new_file_id$file);
                
$file '';
            }
        }
    }
}
?>
Онлайн: 0
Реклама