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%;}