Вход Регистрация
Файл: mc-2.6/modules/modules/controllers/modules_admin.php
Строк: 150
<?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 Modules_Admin_Controller extends Controller {
    
/**
    * Уровень пользовательского доступа
    */
    
public $access_level 10;
    
/**
    * Тема
    */
    
public $template_theme 'admin';

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

    
/**
    * Список модулей
    */
    
public function action_list_modules() {
        
$modules modules::get_modules();
    
        
$this->tpl->assign(array(
            
'modules' => $modules
        
));
    
        
$this->tpl->display('list_modules');
    }

    
/**
    * Загрузка нового модуля
    */
    
public function action_upload_module() {
        if(empty(
$this->config['ftp']['server']))
            
a_notice('Не настроены фтп данные системы, перейдите по ссылке "Продолжить" для настройки.'a_url('main/admin/ftp_config'));

        if(isset(
$_POST['submit'])) {
            
main::is_demo();
            if(empty(
$_FILES['module']['tmp_name'])) {
                
$this->error .= 'Укажите zip файл модуля!<br />';
            }

            if(!
$this->error) {
                
# Подключаем библиотеки для работы с архивами
                
a_import('libraries/pclzip.lib');

                
$archive = new PclZip($_FILES['module']['tmp_name']);
                
$module_ini $archive->extract(PCLZIP_OPT_BY_NAME'module.ini'PCLZIP_OPT_EXTRACT_AS_STRING);
                
$ini_string $module_ini[0]['content'];
                if(empty(
$ini_string))
                    
a_error("Не найден файл <b>module.ini</b> загружаемого модуля!");

                
$module parse_ini_string($ini_string);
                
$module['name'] = trim($module['name']);
                if(empty(
$module['name']))
                    
a_error("Не указано имя модуля в файле module.ini!");

                if(
is_dir(ROOT .'modules/'$module['name']))
                    
a_error("Папка с именем нового модуля уже существует, возможно, модуль быз загружен ранее!");

                if(!
preg_match("~^[0-9a-z_]*$~"$module['name']))
                    
a_error("Имя модуля имеет не правильный формат, оно должно состоять только из латинских букв в нижнем регистре, цифр и подчеркивания");

                
# Создаем папку модуля
                
$module_path ROOT .'modules/'$module['name'];
                
mkdir($module_path);

                
# Извлекаем содержимое архива в папку модуля
                
$result $archive->extract(PCLZIP_OPT_PATH$module_path);

                if(
$result[0]['status'] == 'ok')
                    
a_notice("Модуль успешно загружен, теперь перейдите в управление модулями и инсталлируйте его"a_url('modules/admin'));
                else
                    
a_notice("При извлечении архива произошла ошибка"a_url('modules/admin'));
            }
        }
        if(!isset(
$_POST['submit']) || $this->error) {
            
$this->tpl->assign(array(
                
'error' => $this->error
            
));
    
            
$this->tpl->display('upload_module');
        }
    }

    
/**
    * Активация / деактивация модуля
    */
    
public function action_activate() {
        
main::is_demo();
        if(empty(
$_GET['module']))
            
a_error("Укажите модуль!");

        if(!
$module_id $this->db->get_one("SELECT id FROM #__modules WHERE name = '"a_safe($_GET['module']) ."'"))
            
a_error("Модуль "$_GET['module'] ." не установлен!");

        
$status = @$_GET['status'] == 'on' 'on' 'off';

        
# Меняем статус модуля
        
$this->db->query("UPDATE #__modules SET status = '$status' WHERE id = '$module_id'");

        
header('Location: 'a_url('modules/admin'''TRUE));
    }

    
/**
    * Устанавка модуля
    */
    
public function action_install() {
        
main::is_demo();
        
$module_name trim($_GET['module']);

        if(empty(
$module_name))
            
a_error("Укажите модуль!");

        if(
$this->db->get_one("SELECT name FROM #__modules WHERE name = '"a_safe($module_name) ."'"))
            
a_error("Модуль "$module_name ." был установлен ранее!");

        if(!
file_exists(ROOT .'modules/'$module_name .'/module.ini'))
            
a_error("Не найден файл информации о модуле!");

        
# Получаем информацию о модуле
        
$module parse_ini_file(ROOT .'modules/'$module_name .'/module.ini');

        
# Добавляем модуль в таблицу модулей
        
$this->db->query("INSERT INTO #__modules SET
            `name` = '"
$module['name'] ."',
            `title` = '"
$module['title'] ."',
            `admin_link` = '"
$module['admin_link'] ."',
            `description` = '"
$module['description'] ."',
            `installed` = 1,
            `status` = 'off'
        "
);

        
# Если имеется инсталлятор, выполняем его
        
if(file_exists(ROOT .'modules/'$module_name .'/helpers/'$module_name .'_installer.php')) {
            
a_import('modules/'$module_name .'/helpers/'$module_name .'_installer');
            
$installer_class $module_name .'_installer';
            
call_user_func(array($installer_class'install'), $this->db);
        }

        
header('Location: 'a_url('modules/admin'''TRUE));
    }

    
/**
    * Деинсталляция модуля
    */
    
public function action_uninstall() {
        
main::is_demo();
        
$module_name trim($_GET['module']);

        if(empty(
$module_name))
            
a_error("Укажите модуль!");

        if(!
$this->db->get_one("SELECT name FROM #__modules WHERE name = '"a_safe($module_name) ."'"))
            
a_error("Модуль "$_GET['module'] ." не найден либо был  деинсталлирован ранее!");

        
# Удаляем модуль из таблицы модулей
        
$this->db->query("DELETE FROM #__modules WHERE name = '"a_safe($module_name) ."'");

        
# Удаляем строки модуля из конфига
        
$this->db->query("DELETE FROM #__config WHERE module = '"a_safe($module_name) ."'");

        
# Если имеется инсталлятор, выполняем деинсталляцию
        
if(file_exists(ROOT .'modules/'$module_name .'/helpers/'$module_name .'_installer.php')) {
            
a_import('modules/'$module_name .'/helpers/'$module_name .'_installer');
            
$installer_class $module_name .'_installer';
            
call_user_func(array($installer_class'uninstall'), $this->db);
        }

        
# Удаляем файлы модуля и папку модуля
        
main::delete_dir(ROOT .'modules/'$module_name);
        if(
is_dir(ROOT .'modules/'$module_name))
            
$message "Не удалось удалить папку модуля, если это необходимо, попробуйте удалить её вручную по фтп, папка: modules/$module_name";
        else 
$message "Модуль успешно удален!";

        
a_notice($messagea_url('modules/admin'));
    }
}
?>
Онлайн: 1
Реклама