Skip to content

Commit be99478

Browse files
committed
refactor: migrated search statistics page to controller (#3257)
1 parent c967efa commit be99478

File tree

8 files changed

+120
-142
lines changed

8 files changed

+120
-142
lines changed

phpmyfaq/admin/header.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@
124124
$secLevelEntries['statistics'] .= $adminHelper->addMenuEntry(
125125
PermissionType::STATISTICS_VIEWLOGS->value,
126126
'searchstats',
127-
'msgAdminElasticsearchStats'
127+
'msgAdminElasticsearchStats',
128+
'statistics/search'
128129
);
129130
$secLevelEntries['statistics'] .= $adminHelper->addMenuEntry('reports', 'reports', 'ad_menu_reports');
130131

phpmyfaq/admin/index.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,6 @@
314314
case 'glossary':
315315
require 'glossary.php';
316316
break;
317-
// functions for session administration
318-
case 'truncatesearchterms':
319-
case 'searchstats':
320-
require 'statistics.search.php';
321-
break;
322317
// Reports
323318
case 'reportview':
324319
case 'reports':

phpmyfaq/admin/statistics.search.php

Lines changed: 0 additions & 95 deletions
This file was deleted.
Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
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-bar-chart"></i>
4-
{{ msgAdminElasticsearchStats }}
5-
</h1>
6-
<div class="btn-toolbar mb-2 mb-md-0">
7-
<div class="btn-group mr-2">
8-
<button class="btn btn-outline-danger" type="button" id="pmf-button-truncate-search-terms"
9-
data-pmf-csrf-token="{{ csrfToken }}">
10-
<i aria-hidden="true" class="bi bi-trash"></i>{{ ad_searchterm_del}}
11-
</button>
1+
{% extends '@admin/index.twig' %}
2+
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-bar-chart"></i>
7+
{{ msgAdminElasticsearchStats }}
8+
</h1>
9+
<div class="btn-toolbar mb-2 mb-md-0">
10+
<div class="btn-group mr-2">
11+
<button class="btn btn-outline-danger" type="button" id="pmf-button-truncate-search-terms"
12+
data-pmf-csrf-token="{{ csrfToken }}">
13+
<i aria-hidden="true" class="bi bi-trash"></i>{{ ad_searchterm_del }}
14+
</button>
15+
</div>
1216
</div>
1317
</div>
14-
</div>
1518

16-
<div class="row">
17-
<div class="col-lg-12">
18-
<table class="table table-striped align-middle border shadow" id="pmf-table-search-terms">
19-
<thead>
20-
<tr>
21-
<th>{{ ad_searchstats_search_term }}</th>
22-
<th>{{ ad_searchstats_search_term_count }}</th>
23-
<th>{{ ad_searchstats_search_term_lang }}</th>
24-
<th colspan="2">{{ ad_searchstats_search_term_percentage }}</th>
25-
<th>&nbsp;</th>
26-
</tr>
27-
</thead>
28-
<tfoot>
29-
<tr>
30-
<td colspan="6">{{ pagination | raw }}</td>
31-
</tr>
32-
</tfoot>
33-
<tbody>
19+
<div class="row">
20+
<div class="col-lg-12">
21+
<table class="table table-striped align-middle border shadow" id="pmf-table-search-terms">
22+
<thead>
23+
<tr>
24+
<th>{{ ad_searchstats_search_term }}</th>
25+
<th>{{ ad_searchstats_search_term_count }}</th>
26+
<th>{{ ad_searchstats_search_term_lang }}</th>
27+
<th colspan="2">{{ ad_searchstats_search_term_percentage }}</th>
28+
<th>&nbsp;</th>
29+
</tr>
30+
</thead>
31+
<tfoot>
32+
<tr>
33+
<td colspan="6">{{ pagination | raw }}</td>
34+
</tr>
35+
</tfoot>
36+
<tbody>
3437
{% for searchItem in searchesList %}
3538
{% set num = searchItem.number / searchesCount * 100 %}
3639
<tr id="row-search-id-{{ searchItem.id }}">
@@ -50,7 +53,8 @@
5053
</td>
5154
</tr>
5255
{% endfor %}
53-
</tbody>
54-
</table>
56+
</tbody>
57+
</table>
58+
</div>
5559
</div>
56-
</div>
60+
{% endblock %}

phpmyfaq/src/admin-routes.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use phpMyFAQ\Controller\Administration\PasswordChangeController;
2828
use phpMyFAQ\Controller\Administration\RatingController;
2929
use phpMyFAQ\Controller\Administration\SessionKeepAliveController;
30+
use phpMyFAQ\Controller\Administration\StatisticsSearchController;
3031
use phpMyFAQ\Controller\Administration\StatisticsSessionsController;
3132
use phpMyFAQ\Controller\Administration\StopWordsController;
3233
use phpMyFAQ\Controller\Administration\SystemInformationController;
@@ -158,6 +159,11 @@
158159
'controller' => [RatingController::class, 'index'],
159160
'methods' => 'GET'
160161
],
162+
'admin.statistics.search' => [
163+
'path' => '/statistics/search',
164+
'controller' => [StatisticsSearchController::class, 'index'],
165+
'methods' => 'GET'
166+
],
161167
'admin.statistics.sessions' => [
162168
'path' => '/statistics/sessions',
163169
'controller' => [StatisticsSessionsController::class, 'index'],

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['statistics'] .= $adminHelper->addMenuEntry(
141141
PermissionType::STATISTICS_VIEWLOGS->value,
142142
'searchstats',
143-
'msgAdminElasticsearchStats'
143+
'msgAdminElasticsearchStats',
144+
'statistics/search'
144145
);
145146
$secLevelEntries['statistics'] .= $adminHelper->addMenuEntry('reports', 'reports', 'ad_menu_reports');
146147

@@ -269,7 +270,9 @@ protected function getHeader(Request $request): array
269270
case 'admin.statistics.admin-log':
270271
case 'admin.statistics.ratings':
271272
case 'admin.statistics.sessions':
272-
case 'admin.statistics.session':
273+
case 'admin.statistics.session.day':
274+
case 'admin.statistics.session.id':
275+
case 'admin.statistics.search':
273276
$statisticsPage = true;
274277
break;
275278
case 'admin.export':

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ public function index(Request $request): Response
3535
$itemsPerPage = 15;
3636
$page = Filter::filterVar($request->get('page'), FILTER_VALIDATE_INT, 1);
3737

38-
$baseUrl = sprintf('./statistics/admin-log?page=%d', $page);
39-
4038
// Pagination options
4139
$options = [
42-
'baseUrl' => $baseUrl,
40+
'baseUrl' => $request->getUri(),
4341
'total' => $adminLog->getNumberOfEntries(),
4442
'perPage' => $itemsPerPage,
4543
'pageParamName' => 'page',
@@ -48,9 +46,6 @@ public function index(Request $request): Response
4846

4947
$loggingData = $adminLog->getAll();
5048

51-
$totalItems = count($loggingData);
52-
$totalPages = ceil($totalItems / $itemsPerPage);
53-
5449
$offset = ($page - 1) * $itemsPerPage;
5550
$currentItems = array_slice($loggingData, $offset, $itemsPerPage);
5651

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace phpMyFAQ\Controller\Administration;
6+
7+
use phpMyFAQ\Core\Exception;
8+
use phpMyFAQ\Enums\PermissionType;
9+
use phpMyFAQ\Filter;
10+
use phpMyFAQ\Pagination;
11+
use phpMyFAQ\Session\Token;
12+
use phpMyFAQ\Template\Extensions\LanguageCodeTwigExtension;
13+
use phpMyFAQ\Translation;
14+
use Symfony\Component\HttpFoundation\Request;
15+
use Symfony\Component\HttpFoundation\Response;
16+
use Symfony\Component\Routing\Attribute\Route;
17+
use Twig\Error\LoaderError;
18+
19+
class StatisticsSearchController extends AbstractAdministrationController
20+
{
21+
/**
22+
* @throws LoaderError
23+
* @throws Exception
24+
* @throws \Exception
25+
*/
26+
#[Route('/statistics/search', name: 'admin.statistics.search', methods: ['GET'])]
27+
public function index(Request $request): Response
28+
{
29+
$this->userHasPermission(PermissionType::STATISTICS_VIEWLOGS);
30+
31+
$perPage = 10;
32+
33+
$search = $this->container->get('phpmyfaq.search');
34+
$session = $this->container->get('session');
35+
36+
$searchesCount = $search->getSearchesCount();
37+
$searchesList = $search->getMostPopularSearches($searchesCount + 1, true);
38+
39+
// Pagination options
40+
$options = [
41+
'baseUrl' => $request->getUri(),
42+
'total' => is_countable($searchesList) ? count($searchesList) : 0,
43+
'perPage' => $perPage,
44+
'pageParamName' => 'page',
45+
];
46+
$pagination = new Pagination($options);
47+
48+
$this->addExtension(new LanguageCodeTwigExtension());
49+
return $this->render(
50+
'@admin/statistics/search.twig',
51+
[
52+
... $this->getHeader($request),
53+
... $this->getFooter(),
54+
'msgAdminElasticsearchStats' => Translation::get('msgAdminElasticsearchStats'),
55+
'csrfToken' => Token::getInstance($session)->getTokenString('truncate-search-terms'),
56+
'ad_searchterm_del' => Translation::get('ad_searchterm_del'),
57+
'ad_searchstats_search_term' => Translation::get('ad_searchstats_search_term'),
58+
'ad_searchstats_search_term_count' => Translation::get('ad_searchstats_search_term_count'),
59+
'ad_searchstats_search_term_lang' => Translation::get('ad_searchstats_search_term_lang'),
60+
'ad_searchstats_search_term_percentage' => Translation::get('ad_searchstats_search_term_percentage'),
61+
'pagination' => $pagination->render(),
62+
'searchesCount' => $searchesCount,
63+
'searchesList' => $searchesList,
64+
'csrfTokenDelete' => Token::getInstance($session)->getTokenString('delete-searchterm'),
65+
'ad_news_delete' => Translation::get('ad_news_delete'),
66+
]
67+
);
68+
}
69+
}

0 commit comments

Comments
 (0)