CoolCMS API

ProductStatisticsControl extends BaseComponent
in package

Statistics of one product broken down by its product sets: content of the `:Admin:Eshop:Product:statistics` action ({@see \App\UI\Admin\Eshop\Presenters\ProductPresenter}).

Renders one shared date-range filter, three charts (StatisticsChartControl) and a summary table. All four parts must cover the same range, so this component owns the filter and passes the range to the charts in extraParams with their own filter turned off (StatisticsChartConfig::$showFilter).

The range lives in #[Persistent] properties on the component, not on the presenter: on the presenter they would leak into every link it builds (grid, edit, ...).

Table of Contents

Constants

CHARTS  : array<string|int, mixed> = ['views' => ['product-views', 'line', false], '...
Page charts: instance key => [Api action in kebab case, chart type, is monetary].
DEFAULT_FROM_MODIFIER  : string = '-6 months'
Default range is the last 6 months (same as `StatisticsChartControl`).

Properties

$container  : Container
$from  : string
$granularity  : string
$routerDispatcher  : RouterDispatcher
$to  : string
$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
$apiBridge  : ApiBridge
$productId  : int
$statisticsChartFactory  : StatisticsChartFactory

Methods

__call()  : mixed
Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
__construct()  : mixed
createComponent()  : IComponent|null
filterFormSucceeded()  : void
Handles the plain (non-AJAX) filter: stores the persistent state and redirects to `this`.
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
setProductId()  : self
setSettingContext()  : $this
setThemeContext()  : $this
setup()  : void
setupAppContext()  : void
typedComponent()  : T
Returns a subcomponent with a verified type.
createComponentChart()  : Multiplier<string|int, StatisticsChartControl>
Builds the three charts from one configuration.
createComponentFilterForm()  : Form
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
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).
fetchSummary()  : array{rows: list>, totals: array, failed: bool}
Loads the summary table data from `api/eshop/statistics/product-summary`.

Constants

CHARTS

Page charts: instance key => [Api action in kebab case, chart type, is monetary].

private array<string|int, mixed> CHARTS = ['views' => ['product-views', 'line', false], 'soldQuantity' => ['product-sold-quantity', 'bar', false], 'revenue' => ['product-revenue', 'line', true]]

DEFAULT_FROM_MODIFIER

Default range is the last 6 months (same as `StatisticsChartControl`).

private string DEFAULT_FROM_MODIFIER = '-6 months'

Properties

$componentParameters

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

component parameters set by setComponentParameter()

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

filterFormSucceeded()

Handles the plain (non-AJAX) filter: stores the persistent state and redirects to `this`.

public filterFormSucceeded(Form $form, ArrayHash $values) : void
Parameters
$form : Form
$values : ArrayHash

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

setComponentParameter()

Sets a component parameter.

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

setProductId()

public setProductId(int $productId) : self
Parameters
$productId : int
Return values
self

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

createComponentChart()

Builds the three charts from one configuration.

protected createComponentChart() : Multiplier<string|int, StatisticsChartControl>

Range and granularity go in extraParams, so the charts hold no state of their own and the filter of this component is the single source of truth.

Return values
Multiplier<string|int, StatisticsChartControl>

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

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

fetchSummary()

Loads the summary table data from `api/eshop/statistics/product-summary`.

private fetchSummary() : array{rows: list>, totals: array, failed: bool}

A bridge failure must not break the page: the table is replaced by a message (failed is true) and the charts above it still render.

Return values
array{rows: list>, totals: array, failed: bool}
On this page

Search results