Files
ave-cms-alt/admin/modules.php
T

236 lines
6.9 KiB
PHP

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
if (! defined('ACP'))
{
header('Location:index.php');
exit;
}
$AVE_Template->config_load(BASE_DIR . '/admin/lang/' . $_SESSION['admin_language'] . '/modules.txt', 'modules');
if (! empty($_REQUEST['moduleaction']))
{
if (! check_permission('mod_' . $_REQUEST['mod']))
{
echo $AVE_Template->get_config_vars('MAIN_NO_PERM_MODULES');
exit;
}
}
if (! empty($_REQUEST['module']))
{
$module_path = preg_replace('/[^\w]/', '', $_REQUEST['module']);
if (! empty($module_path))
define('MODULE_PATH', $module_path);
}
switch($_REQUEST['action'])
{
case '':
if (check_permission_acp('modules_view'))
{
$AVE_Module->moduleList();
}
break;
case 'quicksave':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleOptionsSave();
}
break;
case 'install':
case 'reinstall':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleInstall();
}
break;
case 'update':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleUpdate();
}
break;
case 'delete':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleDelete();
}
break;
case 'onoff':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleStatusChange();
}
break;
case 'modedit':
if (check_permission_acp('modules_admin'))
{
$mod_path = preg_replace('/[^\w]/', '', $_REQUEST['mod']);
$mod_path = BASE_DIR . '/modules/' . $mod_path . '/module.php';
if (is_file($mod_path))
include($mod_path);
}
break;
case 'remove':
if (check_permission_acp('modules_system'))
{
$AVE_Module->moduleRemove($_REQUEST['module']);
}
break;
case 'aliases_all':
if (check_permission_acp('modules_system')) {
$modules_list = array();
$sql = "SELECT
a.id,
a.module_name as sys_name,
a.module_link_name,
a.module_action,
a.module_link,
a.module_url as alias_url,
a.document_id as doc_id,
a.module_admin,
m.ModuleName as title
FROM " . PREFIX . "_modules_aliases a
LEFT JOIN " . PREFIX . "_module m ON m.ModuleSysName = a.module_name
ORDER BY a.id DESC";
$q = $AVE_DB->Query($sql);
while ($row = $q->FetchAssocArray()) {
if (empty($row['title'])) {
$row['title'] = $row['sys_name'];
}
$modules_list[] = $row;
}
$all_docs = array();
$doc_q = $AVE_DB->Query("SELECT Id, document_title FROM " . PREFIX . "_documents ORDER BY document_title ASC");
while ($d = $doc_q->FetchAssocArray()) {
$all_docs[$d['Id']] = $d['document_title'];
}
$AVE_Template->assign(array(
'modules_list' => $modules_list,
'all_docs' => $all_docs,
'sess' => SESSION
));
$AVE_Template->assign('content', $AVE_Template->fetch('modules/all_modules_aliases.tpl'));
}
break;
case 'aliases':
if (check_permission_acp('modules_system')) {
$alias_id = (int)($_REQUEST['id'] ?? 0);
if (!empty($_POST['save_aliases'])) {
$update_data = [
'module_name' => $_POST['module_name'] ?? '',
'module_url' => trim($_POST['module_url'], '/ ') . '/',
'document_id' => (int)$_POST['document_id'],
'module_action' => $_POST['module_action'] ?? '',
'module_link' => $_POST['module_link'] ?? '',
'module_link_name' => $_POST['module_link_name'] ?? '',
'module_admin' => isset($_POST['module_admin']) ? '1' : '0'
];
$res = $AVE_Module->moduleAliasSave($alias_id, $update_data);
if (function_exists('clear_cache')) clear_cache();
// Если это AJAX (сохранение из модального окна)
if (isset($_REQUEST['ajax']) || isset($_REQUEST['onlycontent'])) {
@ob_clean();
header('Content-Type: application/json');
$message = '';
// Проверяем, какую именно ошибку вернул метод
if ($res === 'error_duplicate_url') {
$message = 'ВНИМАНИЕ: ЧПУ адрес "' . $_POST['module_url'] . '" уже занят другим модулем!';
} elseif ($res === 'error_duplicate_link') {
$message = 'ОШИБКА: Для этого оригинального URL уже существует запись. Не плодите дубликаты!';
}
if ($message) {
echo json_encode([
'status' => 'error',
'message' => $message
]);
} else {
echo json_encode(['status' => $res ? 'success' : 'error']);
}
exit;
}
}
$alias_data = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modules_aliases WHERE id = '{$alias_id}'")->FetchAssocArray();
if (!$alias_data) {
$alias_data = [
'module_name' => '', 'module_link_name' => '', 'module_action' => '',
'module_link' => '', 'module_url' => '', 'document_id' => 0, 'module_admin' => '1'
];
}
// Получаем список документов для выпадающего списка
$all_docs = array();
$doc_q = $AVE_DB->Query("SELECT Id, document_title FROM " . PREFIX . "_documents ORDER BY document_title ASC");
while ($d = $doc_q->FetchAssocArray()) {
$all_docs[$d['Id']] = $d['document_title'];
}
$AVE_Template->assign([
'alias_id' => $alias_id,
'alias_data' => $alias_data,
'all_docs' => $all_docs,
'sess' => SESSION
]);
if (isset($_REQUEST['ajax']) || isset($_REQUEST['onlycontent'])) {
echo $AVE_Template->fetch('modules/module_aliases.tpl');
exit;
}
}
break;
case 'alias_delete':
if (check_permission_acp('modules_system')) {
$id = (int)($_REQUEST['id'] ?? 0);
if ($id > 0) {
$AVE_Module->moduleAliasDeleteById($id);
if (function_exists('clear_cache')) clear_cache();
}
// Возвращаем на страницу списка всех алиасов
header('Location: index.php?do=modules&action=aliases_all&cp=' . SESSION);
exit;
}
break;
}
?>