* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ class RetailcrmLoggerHelper { public static function download($name) { if (empty($name)) { return false; } $filePath = self::checkFileName($name); if (false === $filePath) { return false; } header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($filePath)); header('Content-Length: ' . filesize($filePath)); readfile($filePath); return true; } public static function downloadAll() { $zipname = _PS_DOWNLOAD_DIR_ . '/retailcrm_logs_' . date('Y-m-d H-i-s') . '.zip'; $zipFile = new ZipArchive(); $zipFile->open($zipname, ZipArchive::CREATE); foreach (self::getLogFiles() as $logFile) { $zipFile->addFile($logFile, basename($logFile)); } $zipFile->close(); header('Content-Type: ' . mime_content_type($zipname)); header('Content-disposition: attachment; filename=' . basename($zipname)); header('Content-Length: ' . filesize($zipname)); readfile($zipname); unlink($zipname); return true; } /** * Checks if given logs filename relates to the module * * @param string $file * * @return false|string */ public static function checkFileName($file) { $logDir = RetailcrmLogger::getLogDir(); if (preg_match('/^retailcrm[a-zA-Z0-9-_]+.log$/', $file)) { $path = "$logDir/$file"; if (is_file($path)) { return $path; } } return false; } /** * Retrieves log files paths * * @return Generator|void */ public static function getLogFiles() { $logDir = RetailcrmLogger::getLogDir(); if (!is_dir($logDir)) { return; } $handle = opendir($logDir); while (($file = readdir($handle)) !== false) { if (false !== self::checkFileName($file)) { yield "$logDir/$file"; } } closedir($handle); } }