| Server IP : 188.114.96.3 / Your IP : 216.73.216.143 Web Server : Apache System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64 User : ( 3194769) PHP Version : 8.5.12 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /polana/includes/ |
Upload File : |
<?php
declare(strict_types=1);
function seasonal_interactive_default_start_dates(): array
{
return [
'spring' => '03-20',
'summer' => '06-21',
'autumn' => '09-23',
'winter' => '12-21',
];
}
function seasonal_interactive_normalize_mmdd(string $value): ?string
{
$value = trim($value);
if (!preg_match('/^(\d{1,2})-(\d{1,2})$/', $value, $m)) {
return null;
}
$month = (int)$m[1];
$day = (int)$m[2];
if (!checkdate($month, $day, 2024)) {
return null;
}
return sprintf('%02d-%02d', $month, $day);
}
function seasonal_interactive_start_dates(): array
{
$defaults = seasonal_interactive_default_start_dates();
$dates = [];
foreach ($defaults as $season => $default) {
$raw = setting('visual_' . $season . '_start', $default);
$dates[$season] = seasonal_interactive_normalize_mmdd($raw) ?? $default;
}
return $dates;
}
function seasonal_interactive_validate_start_dates(array $input): array
{
$defaults = seasonal_interactive_default_start_dates();
$normalized = [];
foreach ($defaults as $season => $default) {
$normalized[$season] = seasonal_interactive_normalize_mmdd((string)($input[$season] ?? $default));
if ($normalized[$season] === null) {
throw new RuntimeException('Daty pór roku muszą być w formacie MM-DD, np. 03-01.');
}
}
$spring = (int)str_replace('-', '', $normalized['spring']);
$summer = (int)str_replace('-', '', $normalized['summer']);
$autumn = (int)str_replace('-', '', $normalized['autumn']);
$winter = (int)str_replace('-', '', $normalized['winter']);
if (!($spring < $summer && $summer < $autumn && $autumn < $winter)) {
throw new RuntimeException('Daty muszą iść po kolei w roku: wiosna < lato < jesień < zima.');
}
return $normalized;
}
function seasonal_interactive_season_ranges(?array $dates = null): array
{
$dates = $dates ?? seasonal_interactive_start_dates();
return [
'spring' => 'od ' . str_replace('-', '.', $dates['spring']) . ' do dnia przed ' . str_replace('-', '.', $dates['summer']),
'summer' => 'od ' . str_replace('-', '.', $dates['summer']) . ' do dnia przed ' . str_replace('-', '.', $dates['autumn']),
'autumn' => 'od ' . str_replace('-', '.', $dates['autumn']) . ' do dnia przed ' . str_replace('-', '.', $dates['winter']),
'winter' => 'od ' . str_replace('-', '.', $dates['winter']) . ' do dnia przed ' . str_replace('-', '.', $dates['spring']),
];
}
function seasonal_interactive_season(): string
{
$override = setting('visual_season_override', 'auto');
if (in_array($override, ['spring', 'summer', 'autumn', 'winter'], true)) {
return $override;
}
$dates = seasonal_interactive_start_dates();
$today = (int)date('md');
$spring = (int)str_replace('-', '', $dates['spring']);
$summer = (int)str_replace('-', '', $dates['summer']);
$autumn = (int)str_replace('-', '', $dates['autumn']);
$winter = (int)str_replace('-', '', $dates['winter']);
if ($today >= $winter || $today < $spring) {
return 'winter';
}
if ($today >= $autumn) {
return 'autumn';
}
if ($today >= $summer) {
return 'summer';
}
return 'spring';
}
function seasonal_interactive_label(string $season): string
{
return match ($season) {
'spring' => 'Wiosna',
'summer' => 'Lato',
'autumn' => 'Jesień',
default => 'Zima',
};
}
function render_seasonal_illustration(string $context = 'home', string $class = '', ?string $forcedSeason = null): void
{
$season = in_array($forcedSeason, ['spring', 'summer', 'autumn', 'winter'], true)
? (string)$forcedSeason
: seasonal_interactive_season();
if ($season === 'winter') {
?>
<div class="seasonal-interactive season-winter <?= e($class) ?>" data-seasonal-interactive data-motion="<?= visual_motion_enabled() ? '1' : '0' ?>" aria-label="Zimowa ilustracja restauracji">
<div class="seasonal-orbit seasonal-orbit-a"></div>
<div class="seasonal-orbit seasonal-orbit-b"></div>
<?php render_pot_visual('seasonal-winter-pot'); ?>
</div>
<?php
return;
}
?>
<div
class="seasonal-interactive season-<?= e($season) ?> <?= e($class) ?>"
data-seasonal-interactive
data-motion="<?= visual_motion_enabled() ? '1' : '0' ?>"
aria-label="<?= e(seasonal_interactive_label($season)) ?> – animowana ilustracja restauracji"
>
<?php if ($season === 'spring'): ?>
<svg viewBox="0 0 640 520" class="seasonal-svg" role="img" aria-hidden="true">
<ellipse class="season-shadow" cx="320" cy="438" rx="185" ry="22"/>
<ellipse class="season-plate" cx="320" cy="340" rx="190" ry="92"/>
<ellipse class="season-plate-inner" cx="320" cy="326" rx="145" ry="60"/>
<g class="spring-leaf spring-leaf-a">
<path d="M245 326 C186 259 210 184 269 165 C290 229 287 286 245 326Z"/>
<path class="season-stem" d="M254 318 C252 271 257 222 270 173"/>
</g>
<g class="spring-leaf spring-leaf-b">
<path d="M360 323 C421 264 414 195 365 171 C341 224 337 276 360 323Z"/>
<path class="season-stem" d="M355 315 C359 266 363 220 366 179"/>
</g>
<g class="spring-herbs">
<path d="M304 329 C298 273 307 222 325 183"/>
<path d="M320 329 C336 271 351 239 382 209"/>
<path d="M287 330 C276 283 257 249 232 224"/>
</g>
<g class="spring-flower spring-flower-a" transform="translate(302 200)">
<circle cx="0" cy="-16" r="16"/>
<circle cx="16" cy="0" r="16"/>
<circle cx="0" cy="16" r="16"/>
<circle cx="-16" cy="0" r="16"/>
<circle class="season-red" cx="0" cy="0" r="10"/>
</g>
<g class="spring-flower spring-flower-b" transform="translate(385 240) scale(.7)">
<circle cx="0" cy="-16" r="16"/>
<circle cx="16" cy="0" r="16"/>
<circle cx="0" cy="16" r="16"/>
<circle cx="-16" cy="0" r="16"/>
<circle class="season-red" cx="0" cy="0" r="10"/>
</g>
<circle class="season-red spring-dot spring-dot-a" cx="205" cy="280" r="8"/>
<circle class="season-red spring-dot spring-dot-b" cx="438" cy="302" r="6"/>
<ellipse class="spring-petal spring-petal-a" cx="228" cy="168" rx="12" ry="7" transform="rotate(-22 228 168)"/>
<ellipse class="spring-petal spring-petal-b" cx="418" cy="186" rx="10" ry="6" transform="rotate(18 418 186)"/>
</svg>
<?php elseif ($season === 'summer'): ?>
<svg viewBox="0 0 640 520" class="seasonal-svg" role="img" aria-hidden="true">
<ellipse class="season-shadow" cx="320" cy="438" rx="190" ry="22"/>
<ellipse class="season-plate" cx="320" cy="340" rx="196" ry="94"/>
<ellipse class="season-plate-inner" cx="320" cy="327" rx="156" ry="66"/>
<g class="summer-tomato summer-tomato-a">
<circle class="season-red" cx="260" cy="318" r="55"/>
<path class="summer-star" d="M260 256l10 24 25-9-16 22 22 15-27-2-7 26-8-25-27 3 21-16-17-21 25 8z"/>
</g>
<g class="summer-tomato summer-tomato-b">
<circle class="season-red summer-red-soft" cx="378" cy="332" r="46"/>
<path class="summer-star" d="M378 285l8 20 22-7-14 18 19 13-23-2-6 22-7-21-22 2 18-13-14-18 21 7z"/>
</g>
<g class="summer-herb">
<path d="M317 304 C314 246 337 202 380 176"/>
<ellipse cx="342" cy="236" rx="19" ry="39" transform="rotate(-42 342 236)"/>
<ellipse cx="374" cy="205" rx="18" ry="36" transform="rotate(30 374 205)"/>
<ellipse cx="300" cy="245" rx="16" ry="33" transform="rotate(-22 300 245)"/>
</g>
<circle class="summer-sun" cx="463" cy="154" r="35"/>
<path class="summer-sun-ray" d="M463 93v-30M463 245v-30M402 154h-30M554 154h-30M420 111l-22-22M528 219l-22-22M506 111l22-22M398 219l22-22"/>
<path class="summer-heat summer-heat-a" d="M210 246 C230 228 220 204 238 188"/>
<path class="summer-heat summer-heat-b" d="M322 236 C340 218 332 194 350 178"/>
<path class="summer-heat summer-heat-c" d="M408 252 C426 234 420 208 436 194"/>
</svg>
<?php else: ?>
<svg viewBox="0 0 640 520" class="seasonal-svg" role="img" aria-hidden="true">
<ellipse class="season-shadow" cx="320" cy="438" rx="186" ry="22"/>
<ellipse class="season-bowl" cx="320" cy="344" rx="183" ry="94"/>
<path class="season-bowl-front" d="M141 344 C153 428 205 454 320 454 C435 454 487 428 499 344 C457 393 402 407 320 407 C238 407 183 393 141 344Z"/>
<g class="mushroom mushroom-a" transform="translate(250 267)">
<path class="mushroom-cap" d="M-58 8C-48-41 48-41 58 8Z"/>
<path class="mushroom-stem" d="M-14 7h28l12 74h-52z"/>
</g>
<g class="mushroom mushroom-b" transform="translate(365 290) scale(.8)">
<path class="mushroom-cap" d="M-58 8C-48-41 48-41 58 8Z"/>
<path class="mushroom-stem" d="M-14 7h28l12 74h-52z"/>
</g>
<g class="autumn-leaf autumn-leaf-a">
<path d="M160 135C212 148 226 192 196 231C162 213 142 180 160 135Z"/>
</g>
<g class="autumn-leaf autumn-leaf-b">
<path d="M472 105C521 129 524 174 488 205C458 179 446 145 472 105Z"/>
</g>
<g class="autumn-leaf autumn-leaf-c">
<path d="M444 224C478 239 482 272 456 295C432 278 423 251 444 224Z"/>
</g>
<path class="autumn-herb" d="M315 326 C318 266 303 222 276 184"/>
<path class="autumn-herb" d="M330 326 C345 271 372 231 411 203"/>
<g class="autumn-leaf autumn-leaf-d">
<path d="M250 110C286 126 292 158 270 184C244 171 231 141 250 110Z"/>
</g>
</svg>
<?php endif; ?>
</div>
<?php
}