Skip to content

Commit 3cf01e8

Browse files
committed
refactor: migrated admin export page to controller (#3257)
1 parent 8333161 commit 3cf01e8

File tree

15 files changed

+167
-160
lines changed

15 files changed

+167
-160
lines changed

nginx.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ server {
129129
rewrite admin/api/(.*) /admin/api/index.php last;
130130

131131
# Administration pages
132-
rewrite admin/(attachments|backup|backup/export|backup/restore|configuration|elasticsearch|instance/edit|instance/update|instances|session-keep-alive|stopwords|system|update) /admin/front.php last;
132+
rewrite admin/(attachments|backup|backup/export|backup/restore|configuration|elasticsearch|export|instance/edit|instance/update|instances|session-keep-alive|stopwords|system|update) /admin/front.php last;
133133

134134
# REST API v3.0 and v3.1
135135
rewrite ^api/v3\.[01]/(.*) /api/index.php last;

phpmyfaq/.htaccess

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ Header set Access-Control-Allow-Headers "Content-Type, Authorization"
143143
# Administration API
144144
RewriteRule ^admin/api/(.*) admin/api/index.php [L,QSA]
145145
# Administration pages
146-
RewriteRule ^admin/(attachments|backup|backup/export|backup/restore|configuration|elasticsearch|instance/edit|instance/update|instances|session-keep-alive|stopwords|system|update) admin/front.php [L,QSA]
146+
RewriteRule ^admin/(attachments|backup|backup/export|backup/restore|configuration|elasticsearch|export|instance/edit|instance/update|instances|session-keep-alive|stopwords|system|update) admin/front.php [L,QSA]
147147
# Private APIs
148148
RewriteRule ^api/(autocomplete|bookmark/delete|bookmark/create|user/data/update|user/password/update|user/request-removal|user/remove-twofactor|contact|voting|register|captcha|share|comment/create|faq/create|question/create|webauthn/prepare|webauthn/register|webauthn/prepare-login|webauthn/login) api/index.php [L,QSA]
149149
# Setup APIs

phpmyfaq/admin/export.php

Lines changed: 0 additions & 74 deletions
This file was deleted.

phpmyfaq/admin/header.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
'importcsv',
129129
'msgImportRecords'
130130
);
131-
$secLevelEntries['imports_exports'] .= $adminHelper->addMenuEntry('export', 'export', 'ad_menu_export');
131+
$secLevelEntries['imports_exports'] .= $adminHelper->addMenuEntry('export', 'export', 'ad_menu_export', 'export');
132132

133133
$secLevelEntries['backup'] = $adminHelper->addMenuEntry('editconfig', 'backup', 'ad_menu_backup', 'backup');
134134

phpmyfaq/admin/index.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,6 @@
364364
case 'importcsv':
365365
require 'import.csv.php';
366366
break;
367-
case 'export':
368-
require 'export.php';
369-
break;
370367
// Config administration
371368
case 'forms':
372369
require 'forms.php';

phpmyfaq/assets/templates/admin/header.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154

155155
<!-- Exports -->
156156
{% if secondLevelEntries['imports_exports'] != '' %}
157-
<a class="nav-link {{ exportsPage ? '' : 'collapsed' }}" href="?action=export" data-bs-toggle="collapse"
157+
<a class="nav-link {{ exportsPage ? '' : 'collapsed' }}" href="./export" data-bs-toggle="collapse"
158158
data-bs-target="#collapseExports" aria-expanded="false" aria-controls="collapseExports">
159159
<div class="pmf-admin-nav-link-icon">
160160
<i aria-hidden="true" class="bi bi-archive h6"></i>
Lines changed: 78 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,97 @@
1-
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
2-
<h1 class="h2">
3-
<i aria-hidden="true" class="bi bi-book bi-fw"></i>
4-
{{ adminHeaderExport }}
5-
</h1>
6-
</div>
1+
{% extends '@admin/index.twig' %}
72

8-
<div class="row">
9-
<div class="col-12">
10-
<div class="card shadow">
11-
<div class="card-body">
3+
{% block content %}
4+
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
5+
<h1 class="h2">
6+
<i aria-hidden="true" class="bi bi-book bi-fw"></i>
7+
{{ adminHeaderExport }}
8+
</h1>
9+
</div>
1210

13-
{% if hasNoFaqs %}
14-
<div class="alert alert-warning" role="alert">
15-
{{ errorMessageNoFaqs }}
16-
</div>
17-
{% endif %}
11+
<div class="row">
12+
<div class="col-12">
13+
<div class="card shadow">
14+
<div class="card-body">
1815

19-
{% if hasCategories %}
20-
<form action="./api/export/file" method="post" accept-charset="utf-8">
21-
<h5>{{ headerCategories }}</h5>
22-
<div class="row mb-2">
23-
<label class="col-lg-2 col-form-label" for="categoryId">
24-
{{ msgCategory }}
25-
</label>
26-
<div class="col-lg-4">
27-
<select name="categoryId" id="categoryId" class="form-select">
28-
<option value="0">{{ msgAllCategories }}</option>
29-
{{ categoryOptions | raw }}
30-
</select>
31-
</div>
32-
</div>
33-
<div class="row mb-2">
34-
<div class="offset-lg-2 col-lg-4">
35-
<div class="form-check">
36-
<input class="form-check-input" type="checkbox" value="1" id="downwards" name="downwards" checked>
37-
<label class="form-check-label" for="downwards">{{ msgWithSubCategories }}</label>
38-
</div>
39-
</div>
16+
{% if hasNoFaqs %}
17+
<div class="alert alert-warning" role="alert">
18+
{{ errorMessageNoFaqs }}
4019
</div>
20+
{% endif %}
4121

42-
<h5>{{ headerExportType }}</h5>
43-
<div class="row mb-2">
44-
<div class="offset-lg-2 col-lg-8">
45-
<p>{{ msgChooseExportType }}</p>
46-
<div class="form-check">
47-
<input class="form-check-input" type="radio" name="export-type" id="json" value="json" checked>
48-
<label class="form-check-label" for="json">JSON</label>
22+
{% if hasCategories %}
23+
<form action="./api/export/file" method="post" accept-charset="utf-8">
24+
<h5>{{ headerCategories }}</h5>
25+
<div class="row mb-2">
26+
<label class="col-lg-2 col-form-label" for="categoryId">
27+
{{ msgCategory }}
28+
</label>
29+
<div class="col-lg-4">
30+
<select name="categoryId" id="categoryId" class="form-select">
31+
<option value="0">{{ msgAllCategories }}</option>
32+
{{ categoryOptions | raw }}
33+
</select>
4934
</div>
50-
<div class="form-check">
51-
<input class="form-check-input" type="radio" name="export-type" id="pdf" value="pdf">
52-
<label class="form-check-label" for="pdf">PDF</label>
35+
</div>
36+
<div class="row mb-2">
37+
<div class="offset-lg-2 col-lg-4">
38+
<div class="form-check">
39+
<input class="form-check-input" type="checkbox" value="1" id="downwards" name="downwards" checked>
40+
<label class="form-check-label" for="downwards">{{ msgWithSubCategories }}</label>
41+
</div>
5342
</div>
5443
</div>
55-
</div>
5644

57-
<div class="row mb-2">
58-
<div class="offset-lg-2 col-lg-4">
59-
<p>{{ msgViewType }}</p>
60-
<div class="form-check">
61-
<input class="form-check-input" type="radio" name="disposition" id="{{ msgDownloadType }}"
62-
value="{{ msgDownloadType }}" checked>
63-
<label class="form-check-label" for="{{ msgDownloadType }}">{{ msgDownload }}</label>
45+
<h5>{{ headerExportType }}</h5>
46+
<div class="row mb-2">
47+
<div class="offset-lg-2 col-lg-8">
48+
<p>{{ msgChooseExportType }}</p>
49+
<div class="form-check">
50+
<input class="form-check-input" type="radio" name="export-type" id="json" value="json" checked>
51+
<label class="form-check-label" for="json">JSON</label>
52+
</div>
53+
<div class="form-check">
54+
<input class="form-check-input" type="radio" name="export-type" id="pdf" value="pdf">
55+
<label class="form-check-label" for="pdf">PDF</label>
56+
</div>
6457
</div>
65-
<div class="form-check">
66-
<input class="form-check-input" type="radio" name="disposition"
67-
id="{{ msgInlineType }}" value="{{ msgInlineType }}">
68-
<label class="form-check-label" for="{{ msgInlineType }}">
69-
{{ msgInline }}
70-
</label>
58+
</div>
59+
60+
<div class="row mb-2">
61+
<div class="offset-lg-2 col-lg-4">
62+
<p>{{ msgViewType }}</p>
63+
<div class="form-check">
64+
<input class="form-check-input" type="radio" name="disposition" id="{{ msgDownloadType }}"
65+
value="{{ msgDownloadType }}" checked>
66+
<label class="form-check-label" for="{{ msgDownloadType }}">{{ msgDownload }}</label>
67+
</div>
68+
<div class="form-check">
69+
<input class="form-check-input" type="radio" name="disposition"
70+
id="{{ msgInlineType }}" value="{{ msgInlineType }}">
71+
<label class="form-check-label" for="{{ msgInlineType }}">
72+
{{ msgInline }}
73+
</label>
74+
</div>
7175
</div>
7276
</div>
73-
</div>
7477

75-
<div class="row mb-2">
76-
<div class="offset-lg-2 col-lg-4">
77-
<button class="btn btn-secondary" type="reset" name="resetExport">
78-
{{ buttonReset }}
79-
</button>
80-
<button class="btn btn-primary" type="submit" name="submitExport" formtarget="_blank">
81-
{{ buttonExport }}
82-
</button>
78+
<div class="row mb-2">
79+
<div class="offset-lg-2 col-lg-4">
80+
<button class="btn btn-secondary" type="reset" name="resetExport">
81+
{{ buttonReset }}
82+
</button>
83+
<button class="btn btn-primary" type="submit" name="submitExport" formtarget="_blank">
84+
{{ buttonExport }}
85+
</button>
86+
</div>
8387
</div>
84-
</div>
8588

86-
</form>
87-
{% endif %}
89+
</form>
90+
{% endif %}
8891

92+
</div>
8993
</div>
90-
</div>
9194

95+
</div>
9296
</div>
93-
</div>
97+
{% endblock %}

phpmyfaq/assets/templates/admin/index.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154

155155
<!-- Exports -->
156156
{% if secondLevelEntries['imports_exports'] != '' %}
157-
<a class="nav-link {{ exportsPage ? '' : 'collapsed' }}" href="?action=export" data-bs-toggle="collapse"
157+
<a class="nav-link {{ exportsPage ? '' : 'collapsed' }}" href="./export" data-bs-toggle="collapse"
158158
data-bs-target="#collapseExports" aria-expanded="false" aria-controls="collapseExports">
159159
<div class="pmf-admin-nav-link-icon">
160160
<i aria-hidden="true" class="bi bi-archive h6"></i>

phpmyfaq/src/admin-routes.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use phpMyFAQ\Controller\Administration\BackupController;
2020
use phpMyFAQ\Controller\Administration\ConfigurationController;
2121
use phpMyFAQ\Controller\Administration\ElasticsearchController;
22+
use phpMyFAQ\Controller\Administration\ExportController;
2223
use phpMyFAQ\Controller\Administration\InstanceController;
2324
use phpMyFAQ\Controller\Administration\SessionKeepAliveController;
2425
use phpMyFAQ\Controller\Administration\StopWordsController;
@@ -60,6 +61,11 @@
6061
'controller' => [ElasticsearchController::class, 'index'],
6162
'methods' => 'GET'
6263
],
64+
'admin.export' => [
65+
'path' => '/export',
66+
'controller' => [ExportController::class, 'index'],
67+
'methods' => 'GET'
68+
],
6369
'admin.instance.edit' => [
6470
'path' => '/instance/edit/{id}',
6571
'controller' => [InstanceController::class, 'edit'],

phpmyfaq/src/phpMyFAQ/Controller/Administration/AbstractAdministrationController.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ protected function getHeader(Request $request): array
140140
$secLevelEntries['imports_exports'] .= $adminHelper->addMenuEntry(
141141
'export',
142142
'export',
143-
'ad_menu_export'
143+
'ad_menu_export',
144+
'export'
144145
);
145146

146147
$secLevelEntries['backup'] = $adminHelper->addMenuEntry('editconfig', 'backup', 'ad_menu_backup', 'backup');
@@ -227,7 +228,6 @@ protected function getHeader(Request $request): array
227228
case 'reportview':
228229
$statisticsPage = true;
229230
break;
230-
case 'export':
231231
case 'importcsv':
232232
$exportsPage = true;
233233
break;
@@ -246,6 +246,9 @@ protected function getHeader(Request $request): array
246246
case 'admin.attachments':
247247
$contentPage = true;
248248
break;
249+
case 'admin.export':
250+
$exportsPage = true;
251+
break;
249252
case 'admin.backup':
250253
case 'admin.backup.export':
251254
case 'admin.backup.restore':

0 commit comments

Comments
 (0)