Вход Регистрация
Файл: mc-master/modules/downloads/controllers/downloads_admin.php
Строк: 500
<?php

/**
 * MobileCMS
 *
 * Open source content management system for mobile sites
 *
 * @author MobileCMS Team <support@mobilecms.pro>
 * @copyright Copyright (c) 2011-2019, MobileCMS Team
 * @link https://mobilecms.pro Official site
 * @license MIT 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
Реклама