Skip to content

Commit 3455bdb

Browse files
committed
Logs page update.
Changelog excerpt: - Added download icons to allow log files to be downloaded directly from the front-end logs page.
1 parent 170b599 commit 3455bdb

File tree

10 files changed

+30
-4
lines changed

10 files changed

+30
-4
lines changed

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,4 @@ __*Why "v3.0.0" instead of "v1.0.0?"*__ Prior to phpMussel v3, the "phpMussel Co
181181
### v3.6.1
182182

183183
- [2025.03.29]: Moved a small number of L10N strings from the front-end to the core due to being needed for some new CLI functionality.
184+
- [2025.04.24]: Added download icons to allow log files to be downloaded directly from the front-end logs page.

assets/bluemetal/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#ffc}
141141
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
142142
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
143143
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
144+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
144145
::selection{background-color:rgba(0,102,204,.6);color:#fff}
145146
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
146147
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/default/download.svg

Lines changed: 1 addition & 0 deletions
Loading

assets/default/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#f88}
145145
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
146146
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
147147
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
148+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
148149
::selection{background-color:rgba(0,102,204,.6);color:#fff}
149150
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
150151
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/moss/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#b77}
142142
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
143143
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
144144
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
145+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
145146
::selection{background-color:rgba(0,102,204,.6);color:#fff}
146147
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
147148
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/primer/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#f88}
147147
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
148148
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
149149
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
150+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
150151
::selection{background-color:rgba(0,102,204,.6);color:#fff}
151152
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
152153
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/primerdark/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#eaa}
150150
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
151151
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
152152
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
153+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
153154
::selection{background-color:rgba(0,102,204,.6);color:#fff}
154155
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
155156
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/rbi/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#f88}
145145
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
146146
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
147147
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
148+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
148149
::selection{background-color:rgba(0,102,204,.6);color:#fff}
149150
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
150151
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

assets/slate/frontend.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ input[type=button].reset:hover,input[type=button].reset:active{color:#fa7}
143143
.navicon.siginfo{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:siginfo.svg}{/Base64Encode})}
144144
.navicon.statistics{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:statistics.svg}{/Base64Encode})}
145145
.navicon.test{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:test.svg}{/Base64Encode})}
146+
.navicon.download{background-image:url(data:image/svg+xml;base64,{Base64Encode}{Asset:download.svg}{/Base64Encode})}
146147
::selection{background-color:rgba(0,102,204,.6);color:#fff}
147148
.txtGn::selection,.txtGn>*:not(.txtOe,.txtRd)::selection{color:#dfc}
148149
.txtOe::selection,.txtOe>*:not(.txtGn,.txtRd)::selection{color:#fec}

src/pages/logs.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* License: GNU/GPLv2
99
* @see LICENSE.txt
1010
*
11-
* This file: The logs page (last modified: 2023.12.13).
11+
* This file: The logs page (last modified: 2025.04.24).
1212
*/
1313

1414
namespace phpMussel\FrontEnd;
@@ -26,6 +26,19 @@
2626
/** Initialise array for fetching logs data. */
2727
$FE['LogFiles'] = ['Files' => $this->logsRecursiveList(), 'Out' => ''];
2828

29+
/** Download a log file. */
30+
if (
31+
isset($this->QueryVariables['text-mode'], $this->QueryVariables['logfile']) &&
32+
$this->QueryVariables['text-mode'] === 'download' &&
33+
isset($FE['LogFiles']['Files'][$this->QueryVariables['logfile']])
34+
) {
35+
header('Content-Type: application/octet-stream');
36+
header('Content-Transfer-Encoding: Binary');
37+
header('Content-disposition: attachment; filename="' . basename($this->QueryVariables['logfile']) . '"');
38+
echo $this->Loader->readFile($this->Vault . $this->QueryVariables['logfile']);
39+
return;
40+
}
41+
2942
/** Text mode switch link base. */
3043
$FE['TextModeSwitchLink'] = '';
3144

@@ -83,15 +96,19 @@
8396
$this->formatter($FE['logfileData']);
8497
}
8598

86-
/** Process logs list. */
99+
$DownloadLabel = $this->Loader->L10N->getString('field.Download');
100+
101+
/** Generate a list of the logs. */
87102
foreach ($FE['LogFiles']['Files'] as $Filename => $Filesize) {
88103
$FE['LogFiles']['Out'] .= sprintf(
89-
' <a href="?phpmussel-page=logs&logfile=%1$s&text-mode=%3$s">%1$s</a> – %2$s<br />',
104+
' <a href="?phpmussel-page=logs&logfile=%1$s&text-mode=%3$s">%1$s</a> – %2$s <a title="%4$s" href="?phpmussel-page=logs&logfile=%1$s&text-mode=download"><span class="navicon download"></span></a><br />',
90105
$Filename ?? '',
91106
$Filesize ?? '',
92-
$FE['TextModeLinks'] ?? ''
107+
$FE['TextModeLinks'] ?? '',
108+
$DownloadLabel
93109
) . "\n";
94110
}
111+
unset($Filesize, $Filename, $DownloadLabel);
95112

96113
/** Calculate page load time (useful for debugging). */
97114
$FE['ProcessTime'] = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];

0 commit comments

Comments
 (0)