Вход Регистрация
Файл: mc-2.6.3/modules/lib/controllers/lib_admin.php
Строк: 213
<?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
     */

defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа!</b>');

/**
 * Контроллер управления библиотекой
 */
class Lib_Admin_Controller extends Controller {
    
/**
     * Уровень пользовательского доступа
     */
    
public $access_level = 8;
    
/**
     * Тема
     */
    
public $template_theme = 'admin';

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

        
# Хелпер библиотеки
        
a_import('modules/lib/helpers/lib');
    }

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

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

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

        
# Определяем как загружать
        
switch($_GET['type']) {
            case 
'textes':
                
$type = 'textes';
                break;
            case 
'import':
                
$type = 'import';
                break;
            case 
'upload':
            default:
                
$type = 'upload';
                break;
        }

        if(isset(
$_POST['submit'])) {
            
main::is_demo();
            if(!
$this->error) {
                
# Определяем путь для загрузки
                
$directory_path = lib::get_path($directory_id, $this->db);
                
$realpath = lib::get_realpath($directory_path);
                
$path_to_file = ($realpath != '' ? $realpath . '/' :  '') . ($directory_id == 0 ? '' : $directory_id . '/');

                
$c = 0;
                for(
$i = 1; $i <= 10; $i++) {
                    if(!empty(
$_POST['name_'. $i])) {
                        
# Добавляем файл в базу
                        
$this->db->query("INSERT INTO #__lib_books SET
                            directory_id = '
$directory_id',
                            name = '"
. a_safe($_POST['name_'. $i]) ."',
                            path_to_file = '/"
. $path_to_file ."',
                            time = UNIX_TIMESTAMP()
                        "
);

                        
$book_id = $this->db->insert_id();

                        switch(
$type) {
                            
# Загрузка из текста
                            
case 'textes':
                                if(!empty(
$_POST['text_'. $i])) {
                                    
file_put_contents(ROOT .'files/lib/'. $path_to_file . $book_id .'.txt', $_POST['text_'. $i]);
                                    
$c++;
                                }
                                break;
                            
# Импорт
                            
case 'import':
                                if(!empty(
$_POST['link_'. $i])) {
                                    
copy($_POST['link_'. $i], ROOT .'files/lib/'. $path_to_file . $book_id .'.txt');
                                    
$c++;
                                }
                                break;
                            
# Upload
                            
case 'upload':
                            default:
                                if(!empty(
$_FILES['file_'. $i]['tmp_name'])) {
                                    
copy($_FILES['file_'. $i]['tmp_name'], ROOT .'files/lib/'. $path_to_file . $book_id .'.txt');
                                    
$c++;
                                }
                                break;
                        }
                       }
                }

                
a_notice('Загружено книг: '. $c, a_url('lib/admin/list_books', 'directory_id='. $directory_id));
            }
        }
        if(!isset(
$_POST['submit']) OR $this->error) {
            
$this->tpl->assign(array(
                
'error' => $this->error,
                
'type' => $type
            
));

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

    
/**
     * Список книг и папок
     */
    
public function action_list_books() {
        
$this->per_page = 20;

          if(empty(
$_GET['directory_id']) OR !is_numeric($_GET['directory_id'])) $directory_id = 0;
          else 
$directory_id = intval($_GET['directory_id']);

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

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

          
# Получаем список папок и файлов
        
$sql  = "SELECT SQL_CALC_FOUND_ROWS
                    directory_id AS book_id,
                    name,
                    (SELECT 'directory') AS type,
                    (SELECT 0) AS description,
                    position
                    FROM #__lib_directories WHERE parent_id = '
$directory_id' ". PHP_EOL;
        
$sql .= "UNION ALL ". PHP_EOL;
        
$sql .= "SELECT
                    book_id,
                    name,
                    (SELECT 'book') AS type,
                    description,
                    (SELECT 0) AS position
                    FROM #__lib_books WHERE directory_id = '
$directory_id' ". PHP_EOL;

        
$sql .= "ORDER BY type DESC, position ASC, book_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 #__lib_directories WHERE parent_id = '$directory_id'");
         
$max_p = $this->db->get_one("SELECT MAX(position) FROM #__lib_directories WHERE parent_id = '$directory_id'");

        
$books = array();
        while(
$book = $this->db->fetch_array($result)) {
            if(
$book['type'] == 'directory') {
                if(
$book['position'] != $min_p) $book['up'] = '<a href="'. a_url('lib/admin/directory_up', 'directory_id='. $book['book_id']) .'">up</a>';
                else 
$book['up'] = 'up';

                if(
$book['position'] != $max_p) $book['down'] = '<a href="'. a_url('lib/admin/directory_down', 'directory_id='. $book['book_id']) .'">down</a>';
                else 
$book['down'] = 'down';
            }
            else {
                
$book['up'] = '-';
                
$book['down'] = '-';
            }

            
$books[] = $book;
        }

        
# Пагинация
        
$pg_conf['base_url'] = a_url('lib/admin/list_books', '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(
            
'books' => $books,
            
'total' => $total,
            
'namepath' => $namepath,
            
'pagination' => $pg->create_links(),
            
'directory' => $directory
        
));

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

    
/**
     * Создание / редактирование папки
     */
    
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 #__lib_directories WHERE directory_id = '$directory_id'")) {
                  
