SemaCalendar ukazuje na webu sdílené kalendáře Google a nechá návštěvníky rezervovat termín. Události se spravují v Googlu, web je jen zobrazuje; rezervace vznikají na webu a potvrzené se zapisují do Google kalendáře toho, u koho se rezervuje.
| Joomla | PHP | Aktuální verze | |
|---|---|---|---|
| 5.2+, 6.x | 8.1+ | Calendar API, servisní účet | 1.0.0 |
1. Požadavky
- Joomla 5.2 nebo novější, nebo Joomla 6
- PHP 8.1 nebo novější s rozšířením
openssl(podpis přístupu ke Googlu) - MySQL 8 nebo MariaDB 10.6+
- Účet Google a projekt v Google Cloud se zapnutým Google Calendar API (bez poplatků)
- Plánovač úloh Joomly – spouštěný při návštěvách webu, nebo lépe cronem hostingu
2. Jak začít
- Nainstalujte balíček SemaCalendar (Systém → Instalace → Rozšíření). Nainstaluje komponentu, modul, plugin plánovače a plugin ochrany soukromí.
- Založte servisní účet Google a nahrajte jeho klíč na server (kapitola Přístup do Google kalendáře).
- V Google kalendáři nasdílejte kalendář na e-mail servisního účtu.
- V administraci Komponenty → SemaCalendar → Kalendáře kalendář přidejte a klikněte na Ověřit přístup.
- Založte v Plánovači úlohu SemaCalendar – synchronizace kalendářů (kapitola Plánovaná úloha).
- Přidejte položku menu Kalendář nebo modul SemaCalendar.
- Pro rezervace založte Zdroje a Účely a položku menu Rezervace.
3. Přístup do Google kalendáře
Web se do Googlu přihlašuje servisním účtem – technickým účtem projektu Google Cloud. Žádné přihlašování osobním účtem ani souhlasná obrazovka: kalendář se servisnímu účtu jen nasdílí, stejně jako kolegovi.
- V Google Cloud konzoli založte projekt (nebo použijte existující) a zapněte v něm Google Calendar API.
- IAM a administrace → Servisní účty → Vytvořit servisní účet. Role nejsou potřeba.
- U servisního účtu Klíče → Přidat klíč → Vytvořit nový klíč → JSON. Stáhne se soubor s klíčem.
- Soubor nahrajte na server. Doporučené místo je mimo webový adresář (třeba o úroveň výš než
public_html); cestu k němu zapište v Nastavení → Google kalendář → Cesta ke klíči.
Necháte-li cestu prázdnou, web hledá klíč vadministrator/components/com_semacalendar/keys/gcal.json. Složka je chráněná proti stažení, ale odinstalace komponenty ji smaže i s klíčem. - E-mail servisního účtu (
…@….iam.gserviceaccount.com, je i v souboru klíče jakoclient_email) použijte při sdílení kalendářů.
Časové pásmo v Nastavení určuje, v jakém čase se počítá pracovní doba a celodenní události. Výchozí je pásmo webu.
Na co si dát pozor
- Klíč je heslo k vašim kalendářům. Neposílejte ho e-mailem a nenechávejte ho ve webovém adresáři bez ochrany.
- Nástěnka komponenty upozorní, když klíč chybí nebo nejde přečíst.
4. Kalendáře
Komponenty → SemaCalendar → Kalendáře jsou kalendáře, které web zobrazuje.
- V Google kalendáři otevřete Nastavení a sdílení kalendáře, v části Sdílet s konkrétními lidmi přidejte e-mail servisního účtu. Pro zobrazení stačí Zobrazit všechny podrobnosti o událostech.
- V části Integrovat kalendář zkopírujte ID kalendáře (e-mailová adresa nebo
…@group.calendar.google.com). - V administraci Nový, vyplňte název a Adresu kalendáře Google (to ID) a uložte.
- Zaškrtněte kalendář a klikněte na Ověřit přístup. Hláška řekne, jestli ho Google servisnímu účtu ukáže.
Návštěvník vidí:
| volba | co je na webu |
|---|---|
| Celé údaje | název, čas, místo, popis a vlastní stránka události |
| Název a čas | jen název a čas, bez místa a popisu |
| Jen obsazeno | čas jako „Obsazeno“, nic o události |
Přístup (úroveň přístupu Joomly) určuje, kdo kalendář vidí vůbec – třeba jen přihlášení členové.
Dní zpět a Dní dopředu (karta Synchronizace) říkají, jaké období web drží. Okno se posouvá samo.
Na co si dát pozor
- Události se v administraci needitují – zdroj pravdy je Google. Změnu udělejte v Google kalendáři, web ji převezme při další synchronizaci.
- Popis události z Googlu se na webu čistí: zůstanou odkazy a základní formátování, skripty a vložené rámy ne.
- Smazání kalendáře v administraci smaže jen jeho kopii na webu, Google kalendáře se nedotkne.
5. Plánovaná úloha
Události se do webu načítají plánovanou úlohou, ne při otevření stránky – web je díky tomu rychlý a nenarazí na limity Googlu.
- Systém → Naplánované úkoly → Nový → SemaCalendar – synchronizace kalendářů.
- Interval 5–15 minut. Jen kalendář č. nechte 0 (všechny).
- Uložte. Plánovač Joomly běží buď při návštěvách webu (Lenochův plánovač), nebo z cronu hostingu – na webu s malou návštěvností doporučujeme cron.
Tatáž úloha zároveň uvolňuje nepotvrzené rezervace, dopisuje potvrzené rezervace do Googlu, když to napoprvé nevyšlo, a anonymizuje staré rezervace.
Hned teď synchronizuje tlačítko Synchronizovat teď v seznamu Události nebo Synchronizovat u vybraných kalendářů.
6. Přehled a události
Přehled (nástěnka komponenty) ukazuje události a rezervace na příštích 14 dní a stav synchronizace každého kalendáře – kdy proběhla, kolik událostí má a jestli se kalendář nepodařilo načíst.
Události je seznam všeho, co web z Googlu převzal, s filtrem podle kalendáře a času. Jen ke čtení.
7. Kalendář na webu
Položka menu typu SemaCalendar → Kalendář:
- Kalendáře – které kalendáře stránka ukáže (prázdné = všechny zveřejněné, které návštěvník smí vidět).
- Výchozí pohled – měsíc, týden nebo seznam. Na mobilu se vždy ukáže seznam.
- Týden od / do (hodina) – rozsah hodin týdenního pohledu.
- Události bez JavaScriptu – kolik nejbližších událostí stránka vypíše vyhledávačům a prohlížečům bez JavaScriptu.
Událost kalendáře s viditelností Celé údaje má vlastní stránku s popisem, místem a strukturovanými daty pro vyhledávače.
Modul SemaCalendar ukazuje nejbližší události (rozvržení Výchozí) nebo malý měsíc (rozvržení month). Stránka kalendáře je položka menu typu Kalendář, na kterou modul odkáže a pod kterou se otevřou stránky událostí.
Vzhled jde přepsat v šabloně (html/com_semacalendar/…, html/mod_semacalendar/…, html/layouts/com_semacalendar/booking/calendar.php).
8. Rezervace termínů
Rezervace stojí na dvou věcech:
- Zdroj – kdo nebo co se rezervuje: osoba, místnost, služba. Má pracovní dobu a volitelně svůj Google kalendář.
- Účel – co se rezervuje: délka, místo, odstup mezi rezervacemi a které zdroje ho přijímají.
Zdroje
Komponenty → SemaCalendar → Zdroje → Nový:
- Pracovní doba – dny 1 (pondělí) až 7 (neděle), rozsah dnů pomlčkou, časy čárkou, skupiny středníkem. Příklad:
1-5 09:00-12:00,13:00-17:00; 6 09:00-12:00. - Adresa kalendáře Google – nepovinná. Obsazené časy v tomto kalendáři blokují termíny a potvrzená rezervace se do něj zapíše. Kalendář musí být nasdílený se servisním účtem s právem Provádět změny událostí. Bez kalendáře jsou rezervace jen na webu.
- E-mail pro rezervace – kam chodí kopie každé potvrzené a zrušené rezervace.
- Předstih (hodiny) – nejméně kolik hodin předem jde rezervovat.
- Rezervace dopředu (dny) – jak daleko dopředu sahá nabídka termínů.
Ověřit přístup u zdroje zkontroluje, že web do jeho kalendáře vidí.
Účely
Komponenty → SemaCalendar → Účely → Nový: název, Délka (minuty), Odstup (minuty) (čas na přejezd nebo přípravu kolem každé rezervace), Místo (jde do e-mailů i do události) a Zdroje. Účel bez zdroje rezervovat nejde.
Kód se vytvoří z názvu. Neměňte ho u účelu, na který míří položka menu.
Stránka rezervace
Položka menu typu SemaCalendar → Rezervace. Účel a Zdroj stránku zúží na jeden účel nebo zdroj; prázdné = návštěvník vybírá.
Návštěvník vybere den a čas v kalendáři volných termínů, vyplní jméno, e-mail, případně telefon a zprávu, odsouhlasí zpracování údajů a projde captchou.
Průběh rezervace
- Po odeslání formuláře se termín drží (Nastavení → Rezervace → Doba držení, výchozí 30 minut) a návštěvník dostane e-mail s odkazem.
- Na stránce z odkazu rezervaci potvrdí. Teprve potvrzená rezervace se zapíše do Google kalendáře zdroje; návštěvník dostane potvrzení s pozvánkou (
invite.ics) do svého kalendáře a zdroj kopii. - Nepotvrzený termín po uplynutí doby držení dostane další zájemce a plánovaná úloha rezervaci smaže.
- Z odkazu v potvrzení může návštěvník rezervaci zrušit. Zmizí z kalendáře zdroje, návštěvník dostane zrušení (
cancel.ics) a zdroj kopii.
Dva lidé, kteří si vyberou tentýž termín, ho nedostanou oba: volnost se ověřuje při odeslání i znovu při potvrzení.
Rezervace v administraci
Komponenty → SemaCalendar → Rezervace – seznam s filtrem podle stavu, zdroje a účelu.
- Potvrdit – potvrdí rezervaci za návštěvníka (třeba když domluvil termín telefonem). Návštěvník dostane potvrzení s pozvánkou.
- Zrušit rezervaci – zruší ji; návštěvník dostane zrušení.
- Zrušenou rezervaci jde dát do koše a smazat.
Nastavení rezervací
Nastavení → Rezervace: Doba držení (min), Captcha (výchozí = captcha z globálního nastavení webu), Text souhlasu u zaškrtávátka formuláře – doplňte do něj odkaz na své zásady ochrany osobních údajů.
E-maily
Pět e-mailů (potvrzení rezervace, rezervace potvrzena, rezervace zrušena, kopie zdroji o nové a o zrušené rezervaci) se upravuje v Systém → Šablony → Šablony zpráv, filtr SemaCalendar.
Na co si dát pozor
- Formulář bez captchy je pro roboty otevřený. Zapněte captchu v globálním nastavení webu nebo v nastavení komponenty.
- Zdroj nebo účel, který má rezervace, nejde smazat – nechte ho v koši.
- Když Google zrovna nejde, rezervace se potvrdí i tak a do kalendáře ji dopíše plánovaná úloha. Seznam rezervací u ní napíše „Zatím není v kalendáři zdroje“.
9. Ochrana osobních údajů
Rezervace obsahuje jméno, e-mail, telefon a zprávu návštěvníka.
- Žádost o export a výmaz – plugin Ochrana soukromí – SemaCalendar se zapojí do Uživatelé → Soukromí → Požadavky. Export přidá rezervace s e-mailem žádosti. Výmaz nadcházející rezervace nejdřív zruší (bez e-mailu) a pak všechny anonymizuje.
- Anonymizace smaže jméno, e-mail, telefon a zprávu, i z události v Google kalendáři zdroje. Čas, účel a zdroj zůstanou pro přehled; v seznamu rezervací je místo kontaktu „Anonymizováno“.
- Retence – Nastavení → Rezervace → Anonymizovat rezervace po (měsících), výchozí 24. Plánovaná úloha anonymizuje rezervace, které skončily dříve. 0 = nikdy. Lhůtu nastavte podle svých zásad zpracování osobních údajů; 24 měsíců je jen výchozí hodnota, ne právní doporučení.
Souhlas s cookies komponenta neřeší – žádné cookies pro měření nenastavuje.
10. Měření
Je-li na webu měřicí plugin SemaTrack (Sema SST), ohlásí mu komponenta každou rezervaci, kterou návštěvník potvrdí, jako událost booking_confirmed s účelem a zdrojem – bez osobních údajů. Rezervace potvrzená v administraci se nehlásí, není to konverze návštěvníka. Do GA4 nebo Meta událost pustí nastavení Sema SST.
Vypnout jde v Nastavení → Rezervace → Události pro Sema SST. Bez pluginu se nic neděje.
11. Aktualizace a odinstalace
Aktualizace přichází přes Systém → Aktualizace s klíčem ke stažení ze SemaHubu (Systém → Stránky aktualizací, SemaCalendar → Aktualizační klíč).
Odinstalace balíčku smaže všechny tabulky komponenty (kalendáře, události, zdroje, účely, rezervace) a výchozí složku s klíčem. Události v Google kalendářích zůstanou.