xref: /webtrees/app/Http/RequestHandlers/SiteLogsDownload.php (revision 449b311ecf65f677a2595e1e29f712d11ef22f34)
157bfa969SGreg Roach<?php
257bfa969SGreg Roach
357bfa969SGreg Roach/**
457bfa969SGreg Roach * webtrees: online genealogy
5d11be702SGreg Roach * Copyright (C) 2023 webtrees development team
657bfa969SGreg Roach * This program is free software: you can redistribute it and/or modify
757bfa969SGreg Roach * it under the terms of the GNU General Public License as published by
857bfa969SGreg Roach * the Free Software Foundation, either version 3 of the License, or
957bfa969SGreg Roach * (at your option) any later version.
1057bfa969SGreg Roach * This program is distributed in the hope that it will be useful,
1157bfa969SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
1257bfa969SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1357bfa969SGreg Roach * GNU General Public License for more details.
1457bfa969SGreg Roach * You should have received a copy of the GNU General Public License
1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
1657bfa969SGreg Roach */
1757bfa969SGreg Roach
1857bfa969SGreg Roachdeclare(strict_types=1);
1957bfa969SGreg Roach
2057bfa969SGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers;
2157bfa969SGreg Roach
2257bfa969SGreg Roachuse Fig\Http\Message\StatusCodeInterface;
236172e7f6SGreg Roachuse Fisharebest\Webtrees\Registry;
2457bfa969SGreg Roachuse Fisharebest\Webtrees\Services\SiteLogsService;
2557bfa969SGreg Roachuse Psr\Http\Message\ResponseInterface;
2657bfa969SGreg Roachuse Psr\Http\Message\ServerRequestInterface;
2757bfa969SGreg Roachuse Psr\Http\Server\RequestHandlerInterface;
2857bfa969SGreg Roach
2957bfa969SGreg Roachuse function str_replace;
3057bfa969SGreg Roach
3157bfa969SGreg Roach/**
3257bfa969SGreg Roach * Download logs.
3357bfa969SGreg Roach */
3457bfa969SGreg Roachclass SiteLogsDownload implements RequestHandlerInterface
3557bfa969SGreg Roach{
36c4943cffSGreg Roach    private SiteLogsService $site_logs_service;
3757bfa969SGreg Roach
3857bfa969SGreg Roach    /**
3957bfa969SGreg Roach     * @param SiteLogsService $site_logs_service
4057bfa969SGreg Roach     */
4157bfa969SGreg Roach    public function __construct(SiteLogsService $site_logs_service)
4257bfa969SGreg Roach    {
4357bfa969SGreg Roach        $this->site_logs_service = $site_logs_service;
4457bfa969SGreg Roach    }
4557bfa969SGreg Roach
4657bfa969SGreg Roach    /**
4757bfa969SGreg Roach     * @param ServerRequestInterface $request
4857bfa969SGreg Roach     *
4957bfa969SGreg Roach     * @return ResponseInterface
5057bfa969SGreg Roach     */
5157bfa969SGreg Roach    public function handle(ServerRequestInterface $request): ResponseInterface
5257bfa969SGreg Roach    {
536c21f8beSGreg Roach        $content = $this->site_logs_service->logsQuery($request)
5457bfa969SGreg Roach            ->orderBy('log_id')
5557bfa969SGreg Roach            ->get()
56*f25fc0f9SGreg Roach            ->map(static fn (object $row): string => '"' . $row->log_time . '",' .
5757bfa969SGreg Roach            '"' . $row->log_type . '",' .
5857bfa969SGreg Roach            '"' . str_replace('"', '""', $row->log_message) . '",' .
5957bfa969SGreg Roach            '"' . $row->ip_address . '",' .
6057bfa969SGreg Roach            '"' . str_replace('"', '""', $row->user_name) . '",' .
6157bfa969SGreg Roach            '"' . str_replace('"', '""', $row->gedcom_name) . '"' .
62*f25fc0f9SGreg Roach            "\n")
6357bfa969SGreg Roach            ->implode('');
6457bfa969SGreg Roach
656172e7f6SGreg Roach        return Registry::responseFactory()->response($content, StatusCodeInterface::STATUS_OK, [
666172e7f6SGreg Roach            'content-type'        => 'text/csv; charset=UTF-8',
676172e7f6SGreg Roach            'content-disposition' => 'attachment; filename="webtrees-logs.csv"',
6857bfa969SGreg Roach        ]);
6957bfa969SGreg Roach    }
7057bfa969SGreg Roach}
71