diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d66d9b6..0000000 --- a/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -/.idea/* -/config/* -/config/config.inc.php -/config/db.config.php -/tmp/* -/modules/* -/templates/* -/uploads/* -*.DS_Store \ No newline at end of file diff --git a/admin/modules.php b/admin/modules.php index 0ab7fcb..cbb1f45 100644 --- a/admin/modules.php +++ b/admin/modules.php @@ -98,5 +98,139 @@ $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; + } ?> \ No newline at end of file diff --git a/admin/templates/modules/all_modules_aliases.tpl b/admin/templates/modules/all_modules_aliases.tpl new file mode 100644 index 0000000..d12d93a --- /dev/null +++ b/admin/templates/modules/all_modules_aliases.tpl @@ -0,0 +1,103 @@ +
Управление ЧПУ всех модулей
+ + + +
+ + + + + + + + + + + + + + + + {foreach from=$modules_list item=mod} + + + + + + + + + + + + + + + {/foreach} + +
Название ссылкиСистемное имяActionОригинальный URLЧПУ АлиасДокумент (ID)МенюПравкаУдалить
{$mod.module_link_name|default:$mod.title}{$mod.sys_name}{$mod.module_action|default:'---'}{$mod.module_link|default:'---'} + + + {if $mod.doc_id > 0} + {$all_docs[$mod.doc_id]|default:'Документ не найден'} (ID: {$mod.doc_id}) + {else} + Без привязки + {/if} + + {if $mod.module_admin == '1'} + + {else} + + {/if} + + + + +
+ + {if empty($modules_list)} + + + + + + +
+
    +
  • Список ЧПУ алиасов пуст. Добавьте первый алиас, чтобы настроить красивые ссылки.
  • +
+
+ {/if} +
+ +
+ Вернуться к списку модулей +   + Добавить новый алиас +
\ No newline at end of file diff --git a/admin/templates/modules/module_aliases.tpl b/admin/templates/modules/module_aliases.tpl new file mode 100644 index 0000000..0b0156e --- /dev/null +++ b/admin/templates/modules/module_aliases.tpl @@ -0,0 +1,116 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Системное имя модуля:
Название ссылки:
Системный Action:
Оригинальный URL:
ЧПУ Алиас:
Привязка к документу: + +
Доступ в админке: + + +
+ +   + Закрыть окно +
+
+
+ +{literal} + +{/literal} \ No newline at end of file diff --git a/admin/templates/modules/modules.tpl b/admin/templates/modules/modules.tpl index 55ecf9d..f90ca60 100644 --- a/admin/templates/modules/modules.tpl +++ b/admin/templates/modules/modules.tpl @@ -50,7 +50,7 @@ $(document).ready(function(){ldelim}
- Редактирование алиасов + Редактирование алиасов