Skip to content

Commit b2fe121

Browse files
committed
refactor: migrated FAQs overview page to controller (#3257)
1 parent 3718072 commit b2fe121

File tree

16 files changed

+196
-159
lines changed

16 files changed

+196
-159
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|category|comments|configuration|elasticsearch|export|glossary|group|import|instance|instances|news|password|questions|session-keep-alive|statistics|sticky-faqs|stopwords|system|tags|update|user) /admin/front.php last;
132+
rewrite admin/(attachments|backup|category|comments|configuration|elasticsearch|export|faq|faqs|glossary|group|import|instance|instances|news|password|questions|session-keep-alive|statistics|sticky-faqs|stopwords|system|tags|update|user) /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|category|comments|configuration|elasticsearch|export|glossary|group|import|instance|instances|news|password|questions|session-keep-alive|statistics|sticky-faqs|stopwords|system|tags|update|user) admin/front.php [L,QSA]
146+
RewriteRule ^admin/(attachments|backup|category|comments|configuration|elasticsearch|export|faq|faqs|glossary|group|import|instance|instances|news|password|questions|session-keep-alive|statistics|sticky-faqs|stopwords|system|tags|update|user) 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/faqs.overview.php

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

phpmyfaq/admin/header.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@
7373
$secLevelEntries['content'] .= $adminHelper->addMenuEntry(
7474
'edit_faq+delete_faq',
7575
'faqs-overview',
76-
'msgHeaderFAQOverview'
76+
'msgHeaderFAQOverview',
77+
'faqs'
7778
);
7879
$secLevelEntries['content'] .= $adminHelper->addMenuEntry(
7980
PermissionType::FAQ_EDIT->value,
@@ -180,7 +181,6 @@
180181
$secLevelEntries['config'] .= $adminHelper->addMenuEntry('editconfig', 'system', 'ad_system_info', 'system');
181182

182183
switch ($action) {
183-
case 'faqs-overview':
184184
case 'editentry':
185185
case 'copyentry':
186186
case 'question':

phpmyfaq/admin/index.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,6 @@
257257
// the various sections of the admin area
258258
switch ($action) {
259259
// functions for content administration
260-
case 'faqs-overview':
261-
require 'faqs.overview.php';
262-
break;
263-
case 'viewinactive':
264-
case 'viewactive':
265260
case 'takequestion':
266261
case 'editentry':
267262
case 'copyentry':
Lines changed: 84 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,96 @@
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-list-alt"></i>
4-
{{ 'msgHeaderFAQOverview' | translate }}
5-
</h1>
6-
<div class="pmf-faq-overview-search col-4">
7-
<form name="pmf-faq-search-autocomplete" id="pmf-faq-search-autocomplete" action="?action=faq-overview"
8-
method="post" role="form">
9-
{{ csrfTokenSearch | raw }}
10-
<div class="input-group">
11-
<input type="text" class="form-control" placeholder="{{ 'msgAdminSearchFaqs' | translate }}"
12-
id="pmf-faq-overview-search-input" autocomplete="off">
13-
<button class="btn btn-primary" type="button" id="pmf-faq-overview-search-button">
14-
<i class="bi bi-search" aria-hidden="true"></i>
15-
</button>
16-
</div>
17-
</form>
18-
</div>
19-
</div>
1+
{% extends '@admin/index.twig' %}
202

21-
{% if categories is empty %}
22-
<div class="alert alert-danger" role="alert">
23-
{{ 'msgErrorNoRecords' | translate }}
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-list-alt"></i>
7+
{{ 'msgHeaderFAQOverview' | translate }}
8+
</h1>
9+
<div class="pmf-faq-overview-search col-4">
10+
<form name="pmf-faq-search-autocomplete" id="pmf-faq-search-autocomplete" action="?action=faq-overview"
11+
method="post" role="form">
12+
{{ csrfTokenSearch | raw }}
13+
<div class="input-group">
14+
<input type="text" class="form-control" placeholder="{{ 'msgAdminSearchFaqs' | translate }}"
15+
id="pmf-faq-overview-search-input" autocomplete="off">
16+
<button class="btn btn-primary" type="button" id="pmf-faq-overview-search-button">
17+
<i class="bi bi-search" aria-hidden="true"></i>
18+
</button>
19+
</div>
20+
</form>
21+
</div>
2422
</div>
25-
{% endif %}
2623

27-
<div class="accordion shadow" id="pm-admin-faq-overview">
28-
<div class="accordion-item d-flex justify-content-start flex-wrap flex-md-nowrap align-items-center p-3 bg-secondary-subtle">
29-
<div class="col-2">
30-
<div class="form-check">
31-
<input class="form-check-input" type="checkbox" value="" id="pmf-checkbox-filter-inactive">
32-
<label class="form-check-label" for="pmf-checkbox-filter-inactive">
33-
{{ 'msgOnlyInactiveFAQs' | translate }}
34-
</label>
35-
</div>
24+
{% if categories is empty %}
25+
<div class="alert alert-danger" role="alert">
26+
{{ 'msgErrorNoRecords' | translate }}
3627
</div>
37-
<div class="col-2">
38-
<div class="form-check">
39-
<input class="form-check-input" type="checkbox" value="" id="pmf-checkbox-filter-new">
40-
<label class="form-check-label" for="pmf-checkbox-filter-new">
41-
{{ 'msgOnlyNewFAQs' | translate }}
42-
</label>
28+
{% endif %}
29+
30+
<div class="accordion shadow" id="pm-admin-faq-overview">
31+
<div class="accordion-item d-flex justify-content-start flex-wrap flex-md-nowrap align-items-center p-3 bg-secondary-subtle">
32+
<div class="col-2">
33+
<div class="form-check">
34+
<input class="form-check-input" type="checkbox" value="" id="pmf-checkbox-filter-inactive">
35+
<label class="form-check-label" for="pmf-checkbox-filter-inactive">
36+
{{ 'msgOnlyInactiveFAQs' | translate }}
37+
</label>
38+
</div>
39+
</div>
40+
<div class="col-2">
41+
<div class="form-check">
42+
<input class="form-check-input" type="checkbox" value="" id="pmf-checkbox-filter-new">
43+
<label class="form-check-label" for="pmf-checkbox-filter-new">
44+
{{ 'msgOnlyNewFAQs' | translate }}
45+
</label>
46+
</div>
4347
</div>
4448
</div>
45-
</div>
46-
{% for category in categories %}
47-
<div class="accordion-item">
48-
<div class="accordion-header category-header-indent-{{ category.indent }}">
49-
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
50-
data-bs-target="#category-id-{{ category.id }}">
49+
{% for category in categories %}
50+
<div class="accordion-item">
51+
<div class="accordion-header category-header-indent-{{ category.indent }}">
52+
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
53+
data-bs-target="#category-id-{{ category.id }}">
5154

52-
<span class="lead">{{ category.name }}</span>
53-
<span class="badge bg-primary mx-1">{{ numberOfRecords[category.id] ?? 0 }} {{ 'msgEntries' | translate }}</span>
54-
<span class="badge bg-info mx-1">{{ numberOfComments[category.id] ?? 0 }} {{ msgComments }}</span>
55+
<span class="lead">{{ category.name }}</span>
56+
<span class="badge bg-primary mx-1">{{ numberOfRecords[category.id] ?? 0 }} {{ 'msgEntries' | translate }}</span>
57+
<span class="badge bg-info mx-1">{{ numberOfComments[category.id] ?? 0 }} {{ msgComments }}</span>
5558

56-
</button>
57-
</div>
58-
<div id="category-id-{{ category.id }}" class="accordion-collapse collapse" data-pmf-language="{{ category.lang }}"
59-
data-bs-parent="#category-id-{{ category.id }}" data-pmf-categoryId="{{ category.id }}">
60-
<div class="accordion-body">
61-
<table class="table table-hover table-sm align-middle">
62-
<thead class="thead-light">
63-
<tr>
64-
<th colspan="3" class="align-middle">
65-
ID
66-
</th>
67-
<th class="align-middle">
68-
{{ msgQuestion }}
69-
</th>
70-
<th class="align-middle">
71-
{{ msgDate }}
72-
</th>
73-
<th class="align-middle">
74-
{{ msgSticky }}
75-
</th>
76-
<th class="align-middle">
77-
{{ 'msgActive' | translate }}
78-
</th>
79-
<th colspan="4" class="align-middle">
80-
Actions
81-
</th>
82-
</tr>
83-
</thead>
84-
<tbody id="tbody-category-id-{{ category.id }}" data-pmf-csrf="{{ csrfTokenOverview }}">
59+
</button>
60+
</div>
61+
<div id="category-id-{{ category.id }}" class="accordion-collapse collapse" data-pmf-language="{{ category.lang }}"
62+
data-bs-parent="#category-id-{{ category.id }}" data-pmf-categoryId="{{ category.id }}">
63+
<div class="accordion-body">
64+
<table class="table table-hover table-sm align-middle">
65+
<thead class="thead-light">
66+
<tr>
67+
<th colspan="3" class="align-middle">
68+
ID
69+
</th>
70+
<th class="align-middle">
71+
{{ msgQuestion }}
72+
</th>
73+
<th class="align-middle">
74+
{{ msgDate }}
75+
</th>
76+
<th class="align-middle">
77+
{{ msgSticky }}
78+
</th>
79+
<th class="align-middle">
80+
{{ 'msgActive' | translate }}
81+
</th>
82+
<th colspan="4" class="align-middle">
83+
Actions
84+
</th>
85+
</tr>
86+
</thead>
87+
<tbody id="tbody-category-id-{{ category.id }}" data-pmf-csrf="{{ csrfTokenOverview }}">
8588

86-
</tbody>
87-
</table>
89+
</tbody>
90+
</table>
91+
</div>
8892
</div>
8993
</div>
94+
{% endfor %}
9095
</div>
91-
{% endfor %}
92-
</div>
96+
{% endblock %}

phpmyfaq/assets/templates/admin/dashboard.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
<div class="row no-gutters align-items-center">
8888
<div class="col mr-2">
8989
<div class="text-xs font-weight-bold mb-1">
90-
<a class="text-white" href="?action=faqs-overview">
90+
<a class="text-white" href="./faqs">
9191
{{ 'ad_start_articles' | translate }}
9292
</a>
9393
</div>

phpmyfaq/assets/templates/admin/header.twig

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

123123
<!-- Content -->
124124
{% if secondLevelEntries['content'] != '' %}
125-
<a class="nav-link {{ contentPage ? '' : 'collapsed' }}" href="?action=faqs-overview" data-bs-toggle="collapse"
125+
<a class="nav-link {{ contentPage ? '' : 'collapsed' }}" href="./faqs" data-bs-toggle="collapse"
126126
data-bs-target="#collapseContent" aria-expanded="false" aria-controls="collapseContent">
127127
<div class="pmf-admin-nav-link-icon"><i aria-hidden="true" class="bi bi-pencil-square h6"></i></div>
128128
{{ menuContent }}

phpmyfaq/src/admin-routes.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use phpMyFAQ\Controller\Administration\ConfigurationController;
2424
use phpMyFAQ\Controller\Administration\ElasticsearchController;
2525
use phpMyFAQ\Controller\Administration\ExportController;
26+
use phpMyFAQ\Controller\Administration\FaqController;
2627
use phpMyFAQ\Controller\Administration\GlossaryController;
2728
use phpMyFAQ\Controller\Administration\GroupController;
2829
use phpMyFAQ\Controller\Administration\ImportController;
@@ -122,6 +123,11 @@
122123
'controller' => [ConfigurationController::class, 'index'],
123124
'methods' => 'GET'
124125
],
126+
'admin.faqs' => [
127+
'path' => '/faqs',
128+
'controller' => [FaqController::class, 'index'],
129+
'methods' => 'GET'
130+
],
125131
'admin.elasticsearch' => [
126132
'path' => '/elasticsearch',
127133
'controller' => [ElasticsearchController::class, 'index'],

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ protected function getHeader(Request $request): array
263263
case 'admin.category.update':
264264
case 'admin.content.sticky-faqs':
265265
case 'admin.comments':
266+
case 'admin.faqs':
266267
case 'admin.glossary':
267268
case 'admin.news':
268269
case 'admin.news.add':

0 commit comments

Comments
 (0)