# Moduł konkursów i losowań dla PrestaShop 8 i 9: dokumentacja

> Wprowadzenie Moduł dfcontest dodaje konkursy i losowania do sklepu PrestaShop 8 lub 9. Klienci biorą udział automatycznie przy zamówieniu albo bezpłatnie przez formularz. Losowanie jest weryfikowalne: każdy odwiedzający może powtórzyć…

- Strona: <https://www.datafirefly.com/pl/documentation/dfcontest/>
- Język: pl
- Zaktualizowano: 2026-09-24
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfcontest/index.md), [en](https://www.datafirefly.com/en/documentation/dfcontest/index.md), [es](https://www.datafirefly.com/es/documentation/dfcontest/index.md), [de](https://www.datafirefly.com/de/documentation/dfcontest/index.md), [it](https://www.datafirefly.com/it/documentation/dfcontest/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcontest/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcontest/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Wprowadzenie

Moduł **dfcontest** dodaje konkursy i losowania do sklepu PrestaShop 8 lub 9. Klienci biorą udział automatycznie przy zamówieniu albo bezpłatnie przez formularz. Losowanie jest weryfikowalne: każdy odwiedzający może powtórzyć obliczenie i otrzymać tych samych zwycięzców. Moduł generuje regulamin, wysyła e-maile do zwycięzców i zbiera ich adresy dostawy.

## Instalacja

1. W panelu administracyjnym otwórz **Moduły > Menedżer modułów** i kliknij **Załaduj moduł**.
2. Prześlij plik `dfcontest-x.y.z.zip`, a następnie kliknij **Zainstaluj**.
3. Pojawi się menu **Klienci > Konkursy**. Ustawienia ogólne znajdują się na stronie konfiguracji modułu.

Aby zaktualizować, wystarczy przesłać nową wersję: skrypty aktualizacji dodają brakujące kolumny i ustawienia, nie zmieniając konkursów ani zgłoszeń.

## Konfiguracja modułu

### Organizator

Podaj pełną nazwę firmy, adres siedziby, numer rejestrowy (KRS, NIP, SIRET, KvK…) i kontaktowy adres e-mail dla uczestników. Dane te trafiają do wygenerowanego regulaminu i e-maili.

### Wyświetlanie

- **Nazwiska zwycięzców na stronach publicznych**: tylko inicjały (J. K.) albo imię i inicjał (Jan K.).
- **Pokazuj konkurs na kartach produktów objętych konkursem** i **pokazuj uzyskane zgłoszenia w koszyku**, wraz z kwotą brakującą do kolejnego zgłoszenia.
- **Kolor akcentu**: kolor odliczania, ramek i obramowań. Pozostaw puste dla domyślnej zieleni; przyciski zachowują kolory motywu.
- **Potwierdzenie zgłoszenia e-mailem**: kod zgłoszenia i link do udostępniania wysyłane, gdy zgłoszenie z formularza staje się ważne.
- **Wyróżnij trwający konkurs na stronie głównej** (hak `displayHome`).

### Ochrona przed nadużyciami

Opcja **Odrzucaj jednorazowe adresy e-mail** blokuje główne usługi tymczasowych adresów (Yopmail, Mailinator, 10 Minute Mail, Guerrilla Mail i inne). Pole **Inne zablokowane domeny** przyjmuje jedną domenę w wierszu; subdomeny też są blokowane.

### Zadania automatyczne (cron)

Strona konfiguracji pokazuje podpisany adres URL crona. Jest potrzebny tylko dla autopilota (patrz niżej). Wywołuj go co 5 do 15 minut, na przykład:

```
*/10 * * * * curl -s "https://twoj-sklep.pl/module/dfcontest/cron?token=TWOJ_TOKEN" > /dev/null
```

Data ostatniego uruchomienia jest widoczna pod adresem URL.

## Tworzenie konkursu

Otwórz **Klienci > Konkursy**, a następnie **Nowy konkurs**. Formularz jest podzielony na zakładki.

### Ogólne

- **Nazwa**, **przyjazny URL**, **opis** i **nagroda** (opisz każdą nagrodę i jej wartość rynkową: ten tekst trafia do regulaminu).
- **Obraz**: JPG, PNG lub WebP, maksymalnie 4 MB, zalecana szerokość 1600 px.
- **Początek**, **koniec** i **zapowiedziana data losowania**.
- **Wyróżnij na stronie głównej**: jeśli trwa kilka konkursów, wyświetlany jest ten, który kończy się najwcześniej.

### Jak wziąć udział

Włącz udział przez zakup, przez formularz lub oba sposoby. **Maksymalna liczba zgłoszeń na uczestnika** liczy łącznie zakupy, formularz i bonusy za polecenia, dla każdego adresu e-mail.

### Zgłoszenia z zakupów

- **1 zgłoszenie za zamówienie** lub **1 zgłoszenie za każdy próg kwoty** (z VAT, w walucie domyślnej).
- **Minimalna kwota zamówienia** i **maksymalna liczba zgłoszeń na zamówienie**.
- **ID produktów objętych konkursem** i **kategorie objęte konkursem**: jeśli są ustawione, liczy się tylko kwota tych produktów, a rabaty są rozkładane proporcjonalnie. Pozostaw puste dla całego katalogu.

Zgłoszenie powstaje, gdy zamówienie przechodzi w status opłacony w czasie trwania konkursu. Jest usuwane, gdy zamówienie zostanie anulowane, zwrócone lub oznaczone błędem płatności, dopóki zgłoszenia nie są zapieczętowane. Zamówienie podzielone na kilka przesyłek liczy się jako jedno.

### Zgłoszenia z formularza

- **Wymagane konto klienta**: formularz tylko dla zalogowanych klientów.
- **Potwierdzenie e-mailem** (zalecane): goście otrzymują link, a zgłoszenie liczy się dopiero po potwierdzeniu.
- **Numer telefonu**: ukryty, opcjonalny lub wymagany.
- **Pytanie**: dowolne pytanie, którego odpowiedź jest zapisywana i eksportowana.
- **Pole zapisu do newslettera**: domyślnie niezaznaczone.
- **Zgłoszenia bonusowe za zaproszonego znajomego** i **maksymalna liczba zgłoszeń bonusowych na uczestnika**: włączają polecenia (0 je wyłącza).

### Losowanie

- **Liczba zwycięzców** i **liczba zwycięzców rezerwowych** (losowanych kolejno po zwycięzcach).
- **Jedna nagroda na osobę**: uczestnik wylosowany po raz drugi jest pomijany.
- **Autopilot**: zapieczętowanie w dniu zakończenia, losowanie w zapowiedzianym terminie, e-maile do zwycięzców (wymagany adres URL crona).
- **Zastępuj zwycięzców, którzy nie odbiorą nagrody na czas**: po upływie terminu zwycięzca jest oznaczany jako rezygnujący, a kolejna osoba rezerwowa otrzymuje e-mail (wymagany adres URL crona).
- **Dni na odbiór nagrody**.

Odcisk losowania powstaje przy pierwszym zapisaniu konkursu i nie może się później zmienić. Po zapieczętowaniu daty, ustawienia udziału i liczba zwycięzców są zablokowane.

### Regulamin

Jeśli pole pozostanie puste, regulamin w 9 paragrafach jest generowany z ustawień konkursu i danych organizatora. Możesz wpisać własny tekst ze zmiennymi `{organizer}`, `{contest_name}`, `{date_start}`, `{date_end}`, `{draw_date}`, `{nb_winners}`, `{prize}`, `{claim_days}`, `{verify_url}`, `{commitment}` i pozostałymi wymienionymi w zakładce.

Wygenerowany regulamin jest szablonem. Zleć jego sprawdzenie pod kątem prawa każdego kraju, w którym konkurs jest dostępny. W Polsce loterie promocyjne wymagają zezwolenia, a konkurs oparty na losowaniu może zostać uznany za grę hazardową.

## W sklepie

- **/contests**: lista trwających, nadchodzących i zakończonych konkursów.
- **Strona konkursu**: odliczanie, nagrody, sposoby udziału, formularz, a po zgłoszeniu kod zgłoszenia, liczba zgłoszeń i link do udostępniania. Po losowaniu: lista zwycięzców i komunikat „Wygrana” dla odwiedzającego, którego dotyczy.
- **/rules**: regulamin do wydruku. **/draw**: strona weryfikacji.
- **Karta produktu i koszyk**: informacja przy produktach objętych konkursem i komunikat o postępie.
- **Potwierdzenie zamówienia**: uzyskane zgłoszenia z kodem.
- **Moje konto > Moje zgłoszenia w konkursach**: historia, status i przycisk odbioru nagrody dla zwycięzców.
- **Widżet**: na stronie głównej lub w dowolnym miejscu przez `{widget name="dfcontest"}` albo `{widget name="dfcontest" id_contest=3}`.

## Przebieg losowania

Panel konkursu (przycisk **Zobacz** na liście) przedstawia losowanie w 4 krokach.

1. **Opublikowany odcisk**: odcisk SHA-256 tajnego klucza jest publiczny od utworzenia konkursu.
2. **Zapieczętowanie zgłoszeń**: dostępne po dacie zakończenia. Lista ważnych zgłoszeń zostaje zamrożona, a jej odcisk opublikowany. W tej samej chwili moduł zobowiązuje się do przyszłej rundy [drand](https://drand.love), publicznej losowości League of Entropy, publikowanej około dwie minuty później albo po zapowiedzianej dacie losowania.
3. **Przeprowadzenie losowania**: gdy wartość rundy zostanie opublikowana, moduł ją pobiera i losuje zwycięzców, a potem osoby rezerwowe. Jeśli serwer nie może połączyć się z drand, otwórz wskazany link drand, skopiuj wartość `randomness` i wklej ją w przewidziane pole.
4. **Powiadomienie zwycięzców**: każdy zwycięzca otrzymuje e-mail w języku swojego zgłoszenia, z linkiem do przyjęcia nagrody i podania adresu przed upływem terminu.

### Śledzenie wydawania nagród

Tabela zwycięzców pokazuje dla każdego: odebrana (z adresem dostawy), oczekuje na odpowiedź lub termin minął. Przycisk **Wyślij ponownie** ponownie wysyła e-mail i liczy termin od nowa. **Oznacz rezygnację** odbiera nagrodę zwycięzcy i przekazuje ją pierwszej dostępnej osobie rezerwowej; następnie wyślij e-maile ponownie, aby ją powiadomić. Gdy zwycięzca odbierze nagrodę, kontaktowy e-mail organizatora otrzymuje jego dane.

## Strona weryfikacji

Strona **/draw** publikuje odcisk klucza, odcisk listy, rundę drand, a następnie klucz, wartość publiczną, ziarno i zwycięzców. Uczestnik może wyszukać swój kod na zapieczętowanej liście i uruchomić sprawdzenie w przeglądarce, które weryfikuje każdy krok, niczego nie wysyłając do sklepu. Plik dowodu JSON można pobrać ze strony i z panelu.

## Autopilot

Dla konkursu z opcją **Autopilot** każde uruchomienie crona:

- pieczętuje zgłoszenia po upływie daty zakończenia;
- przeprowadza losowanie po osiągnięciu zapowiedzianej daty i opublikowaniu wartości drand, a następnie wysyła e-maile do zwycięzców;
- przy włączonej opcji zastępowania oznacza rezygnację zwycięzców, których termin minął bez odbioru nagrody, i powiadamia kolejną osobę rezerwową.

Cron nie wpływa na konkursy bez autopilota. Może działać tak często, jak chcesz.

## Eksport i dane osobowe

- **Eksportuj zwycięzców (CSV)**: miejsce, kod, dane kontaktowe, źródło, wylosowany los, odpowiedź, data powiadomienia, status odbioru i adres dostawy.
- **Eksportuj zgłoszenia (CSV)**: wszystkie zgłoszenia ze statusem, źródłem i zgodą na newsletter.
- Z oficjalnym modułem **psgdpr** usunięcie klienta anonimizuje jego zgłoszenia i wycofuje te z niezapieczętowanych konkursów; eksport RODO obejmuje jego zgłoszenia i odbiór nagrody.

## Rozwiązywanie problemów

### Opłacone zamówienie nie utworzyło zgłoszenia

PrestaShop pomija haki modułu, gdy profil pracownika zmieniającego status nie ma uprawnień do wyświetlania tego modułu. W panelu konkursu przycisk **Sprawdź zamówienia** przegląda opłacone zamówienia z okresu konkursu i tworzy brakujące zgłoszenia.

### Gość nie otrzymuje e-maila potwierdzającego

Na stronie konkursu przy oczekującym zgłoszeniu pojawia się przycisk **Wyślij link ponownie** (najwyżej jeden e-mail co dwie minuty). Sprawdź też ustawienia poczty sklepu.

### Losowanie nie startuje

Wartość rundy drand jest publikowana dopiero o godzinie widocznej w panelu. Jeśli po tym czasie drand nadal jest nieosiągalny z serwera, wklej wartość `randomness` skopiowaną z linku drand.

### Cron nic nie robi

Sprawdź, czy konkurs ma włączoną opcję **Autopilot** i czy sklep nie jest w trybie konserwacji, który blokuje też adres URL crona. W multisklepie wywołuj adres URL crona każdego sklepu.
