diff --git a/public/SKAUT_horizontalni_logo_250.png b/public/assets/SKAUT_horizontalni_logo_250.png similarity index 100% rename from public/SKAUT_horizontalni_logo_250.png rename to public/assets/SKAUT_horizontalni_logo_250.png diff --git a/public/ZNAK_EN_Scouting_Slovakia_500.png b/public/assets/ZNAK_EN_Scouting_Slovakia_500.png similarity index 100% rename from public/ZNAK_EN_Scouting_Slovakia_500.png rename to public/assets/ZNAK_EN_Scouting_Slovakia_500.png diff --git a/public/favicon-16x16.png b/public/assets/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to public/assets/favicon-16x16.png diff --git a/public/logo_aqua23_168.png b/public/assets/logo_aqua23_168.png similarity index 100% rename from public/logo_aqua23_168.png rename to public/assets/logo_aqua23_168.png diff --git a/public/logo_aqua_zelene_168.png b/public/assets/logo_aqua_zelene_168.png similarity index 100% rename from public/logo_aqua_zelene_168.png rename to public/assets/logo_aqua_zelene_168.png diff --git a/public/logo_cej22_200.png b/public/assets/logo_cej22_200.png similarity index 100% rename from public/logo_cej22_200.png rename to public/assets/logo_cej22_200.png diff --git a/public/logo_cej24_color_160.png b/public/assets/logo_cej24_color_160.png similarity index 100% rename from public/logo_cej24_color_160.png rename to public/assets/logo_cej24_color_160.png diff --git a/public/logo_korbo_89.png b/public/assets/logo_korbo_89.png similarity index 100% rename from public/logo_korbo_89.png rename to public/assets/logo_korbo_89.png diff --git a/public/logo_navigamus21_cerna_200.png b/public/assets/logo_navigamus21_cerna_200.png similarity index 100% rename from public/logo_navigamus21_cerna_200.png rename to public/assets/logo_navigamus21_cerna_200.png diff --git a/public/logo_navigamus21_modra_200.png b/public/assets/logo_navigamus21_modra_200.png similarity index 100% rename from public/logo_navigamus21_modra_200.png rename to public/assets/logo_navigamus21_modra_200.png diff --git a/public/logo_obrok23_200.png b/public/assets/logo_obrok23_200.png similarity index 100% rename from public/logo_obrok23_200.png rename to public/assets/logo_obrok23_200.png diff --git a/public/logo_obrok24.png b/public/assets/logo_obrok24.png similarity index 100% rename from public/logo_obrok24.png rename to public/assets/logo_obrok24.png diff --git a/public/logo_wsj23_220.png b/public/assets/logo_wsj23_220.png similarity index 100% rename from public/logo_wsj23_220.png rename to public/assets/logo_wsj23_220.png diff --git a/public/styles.css b/public/styles.css index 0302d6b1..0bf9d134 100755 --- a/public/styles.css +++ b/public/styles.css @@ -1,103 +1,3 @@ -@font-face { - font-family: 'themix'; - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.eot'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.eot? #iefix') format('embedded-opentype'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.woff') format('woff'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400.woff2') format('woff2'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400.otf') format('opentype'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400.svg#themix') format('svg'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'themix'; - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.eot'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.eot? #iefix') format('embedded-opentype'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.woff') format('woff'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.woff2') format('woff2'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.otf') format('opentype'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.svg#themix') format('svg'); - font-weight: 400; - font-style: italic; -} - -@font-face { - font-family: 'themix'; - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.eot'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.eot? #iefix') format('embedded-opentype'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.woff') format('woff'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700.woff2') format('woff2'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700.otf') format('opentype'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700.svg#themix') format('svg'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'themix'; - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.eot'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.eot? #iefix') format('embedded-opentype'); - src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.woff') format('woff'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.woff2') format('woff2'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.otf') format('opentype'), - url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.svg#themix') format('svg'); - font-weight: 700; - font-style: italic; -} - -@font-face { - font-family: 'skautbold'; - src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.eot'); - src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.eot? #iefix') format('embedded-opentype'); - src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.woff') format('woff'), - url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.otf') format('opentype'), - url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.svg#skautbold') format('svg'); - font-weight: normal; - font-style: normal; -} - -:root { - background: var(--color-background); - --border-radius: 6px; - font-family: 'themix', sans-serif; - box-sizing: border-box; - color: var(--color-main); - color-scheme: light dark; - accent-color: var(--color-main); -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: #e6ebed; - --color-card-background: #f9f9f9; - --color-input-background: #ffffff; - --color-main: #0D71B9; - --color-accent: #b9550d; - --color-fading: #a6d9ff; - --color-light: #3ba5f1; - --color-dark: #06375a; - --color-grey: #636363; - --color-link: #0000ee; - --color-link-visited: #551a8b; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: #212121; - --color-card-background: #252525; - --color-input-background: #2f2f2f; - --color-main: #85A2D5; - --color-accent: #d5b885; - --color-fading: #1f2e3d; - --color-light: #3e6ab5; - --color-dark: #d1dcef; - --color-grey: #888888; - --color-link: lightskyblue; - --color-link-visited: #ad76de; - } -} *, *::before, *::after { box-sizing: inherit; @@ -138,9 +38,16 @@ h1 { box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); background-color: var(--color-card-background); border-radius: var(--border-radius); - padding: 35px 44px; - margin-bottom: 11px; + padding: 25px; text-align: center; + margin: 10px; +} + +@media (min-width: 768px) { + .card { + padding: 35px 44px; + margin: 0 0 11px; + } } .card-half { @@ -166,6 +73,15 @@ h1 { h2, h3 { margin-top: 0; } +h2 { + font-size: 1.25rem; /* Smaller font for mobile */ +} + +@media (min-width: 768px) { + h2 { + font-size: 1.75rem; + } +} a { color: var(--color-link); @@ -209,10 +125,17 @@ a:visited { .two-cards { display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: 1fr; grid-gap: 13px; } +@media (min-width: 768px) { + .two-cards { + grid-template-columns: repeat(2, 1fr) + } +} + + .login-card { margin: 0 auto; max-width: 400px; @@ -230,16 +153,22 @@ ul.steps { padding: 0; flex-direction: row; } +@media (max-width: 250px) { + ul.steps { + display: none; + } +} li.step { width: 33%; position: relative; text-align: center; - font-size: 1.25rem; + font-size: clamp(0.75rem, 4vw, 1.25rem); font-weight: bolder; color: var(--color-light); } + li.step::before { content: " "; line-height: 30px; diff --git a/public/theme.css b/public/theme.css new file mode 100644 index 00000000..deeb3ec7 --- /dev/null +++ b/public/theme.css @@ -0,0 +1,100 @@ +@font-face { + font-family: 'themix'; + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.eot'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.eot? #iefix') format('embedded-opentype'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400.woff') format('woff'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400.woff2') format('woff2'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400.otf') format('opentype'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400.svg#themix') format('svg'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'themix'; + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.eot'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.eot? #iefix') format('embedded-opentype'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.woff') format('woff'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.woff2') format('woff2'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.otf') format('opentype'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_400i.svg#themix') format('svg'); + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: 'themix'; + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.eot'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.eot? #iefix') format('embedded-opentype'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700.woff') format('woff'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700.woff2') format('woff2'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700.otf') format('opentype'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700.svg#themix') format('svg'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'themix'; + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.eot'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.eot? #iefix') format('embedded-opentype'); + src: url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.woff') format('woff'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.woff2') format('woff2'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.otf') format('opentype'), + url('https://cdn.skauting.cz/fonts/TheMix_LT_700i.svg#themix') format('svg'); + font-weight: 700; + font-style: italic; +} + +@font-face { + font-family: 'skautbold'; + src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.eot'); + src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.eot? #iefix') format('embedded-opentype'); + src: url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.woff') format('woff'), + url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.otf') format('opentype'), + url('https://cdn.skauting.cz/fonts/skaut-bold-webfont.svg#skautbold') format('svg'); + font-weight: normal; + font-style: normal; +} + +:root { + background: var(--color-background); + --border-radius: 6px; + font-family: 'themix', sans-serif; + box-sizing: border-box; + color: var(--color-main); + color-scheme: light dark; + accent-color: var(--color-main); +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: #e6ebed; + --color-card-background: #f9f9f9; + --color-input-background: #ffffff; + --color-main: #0D71B9; + --color-accent: #b9550d; + --color-fading: #a6d9ff; + --color-light: #3ba5f1; + --color-dark: #06375a; + --color-grey: #636363; + --color-link: #0000ee; + --color-link-visited: #551a8b; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: #212121; + --color-card-background: #252525; + --color-input-background: #2f2f2f; + --color-main: #85A2D5; + --color-accent: #d5b885; + --color-fading: #1f2e3d; + --color-light: #3e6ab5; + --color-dark: #d1dcef; + --color-grey: #888888; + --color-link: lightskyblue; + --color-link-visited: #ad76de; + } +} diff --git a/src/Event/Event.php b/src/Event/Event.php index 082d8ee2..56d812a0 100755 --- a/src/Event/Event.php +++ b/src/Event/Event.php @@ -123,7 +123,13 @@ public function getAvailableRoles(): array public function getLogoInBase64(): string { - return ImageUtils::getLocalImageInBase64($this->logoUrl); + return ImageUtils::getLocalImageInBase64(self::getFullLogoUrl($this->logoUrl)); + } + + public static function getFullLogoUrl(?string $logoUrl): string + { + if ($logoUrl === null) { return "";} + return "/assets" . $logoUrl; } public function getMinimalPpCount(Participant $participant): int diff --git a/src/Event/EventType/EventType.php b/src/Event/EventType/EventType.php index cd35d86e..9c3c0b60 100755 --- a/src/Event/EventType/EventType.php +++ b/src/Event/EventType/EventType.php @@ -232,7 +232,7 @@ public function showIban(): bool public function getSkautLogoPath(Participant $participant): string { - return '/SKAUT_horizontalni_logo_250.png'; + return '/assets/SKAUT_horizontalni_logo_250.png'; } public function getSkautStampSignPath(Participant $participant): string diff --git a/src/Export/ExportService.php b/src/Export/ExportService.php index 4acc92c3..02314b16 100755 --- a/src/Export/ExportService.php +++ b/src/Export/ExportService.php @@ -195,6 +195,7 @@ public function allRegistrationDataToCSV(Event $event, User $adminUser): array 'registrationApproveDate', 'registrationPayDate', // 35 'entryDate', + 'leaveDate', 'patrolOrTroopLeaderId', 'patrolName', 'patrolParticipantCount', @@ -286,6 +287,8 @@ public function allRegistrationDataToCSV(Event $event, User $adminUser): array $participant->registrationApproveDate !== null ? $participant->registrationApproveDate->format('d. m. Y H:i:s') : '', // 35 $participant->registrationPayDate !== null ? $participant->registrationPayDate->format('d. m. Y H:i:s') : '', $participant->entryDate !== null ? $participant->entryDate->format('d. m. Y H:i:s') : '', + $participant->leaveDate !== null ? $participant->leaveDate->format('d. m. Y H:i:s') : '', + ], $ptPart, $istPart diff --git a/src/Mailer/Mailer.php b/src/Mailer/Mailer.php index 32dea71b..d21f3ff2 100755 --- a/src/Mailer/Mailer.php +++ b/src/Mailer/Mailer.php @@ -4,6 +4,7 @@ namespace kissj\Mailer; +use kissj\Event\Event; use kissj\Participant\Participant; use kissj\Payment\Payment; use kissj\Payment\QrCodeService; @@ -224,7 +225,7 @@ private function sendMailFromTemplate( $email->htmlTemplate('emails/' . $templateName . '.twig'); $email->context(array_merge($parameters, [ 'fullRegistrationLink' => $this->settings->getFullUrlLink(), - 'eventImageExists' => is_file(__DIR__ . '/../../public/' . $event->logoUrl), + 'eventImageExists' => is_file(__DIR__ . '/../../public/' . Event::getFullLogoUrl($event->logoUrl)), ])); array_map(fn (string $attachment) => $email->attach($attachment), $attachments); foreach ($embeds as $embed) { diff --git a/src/Settings/TwigExtension.php b/src/Settings/TwigExtension.php index 07f3aab5..cb253e49 100755 --- a/src/Settings/TwigExtension.php +++ b/src/Settings/TwigExtension.php @@ -10,11 +10,23 @@ use kissj\Participant\Troop\TroopLeader; use kissj\Participant\Troop\TroopParticipant; use kissj\User\UserStatus; +use kissj\Event\Event; use Twig\Extension\AbstractExtension; use Twig\TwigTest; +use Twig\TwigFunction; class TwigExtension extends AbstractExtension { + /** + * @return TwigFunction[] + */ + public function getFunctions() :array + { + return [ + new TwigFunction('eventLogo', [Event::class, 'getFullLogoUrl']), + ]; + } + /** * @return TwigTest[] */ diff --git a/src/Templates/translatable/_layout.twig b/src/Templates/translatable/_layout.twig index 5e06bf8a..f84a1abf 100755 --- a/src/Templates/translatable/_layout.twig +++ b/src/Templates/translatable/_layout.twig @@ -8,10 +8,16 @@ - {% trans %}_layout.title{% endtrans %} - {{ event.readableName }} - kissj + {% if event is not null %} + {% trans %}_layout.title{% endtrans %} - {{ event.readableName }} + {% else %} + Kissj + {% endif %} + - + + {% if event.eventType.getStylesheetNameWithoutLeadingSlash is not null %} @@ -31,7 +37,14 @@ -

