-
-
Save scr4bble/9ee4a9f1405ffc1465f59e03768e2768 to your computer and use it in GitHub Desktop.
| <?php | |
| /** This plugin replaces UNIX timestamps with human-readable dates in your local format. | |
| * Mouse click on the date field reveals timestamp back. | |
| * | |
| * @link https://www.adminer.org/plugins/#use | |
| * @author Anonymous | |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 | |
| * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) | |
| */ | |
| class AdminerReadableDates extends Adminer\Plugin { | |
| /** @access protected */ | |
| var $prepend; | |
| function __construct() { | |
| $this->prepend = <<<EOT | |
| document.addEventListener('DOMContentLoaded', function(event) { | |
| var date = new Date(); | |
| var tds = document.querySelectorAll('td[id^="val"]'); | |
| for (var i = 0; i < tds.length; i++) { | |
| var text = tds[i].innerHTML.trim(); | |
| if (text.match(/^\d{10}$/)) { | |
| date.setTime(parseInt(text) * 1000); | |
| tds[i].oldDate = text; | |
| // tds[i].newDate = date.toUTCString().substr(5); // UTC format | |
| tds[i].newDate = date.toLocaleString(); // Local format | |
| // tds[i].newDate = date.toLocaleFormat('%e %b %Y %H:%M:%S'); // Custom format - works in Firefox only | |
| tds[i].newDate = '<span style="color: #009900">' + tds[i].newDate + '</span>'; | |
| tds[i].innerHTML = tds[i].newDate; | |
| tds[i].dateIsNew = true; | |
| tds[i].addEventListener('click', function(event) { | |
| this.innerHTML = (this.dateIsNew ? this.oldDate : this.newDate); | |
| this.dateIsNew = !this.dateIsNew; | |
| }); | |
| } | |
| } | |
| }); | |
| EOT; | |
| } | |
| function head() { | |
| echo Adminer\script($this->prepend); | |
| } | |
| } |
Adminer 5 wrapped itself into a namespace and plugins now need to call Adminer's functions via this namespace.
Please update this Gist to this: https://gist.github.com/vrana/cf3869fb7cf567ec1f085d0965f5ade4
To make this work in adminer 5 you need to set "class AdminerReadableDates extends Adminer\Plugin". Additionally the whole code can be reduced to the head function. Instead of using <<<EOT it is necessary to echo a script tag containing this JS code. But it seems that the JS code itself is not working anymore. I will inspect this this weekend and try to create a patch for this ;-)
Thanks! I haven't had time to do this yet as I am still postponing the Adminer update. Let me know then and I can replace/update the content of this gist. Not sure if it's still referenced anywhere.
EDIT: seems like it is still referenced
This one works fine.
<?php
/** This plugin replaces UNIX timestamps with human-readable dates in your local format.
* Mouse click on the date field reveals timestamp back.
*
* @link https://www.adminer.org/plugins/#use
* @author Anonymous
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerReadableDates extends Adminer\Plugin {
/** @access protected */
var $prepend;
function __construct() {
$this->prepend = <<<EOT
document.addEventListener('DOMContentLoaded', function(event) {
var date = new Date();
var tds = document.querySelectorAll('td[id^="val"]');
for (var i = 0; i < tds.length; i++) {
var text = tds[i].innerHTML.trim();
if (text.match(/^\d{10}$/)) {
date.setTime(parseInt(text) * 1000);
tds[i].oldDate = text;
// tds[i].newDate = date.toUTCString().substr(5); // UTC format
tds[i].newDate = date.toLocaleString(); // Local format
// tds[i].newDate = date.toLocaleFormat('%e %b %Y %H:%M:%S'); // Custom format - works in Firefox only
tds[i].newDate = '<span style="color: #009900">' + tds[i].newDate + '</span>';
tds[i].innerHTML = tds[i].newDate;
tds[i].dateIsNew = true;
tds[i].addEventListener('click', function(event) {
this.innerHTML = (this.dateIsNew ? this.oldDate : this.newDate);
this.dateIsNew = !this.dateIsNew;
});
}
}
});
EOT;
}
function head() {
echo Adminer\script($this->prepend);
}
}
I have updated these two lines:
class AdminerReadableDates extends Adminer\Plugin {
...
echo Adminer\script($this->prepend);
Let me know please if there are any issues with the latest version.
A lot better way to do this:
public function selectVal(&$val, $link, $field, $original)
{
if (!is_numeric($val)) {
return null;
}
$ts = (int) $val;
// detect milliseconds
if ($ts > 1000000000000) {
$ts = (int) ($ts / 1000);
}
// basic unix timestamp range
if ($ts > 1000000000 && $ts < 20000000000) {
$val = gmdate('Y-m-d H:i:s', $ts);
}
return null;
}
I did not use Adminer several months, but now its working fine. I am on version 4.8.1