ave-cms/class/class.modules.php

604 lines
17 KiB
PHP
Raw Normal View History

2017-06-24 00:58:56 +03:00
<?php
/**
2018-03-12 23:35:55 +03:00
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
2017-06-24 00:58:56 +03:00
*/
2018-03-12 23:35:55 +03:00
class AVE_Module
{
2019-10-16 09:50:19 +03:00
public $_modules = [];
2017-06-24 00:58:56 +03:00
2019-11-04 15:19:19 +03:00
private static $instance = null;
2018-03-26 10:33:20 +03:00
2019-11-04 15:19:19 +03:00
2020-10-14 11:29:33 +03:00
public function __construct ()
2018-03-12 23:35:55 +03:00
{
$this->_modules = $this->getModules();
}
2017-06-24 00:58:56 +03:00
2018-03-26 10:33:20 +03:00
2019-11-04 15:19:19 +03:00
public static function init ()
{
if (is_null(self::$instance))
2020-10-14 11:29:33 +03:00
{
2019-11-04 15:19:19 +03:00
self::$instance = new AVE_Module;
2020-10-14 11:29:33 +03:00
}
2019-11-04 15:19:19 +03:00
return self::$instance;
}
2018-03-12 23:35:55 +03:00
/**
* Метод, который обрабатывает все module.php и записывает как свойство класса списки модулей
*/
2020-10-14 11:29:33 +03:00
public function getModules ()
2017-06-24 00:58:56 +03:00
{
2019-10-16 09:50:19 +03:00
$modules = [];
2018-03-12 23:35:55 +03:00
// Получаем из БД информацию о всех установленных модулях
$modules_db = $this->moduleListGet();
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Определяем директорию, где хранятся модули
$d = dir(BASE_DIR . '/modules');
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Циклически обрабатываем директории
while (false !== ($entry = $d->read()))
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
if (substr($entry, 0, 1) == '.')
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
continue;
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
if (! is_dir(BASE_DIR . '/modules/' . $entry))
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
continue;
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
$AVE_Template = new AVE_Template(BASE_DIR . '/admin/templates');
$_no_lang_file = false;
// Языковой файл
$lang_file = BASE_DIR . '/modules/'.$entry.'/lang/' . $_SESSION['user_language'] . '.txt';
2020-10-14 11:29:33 +03:00
// Отдаем SMARTY переменные
2018-03-12 23:35:55 +03:00
if (file_exists($lang_file))
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
$AVE_Template->config_load($lang_file, 'name');
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
else
2020-10-14 11:29:33 +03:00
{
$_no_lang_file = true;
}
2018-03-12 23:35:55 +03:00
$module_dir = $d->path . '/' . $entry;
if (! is_dir($module_dir))
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
continue;
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
2020-10-14 11:29:33 +03:00
$module = [];
2018-03-12 23:35:55 +03:00
2018-04-19 19:11:58 +03:00
// Если не удалось подключить основной файл модуля module.php - Фиксируем ошибку
2018-03-26 10:33:20 +03:00
if (! (is_file($module_dir . '/info.php') && @include_once($module_dir . '/info.php')))
2018-03-12 23:35:55 +03:00
{
$modules['errors'][] = $entry;
continue;
}
$module['ModuleName'] = !$_no_lang_file
? $AVE_Template->get_config_vars('MODULE_NAME')
: 'No name';
$module['ModuleDescription'] = !$_no_lang_file
? $AVE_Template->get_config_vars('MODULE_DESCRIPTION')
: 'No description';
// Дополняем массив с данными модуля
$module['permission'] = check_permission('mod_'. $module['ModuleSysName']);
// Установлен/Не установлен по системному имени
$row = isset($modules_db[$module['ModuleSysName']])
? $modules_db[$module['ModuleSysName']]
: false;
// установленные модули
if ($row)
{
$module['id'] = $row->Id;
$module['need_update'] = ($row->ModuleVersion != $module['ModuleVersion']);
$module['template'] = ($row->ModuleTemplate ? $row->ModuleTemplate : 0);
2018-04-19 19:11:58 +03:00
$module['ModuleAveTag'] = $row->ModuleAveTag;
$module['ModulePHPTag'] = $row->ModulePHPTag;
$module['ModuleStatus'] = $row->ModuleStatus;
2018-03-12 23:35:55 +03:00
$module['ModuleVersion'] = $row->ModuleVersion;
}
// неустановленные модули
else
{
$module['id'] = $module['ModuleSysName'];
$module['template'] = (! empty($module['ModuleTemplate']) ? $module['ModuleTemplate'] : '');
2018-04-19 19:11:58 +03:00
$module['ModuleStatus'] = false;
2018-03-12 23:35:55 +03:00
}
// записываем в массив
$modules[$module['ModuleSysName']] = $module;
unset ($module);
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
// Закрываем папку
$d->Close();
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
return $modules;
2017-06-24 00:58:56 +03:00
}
2018-03-26 10:33:20 +03:00
2018-03-12 23:35:55 +03:00
/**
2020-10-14 11:29:33 +03:00
* Метод, предназначенный для вывода модулей
2018-03-12 23:35:55 +03:00
*
*/
2020-10-14 11:29:33 +03:00
public function moduleList ()
2018-03-12 23:35:55 +03:00
{
global $AVE_DB, $AVE_Template;
2019-11-04 15:19:19 +03:00
$assign = []; // Массив для передачи в Smarty
$errors = []; // Массив с ошибками
2018-03-12 23:35:55 +03:00
// Получаем список всех шаблонов
2019-11-04 15:19:19 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
SELECT
Id,
template_title
FROM
" . PREFIX . "_templates
2019-11-04 15:19:19 +03:00
";
2017-06-24 00:58:56 +03:00
2019-11-04 15:19:19 +03:00
$query = $AVE_DB->Query($sql);
while ($row = $query->FetchRow())
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
$assign['all_templates'][$row->Id] = htmlspecialchars($row->template_title, ENT_QUOTES);
2020-10-14 11:29:33 +03:00
}
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Заголовок: Автор модуля
$author_title = $AVE_Template->get_config_vars('MODULES_AUTHOR');
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Получаем список всех модулей
$modules = $this->_modules;
2017-06-24 00:58:56 +03:00
2019-11-04 15:19:19 +03:00
foreach ($modules AS $module)
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
$module['info'] = $module['ModuleDescription'] . (! $module['ModuleAutor']
? '<br /><br />'
: "<br /><br /><strong>$author_title</strong><br />" . $module['ModuleAutor'] . "<br />") . '<br /><em>' . $module['ModuleCopyright'] . '</em>';
// установленные модули
2018-04-19 19:11:58 +03:00
if ($module['ModuleStatus'] !== false)
2020-10-14 11:29:33 +03:00
{
2018-03-12 23:35:55 +03:00
$installed_modules[$module['ModuleSysName']] = $module;
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
// неустановленные модули
else
2020-10-14 11:29:33 +03:00
{
$not_installed_modules[$module['ModuleSysName']] = $module;
}
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
! empty($installed_modules)
? ksort($installed_modules)
2020-11-07 11:39:21 +03:00
: $installed_modules = [];
2018-03-12 23:35:55 +03:00
! empty($not_installed_modules)
? ksort($not_installed_modules)
2020-11-07 11:39:21 +03:00
: $not_installed_modules = [];
2017-06-24 00:58:56 +03:00
2020-10-14 11:29:33 +03:00
$assign['installed_modules'] = msort((array)$installed_modules,'ModuleName');
$assign['not_installed_modules'] = msort((array)$not_installed_modules,'ModuleName');
2018-03-12 23:35:55 +03:00
// Массив с ошибками
if (! empty($modules['errors']))
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
foreach ($modules['errors'] as $error)
{
$assign['errors'][] = $AVE_Template->get_config_vars('MODULES_ERROR') . $error;
}
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
// Передаем данные в шаблон и отображаем страницу со списком модулей
$AVE_Template->assign($assign);
$AVE_Template->assign('content', $AVE_Template->fetch('modules/modules.tpl'));
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
/**
* Метод получения списка модулей
*
* @param int $status статус возвращаемых модулей
* 1 - активные модули
* 0 - неактивные модули
* если не указано возвращает модули без учета статуса
* @return array
*/
2020-10-14 11:29:33 +03:00
public function moduleListGet($status = null)
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
global $AVE_DB;
$modules = array();
2018-03-26 10:33:20 +03:00
if (! empty($this->_modules))
{
foreach ($this->_modules AS $k => $v)
{
2018-04-19 19:11:58 +03:00
if ($status && $v['ModuleStatus'] != $status)
2020-10-14 11:29:33 +03:00
{
2018-03-26 10:33:20 +03:00
continue;
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
2018-03-26 10:33:20 +03:00
$modules[$k] = $v;
}
}
else
{
// Условие, определяющее статус документа для запроса к БД
$where_status = ($status !== null)
? "WHERE ModuleStatus = '" . (int)$status . "'"
: '';
// Выполняем запрос к БД и получаем список документов,
// согласно статусу, либо все модули, если статус не указан
2018-04-19 19:11:58 +03:00
$sql = "
2018-03-26 10:33:20 +03:00
SELECT
2018-05-16 23:14:07 +03:00
# MODULES
2018-03-26 10:33:20 +03:00
*
FROM
" . PREFIX . "_module
" . $where_status . "
ORDER BY
ModuleName ASC
2018-04-19 19:11:58 +03:00
";
2018-03-26 10:33:20 +03:00
2018-05-16 23:14:07 +03:00
$query = $AVE_DB->Query($sql, -1, 'modules', true, '.modules');
2018-04-19 19:11:58 +03:00
while ($row = $query->FetchRow())
2020-10-14 11:29:33 +03:00
{
2018-03-26 10:33:20 +03:00
$modules[$row->ModuleSysName] = $row;
2020-10-14 11:29:33 +03:00
}
2018-03-26 10:33:20 +03:00
}
2018-03-12 23:35:55 +03:00
// Возвращаем список модулей
return $modules;
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
/**
* Метод, предназначенный для обновления в БД информации о шаблонах модулей
*
*/
2020-10-14 11:29:33 +03:00
public function moduleOptionsSave ()
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
global $AVE_DB;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Циклически обрабатываем массив с информацией о шаблонах модулей
foreach ($_POST['Template'] as $id => $template_id)
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
// Обновление информации о шаблоне модуля
$AVE_DB->Query("
UPDATE
" . PREFIX . "_module
SET
ModuleTemplate = '" . (int)$template_id . "'
WHERE
Id = '" . (int)$id . "'
");
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
2019-11-04 15:19:19 +03:00
$this->clearModulesCache ();
2018-04-19 19:11:58 +03:00
2020-10-14 11:29:33 +03:00
// Выполняем обновление страницы со списком модулей
2018-03-12 23:35:55 +03:00
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
2017-06-24 00:58:56 +03:00
}
2018-03-26 10:33:20 +03:00
2018-03-12 23:35:55 +03:00
/**
2020-10-14 11:29:33 +03:00
* Метод, предназначенный для установки или переустановки модуля
2018-03-12 23:35:55 +03:00
*
*/
2020-10-14 11:29:33 +03:00
public function moduleInstall ()
2018-03-12 23:35:55 +03:00
{
global $AVE_DB, $AVE_Template;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Получаем данные модуля
$modules = $this->_modules;
2017-06-24 00:58:56 +03:00
2020-10-14 11:29:33 +03:00
// Выбираем нужный нам модуль
2018-04-19 19:11:58 +03:00
$module = $modules[MODULE_PATH];
2018-03-12 23:35:55 +03:00
// Удаляем информацию о модуле в таблице module
2020-10-14 11:29:33 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
DELETE
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
2020-10-14 11:29:33 +03:00
";
$AVE_DB->Query($sql);
2018-03-12 23:35:55 +03:00
// Определяем, имеет ли модуль возможность настройки в Панели управления
2020-10-14 11:29:33 +03:00
$module['ModuleAdminEdit'] = (! empty($module['ModuleAdminEdit']))
2018-04-19 19:11:58 +03:00
? $module['ModuleAdminEdit']
2018-03-12 23:35:55 +03:00
: 0;
// Определяем, имеет ли модуль возможность смены шаблона
2018-04-19 19:11:58 +03:00
$module['ModuleTemplate'] = ($module['ModuleTemplate'])
? $module['ModuleTemplate']
2018-03-12 23:35:55 +03:00
: 0;
// Добавляем информацию о модуле в таблицу module
2020-10-14 11:29:33 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
INSERT INTO
" . PREFIX . "_module
SET
2018-04-19 19:11:58 +03:00
ModuleName = '" . $module['ModuleName'] . "',
2018-03-12 23:35:55 +03:00
ModuleStatus = '1',
2018-04-19 19:11:58 +03:00
ModuleAveTag = '" . $module['ModuleAveTag'] . "',
ModulePHPTag = '" . $module['ModulePHPTag'] . "',
ModuleFunction = '" . $module['ModuleFunction'] . "',
ModuleIsFunction = '" . $module['ModuleIsFunction'] . "',
2018-03-12 23:35:55 +03:00
ModuleSysName = '" . MODULE_PATH . "',
2018-04-19 19:11:58 +03:00
ModuleVersion = '" . $module['ModuleVersion'] . "',
ModuleTemplate = '" . $module['ModuleTemplate'] . "',
ModuleAdminEdit = '" . $module['ModuleAdminEdit'] . "'
2020-10-14 11:29:33 +03:00
";
$AVE_DB->Query($sql);
2018-03-12 23:35:55 +03:00
// Подключаем файл с запросами к БД для данного модуля
2020-10-14 11:29:33 +03:00
$module_sql_deinstall = [];
$module_sql_install = [];
2018-03-12 23:35:55 +03:00
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
if (is_file($sql_file) && @include($sql_file))
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
// Выполняем запросы удаления таблиц модуля
// из массива $module_sql_deinstall файла sql.php
2020-10-14 11:29:33 +03:00
foreach ($module_sql_deinstall AS $sql)
2018-03-12 23:35:55 +03:00
{
2018-04-19 19:11:58 +03:00
$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
2018-03-12 23:35:55 +03:00
}
// Выполняем запросы создания таблиц и данных модуля
// из массива $module_sql_install файла sql.php
2020-10-14 11:29:33 +03:00
foreach ($module_sql_install AS $sql)
2018-03-12 23:35:55 +03:00
{
2018-04-19 19:11:58 +03:00
$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
2018-03-12 23:35:55 +03:00
}
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
// Сохраняем системное сообщение в журнал
2020-10-14 11:29:33 +03:00
($_REQUEST['action'] == 'reinstall')
2018-04-19 19:11:58 +03:00
? reportLog($AVE_Template->get_config_vars('MODULES_ACTION_REINSTALL') . ' (' . $module['ModuleName'] . ')')
: reportLog($AVE_Template->get_config_vars('MODULES_ACTION_INSTALL') . ' (' . $module['ModuleName'] . ')');
$this->clearModulesCache();
2018-03-12 23:35:55 +03:00
// Выполняем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
2018-03-26 10:33:20 +03:00
2018-03-12 23:35:55 +03:00
/**
* Метод, предназначенный для обновления модуля при увеличении номера версии модуля
*
*/
2020-10-14 11:29:33 +03:00
public function moduleUpdate ()
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
global $AVE_DB, $AVE_Template;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Подключаем файл с запросами к БД для данного модуля
2019-11-04 15:19:19 +03:00
$module_sql_update = [];
$module = [];
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
2018-04-19 19:11:58 +03:00
$mod_file = BASE_DIR . '/modules/' . MODULE_PATH . '/info.php';
2018-03-12 23:35:55 +03:00
if (file_exists($mod_file) && file_exists($sql_file))
{
2018-04-19 19:11:58 +03:00
include ($mod_file);
include ($sql_file);
2018-03-12 23:35:55 +03:00
// Выполняем запросы обновления модуля
// из массива $module_sql_update файла sql.php
2020-10-14 11:29:33 +03:00
foreach ($module_sql_update AS $sql)
{
2018-04-19 19:11:58 +03:00
$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
}
// Обновляем модуль, если в нем не применяется (отсутствует) файл sql.php
elseif (file_exists($mod_file) && file_exists($sql_file) === false)
2017-06-24 00:58:56 +03:00
{
2019-11-04 15:19:19 +03:00
include ($mod_file);
if (isset ($module) && ! empty($module))
{
$sql = "
UPDATE
" . PREFIX . "_module
SET
ModuleAveTag = '" . $module['ModuleAveTag'] . "',
ModulePHPTag = '" . $module['ModulePHPTag'] . "',
ModuleFunction = '" . $module['ModuleFunction'] . "',
ModuleIsFunction = '" . $module['ModuleIsFunction'] . "',
ModuleSysName = '" . MODULE_PATH . "',
ModuleVersion = '" . $module['ModuleVersion'] . "',
ModuleTemplate = '" . $module['ModuleTemplate'] . "',
ModuleAdminEdit = '" . $module['ModuleAdminEdit'] . "',
ModuleStatus = '1'
WHERE
ModuleSysName = '" . MODULE_PATH . "'
";
$AVE_DB->Query($sql);
}
2018-03-12 23:35:55 +03:00
2017-06-24 00:58:56 +03:00
}
2018-03-12 23:35:55 +03:00
// Сохраняем системное сообщение в журнал
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_UPDATE') . ' (' . MODULE_PATH . ')');
2018-04-19 19:11:58 +03:00
$this->clearModulesCache();
2020-10-14 11:29:33 +03:00
// Выполняем обновление страницы со списком модулей
2018-03-12 23:35:55 +03:00
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
2017-06-24 00:58:56 +03:00
}
2018-03-26 10:33:20 +03:00
2018-03-12 23:35:55 +03:00
/**
2020-10-14 11:29:33 +03:00
* Метод, предназначенный для удаление модуля
2018-03-12 23:35:55 +03:00
*
*/
2020-10-14 11:29:33 +03:00
public function moduleDelete ()
2018-03-12 23:35:55 +03:00
{
global $AVE_DB, $AVE_Template;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Подключаем файл с запросами к БД для данного модуля
2020-10-14 11:29:33 +03:00
$module_sql_deinstall = [];
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
$sql_file = BASE_DIR . '/modules/' . MODULE_PATH . '/sql.php';
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
if (is_file($sql_file) && @include($sql_file))
{
// Выполняем запросы удаления таблиц модуля
// из массива $module_sql_deinstall файла sql.php
foreach ($module_sql_deinstall as $sql)
{
2018-04-19 19:11:58 +03:00
$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
2018-03-12 23:35:55 +03:00
}
}
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
// Удаляем информацию о модуле в таблице module
2020-10-14 11:29:33 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
DELETE
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
2020-10-14 11:29:33 +03:00
";
$AVE_DB->Query($sql);
2017-06-24 00:58:56 +03:00
2018-04-19 19:11:58 +03:00
$this->clearModulesCache();
2018-03-12 23:35:55 +03:00
// Сохраняем системное сообщение в журнал
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_DELETE') .' (' . MODULE_PATH . ')');
2017-06-24 00:58:56 +03:00
2020-10-14 11:29:33 +03:00
// Выполняем обновление страницы со списком модулей
2018-03-12 23:35:55 +03:00
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
}
2017-06-24 00:58:56 +03:00
2018-03-26 10:33:20 +03:00
2018-03-12 23:35:55 +03:00
/**
* Метод, предназначенный для отключения/включение модуля в Панели управления
*
*/
2020-10-14 11:29:33 +03:00
public function moduleStatusChange ()
2017-06-24 00:58:56 +03:00
{
2018-03-12 23:35:55 +03:00
global $AVE_DB, $AVE_Template;
2020-10-14 11:29:33 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
SELECT
ModuleName,
ModuleStatus
FROM
" . PREFIX . "_module
WHERE
ModuleSysName = '" . MODULE_PATH . "'
2020-10-14 11:29:33 +03:00
";
$status = $AVE_DB->Query($sql)->FetchRow();
2018-03-12 23:35:55 +03:00
2020-10-14 11:29:33 +03:00
$ModuleStatus = ($status->ModuleStatus == '0' || $status->ModuleStatus == NULL)
? '1'
: '0';
2018-03-12 23:35:55 +03:00
// Выполняем запрос к БД на смену статуса модуля
2020-10-14 11:29:33 +03:00
$sql = "
2018-03-12 23:35:55 +03:00
UPDATE
" . PREFIX . "_module
SET
2020-10-14 11:29:33 +03:00
ModuleStatus = '" . $ModuleStatus . "'
2018-03-12 23:35:55 +03:00
WHERE
ModuleSysName = '" . MODULE_PATH . "'
2020-10-14 11:29:33 +03:00
";
$AVE_DB->Query($sql);
2018-03-12 23:35:55 +03:00
2019-11-04 15:19:19 +03:00
$this->clearModulesCache ();
2018-04-19 19:11:58 +03:00
2018-03-12 23:35:55 +03:00
// Сохраняем системное сообщение в журнал
2020-10-14 11:29:33 +03:00
reportLog ((($ModuleStatus == '0')
2018-03-12 23:35:55 +03:00
? $AVE_Template->get_config_vars('MODULES_ACTION_OFFLINE')
: $AVE_Template->get_config_vars('MODULES_ACTION_ONLINE')) . ' (' . $status->ModuleName . ')');
// Выполняем обновление страницы со списком модулей
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
2017-06-24 00:58:56 +03:00
}
2020-10-14 11:29:33 +03:00
public function moduleRemove ($dir)
2018-03-12 23:35:55 +03:00
{
2020-10-14 11:29:33 +03:00
global $AVE_Template;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
$directory = BASE_DIR . '/modules/' . $dir;
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
$files = glob($directory . '*', GLOB_MARK);
2017-06-24 00:58:56 +03:00
2018-03-12 23:35:55 +03:00
foreach ($files as $file)
{
2020-10-14 11:29:33 +03:00
if (substr($file, -1) == '/')
{
2019-11-04 15:19:19 +03:00
$this->moduleRemove($file);
2020-10-14 11:29:33 +03:00
}
2018-03-12 23:35:55 +03:00
else
2020-10-14 11:29:33 +03:00
{
unlink($file);
}
2018-03-12 23:35:55 +03:00
}
rrmdir ($directory);
2017-06-24 00:58:56 +03:00
2018-04-19 19:11:58 +03:00
$this->clearModulesCache();
2018-03-12 23:35:55 +03:00
// Сохраняем системное сообщение в журнал
reportLog ($AVE_Template->get_config_vars('MODULES_ACTION_REMOVE') . ' (' . $dir . ')');
2020-10-14 11:29:33 +03:00
// Выполняем обновление страницы со списком модулей
2018-03-12 23:35:55 +03:00
header('Location:index.php?do=modules&cp=' . SESSION);
exit;
}
2018-04-19 19:11:58 +03:00
/**
* Функция очищает кеш системных настроек
*
*/
2020-10-14 11:29:33 +03:00
public function clearModulesCache()
2018-04-19 19:11:58 +03:00
{
$cache_dir = BASE_DIR . '/tmp/cache/sql/modules/';
return rrmdir($cache_dir);
}
2018-03-12 23:35:55 +03:00
}
2017-06-24 00:58:56 +03:00
?>