|
@@ -15,7 +15,7 @@ declare(strict_types=1);
|
15
|
15
|
class Twig
|
16
|
16
|
{
|
17
|
17
|
/**
|
18
|
|
- * Singleton stuff
|
|
18
|
+ * __functions
|
19
|
19
|
*/
|
20
|
20
|
|
21
|
21
|
private static $Twig = null;
|
|
@@ -33,6 +33,18 @@ class Twig
|
33
|
33
|
);
|
34
|
34
|
}
|
35
|
35
|
|
|
36
|
+ public function __wakeup()
|
|
37
|
+ {
|
|
38
|
+ return trigger_error(
|
|
39
|
+ 'wakeup() not allowed',
|
|
40
|
+ E_USER_ERROR
|
|
41
|
+ );
|
|
42
|
+ }
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+ /**
|
|
46
|
+ * go
|
|
47
|
+ */
|
36
|
48
|
public static function go()
|
37
|
49
|
{
|
38
|
50
|
return (self::$Twig === null)
|
|
@@ -48,7 +60,7 @@ class Twig
|
48
|
60
|
private static function factory(): \Twig\Environment
|
49
|
61
|
{
|
50
|
62
|
$ENV = ENV::go();
|
51
|
|
- $twig = new \Twig\Environment(
|
|
63
|
+ $Twig = new \Twig\Environment(
|
52
|
64
|
new \Twig\Loader\FilesystemLoader("$ENV->SERVER_ROOT/templates"),
|
53
|
65
|
[
|
54
|
66
|
'auto_reload' => true,
|
|
@@ -58,49 +70,49 @@ class Twig
|
58
|
70
|
]
|
59
|
71
|
);
|
60
|
72
|
|
61
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
73
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
62
|
74
|
'article',
|
63
|
75
|
function ($word) {
|
64
|
76
|
return preg_match('/^[aeiou]/i', $word) ? 'an' : 'a';
|
65
|
77
|
}
|
66
|
78
|
));
|
67
|
79
|
|
68
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
80
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
69
|
81
|
'b64',
|
70
|
82
|
function (string $binary) {
|
71
|
83
|
return base64_encode($binary);
|
72
|
84
|
}
|
73
|
85
|
));
|
74
|
86
|
|
75
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
87
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
76
|
88
|
'bb_format',
|
77
|
89
|
function ($text) {
|
78
|
90
|
return new \Twig\Markup(\Text::full_format($text), 'UTF-8');
|
79
|
91
|
}
|
80
|
92
|
));
|
81
|
93
|
|
82
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
94
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
83
|
95
|
'checked',
|
84
|
96
|
function ($isChecked) {
|
85
|
97
|
return $isChecked ? ' checked="checked"' : '';
|
86
|
98
|
}
|
87
|
99
|
));
|
88
|
100
|
|
89
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
101
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
90
|
102
|
'image',
|
91
|
103
|
function ($i) {
|
92
|
104
|
return new \Twig\Markup(\ImageTools::process($i, true), 'UTF-8');
|
93
|
105
|
}
|
94
|
106
|
));
|
95
|
107
|
|
96
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
108
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
97
|
109
|
'ipaddr',
|
98
|
110
|
function ($ipaddr) {
|
99
|
111
|
return new \Twig\Markup(\Tools::display_ip($ipaddr), 'UTF-8');
|
100
|
112
|
}
|
101
|
113
|
));
|
102
|
114
|
|
103
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
115
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
104
|
116
|
'octet_size',
|
105
|
117
|
function ($size, array $option = []) {
|
106
|
118
|
return \Format::get_size($size, empty($option) ? 2 : $option[0]);
|
|
@@ -108,42 +120,42 @@ class Twig
|
108
|
120
|
['is_variadic' => true]
|
109
|
121
|
));
|
110
|
122
|
|
111
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
123
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
112
|
124
|
'plural',
|
113
|
125
|
function ($number) {
|
114
|
126
|
return plural($number);
|
115
|
127
|
}
|
116
|
128
|
));
|
117
|
129
|
|
118
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
130
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
119
|
131
|
'selected',
|
120
|
132
|
function ($isSelected) {
|
121
|
133
|
return $isSelected ? ' selected="selected"' : '';
|
122
|
134
|
}
|
123
|
135
|
));
|
124
|
136
|
|
125
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
137
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
126
|
138
|
'shorten',
|
127
|
139
|
function (string $text, int $length) {
|
128
|
140
|
return shortenString($text, $length);
|
129
|
141
|
}
|
130
|
142
|
));
|
131
|
143
|
|
132
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
144
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
133
|
145
|
'time_diff',
|
134
|
146
|
function ($time) {
|
135
|
147
|
return new \Twig\Markup(time_diff($time), 'UTF-8');
|
136
|
148
|
}
|
137
|
149
|
));
|
138
|
150
|
|
139
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
151
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
140
|
152
|
'ucfirst',
|
141
|
153
|
function ($text) {
|
142
|
154
|
return ucfirst($text);
|
143
|
155
|
}
|
144
|
156
|
));
|
145
|
157
|
|
146
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
158
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
147
|
159
|
'ucfirstall',
|
148
|
160
|
function ($text) {
|
149
|
161
|
return implode(' ', array_map(function ($w) {
|
|
@@ -152,28 +164,28 @@ class Twig
|
152
|
164
|
}
|
153
|
165
|
));
|
154
|
166
|
|
155
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
167
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
156
|
168
|
'user_url',
|
157
|
169
|
function ($userId) {
|
158
|
170
|
return new \Twig\Markup(\Users::format_username($userId, false, false, false), 'UTF-8');
|
159
|
171
|
}
|
160
|
172
|
));
|
161
|
173
|
|
162
|
|
- $twig->addFilter(new \Twig\TwigFilter(
|
|
174
|
+ $Twig->addFilter(new \Twig\TwigFilter(
|
163
|
175
|
'user_full',
|
164
|
176
|
function ($userId) {
|
165
|
177
|
return new \Twig\Markup(\Users::format_username($userId, true, true, true, true), 'UTF-8');
|
166
|
178
|
}
|
167
|
179
|
));
|
168
|
180
|
|
169
|
|
- $twig->addFunction(new \Twig\TwigFunction('donor_icon', function ($icon, $userId) {
|
|
181
|
+ $Twig->addFunction(new \Twig\TwigFunction('donor_icon', function ($icon, $userId) {
|
170
|
182
|
return new \Twig\Markup(
|
171
|
183
|
\ImageTools::process($icon, false, 'donoricon', $userId),
|
172
|
184
|
'UTF-8'
|
173
|
185
|
);
|
174
|
186
|
}));
|
175
|
187
|
|
176
|
|
- $twig->addFunction(new \Twig\TwigFunction('privilege', function ($default, $config, $key) {
|
|
188
|
+ $Twig->addFunction(new \Twig\TwigFunction('privilege', function ($default, $config, $key) {
|
177
|
189
|
return new \Twig\Markup(
|
178
|
190
|
(
|
179
|
191
|
$default
|
|
@@ -197,14 +209,14 @@ class Twig
|
197
|
209
|
);
|
198
|
210
|
}));
|
199
|
211
|
|
200
|
|
- $twig->addFunction(new \Twig\TwigFunction('ratio', function ($up, $down) {
|
|
212
|
+ $Twig->addFunction(new \Twig\TwigFunction('ratio', function ($up, $down) {
|
201
|
213
|
return new \Twig\Markup(
|
202
|
214
|
\Format::get_ratio_html($up, $down),
|
203
|
215
|
'UTF-8'
|
204
|
216
|
);
|
205
|
217
|
}));
|
206
|
218
|
|
207
|
|
- $twig->addFunction(new \Twig\TwigFunction('resolveCountryIpv4', function ($addr) {
|
|
219
|
+ $Twig->addFunction(new \Twig\TwigFunction('resolveCountryIpv4', function ($addr) {
|
208
|
220
|
return new \Twig\Markup(
|
209
|
221
|
(function ($ip) {
|
210
|
222
|
static $cache = [];
|
|
@@ -225,7 +237,7 @@ class Twig
|
225
|
237
|
);
|
226
|
238
|
}));
|
227
|
239
|
|
228
|
|
- $twig->addFunction(new \Twig\TwigFunction('resolveIpv4', function ($addr) {
|
|
240
|
+ $Twig->addFunction(new \Twig\TwigFunction('resolveIpv4', function ($addr) {
|
229
|
241
|
return new \Twig\Markup(
|
230
|
242
|
(function ($ip) {
|
231
|
243
|
if (!$ip) {
|
|
@@ -244,19 +256,19 @@ class Twig
|
244
|
256
|
);
|
245
|
257
|
}));
|
246
|
258
|
|
247
|
|
- $twig->addFunction(new \Twig\TwigFunction('shorten', function ($text, $length) {
|
|
259
|
+ $Twig->addFunction(new \Twig\TwigFunction('shorten', function ($text, $length) {
|
248
|
260
|
return new \Twig\Markup(
|
249
|
261
|
shortenString($text, $length),
|
250
|
262
|
'UTF-8'
|
251
|
263
|
);
|
252
|
264
|
}));
|
253
|
265
|
|
254
|
|
- $twig->addTest(
|
|
266
|
+ $Twig->addTest(
|
255
|
267
|
new \Twig\TwigTest('numeric', function ($value) {
|
256
|
268
|
return is_numeric($value);
|
257
|
269
|
})
|
258
|
270
|
);
|
259
|
271
|
|
260
|
|
- return $twig;
|
|
272
|
+ return $Twig;
|
261
|
273
|
}
|
262
|
274
|
}
|