diff --git a/admin/modules.php b/admin/modules.php index ff59920..0d343b7 100644 --- a/admin/modules.php +++ b/admin/modules.php @@ -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; } ?> \ No newline at end of file diff --git a/class/class.modules.php b/class/class.modules.php index 14656e9..56c43ac 100644 --- a/class/class.modules.php +++ b/class/class.modules.php @@ -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; +} + } ?> \ No newline at end of file