CoolCMS API

VacationBanner extends BaseComponent
in package

FinalYes

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

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

$componentParameters

protected array<string, mixed> $componentParameters = []

component parameters set by setComponentParameter()

$translatorDomain

protected string|null $translatorDomain = 'front.store.vacation'

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>

createComponent()

public createComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

getComponentParameter()

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
Container

getSettings()

public getSettings() : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>

hasServiceByType()

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
phpstan-assert-if-true

class-string $className

Return values
bool

render()

public render([string $style = 'banner' ]) : void
Parameters
$style : string = 'banner'

setComponentParameter()

Sets a component parameter.

public setComponentParameter(string $name, mixed $value) : void
Parameters
$name : string
$value : mixed

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
template
Return values
T

frontPresenter()

Returns the front presenter the component is attached to (null outside the front end or when detached).

protected frontPresenter() : BasePresenter|null
Return values
BasePresenter|null

getTranslator()

protected getTranslator() : ITranslator
Return values
ITranslator

setTemplateFile()

protected setTemplateFile(string $dir, string $filename) : void
Parameters
$dir : string
$filename : string

setTranslator()

protected setTranslator(ITranslator $translator) : self
Parameters
$translator : ITranslator
Return values
self

buildMessage()

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
string

createMultiplierComponent()

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|null

createStandardComponent()

Creates a standard component (not a multiplier).

private createStandardComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

dateFormat()

Short date format of the page localization (day-first with dots for cs, ISO for en), like invoices.

private dateFormat() : string
Return values
string

formatDay()

`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
string

loadActiveVacations()

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
int

resolveLeadDays()

private resolveLeadDays() : int
Return values
int
On this page

Search results