1616 */
1717
1818use phpMyFAQ \Component \Alert ;
19+ use phpMyFAQ \Configuration ;
1920use phpMyFAQ \Date ;
2021use phpMyFAQ \Filter ;
2122use phpMyFAQ \Helper \StatisticsHelper ;
2223use phpMyFAQ \Session ;
2324use phpMyFAQ \Session \Token ;
25+ use phpMyFAQ \Template \TwigWrapper ;
2426use phpMyFAQ \Translation ;
27+ use phpMyFAQ \User \CurrentUser ;
2528use phpMyFAQ \Visits ;
2629use Symfony \Component \HttpFoundation \Request ;
2730
3033 exit ();
3134}
3235
36+ $ faqConfig = Configuration::getConfigurationInstance ();
37+ $ user = CurrentUser::getCurrentUser ($ faqConfig );
3338$ request = Request::createFromGlobals ();
3439
35- ?>
36-
37- <div
38- class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
39- <h1 class="h2">
40- <i aria-hidden="true" class="bi bi-list-ol"></i> <?= Translation::get ('ad_stat_sess ' ) ?>
41- </h1>
42- <div class="btn-toolbar mb-2 mb-md-0">
43- <div class="btn-group mr-2">
44- <a class="btn btn-outline-danger"
45- href="?action=clear-visits&csrf=<?= Token::getInstance ()->getTokenString ('clear-visits ' ) ?> ">
46- <i aria-hidden="true" class="bi bi-trash"></i> <?= Translation::get ('ad_clear_all_visits ' ) ?>
47- </a>
48- </div>
49- </div>
50- </div>
51-
52- <?php
5340if ($ user ->perm ->hasPermission ($ user ->getUserId (), 'viewlog ' )) {
5441 $ session = new Session ($ faqConfig );
5542 $ date = new Date ($ faqConfig );
5643 $ visits = new Visits ($ faqConfig );
5744 $ statisticsHelper = new StatisticsHelper ($ session , $ visits , $ date );
5845
5946 $ stats = $ statisticsHelper ->getTrackingFilesStatistics ();
47+ $ visitsPerDay = $ session ->getNumberOfSessions ();
48+
49+ $ twig = new TwigWrapper (PMF_ROOT_DIR . '/assets/templates ' );
50+ $ template = $ twig ->loadTemplate ('./admin/statistics/sessions.twig ' );
6051
6152 $ statdelete = Filter::filterVar ($ request ->request ->get ('statdelete ' ), FILTER_SANITIZE_SPECIAL_CHARS );
6253 $ month = Filter::filterVar ($ request ->request ->get ('month ' ), FILTER_SANITIZE_SPECIAL_CHARS );
@@ -75,135 +66,44 @@ class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-cente
7566
7667 // Delete sessions and session files
7768 if ($ statdelete == 'delete ' && $ month !== '' ) {
78- $ statisticsHelper ->deleteTrackingFiles ($ month );
79-
80- echo Alert::success ('ad_adminlog_delete_success ' );
69+ $ hasMessage = $ statisticsHelper ->deleteTrackingFiles ($ month );
70+ $ message = Translation::get ('ad_adminlog_delete_success ' );
8171 }
8272
8373 // Reset all visits and sessions
8474 if ('clear-visits ' === $ action && $ clearVisits ) {
85- $ statisticsHelper ->clearAllVisits ();
86-
87- echo Alert::success ('ad_reset_visits_success ' );
75+ $ hasMessage = $ statisticsHelper ->clearAllVisits ();
76+ $ message = Translation::get ('ad_reset_visits_success ' );
8877 }
89- ?>
90- <div class="row">
91- <div class="col-6">
92- <div class="card shadow">
93- <div class="card-body">
94- <table class="table table-striped align-middle">
95- <tr>
96- <td><?= Translation::get ('ad_stat_days ' ) ?> :</td>
97- <td><?= $ stats ->numberOfDays ?> </td>
98- </tr>
99- <tr>
100- <td><?= Translation::get ('ad_stat_vis ' ); ?> :</td>
101- <td><?= $ numberOfSessions = $ session ->getNumberOfSessions () ?> </td>
102- </tr>
103- <tr>
104- <td><?= Translation::get ('ad_stat_vpd ' ) ?> :</td>
105- <td><?= ($ stats ->numberOfDays != 0 ) ? round (
106- ($ numberOfSessions / $ stats ->numberOfDays ),
107- 2
108- ) : 0 ?> </td>
109- </tr>
110- <tr>
111- <td><?= Translation::get ('ad_stat_fien ' ) ?> :</td>
112- <td>
113- <?= $ statisticsHelper ->getFirstTrackingDate ($ stats ->firstDate ) ?>
114- </td>
115- </tr>
116- <tr>
117- <td><?= Translation::get ('ad_stat_laen ' ) ?> :</td>
118- <td><?= $ statisticsHelper ->getLastTrackingDate ($ stats ->lastDate ) ?> </td>
119- </tr>
120- <tr>
121- <td><?= Translation::get ('ad_stat_browse ' ) ?> :</td>
122- <td class="col-lg-10">
123- <form action="?action=sessionbrowse" method="post" accept-charset="utf-8"
124- class="row row-cols-lg-auto g-3 align-items-center">
125- <div class="mr-2">
126- <label for="day" class="d-none"><?= Translation::get (
127- 'ad_stat_browse '
128- ) ?> </label>
129- <select name="day" id="day" class="form-select">
130- <?php
131- foreach ($ statisticsHelper ->getAllTrackingDates () as $ trackingDate ) {
132- printf ('<option value="%d" ' , $ trackingDate );
133- if (
134- date ('Y-m-d ' , $ trackingDate ) == date (
135- 'Y-m-d ' ,
136- $ request ->server ->get ('REQUEST_TIME ' )
137- )
138- ) {
139- echo ' selected="selected" ' ;
140- }
141- echo '> ' ;
142- echo $ date ->format (date ('Y-m-d H:i ' , $ trackingDate ));
143- echo "</option> \n" ;
144- }
145- ?>
146- </select>
147- </div>
148- <button class="btn btn-primary" type="submit" name="statbrowse">
149- <?= Translation::get ('ad_stat_ok ' ) ?>
150- </button>
151- </form>
152- </td>
153- </tr>
154- </table>
155- </div>
156- </div>
157- </div>
158-
159- <div class="col-6">
160- <div class="card shadow">
161- <h5 class="card-header py-3">
162- <?= Translation::get ('ad_stat_management ' ) ?>
163- </h5>
164- <div class="card-body">
165- <form action="?action=viewsessions" method="post"
166- class="row row-cols-lg-auto g-3 align-items-center">
167- <input type="hidden" name="statdelete" value="delete">
168- <div class="col-12">
169- <?= Token::getInstance ()->getTokenInput ('sessions ' ) ?>
17078
171- <label class="form-label" for="month"><?= Translation::get ('ad_stat_choose ' ) ?> :</label>
172- <select name="month" id="month" class="form-select">
173- <?php
174- $ oldValue = mktime (0 , 0 , 0 , 1 , 1 , 1970 );
175- $ isFirstDate = true ;
176- foreach ($ statisticsHelper ->getAllTrackingDates () as $ trackingDate ) {
177- if (date ('Y-m ' , $ oldValue ) != date ('Y-m ' , $ trackingDate )) {
178- // The filename format is: trackingDDMMYYYY
179- // e.g.: tracking02042006
180- printf ('<option value="%s" ' , date ('mY ' , $ trackingDate ));
181- // Select the oldest month
182- if ($ isFirstDate ) {
183- echo ' selected ' ;
184- $ isFirstDate = false ;
185- }
186- echo '> ' ;
187- echo date ('Y-m ' , $ trackingDate );
188- echo "</option> \n" ;
189- $ oldValue = $ trackingDate ;
190- }
191- }
192- ?>
193- </select>
194- </div>
195- <div class="col-12">
196- <button class="btn btn-primary" type="submit">
197- <?= Translation::get ('ad_stat_delete ' ) ?>
198- </button>
199- </div>
200- </form>
201- </div>
202- </div>
203- </div>
204- </div>
79+ $ templateVars = [
80+ 'adminHeaderSessions ' => Translation::get ('ad_stat_sess ' ),
81+ 'csrfTokenClearVisits ' => Token::getInstance ()->getTokenString ('clear-visits ' ),
82+ 'msgClearVisits ' => Translation::get ('ad_clear_all_visits ' ),
83+ 'hasMessage ' => $ hasMessage ?? false ,
84+ 'message ' => $ message ?? '' ,
85+ 'msgDays ' => Translation::get ('ad_stat_days ' ),
86+ 'numberOfDays ' => $ stats ->numberOfDays ,
87+ 'msgVisits ' => Translation::get ('ad_stat_vis ' ),
88+ 'numberOfVisits ' => $ visitsPerDay ,
89+ 'msgVisitsPerDay ' => Translation::get ('ad_stat_vpd ' ),
90+ 'visitsPerDay ' => ($ stats ->numberOfDays != 0 ) ? round (($ visitsPerDay / $ stats ->numberOfDays ), 2 ) : 0 ,
91+ 'msgFirstDate ' => Translation::get ('ad_stat_fien ' ),
92+ 'firstDate ' => $ statisticsHelper ->getFirstTrackingDate ($ stats ->firstDate ),
93+ 'msgLastDate ' => Translation::get ('ad_stat_laen ' ),
94+ 'lastDate ' => $ statisticsHelper ->getLastTrackingDate ($ stats ->lastDate ),
95+ 'msgSessionBrowse ' => Translation::get ('ad_stat_browse ' ),
96+ 'renderedDaySelector ' => $ statisticsHelper ->renderDaySelector (),
97+ 'buttonOkay ' => Translation::get ('ad_stat_ok ' ),
98+ 'msgSessionManagement ' => Translation::get ('ad_stat_management ' ),
99+ 'csrfTokenSessions ' => Token::getInstance ()->getTokenInput ('sessions ' ),
100+ 'msgChooseMonth ' => Translation::get ('ad_stat_choose ' ),
101+ 'renderedMonthSelector ' => $ statisticsHelper ->renderMonthSelector (),
102+ 'buttonDeleteMonth ' => Translation::get ('ad_stat_delete ' ),
103+ ];
104+
105+ echo $ template ->render ($ templateVars );
205106
206- <?php
207107} else {
208108 echo Alert::danger ('err_NotAuth ' );
209109}
0 commit comments