VacationBanner
extends BaseComponent
in package
Renders the shipping vacation banner below the system/module breadcrumb.
The banner is site-wide, not e-shop scoped: the control sits in the theme breadcrumb partials
(parts/{shared,eshop,blog,bazaar,comcat,discussion}/header/breadcrumb.latte), the smallest set
of places with full coverage (each module header ends with its own breadcrumb partial;
@logged.latte / @logged_form.latte include the blog one, which covers "My orders" and
"Complaints" too).
The component is still owned by Store (vacations are its domain).
Data: the Api StockReader::getVacationNotice() does all the computing and the Front goes to
it through the bridge (VacationManager::fetchBanner(), endpoint
api/store/vacation/banner). The Front does not know the definition of an "active vacation",
does not chain consecutive windows and does not touch Warehouse (the Front layer has none);
a duplicated date-window filter once diverged from StockReader (missing normalization to
midnight). Only the entities with translations for the vacations the Api picked are loaded here.
The display lead time is the Store setting self::SETTING_LEAD_DAYS (module self::SETTINGS_MODULE_STORE = 10), default self::DEFAULT_LEAD_DAYS days when the row is missing or invalid (the setting is optional, a clean fallback).
Table of Contents
Constants
- DEFAULT_LEAD_DAYS : int = 3
- SETTING_LEAD_DAYS : string = 'vacation.banner.leadDays'
- Key consistent with the other Store settings (`*AlertDays`, `*Minutes`).
- SETTINGS_MODULE_STORE : int = 10
- Settings module (`cms_system_settings`): store = 10.
Properties
- $container : Container
- $routerDispatcher : RouterDispatcher
- $translator : ITranslator
- $appContext : AppContext
- $componentParameters : array<string, mixed>
- $currencyContext : CurrencyContext|null
- $deviceDetector : DeviceDetector|null
- $languageContext : LanguageContext|null
- $localizationContext : LocalizationContext|null
- $settingContext : SettingContext
- $themeContext : ThemeContext|null
- $translatorDomain : string|null
- $vacationManager : VacationManager
Methods
- __call() : mixed
- Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
- __construct() : mixed
- createComponent() : IComponent|null
- getAppContext() : AppContext
- getComponentParameter() : mixed
- Returns a component parameter, or null when it is not set.
- getContainer() : Container
- getCurrencyContext() : CurrencyContext|null
- getLanguageContext() : LanguageContext|null
- getLocalizationContext() : LocalizationContext|null
- getRouterDispatcher() : RouterDispatcher
- getSettingContext() : SettingContext
- getSettings() : array<int, array<string, mixed>>
- getThemeContext() : ThemeContext|null
- hasServiceByType() : bool
- Returns whether the container has a service of the given type.
- initializeAllContexts() : void
- injectDeviceDetector() : void
- onCreate() : void
- render() : void
- setAppContext() : $this
- setComponentParameter() : void
- Sets a component parameter.
- setCurrencyContext() : $this
- setLanguageContext() : $this
- setLocalizationContext() : $this
- setSettingContext() : $this
- setThemeContext() : $this
- setup() : void
- setupAppContext() : void
- typedComponent() : T
- Returns a subcomponent with a verified type.
- frontPresenter() : BasePresenter|null
- Returns the front presenter the component is attached to (null outside the front end or when detached).
- getTranslator() : ITranslator
- setTemplateFile() : void
- setTranslator() : self
- buildMessage() : string
- Builds the one-sentence notice: end of the vacation plus an indicative date.
- createMultiplierComponent() : Multiplier<string|int, IComponent>
- Creates a multiplier for the component.
- createNewComponentInstance() : IComponent|null
- Creates a new component instance without adding it to the presenter; used by the multiplier.
- createStandardComponent() : IComponent|null
- Creates a standard component (not a multiplier).
- dateFormat() : string
- Short date format of the page localization (day-first with dots for cs, ISO for en), like invoices.
- formatDay() : string
- `Y-m-d` from the bridge (must survive JSON serialization) to the date format of the page localization.
- loadActiveVacations() : array<int, VacationText, message: string}>
- resolveLangId() : int
- The language comes from the global `LanguageContext`, not from the presenter. It is the same object from which `BaseComponent::setup()` fills the template variable `$lang`, so PHP and Latte see the same number.
- resolveLeadDays() : int
Constants
DEFAULT_LEAD_DAYS
private
int
DEFAULT_LEAD_DAYS
= 3
SETTING_LEAD_DAYS
Key consistent with the other Store settings (`*AlertDays`, `*Minutes`).
private
string
SETTING_LEAD_DAYS
= 'vacation.banner.leadDays'
SETTINGS_MODULE_STORE
Settings module (`cms_system_settings`): store = 10.
private
int
SETTINGS_MODULE_STORE
= 10
Properties
$container
public
Container
$container
Attributes
- #[Inject]
$routerDispatcher
public
RouterDispatcher
$routerDispatcher
$translator
public
ITranslator
$translator
Tags
$appContext
protected
AppContext
$appContext
$componentParameters
protected
array<string, mixed>
$componentParameters
= []
component parameters set by setComponentParameter()
$currencyContext
protected
CurrencyContext|null
$currencyContext
= NULL
$deviceDetector
protected
DeviceDetector|null
$deviceDetector
= NULL
$languageContext
protected
LanguageContext|null
$languageContext
= NULL
$localizationContext
protected
LocalizationContext|null
$localizationContext
= NULL
$settingContext
protected
SettingContext
$settingContext
$themeContext
protected
ThemeContext|null
$themeContext
= NULL
$translatorDomain
protected
string|null
$translatorDomain
= 'front.store.vacation'
$vacationManager read-only
private
VacationManager
$vacationManager
Methods
__call()
Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
public
__call(string $name, array<string|int, mixed> $args) : mixed
Called only when the component has no renderXyz() method of its own.
Parameters
- $name : string
- $args : array<string|int, mixed>
__construct()
public
__construct(VacationManager $vacationManager) : mixed
Parameters
- $vacationManager : VacationManager
createComponent()
public
createComponent(string $name) : IComponent|null
Parameters
- $name : string
Return values
IComponent|nullgetAppContext()
public
getAppContext() : AppContext
Return values
AppContextgetComponentParameter()
Returns a component parameter, or null when it is not set.
public
getComponentParameter(string $name) : mixed
Parameters
- $name : string
getContainer()
public
getContainer() : Container
Return values
ContainergetCurrencyContext()
public
getCurrencyContext() : CurrencyContext|null
Return values
CurrencyContext|nullgetLanguageContext()
public
getLanguageContext() : LanguageContext|null
Return values
LanguageContext|nullgetLocalizationContext()
public
getLocalizationContext() : LocalizationContext|null
Return values
LocalizationContext|nullgetRouterDispatcher()
public
getRouterDispatcher() : RouterDispatcher
Return values
RouterDispatchergetSettingContext()
public
getSettingContext() : SettingContext
Return values
SettingContextgetSettings()
public
getSettings() : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>getThemeContext()
public
getThemeContext() : ThemeContext|null
Return values
ThemeContext|nullhasServiceByType()
Returns whether the container has a service of the given type.
public
hasServiceByType(string $className) : bool
The name is composed dynamically (module plus component), so class_exists() runs first, and
a true result guarantees a valid type.
Parameters
- $className : string
Tags
Return values
boolinitializeAllContexts()
public
initializeAllContexts() : void
injectDeviceDetector()
public
injectDeviceDetector(DeviceDetector $detector) : void
Parameters
- $detector : DeviceDetector
onCreate()
public
onCreate() : void
render()
public
render([string $style = 'banner' ]) : void
Parameters
- $style : string = 'banner'
setAppContext()
public
setAppContext(AppContext $appContext) : $this
Parameters
- $appContext : AppContext
Return values
$thissetComponentParameter()
Sets a component parameter.
public
setComponentParameter(string $name, mixed $value) : void
Parameters
- $name : string
- $value : mixed
setCurrencyContext()
public
setCurrencyContext(CurrencyContext|null $currencyContext) : $this
Parameters
- $currencyContext : CurrencyContext|null
Return values
$thissetLanguageContext()
public
setLanguageContext(LanguageContext|null $languageContext) : $this
Parameters
- $languageContext : LanguageContext|null
Return values
$thissetLocalizationContext()
public
setLocalizationContext(LocalizationContext|null $localizationContext) : $this
Parameters
- $localizationContext : LocalizationContext|null
Return values
$thissetSettingContext()
public
setSettingContext(SettingContext $settingContext) : $this
Parameters
- $settingContext : SettingContext
Return values
$thissetThemeContext()
public
setThemeContext(ThemeContext|null $themeContext) : $this
Parameters
- $themeContext : ThemeContext|null
Return values
$thissetup()
public
setup(BasePresenter|BasePresenter $presenter) : void
Parameters
- $presenter : BasePresenter|BasePresenter
setupAppContext()
public
setupAppContext(AppContext $appContext) : void
Parameters
- $appContext : AppContext
typedComponent()
Returns a subcomponent with a verified type.
public
typedComponent(string $name, T> $type) : T
Use it instead of an inline @var above $this['x'] (which does not narrow the type) and
instead of the generic IComponent that $this['x'] returns. See
Form::typedComponent().
Parameters
- $name : string
- $type : T>
Tags
Return values
TfrontPresenter()
Returns the front presenter the component is attached to (null outside the front end or when detached).
protected
frontPresenter() : BasePresenter|null
Return values
BasePresenter|nullgetTranslator()
protected
getTranslator() : ITranslator
Return values
ITranslatorsetTemplateFile()
protected
setTemplateFile(string $dir, string $filename) : void
Parameters
- $dir : string
- $filename : string
setTranslator()
protected
setTranslator(ITranslator $translator) : self
Parameters
- $translator : ITranslator
Return values
selfbuildMessage()
Builds the one-sentence notice: end of the vacation plus an indicative date.
private
buildMessage(Vacation $vacation, array{shipsFrom: string, deliveryDays: ?int, deliveryEstimate: ?string} $notice) : string
The dates (shipsFrom and deliveryEstimate) are computed by the Api helper; for
consecutive vacations it shows the date after the last of them (a PHP endDate + 1
in the component was off by one).
Without deliveryEstimate (no active warehouse has the "vacation extends delivery time"
checkbox on) only the shipping date is shown, since there is nothing to take a delivery
time from.
Parameters
- $vacation : Vacation
- $notice : array{shipsFrom: string, deliveryDays: ?int, deliveryEstimate: ?string}
Return values
stringcreateMultiplierComponent()
Creates a multiplier for the component.
private
createMultiplierComponent(string $name) : Multiplier<string|int, IComponent>
Parameters
- $name : string
Return values
Multiplier<string|int, IComponent>createNewComponentInstance()
Creates a new component instance without adding it to the presenter; used by the multiplier.
private
createNewComponentInstance(string $baseName[, int|string|null $uniqueKey = null ]) : IComponent|null
Parameters
- $baseName : string
- $uniqueKey : int|string|null = null
Return values
IComponent|nullcreateStandardComponent()
Creates a standard component (not a multiplier).
private
createStandardComponent(string $name) : IComponent|null
Parameters
- $name : string
Return values
IComponent|nulldateFormat()
Short date format of the page localization (day-first with dots for cs, ISO for en), like invoices.
private
dateFormat() : string
Return values
stringformatDay()
`Y-m-d` from the bridge (must survive JSON serialization) to the date format of the page localization.
private
formatDay(string $day) : string
Parameters
- $day : string
Return values
stringloadActiveVacations()
private
loadActiveVacations() : array<int, VacationText, message: string}>
Return values
array<int, VacationText, message: string}> —message = the ready one-sentence notice, translated already here because the
translator is not used in component Latte templates. translation is resolved
here too (getTranslation() does not filter the active_translation flag); if
it were filtered in the template, an empty wrapper <div> would render even for
a vacation with nothing to show in the current language.
resolveLangId()
The language comes from the global `LanguageContext`, not from the presenter. It is the same object from which `BaseComponent::setup()` fills the template variable `$lang`, so PHP and Latte see the same number.
private
resolveLangId() : int
Return values
intresolveLeadDays()
private
resolveLeadDays() : int