update v3.32 (add module aliases)

This commit is contained in:
2026-04-19 15:07:29 +05:00
parent 1e45d62677
commit c29771ae3b
2 changed files with 168 additions and 131 deletions

View File

@@ -99,150 +99,51 @@
}
break;
case 'alias_history':
case 'alias_history':
if (check_permission_acp('modules_system')) {
$AVE_Module->getAliasHistory((int)$_GET['id']);
$AVE_Module->getAliasHistory((int)$_GET['id']);
}
break;
case 'alias_history_delete':
if (check_permission_acp('modules_system') && $_REQUEST['ajax']) {
$AVE_Module->deleteAliasHistory((int)$_POST['id']);
$AVE_Module->deleteAliasHistory((int)$_POST['id']);
}
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'];
case 'aliases_all':
if (check_permission_acp('modules_system')) {
$AVE_Module->getAliasesAll();
}
$modules_list[] = $row;
}
break;
$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'];
}
case 'aliases':
if (check_permission_acp('modules_system')) {
$alias_id = (int)($_REQUEST['id'] ?? 0);
$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 (!empty($_POST['save_aliases'])) {
$AVE_Module->moduleAliasRequestSave($alias_id);
}
if ($message) {
echo json_encode([
'status' => 'error',
'message' => $message
]);
} else {
echo json_encode(['status' => $res ? 'success' : 'error']);
// В любом случае показываем форму (либо чистую, либо с данными)
$AVE_Module->getAliasEdit($alias_id);
}
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;
}
}
$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;
break;
}
?>

View File

@@ -771,10 +771,17 @@ public function moduleAliasDeleteById($id)
global $AVE_DB;
$id = (int)$id;
if ($id > 0) {
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}'");
// Чистим историю именно для этого ID, если она ведется
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases_history WHERE id = '{$id}'");
return true;
// Сначала получаем имя модуля, чтобы знать, чью историю тереть
$m_data = $AVE_DB->Query("SELECT module_name FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}' LIMIT 1")->FetchAssocArray();
if ($m_data) {
$m_name = addslashes($m_data['module_name']);
// Удаляем историю для этого конкретного модуля
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases_history WHERE module_name = '{$m_name}'");
// Удаляем сам алиас
$AVE_DB->Query("DELETE FROM " . PREFIX . "_modules_aliases WHERE id = '{$id}'");
return true;
}
}
return false;
}
@@ -826,5 +833,134 @@ public function deleteAliasHistory($h_id)
exit;
}
/**
* Метод для отображения списка всех алиасов
*/
public function getAliasesAll()
{
global $AVE_DB, $AVE_Template;
$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'));
}
/**
* Метод для отображения формы редактирования
*/
public function getAliasEdit($alias_id)
{
global $AVE_DB, $AVE_Template;
$alias_id = (int)$alias_id;
$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;
}
}
/**
* Метод для обработки сохранения алиаса
*/
public function moduleAliasRequestSave($alias_id)
{
$alias_id = (int)$alias_id;
$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 = $this->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;
}
return $res;
}
}
?>