a_error('Папка не найдена!');
              }
              
$parent_directory = $this->db->get_row("SELECT * FROM #__lib_directories WHERE directory_id = '". $directory['parent_id'] ."'");
              
$action = 'edit';
          }
          else {
              if(
$_GET['parent_id'] != '' && !$parent_directory = $this->db->get_row("SELECT * FROM #__lib_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) {
                   
# Создаем нувую папку
                   
if($action == 'add') {
                       
# Получаем позицию папки
                       
$position = $this->db->get_one("SELECT MAX(position) FROM #__lib_directories WHERE parent_id = '". $parent_directory['directory_id'] ."'") + 1;

                       
$this->db->query("INSERT INTO #__lib_directories SET
                           name = '"
. a_safe($_POST['name']) ."',
                           parent_id = '"
. @$parent_directory['directory_id'] ."',
                           position = '
$position'
                       "
);

                       
$directory_id = $this->db->insert_id();

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

                    
mkdir(ROOT .'files/lib/'. $realpath .'/'. $directory_id);
                     
chmod(ROOT .'files/lib/'. $realpath .'/'. $directory_id, 0777);

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

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

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

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

        
header("Location: ". a_url('lib/admin', 'directory_id='. $directory['parent_id'], TRUE));
        exit;
    }

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

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

        
header("Location: ". a_url('lib/admin', 'directory_id='. $directory['parent_id'], TRUE));
        exit;
    }

    
/**
     * Удаление книги
     */
    
public function action_book_delete() {
        
main::is_demo();
        if (!
$book = $this->db->get_row("SELECT * FROM #__lib_books WHERE book_id = '".intval($_GET['book_id'])."'"))
            
a_error("Книга не найдена!");

        
# Удаляем книгу из ФС
        
unlink(ROOT.'files/lib'.$book['path_to_file'].$book['book_id'].'.txt');

        
# Удаляем книгу из БД
        
$this->db->query("DELETE FROM #__lib_books WHERE book_id = '".$book['book_id']."'");

        
a_notice('Книга удалена!', a_url('lib/admin/list_books', 'directory_id='.$book['directory_id']));
    }

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

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

        if (
$this->db->get_one("SELECT directory_id FROM #__lib_directories WHERE parent_id = '$directory_id'") OR
            
$this->db->get_one("SELECT book_id FROM #__lib_books WHERE directory_id = '$directory_id'")) {
                
a_error('Папку не возможно удалить, так как она не пуста!');
        }

        
# Удаление из ФС
        
$directory_path = lib::get_path($directory_id, $this->db);
        
$realpath = lib::get_realpath($directory_path);
        
rmdir(ROOT .'files/lib/'. $realpath .'/'. $directory_id);

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

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

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

    
/**
     * Удаление всех файлов в папке
     */
    
public function action_directory_clear() {
        
main::is_demo();
        
$directory_id = empty($_GET['directory_id']) ? 0 : intval($_GET['directory_id']);

        
# Получаем информацию о папке
        
if($directory_id !== 0 && !$this->db->get_one("SELECT directory_id FROM #__lib_directories WHERE directory_id = '". intval($directory_id) ."'")) {
            
a_error('Папка не найдена!');
        }

        
# Удаляем файлы из ФС
        
$result = $this->db->query("SELECT * FROM #__lib_books WHERE directory_id = '$directory_id'");
        while(
$book = $this->db->fetch_array($result)) {
            
# Удаляем книгу из ФС
            
unlink(ROOT .'files/lib'. $book['path_to_file'] . $book['book_id'] .'.txt');
            
# Удаляем книгу из БД
            
$this->db->query("DELETE FROM #__lib_books WHERE book_id = '". $book['book_id'] ."'");
        }

        
a_notice('Папка успешно очищена', a_url('lib/admin/list_books', 'directory_id='. $directory_id));
    }
}
?>
Онлайн: 3
Реклама