Issues (165)

app/Helpers/functions.php (1 issue)

Severity
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2023 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
use Fig\Http\Message\StatusCodeInterface;
21
use Fisharebest\Webtrees\Registry;
22
use Fisharebest\Webtrees\Session as WebtreesSession;
23
use Fisharebest\Webtrees\Validator;
24
use Fisharebest\Webtrees\View as WebtreesView;
25
use Fisharebest\Webtrees\Webtrees;
26
use Psr\Http\Message\ResponseFactoryInterface;
27
use Psr\Http\Message\ResponseInterface;
28
use Psr\Http\Message\ServerRequestInterface;
29
30
/**
31
 * Generate a URL to an asset file in the public folder.
32
 * Add a version parameter for cache-busting.
33
 *
34
 * @param string $path
35
 *
36
 * @return string
37
 */
38
function asset(string $path): string
39
{
40
    if (str_ends_with($path, '/')) {
41
        $version = '';
42
    } elseif (Webtrees::STABILITY === '') {
0 ignored issues
show
The condition Fisharebest\Webtrees\Webtrees::STABILITY === '' is always false.
Loading history...
43
        $version = '?v=' . Webtrees::VERSION;
44
    } else {
45
        $version = '?v=' . filemtime(Webtrees::ROOT_DIR . 'public/' . $path);
46
    }
47
48
    $request  = Registry::container()->get(ServerRequestInterface::class);
49
    $base_url = Validator::attributes($request)->string('base_url');
50
51
    return $base_url . '/public/' . $path . $version;
52
}
53
54
/**
55
 * Generate a CSRF token form field.
56
 *
57
 * @return string
58
 */
59
function csrf_field(): string
60
{
61
    return '<input type="hidden" name="_csrf" value="' . e(WebtreesSession::getCsrfToken()) . '">';
62
}
63
64
/**
65
 * Get the CSRF token value.
66
 *
67
 * @return string
68
 */
69
function csrf_token(): string
70
{
71
    return WebtreesSession::getCsrfToken();
72
}
73
74
/**
75
 * @param string $url
76
 * @param int    $code
77
 *
78
 * @return ResponseInterface
79
 */
80
function redirect(string $url, int $code = StatusCodeInterface::STATUS_FOUND): ResponseInterface
81
{
82
    $response_factory = Registry::container()->get(ResponseFactoryInterface::class);
83
84
    return $response_factory
85
        ->createResponse($code)
86
        ->withHeader('location', $url);
87
}
88
89
/**
90
 * Create a response.
91
 *
92
 * @param array<mixed>|object|string $content
93
 * @param int                        $code
94
 * @param array<string>              $headers
95
 *
96
 * @return ResponseInterface
97
 */
98
function response(array|object|string $content = '', int $code = StatusCodeInterface::STATUS_OK, array $headers = []): ResponseInterface
99
{
100
    return Registry::responseFactory()->response($content, $code, $headers);
101
}
102
103
/**
104
 * Generate a URL for a named route.
105
 *
106
 * @param string                                    $route_name
107
 * @param array<bool|int|string|array<string>|null> $parameters
108
 *
109
 * @return string
110
 */
111
function route(string $route_name, array $parameters = []): string
112
{
113
    return Registry::routeFactory()->route($route_name, $parameters);
114
}
115
116
/**
117
 * Create and render a view in a single operation.
118
 *
119
 * @param string       $name
120
 * @param array<mixed> $data
121
 *
122
 * @return string
123
 */
124
function view(string $name, array $data = []): string
125
{
126
    return WebtreesView::make($name, $data);
127
}
128