diff --git a/README.md b/README.md index a0cda40..ef6221b 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ - (upd 1.2.0) reading PHP error log file (provided that it is installed in php.ini and available for reading from the site) +- (upd 1.3.0) archiving a log file to an archive with a log file name + current datetime (assuming the php-zip extension is connected), the log file is not cleared or deleted, the archive is saved next to the log + **Requirements**: - Joomla 3.2 or later (com_ajax involved) diff --git a/README.ru.md b/README.ru.md index c9acb14..1ec697f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -4,23 +4,25 @@ **Возможности**: -– чтение файлов логов и вывод их содержимого в табличном виде в админке +- чтение файлов логов и вывод их содержимого в табличном виде в админке -– авторазворачивание json-строки сообщения при просмотре лога в админке,
(upd 1.1.0) корректный вывод json с глубокой вложенностью объектов,
(upd 1.1.1) сворачивание (аккордеон) блока json-сообщения для экономии экранного пространства +- авторазворачивание json-строки сообщения при просмотре лога в админке,
(upd 1.1.0) корректный вывод json с глубокой вложенностью объектов,
(upd 1.1.1) сворачивание (аккордеон) блока json-сообщения для экономии экранного пространства -– возможность скачать файл лога в формате CVS (два варианта: классический и специально для открытия в excel без плясок с бубном) +- возможность скачать файл лога в формате CVS (два варианта: классический и специально для открытия в excel без плясок с бубном) -– возможность удалить файл лога +- возможность удалить файл лога -– (upd 1.1.0) корректное чтение файлов логов с нестандартными колонками +- (upd 1.1.0) корректное чтение файлов логов с нестандартными колонками -– (upd 1.2.0) чтение файла лога ошибок PHP (при условии, что он установлен в php.ini и доступен для чтения с сайта) +- (upd 1.2.0) чтение файла лога ошибок PHP (при условии, что он установлен в php.ini и доступен для чтения с сайта) + +- (upd 1.3.0) архивирование файла лога в архив с именем файла лога + текущая дата и время (при условии подключенного расширения php-zip), файл лога при этом не очищается и не удаляется, архив сохраняется рядом с логом **Требования**: -– Joomla 3.2 и выше (задействован com_ajax) +- Joomla 3.2 и выше (задействован com_ajax) -– PHP 5.6 и выше +- PHP 5.6 и выше **Минус**: файл лога читается и выводится целиком, если он большой, то это займет время, создаст нагрузку на ресурсы и трафик, поэтому diff --git a/admin/language/en-GB/en-GB.com_vlogs.ini b/admin/language/en-GB/en-GB.com_vlogs.ini index 615ebfe..6c7b3af 100644 --- a/admin/language/en-GB/en-GB.com_vlogs.ini +++ b/admin/language/en-GB/en-GB.com_vlogs.ini @@ -20,4 +20,9 @@ COM_VLOGS_DOWNLOAD_BUTTON="Download as CSV" COM_VLOGS_DOWNLOAD_BOM_BUTTON="Download as CSV (for MS Excel)" COM_VLOGS_DELETEFILE_BUTTON="Delete log file" COM_VLOGS_DELETEFILE_ALERT="Error deleting file. Delete the file prochnow." -COM_VLOGS_NO_DELETE_PHP_LOG="You cannot delete a PHP log file from the site administration panel. Please use the control panel or your server console to do this." +COM_VLOGS_NO_DELETE_PHP_LOG="You can't delete a PHP log file from the site administration panel. Please use the control panel or the console of your server." +COM_VLOGS_ARCHIVEFILE_BUTTON="Archive active log" +COM_VLOGS_ARCHIVEFILE_ALERT="Log file %s successfully packaged in %s.
Please note: the source file is not deleted or cleared, the archive is saved near the source file." +COM_VLOGS_NO_ARCHIVE_PHP_LOG="You can't archive a PHP file log from the site administration panel. Please use the control panel or the console of your server." +COM_VLOGS_NO_PHPZIP="The php-zip library is not installed, archiving is not possible." +COM_VLOGS_ARCHIVEFILE_ERROR_CREATE="Error creating archive file %s." diff --git a/admin/language/ru-RU/ru-RU.com_vlogs.ini b/admin/language/ru-RU/ru-RU.com_vlogs.ini index 8fe2e33..a2c4ccd 100644 --- a/admin/language/ru-RU/ru-RU.com_vlogs.ini +++ b/admin/language/ru-RU/ru-RU.com_vlogs.ini @@ -21,3 +21,8 @@ COM_VLOGS_DOWNLOAD_BOM_BUTTON="Скачать как CSV (для MS Excel)" COM_VLOGS_DELETEFILE_BUTTON="Удалить файл лога" COM_VLOGS_DELETEFILE_ALERT="Ошибка удаления файла. Удалите файл фручную." COM_VLOGS_NO_DELETE_PHP_LOG="Нельзя удалить файл лога PHP из административной панели сайта. Пожалуйста, воспользуйтесь для этого панелью управлением или консолью вашего сервера." +COM_VLOGS_ARCHIVEFILE_BUTTON="Архирировать текущий лог" +COM_VLOGS_ARCHIVEFILE_ALERT="Файл лога %s успешно упакован в %s.
Обратите внимание: исходный файл не удаляется и не очищается, архив сохраняется рядом с исходным файлом." +COM_VLOGS_NO_ARCHIVE_PHP_LOG="Нельзя архивировать файллога PHP из административной панели сайта. Пожалуйста, воспользуйтесь для этого панелью управлением или консолью вашего сервера." +COM_VLOGS_NO_PHPZIP="Библиотекак php-zip не установлена, архивирование невозможно." +COM_VLOGS_ARCHIVEFILE_ERROR_CREATE="Ошибка создания файла архива %s." diff --git a/admin/models/ajax.php b/admin/models/ajax.php index 14e0396..a3fa949 100644 --- a/admin/models/ajax.php +++ b/admin/models/ajax.php @@ -4,13 +4,6 @@ * @copyright Copyright (C) 2018 Aleksey A. Morozov (AlekVolsk). All rights reserved. * @license GNU General Public License version 3 or later; see http://www.gnu.org/licenses/gpl-3.0.txt */ -function savefile($fname, $val) -{ - $file = fopen( $fname, 'w' ); - fwrite( $file, print_r( $val, true ) ); - flush(); - fclose( $file ); -} class VlogsModelAjax extends JModelList { @@ -401,4 +394,35 @@ public function DelFile() $this->printJson(JText::_('COM_VLOGS_NO_DELETE_PHP_LOG') . ' ' . $file, false); } } + + public function ArchiveFile() + { + $log_path = str_replace('\\', '/', JFactory::getConfig()->get('log_path')); + $file = filter_input(INPUT_GET, 'filename'); + + if ($file !== 'PHP error log') + { + if (!extension_loaded('zip')) { + $this->printJson(JText::_('COM_VLOGS_NO_PHPZIP'), false); + } + + $zip = new ZipArchive(); + + $archFile = pathinfo($log_path . '/' . $file, PATHINFO_FILENAME) . '__' . date('Y-m-d_h-i-s') . '.zip'; + $archPath = $log_path . '/' . $archFile; + + if ($zip->open($archPath, ZIPARCHIVE::CREATE) !== true) { + $this->printJson(JText::_('COM_VLOGS_ARCHIVEFILE_ERROR_CREATE'), false); + } else { + $zip->addFile($log_path . '/' . $file, $file); + $zip->close(); + } + + $this->printJson(JText::sprintf('COM_VLOGS_ARCHIVEFILE_ALERT', $file, $archFile), true); + } + else + { + $this->printJson(JText::_('COM_VLOGS_NO_ARCHIVE_PHP_LOG') . ' ' . $file, false); + } + } } diff --git a/admin/views/items/tmpl/default.php b/admin/views/items/tmpl/default.php index b9a6d05..034ac1b 100644 --- a/admin/views/items/tmpl/default.php +++ b/admin/views/items/tmpl/default.php @@ -22,14 +22,16 @@ .com_vlogs pre {box-sizing:border-box;max-width:100%;width:100%;}