{% trans %}_layout.title{% endtrans %} - {{ event.readableName }}

+

+ {% if event is not null %} + {% trans %}_layout.title{% endtrans %} - {{ event.readableName }} + {% else %} + Kissj + {% endif %} + +

{% for localeSlug, localeText in event.eventType.getLanguages() %} {{ localeText }}{% if not loop.last %} | {% endif%} @@ -89,9 +102,11 @@ | {% trans %}_layout.creator{% endtrans %} | πŸ‡ΊπŸ‡¦ stojimezaukrajinou.cz + {% if event is not null %} - + + {% endif %} diff --git a/src/Templates/translatable/emails/_mail-layout-no-text.twig b/src/Templates/translatable/emails/_mail-layout-no-text.twig index 526b1d6b..8a03a70c 100755 --- a/src/Templates/translatable/emails/_mail-layout-no-text.twig +++ b/src/Templates/translatable/emails/_mail-layout-no-text.twig @@ -67,7 +67,7 @@ diff --git a/src/Templates/translatable/emails/_mail-layout.twig b/src/Templates/translatable/emails/_mail-layout.twig index 7c367e91..8c83d4ba 100755 --- a/src/Templates/translatable/emails/_mail-layout.twig +++ b/src/Templates/translatable/emails/_mail-layout.twig @@ -81,7 +81,7 @@ diff --git a/src/User/UserController.php b/src/User/UserController.php index 20dceb33..b030f5a3 100755 --- a/src/User/UserController.php +++ b/src/User/UserController.php @@ -76,8 +76,11 @@ public function sendLoginEmail(Request $request, Response $response): Response return $this->redirect($request, $response, 'loginAfterLinkSent'); } - public function showAfterLinkSent(Response $response): Response + public function showAfterLinkSent(Request $request, Response $response): Response { + if ($request->getAttribute('user') !== null) { + return $this->redirect($request, $response, 'getDashboard'); + } return $this->view->render($response, 'kissj/login-link-sent.twig'); }