Skip to content

add_manager_route#578

Open
Kolya1222 wants to merge 17 commits into
evocms-community:3.1.xfrom
Kolya1222:manager_route
Open

add_manager_route#578
Kolya1222 wants to merge 17 commits into
evocms-community:3.1.xfrom
Kolya1222:manager_route

Conversation

@Kolya1222

Copy link
Copy Markdown
Contributor

В общем мне не нравится, что у нас по всюду разбросаны конструкции вида ?a=.

По этому предлагаю сделать вот такой вариант, если решение одобрят буду отправлять PR в которых буду постепенно менять вызов в других файлах.

Вместо: 'index.php?a=8' будет manager_route('logout').
Вместо: index.php?a=76&tab=2' будет manager_route('elements', ['tab' => 2])

@Kolya1222

Copy link
Copy Markdown
Contributor Author

Добавил больше таких мест, но не везде смог исправить буду еще следующую неделю сидеть исправлять в js, то что обсуждали. Еще неделю буду гонять у себя эти ссылки и страницы в админке. Так что надеюсь недели через 1-2 получится сделать все

@Kolya1222

Copy link
Copy Markdown
Contributor Author

Ещё названия в порядок приведу, а то не нравится приколы в духе role_edit и edit_settings так что сделаю все в одном стиле

@Kolya1222

Copy link
Copy Markdown
Contributor Author

Заменил все кроме этих мест:

43 results - 14 files

core\config\tracy.php:
  7       * true - Activate tracy handler all errors contains at the /core/storage/logs/
  8:      * false - Default Evolution CMS Error handler. All errors contains at the /manager/index.php?a=114
  9       * 'manager' - Activate tracy for users who authorize on the admin panel

manager\actions\files.dynamic.php:
  217              if (isset($_GET['mode']) && $_GET['mode'] !== 'drill') {
  218:                 $href = 'a=31&path=' . $_REQUEST['path'];
  219              } else {
  220:                 $href = 'a=2';
  221              }

manager\actions\web_user_management.static.php:
  134  
  135:     $table->createPagingNavigation($numRecords, 'a=99&'.http_build_query($query));
  136      $output = $table->create($listDocs, $listTableHeader, manager_route('user_list'));

  193  
  194: <form name="resource" method="post" action="?a=99">
  195      <?php

manager\actions\category_mgr\skin\js\categories.js:
  4   */
  5: let ajax_url = 'index.php?a=121';
  6  let categorizeWorkbench = document.getElementById('categorize-workbench');

