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

236 lines
6.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
?>