Skip to content

Commit b0ee687

Browse files
committed
Added terms of service
1 parent f878d9a commit b0ee687

File tree

7 files changed

+173
-8
lines changed

7 files changed

+173
-8
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace SpeedPuzzling\Web\Migrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
/**
11+
* Auto-generated Migration: Please modify to your needs!
12+
*/
13+
final class Version20250104112714 extends AbstractMigration
14+
{
15+
public function getDescription(): string
16+
{
17+
return '';
18+
}
19+
20+
public function up(Schema $schema): void
21+
{
22+
// this up() migration is auto-generated, please modify it to your needs
23+
$this->addSql('ALTER TABLE player ADD locale VARCHAR(255) DEFAULT NULL');
24+
}
25+
26+
public function down(Schema $schema): void
27+
{
28+
// this down() migration is auto-generated, please modify it to your needs
29+
$this->addSql('ALTER TABLE player DROP locale');
30+
}
31+
}

src/Controller/TermsOfServiceController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final class TermsOfServiceController extends AbstractController
1212
{
1313
#[Route(
1414
path: [
15-
'cs' => '/terms-of-service',
15+
'cs' => '/obchodni-podminky',
1616
'en' => '/en/terms-of-service',
1717
],
1818
name: 'terms_of_service',

src/Entity/Player.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ class Player
5757
#[Column(nullable: true)]
5858
public null|string $stripeCustomerId = null;
5959

60+
#[Immutable(Immutable::PRIVATE_WRITE_SCOPE)]
61+
#[Column(nullable: true)]
62+
public null|string $locale = null;
63+
6064
public function __construct(
6165
#[Id]
6266
#[Immutable]
@@ -148,4 +152,9 @@ public function updateStripeCustomerId(string $stripeCustomerId): void
148152
{
149153
$this->stripeCustomerId = $stripeCustomerId;
150154
}
155+
156+
public function changeLocale(string $locale): void
157+
{
158+
$this->locale = $locale;
159+
}
151160
}

templates/base.html.twig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@
199199
<li class="widget-list-item ms-2 me-2 me-md-4 ms-md-0">
200200
<a target="_blank" href="https://www.buymeacoffee.com/myspeedpuzzling" class="widget-list-link">{{ 'menu.support_us'|trans }}</a>
201201
</li>
202+
<li class="widget-list-item ms-2 me-2 me-md-4 ms-md-0">
203+
<a href="{{ path('terms_of_service') }}" class="widget-list-link">{{ 'menu.terms_of_service'|trans }}</a>
204+
</li>
202205
</ul>
203206
</div>
204207
</div>

templates/terms-of-service.html.twig

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,8 @@
33
{% block title %}Terms of service{% endblock %}
44

55
{% block content %}
6-
<h1>Terms of service</h1>
6+
<section class="terms-of-service">
77

8-
<div class="alert alert-primary d-flex" role="alert">
9-
<div class="alert-icon">
10-
<i class="ci-bell"></i>
11-
</div>
12-
<div>Tato stránka nefunguje! Jde o prototyp toho, jak bude brzy vypadat a fungovat. Děkujeme za trpělivost!</div>
13-
</div>
8+
{{ 'terms_of_service.content'|trans({ '%privacyPolicyLink%': path('privacy_policy') })|raw }}
9+
</section>
1410
{% endblock %}

translations/messages.cs.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ menu:
1111
feedback: "Zpětná vazba"
1212
support_us: "Podpořte nás"
1313
scan: "Čtečka čárových kódu"
14+
terms_of_service: "Obchodní podmínky"
1415

1516
footer:
1617
created_with_love: "Vytvořili s láskou k puzzlím a zdrojovému kódu %simona% a %jan%"
@@ -474,3 +475,66 @@ membership_payment_cancelled:
474475
text: "Platební proces byl přerušen, nejspíše vámi :-)."
475476
membership_link: "Zpět na přehled o členství"
476477
payment_link: "Opakovat platbu"
478+
479+
terms_of_service:
480+
meta:
481+
title: "Obchodní podmínky"
482+
description: "Obchodní podmínky platformy MySpeedPuzzling.com"
483+
content: |
484+
<h1>Obchodní podmínky</h1>
485+
<p>Tyto obchodní podmínky upravují poskytování předplatného (členství) na platformě MySpeedPuzzling.com. Chceme, abyste měli všechny důležité informace na jednom místě a mohli si je jednoduše projít.</p>
486+
<h2>1. Kdo jsme</h2>
487+
<ul>
488+
<li><strong>Provozovatel:</strong> Simona Mikešová (OSVČ)</li>
489+
<li><strong>Sídlo:</strong> Františka Formana 237/31, 700 30 Ostrava, Česká republika</li>
490+
<li><strong>IČ:</strong> 06868878</li>
491+
<li><strong>Kontaktní e-mail:</strong> <a href="mailto:[email protected]">[email protected]</a></li>
492+
</ul>
493+
<p>Jako provozovatel platformy MySpeedPuzzling.com jsme vaším smluvním partnerem pro nákup a využívání placeného členství.</p>
494+
<h2>2. Jak služba funguje</h2>
495+
<p>MySpeedPuzzling.com je online platforma pro nadšence do skládání puzzlí. Nabízíme různé funkce, přičemž prémiové části aplikace jsou přístupné pouze uživatelům s aktivním členstvím.</p>
496+
<ul>
497+
<li>Členství je virtuální (digitální) produkt – po zaplacení získáte okamžitý přístup k exkluzivním funkcím.</li>
498+
<li>Protože jde o elektronickou službu, nevztahují se na ni žádné fyzické dodací či přepravní podmínky.</li>
499+
<li>Obsah a funkce dostupné v rámci členství se mohou v čase měnit – snažíme se je průběžně vylepšovat.</li>
500+
</ul>
501+
<h2>3. Objednávka a uzavření smlouvy</h2>
502+
<p>Pokud se rozhodnete pro placené členství, stačí v sekci „Členství“ vybrat měsíční předplatné. Poté budete přesměrováni na platební bránu Stripe.</p>
503+
<ul>
504+
<li><strong>Platební údaje:</strong> Veškeré platební údaje zpracovává za šifrovaného spojení služba Stripe – my k těmto údajům nemáme přístup.</li>
505+
<li><strong>Potvrzení objednávky:</strong> Ke uzavření smlouvy mezi vámi a námi dojde v okamžiku úspěšného provedení platby. Poté vám bude okamžitě aktivováno členství.</li>
506+
<li><strong>Faktura:</strong> Fakturu za zaplacené předplatné si můžete stáhnout přímo v platebním portále Stripe.</li>
507+
<li><strong>Další správa členství:</strong> Změny platební metody, zrušení nebo prodloužení probíhá rovněž přes platební portál Stripe. Na tento portál se dostanete přes sekci „Členství“ ve vašem účtu.</li>
508+
</ul>
509+
<h2>4. Ceny a platební podmínky</h2>
510+
<ul>
511+
<li><strong>Cena členství:</strong> Cena je vždy uvedena včetně DPH. V závislosti na měně, ve které platbu provádíte, se mohou ceny mírně lišit.</li>
512+
<li><strong>Platební metody:</strong> Stripe podporuje platby kartou, Apple Pay a Link (další metody se mohou postupně přidávat).</li>
513+
<li><strong>Opakovaná platba:</strong> Jde o měsíční předplatné, což znamená, že se platba opakuje každý měsíc, dokud členství nezrušíte.</li>
514+
</ul>
515+
<h2>5. Zrušení a vrácení peněz</h2>
516+
<ul>
517+
<li><strong>Kdykoliv můžete své předplatné zrušit:</strong> Po zrušení předplatného vám zůstává přístup do konce předplaceného období. Po jeho uplynutí už se vám nic nestrhává.</li>
518+
<li><strong>Vracení peněz:</strong> Pokud požádáte o vrácení peněz za aktuální běžící období, vrátíme vám platbu stejným způsobem, jakým jste ji uhradili, a vaše členství se ihned ukončí.</li>
519+
<li><strong>Rychlost vyřízení:</strong> Vrácení a reklamace zpracováváme obratem (obvykle do druhého pracovního dne), nejpozději do 30 dnů, jak stanovuje zákon.</li>
520+
<li><strong>Náklady na vrácení:</strong> Jakékoliv poplatky za vrácení neseme my – chceme, abyste byli spokojení.</li>
521+
</ul>
522+
<h2>6. Reklamace</h2>
523+
<p>V případě, že máte pocit, že vám služba nebyla poskytnuta v odpovídající kvalitě nebo máte technické potíže, ozvěte se nám na e-mail
524+
<a href="mailto:[email protected]">[email protected]</a>.
525+
</p>
526+
<ul>
527+
<li>Reklamace vyřizujeme co nejdříve, typicky do 1–2 pracovních dnů.</li>
528+
<li>Maximální lhůta k vyřízení reklamace je 30 dní.</li>
529+
</ul>
530+
531+
<h2>7. Ochrana osobních údajů</h2>
532+
<p>O zpracování osobních údajů informujeme na <a href="%privacyPolicyLink%">samostatné stránce</a>, která se věnuje ochraně soukromí. Tam najdete všechny podrobnosti o tom, jaké údaje shromažďujeme, proč je zpracováváme a jak s nimi nakládáme.</p>
533+
534+
<h2>8. Závěrečná ustanovení</h2>
535+
<ul>
536+
<li>Tyto podmínky se řídí českým právem a případné spory se řeší u příslušných soudů České republiky.</li>
537+
<li>Věříme, že žádné spory nebudou, ale pokud by přece jen nastaly, můžete se obrátit na Českou obchodní inspekci (ČOI) nebo využít evropskou platformu pro mimosoudní řešení sporů (ODR).</li>
538+
<li>Aktuální znění podmínek je vždy dostupné na MySpeedPuzzling.com. Vyhrazujeme si právo je v přiměřeném rozsahu měnit, abychom je udrželi v souladu s legislativou nebo provozními potřebami.</li>
539+
</ul>
540+
<p><em><small>Poslední aktualizace: leden 2025</small></em></p>

translations/messages.en.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ menu:
1111
feedback: "Send feedback"
1212
support_us: "Support us"
1313
scan: "Barcode reader"
14+
terms_of_service: "Terms of service"
1415

1516
footer:
1617
created_with_love: "Created with love for puzzles and code by %simona% and %jan%"
@@ -472,3 +473,64 @@ membership_payment_cancelled:
472473
text: "The payment process was interrupted, most likely by you :-)."
473474
membership_link: "Back to membership overview"
474475
payment_link: "Retry payment"
476+
477+
terms_of_service:
478+
meta:
479+
title: "Terms of Service"
480+
description: "Terms of Service for the MySpeedPuzzling.com platform"
481+
content: |
482+
<h1>Terms of Service</h1>
483+
<p>These Terms of Service govern the provision of subscription (membership) on the MySpeedPuzzling.com platform. We want you to have all the important information in one place so you can easily review it.</p>
484+
<h2>1. Who We Are</h2>
485+
<ul>
486+
<li><strong>Provider:</strong> Simona Mikešová (Sole Proprietor)</li>
487+
<li><strong>Address:</strong> Františka Formana 237/31, 700 30 Ostrava, Czech Republic</li>
488+
<li><strong>ID No.:</strong> 06868878</li>
489+
<li><strong>Contact Email:</strong> <a href="mailto:[email protected]">[email protected]</a></li>
490+
</ul>
491+
<p>As the operator of the MySpeedPuzzling.com platform, we are your contractual partner for purchasing and using paid membership.</p>
492+
<h2>2. How the Service Works</h2>
493+
<p>MySpeedPuzzling.com is an online platform for jigsaw puzzle enthusiasts. We offer various features, while premium parts of the application are accessible only to users with an active membership.</p>
494+
<ul>
495+
<li>Membership is a virtual (digital) product – once you pay, you immediately gain access to exclusive features.</li>
496+
<li>Since it is an electronic service, no physical delivery or shipping conditions apply.</li>
497+
<li>The content and features available as part of the membership may change over time – we are continuously improving them.</li>
498+
</ul>
499+
<h2>3. Ordering and Conclusion of the Contract</h2>
500+
<p>If you decide to purchase a paid membership, simply choose the monthly subscription in the “Membership” section. You will then be redirected to the Stripe payment gateway.</p>
501+
<ul>
502+
<li><strong>Payment Details:</strong> All payment details are processed via Stripe using encrypted communication – we do not have access to this information.</li>
503+
<li><strong>Order Confirmation:</strong> The contract between you and us is concluded at the moment of successful payment. Your membership is immediately activated afterward.</li>
504+
<li><strong>Invoice:</strong> You can download the invoice for your paid subscription directly from the Stripe payment portal.</li>
505+
<li><strong>Further Membership Management:</strong> Changes to the payment method, cancellation, or extension are also managed through the Stripe payment portal, accessible via the “Membership” section in your account.</li>
506+
</ul>
507+
<h2>4. Prices and Payment Terms</h2>
508+
<ul>
509+
<li><strong>Membership Price:</strong> All prices are stated including VAT. Depending on the currency you use for payment, prices may vary slightly.</li>
510+
<li><strong>Payment Methods:</strong> Stripe supports card payments, Apple Pay, and Link (other methods may be added over time).</li>
511+
<li><strong>Recurring Payment:</strong> This is a monthly subscription, which means the payment recurs each month until you cancel your membership.</li>
512+
</ul>
513+
<h2>5. Cancellation and Refunds</h2>
514+
<ul>
515+
<li><strong>You can cancel your membership at any time:</strong> After cancellation, you will retain access until the end of the prepaid period. No further payments will be taken once that period ends.</li>
516+
<li><strong>Refunds:</strong> If you request a refund for the current billing period, we will refund the payment using the same method you used to pay, and your membership will end immediately.</li>
517+
<li><strong>Processing Speed:</strong> We process refunds and claims promptly (usually within the next business day), no later than within 30 days as required by law.</li>
518+
<li><strong>Refund Costs:</strong> We cover any fees for refunds – we want you to be satisfied.</li>
519+
</ul>
520+
<h2>6. Claims</h2>
521+
<p>If you feel the service has not been provided with the appropriate quality or you experience technical issues, please contact us at
522+
<a href="mailto:[email protected]">[email protected]</a>.
523+
</p>
524+
<ul>
525+
<li>We handle claims as quickly as possible, typically within 1–2 business days.</li>
526+
<li>The maximum resolution time for claims is 30 days.</li>
527+
</ul>
528+
<h2>7. Personal Data Protection</h2>
529+
<p>We provide information on the processing of personal data on <a href="%privacyPolicyLink%">a separate page</a> dedicated to privacy protection. There you will find all the details about what data we collect, why we process it, and how we handle it.</p>
530+
<h2>8. Final Provisions</h2>
531+
<ul>
532+
<li>These terms are governed by Czech law, and any disputes shall be resolved by the competent courts of the Czech Republic.</li>
533+
<li>We believe no disputes will arise, but if they do, you can contact the Czech Trade Inspection Authority (ČOI) or use the European Online Dispute Resolution (ODR) platform.</li>
534+
<li>The current version of the terms is always available at MySpeedPuzzling.com. We reserve the right to make reasonable changes to keep them in line with legislation or operational needs.</li>
535+
</ul>
536+
<p><em><small>Last updated: January 2025</small></em></p>

0 commit comments

Comments
 (0)