# Bug Report: Phoca Cart 6 Email Layout Overrides Ignored in Joomla 5

## Popis problému

Při odesílání e-mailů (objednávek) v Phoca Cart 6 pod Joomla 5 dochází k ignorování JLayout přepisů (overrides) umístěných v aktuálně aktivní (výchozí) šabloně. Místo toho systém hledá přepisy v šabloně Cassiopeia, i když je tato šablona v systému vypnutá nebo není nastavena jako výchozí.

## Technická analýza

Problém spočívá v identifikaci aktivní šablony během procesu odesílání e-mailu v souboru `administrator/components/com_phocacart/libraries/src/Layout/SiteLayout.php`.

### Aktuální implementace:

```php
public function getDefaultIncludePaths()
{
    if (Factory::getApplication()->isClient('site')) {
        return parent::getDefaultIncludePaths();
    }
    // ... logika pro administrator klienta
}
```

### Proč to selhává:

V momentě, kdy uživatel dokončí objednávku (POST požadavek na checkout task), se Joomla nachází v kontextu, kde `Factory::getApplication()->getTemplate(true)` vrací systémovou šablonu (Cassiopeia) namísto uživatelské výchozí šablony (např. YOOtheme). Je to způsobeno tím, že požadavek často postrádá `Itemid` nebo kontext menu položky, což vede k fallbacku Joomly na "default" systémovou šablonu.

Protože `SiteLayout` v režimu `site` volá `parent::getDefaultIncludePaths()`, přebírá tyto chybné cesty od Joomly.

## Důkaz (Logs)

Při ladění jsme do `SiteLayout.php` přidali logování generovaných cest. Zde je výpis z `phoca_paths.log` pořízený během ostrého odesílání objednávky na webu, kde je **jedinou** výchozí šablonou YOOtheme:

```text
App: Joomla\CMS\Application\SiteApplication | Name: site | Client site: YES
Include Paths: Array
(
    [0] => C:\laragon\www\progrestech_dev/templates/cassiopeia/html/layouts/com_phocacart
    [1] => C:\laragon\www\progrestech_dev/templates/cassiopeia/html/layouts
    [2] => C:\laragon\www\progrestech_dev/components/com_phocacart/layouts
)
```

_Poznámka: Jak je vidět, cesta [0] ukazuje na Cassiopeiu, ačkoliv web běží na YOOtheme._

## Navrhované řešení

V souboru `SiteLayout.php` by se nemělo spoléhat na `parent::getDefaultIncludePaths()` pro `site` klienta, pokud tento vrací fallbackovou šablonu. Místo toho by Phoca Cart měl vždy kontrolovat i šablonu, která je v databázi skutečně označena jako `home=1`.

Úprava by mohla vypadat takto:

```php
public function getDefaultIncludePaths()
{
    $template = SiteHelper::getTemplate(); // Tato metoda v Phoca Cartu správně hledá home=1 v DB

    $paths = [];
    $paths[] = JPATH_SITE . '/templates/' . $template->template . '/html/layouts/com_phocacart';
    $paths[] = JPATH_SITE . '/templates/' . $template->template . '/html/layouts';

    if ($template->parent) {
        $paths[] = JPATH_SITE . '/templates/' . $template->parent . '/html/layouts/com_phocacart';
        $paths[] = JPATH_SITE . '/templates/' . $template->parent . '/html/layouts';
    }

    $paths[] = JPATH_SITE . '/components/com_phocacart/layouts';

    return $paths;
}
```

Tím se zajistí, že Phoca Cart bude vždy prioritně hledat přepisy ve skutečně výchozí šabloně webu, bez ohledu na to, jaký vnitřní stav zrovna hlásí Joomla Application objekt během odesílání e-mailu.

## Prostředí

- Joomla 5.x
- Phoca Cart 6.0.0
- PHP 8.x