manager\media\script\mutate_settings.js:
  60      if(proceed) {
  61:         $.post('index.php?a=118', {
  62              action: 'get',

manager\media\script\resources-functions.js:
  3      if (confirm(msg) == true) {
  4:         jQuery.get('index.php?a=67&type=' + type + '&id=' + id, function (data) {
  5              if (data == 1) {

manager\media\script\session.js:
   9              if(resp.status != 'ok') {
  10:                 window.location.href = 'index.php?a=8';
  11              }

manager\media\style\common\login.tpl:
  113          var xhr = new XMLHttpRequest();
  114:         xhr.open('POST', '?a=0', true);
  115          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');

manager\media\style\default\login.tpl:
  549      <div class="tab-page loginbox [+login_form_style_class+]">
  550:         <form method="post" name="loginfrm" id="loginfrm" class="container container-body" action="?a=0">
  551              [+csrf+]

  623          var xhr = new XMLHttpRequest();
  624:         xhr.open('POST', '?a=0', true);
  625          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');

manager\media\style\default\chunks\welcome\StartUpScript.tpl:
  3          var xhr = new XMLHttpRequest();
  4:         xhr.open("POST", "index.php?a=118", true);
  5          xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");

manager\media\style\default\js\modx.js:
    43                  d.addEventListener('click', this.tabs, false);
    44:                 this.tabs({ url: '?a=2', reload: 0 });
    45              }

   303                              s.loader.style.display = 'block';
   304:                             modx.get(modx.MODX_MANAGER_URL + '?a=71&ajax=1&submitok=Search&searchid=' + s.input.value, function (data) {
   305                                  s.loader.style.display = 'none';

   991                          d.getElementById('treeloader').classList.add('visible');
   992:                         modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=' + el.dataset.indent + '&parent=' + id + '&expandAll=' + el.dataset.expandall + folderState, function (r) {
   993                              modx.tree.rpcLoadData(r);

  1058                      if (id === 0) {
  1059:                         href = '?a=2';
  1060                      } else {

  1251                          this.setActiveFromContextMenu(this.itemToChange);
  1252:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=3&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1253                          break;

  1255                          this.setActiveFromContextMenu(this.itemToChange);
  1256:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=27&r=1&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1257                          break;
  1258                      case 3:
  1259:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=4&pid=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1260                          break;

  1264                          } else if (confirm('"' + this.selectedObjectName + '"\n\n' + modx.lang.confirm_delete_resource) === true) {
  1265:                             modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=6&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1266                          }

  1269                          this.setActiveFromContextMenu(this.itemToChange);
  1270:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=51&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1271                          break;
  1272                      case 6:
  1273:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=72&pid=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1274                          break;

  1276                          if (confirm(modx.lang.confirm_resource_duplicate) === true) {
  1277:                             modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=94&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1278                          }

  1282                              if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_undelete) === true) {
  1283:                                 modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=63&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1284                              }

  1290                          if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_publish) === true) {
  1291:                             modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=61&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1292                          }

  1296                              if (confirm('"' + this.selectedObjectName + '" ' + modx.lang.confirm_unpublish) === true) {
  1297:                                 modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=62&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1298                              }

  1303                      case 11:
  1304:                         modx.tabs({ url: modx.MODX_MANAGER_URL + '?a=56&id=' + this.itemToChange, title: this.selectedObjectName + '<small class="text-muted">(' + this.itemToChange + ')</small>' });
  1305                          break;

  1350                      this.rpcNode = d.getElementById('treeRoot');
  1351:                     modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=' + modx.tree_parent + '&expandAll=2&id=' + this.itemToChange, function (r) {
  1352                          modx.tree.rpcLoadData(r);

  1359                  d.getElementById('treeloader').classList.add('visible');
  1360:                 modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=' + modx.tree_parent + '&expandAll=1&id=' + this.itemToChange, function (r) {
  1361                      modx.tree.rpcLoadData(r);

  1368                  d.getElementById('treeloader').classList.add('visible');
  1369:                 modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&indent=1&parent=' + modx.tree_parent + '&expandAll=0&id=' + this.itemToChange, function (r) {
  1370                      modx.openedArray = [];

  1379                  var a = d.sortFrm;
  1380:                 var b = 'a=1&f=nodes&indent=1&parent=' + modx.tree_parent + '&expandAll=2&dt=' + a.dt.value + '&tree_sortby=' + a.sortby.value + '&tree_sortdir=' + a.sortdir.value + '&tree_nodename=' + a.nodename.value + '&id=' + this.itemToChange + '&showonlyfolders=' + a.showonlyfolders.value;
  1381                  modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', b, function (r) {

  1400              saveFolderState: function () {
  1401:                 modx.post(modx.MODX_MANAGER_URL + 'media/style/' + modx.config.theme + '/ajax.php', 'a=1&f=nodes&savestateonly=1' + this.getFolderState());
  1402              },

  1413                  if (confirm(modx.lang.confirm_empty_trash) === true) {
  1414:                     modx.get(modx.MODX_MANAGER_URL + '?a=64', function () {
  1415                          modx.tabsClose(modx.tree.deleted);

  1432                          for (var i = 0; i < els.length; i++) {
  1433:                             this.deleted[els[i].dataset.id] = 'evo-tab-page-' + modx.urlToUid('a=27&id=' + els[i].dataset.id);
  1434                          }

  1445                  if (confirm(m) === true) {
  1446:                     modx.get(modx.MODX_MANAGER_URL + '?a=67&type=' + a + '&id=' + b, function (r) {
  1447                          if (parseInt(r) === 1) {

  1458              if (confirm(modx.lang.confirm_remove_locks) === true) {
  1459:                 //w.main.location.href = modx.MODX_MANAGER_URL + '?a=67'
  1460:                 modx.get(modx.MODX_MANAGER_URL + '?a=67', function () {
  1461                      modx.tree.restoreTree();

  1467                  r = JSON.parse(r);
  1468:                 if (r.status !== 'ok') w.location.href = modx.MODX_MANAGER_URL + '?a=8';
  1469              });

  2577          if (modx.getActionFromUrl(url, 27)) {
  2578:             modx.get(modx.MODX_MANAGER_URL + '?a=67&type=7&id=' + modx.main.getQueryVariable('id', url));
  2579          }

manager\processors\remove_installer.processor.php:
  52  
  53: echo "<script>window.location='../#?a=2';</script>";

manager\views\page\3.blade.php:
  258  
  259:             $table->createPagingNavigation($numRecords, 'a=3&id=' . $content['id'] . '&dir=' . $dir . '&sort=' . $sort);
  260              $children_output = $table->create($listDocs, $listTableHeader, manager_route('about_document', [ 'id' => $content['id'] ]));

Еще есть формы, где a передается как скрытый параметр в post запрос их я тоже еще не трогал вот такие:

28 results - 21 files

manager\actions\bkmanager.static.php:
  429                      ?>
  430:                     <input type="hidden" name="a" value="93"/>
  431                      <input type="hidden" name="mode" value="restore1"/>

  518                      ?>
  519:                     <input type="hidden" name="a" value="93"/>
  520                      <input type="hidden" name="mode" value="snapshot"/>

  538                      ?>
  539:                     <input type="hidden" name="a" value="93"/>
  540                      <input type="hidden" name="mode" value="restore2"/>

manager\actions\files.dynamic.php:
  478                      <input type="hidden" name="MAX_FILE_SIZE" value="<?= isset($upload_maxsize) ? $upload_maxsize : 3145728 ?>">
  479:                     <input type="hidden" name="a" value="31">
  480                      <input type="hidden" name="path" value="<?= $startpath ?>">

  519              ?>
  520:             <input type="hidden" name="a" value="31" />
  521              <input type="hidden" name="mode" value="save" />

manager\actions\mutate_content.dynamic.php:
  522          ?>
  523:         <input type="hidden" name="a" value="5" />
  524          <input type="hidden" name="id" id="docid" value="<?= (int)get_by_key($content, 'id', 0, 'is_scalar') ?>" />

manager\actions\mutate_module_resources.dynamic.php:
  180      ?>
  181:     <input type="hidden" name="a" value="113">
  182      <input type="hidden" name="op" value=""/>

manager\actions\mutate_module.dynamic.php:
  139      ?>
  140:     <input type="hidden" name="a" value="109">
  141      <input type="hidden" name="id" value="<?= (isset($content['id'])) ? $content['id'] : "" ?>">

manager\actions\mutate_web_user.dynamic.php:
  315  ?>
  316:     <input type="hidden" name="a" value="89">
  317      <input type="hidden" name="mode" value="<?php echo $modx->getManagerApi()->action; ?>" />

manager\actions\resource_selector.static.php:
  167      <input type="hidden" name="id" value="<?= $id ?>" />
  168:     <input type="hidden" name="a" value="<?= $modx->getManagerApi()->action ?>" />
  169      <input type="hidden" name="listmode" value="<?= $_REQUEST['listmode'] ?>" />

manager\views\page\chunk.blade.php:
  61  
  62:         <input type="hidden" name="a" value="79" />
  63          <input type="hidden" name="id" value="{{ $data->getKey() }}" />

manager\views\page\eventlog_details.blade.php:
  28              <input type="hidden" name="id" value="{{ $log->getKey() }}" />
  29:             <input type="hidden" name="a" value="{{ $controller->getIndex() }}" />
  30              <input type="hidden" name="listmode" value="{{ get_by_key($_REQUEST, 'listmode') }}" />

manager\views\page\move_document.blade.php:
  66                  @csrf
  67:                 <input type="hidden" name="a" value="52" />
  68                  <input type="hidden" name="id" value="{{ $document->getKey() }}" />

manager\views\page\password.blade.php:
  27                  @csrf
  28:                 <input type="hidden" name="a" value="34">
  29                  <p>{{ ManagerTheme::getLexicon('change_password_message') }}</p>

manager\views\page\plugin.blade.php:
  103  
  104:         <input type="hidden" name="a" value="103">
  105          <input type="hidden" name="id" value="{{ $data->getKey() }}">

manager\views\page\search.blade.php:
  35                  @csrf
  36:                 <input type="hidden" name="a" value="71">
  37  

manager\views\page\snippet.blade.php:
  61          {!! get_by_key($events, 'OnSnipFormPrerender') !!}
  62:         <input type="hidden" name="a" value="24">
  63          <input type="hidden" name="id" value="{{ $data->getKey() }}">

manager\views\page\system_settings.blade.php:
  21          @csrf
  22:         <input type="hidden" name="a" value="30">
  23          <!-- this field is used to check site settings have been entered/ updated after install or upgrade -->

manager\views\page\template.blade.php:
  75  
  76:         <input type="hidden" name="a" value="20">
  77          <input type="hidden" name="id" value="{{ $data->getKey() }}">

manager\views\page\tmplvar.blade.php:
  278          <input type="hidden" name="id" value="{{ $data->getKey() }}">
  279:         <input type="hidden" name="a" value="302">
  280          <input type="hidden" name="or" value="{{ $origin }}">

manager\views\page\web_access_permissions.blade.php:
   51                          @csrf
   52:                         <input type="hidden" name="a" value="92" />
   53                          <input type="hidden" name="operation" value="add_user_group" />

   70                                  @csrf
   71:                                 <input type="hidden" name="a" value="92" />
   72                                  <input type="hidden" name="groupid" value="{{ $userGroup->getKey() }}" />

   98                          @csrf
   99:                         <input type="hidden" name="a" value="92" />
  100                          <input type="hidden" name="operation" value="add_document_group" />

  116                                  @csrf
  117:                                 <input type="hidden" name="a" value="92" />
  118                                  <input type="hidden" name="groupid" value="{{ $documentGroup->getKey() }}" />

  146                              @csrf
  147:                             <input type="hidden" name="a" value="92" />
  148                              <input type="hidden" name="operation" value="add_document_group_to_user_group" />

manager\views\page\user_roles\permission.blade.php:
  4          @csrf
  5:         <input type="hidden" name="a" value="135">
  6          <input type="hidden" name="mode" value="<?= app()->getManagerApi()->action ?>">

manager\views\page\user_roles\permissions_groups.blade.php:
  4          @csrf
  5:         <input type="hidden" name="a" value="136">
  6          <input type="hidden" name="mode" value="<?= app()->getManagerApi()->action ?>">

manager\views\page\user_roles\user_role.blade.php:
  4          @csrf
  5:         <input type="hidden" name="a" value="36">
  6          <input type="hidden" name="mode" value="<?= app()->getManagerApi()->action ?>">

@Kolya1222

Copy link
Copy Markdown
Contributor Author

Основные изменения

1. Централизация знаний о маршрутах административной панели

Добавлен единый конфигурационный файл core/config/manager_routes.php, в котором каждому числовому идентификатору действия (action ID) сопоставлено читаемое имя ('home' => 2, 'edit_document' => 27 и т.д.).
Теперь вся информация о маршрутах хранится в одном месте, что полностью исключает «магические числа» в коде и упрощает будущие изменения URL-схемы.

2. Новые вспомогательные функции для генерации URL

В core/functions/helper.php появились три функции, через которые отныне формируются все ссылки на страницы админки:

  • manager_route(string $name, array $params) – возвращает полный URL по символическому имени маршрута и набору параметров.
  • manager_route_by_action(int $action, array $params) – генерирует URL по числовому ID (используется, когда ID приходит динамически).
  • manager_action_id(string $name) – возвращает числовой идентификатор по имени (для скрытых полей форм и других мест, где нужен именно a=N).

3. Полная замена статических ссылок во всём PHP-коде админки

Абсолютно все файлы, формирующие административный интерфейс, были переведены на именованные маршруты. В результате рефакторинга не осталось жёстко прописанных строк index.php?a=N - все они заменены на вызовы manager_route(...) или manager_route_by_action(...).

4. Единый JavaScript-объект для маршрутов

  • В главном макете manager/views/frame/1.blade.php формируется глобальный объект modx.routes, содержащий URL для всех ключевых действий (главная, редактирование, создание, удаление и т.д.).
  • Ключевой JavaScript-файл modx.js и множество других клиентских скриптов (resources-functions.js, session.js, categories.js, mutate_settings.js и др.) были переведены на использование modx.routes вместо явных ?a=N.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant