CoolCMS API

OptionRules extends AbstractOptionRules
in package

FinalYes

Leaf over the shared {@see AbstractOptionRules} (all behavior lives in the abstract class); it supplies only the module translator domain.

The templates (Default and _modal under Core/Base/Admin/Parameters/Components/OptionRulesComponent/Templates/Default/) are inherited unchanged. OptionRulesFactory stays in the module (registered in DI, injects the module managers).

IMPORTANT: the own constructor, typed on the concrete module managers instead of the shared abstract parents of AbstractOptionRules::__construct(), is required. DI search: registers this concrete class as a service, and a constructor inherited from the abstract class would hit several module implementations (Bazaar, Comcat, Eshop) at compile-time autowiring and fail with "Multiple services found". The concrete type is unambiguous, as in the leaf presenters.

Table of Contents

Properties

$container  : Container
$parameterId  : int
Select whose rules the component manages. Persistent, so it survives the `assignForm` submit.
$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

Methods

__call()  : mixed
Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
__construct()  : mixed
createComponent()  : IComponent|null
createComponentAssignForm()  : Form
createComponentBulkAssignForm()  : Form
Bulk modal (per-selection): a checkbox list of rules (unified pool); a checked rule is added to every selected option. It is not prefilled (a "common state" makes no sense across a heterogeneous selection), it only adds. Selected options travel in the hidden `optionIds` (the state does not survive the submit); `parameterId` is persistent and rule items do not depend on it, they draw from the global pool.
createComponentOptionRulesForm()  : Form
Per-option modal: checkbox list of rules (action = 1 of the select), pre-checked = controlling this option.
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
handleAssignRules()  : void
Opens the modal editing rules that control the given option (per-option axis).
handleBulkAssignRules()  : void
Opens the modal for bulk assigning a rule to several selected options (per-selection axis).
handleDeleteRule()  : void
Deletes the rule (DB FK cascade removes conditions, values and targets) and recomputes `always_visible`.
handleEditTargets()  : void
Opens the modal editing target options of a rule (per-rule axis).
hasServiceByType()  : bool
Returns whether the container has a service of the given type.
initializeAllContexts()  : void
injectDeviceDetector()  : void
onAssignFormError()  : void
onAssignFormSuccess()  : void
onBulkAssignFormError()  : void
onBulkAssignFormSuccess()  : void
onCreate()  : void
onOptionRulesFormError()  : void
onOptionRulesFormSuccess()  : 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).
getModalWindow()  : ModalWindow
getTranslator()  : ITranslator
isTargetAllowed()  : bool
Returns whether the logged-in user may open the given admin target. For visibility (tiles, autocomplete, buttons); it does not throw.
operatorsDomain()  : string
Domain of operator texts (`admin.bazaar.operators` / `admin.comcat.operators`).
requirePrivilege()  : void
Throws 403 when the logged-in user lacks the given admin privilege.
resolvePageTarget()  : string|null
Returns the RBAC key of the target page: `<presenter>:<action>`, e.g. `:Admin:System:User:show`.
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).

Properties

$parameterId

Select whose rules the component manages. Persistent, so it survives the `assignForm` submit.

public int $parameterId = 0
Attributes
#[Persistent]

$componentParameters

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

component parameters set by setComponentParameter()

$translatorDomain

protected string|null $translatorDomain = 'admin.bazaar.components.optionRules'

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

createComponentBulkAssignForm()

Bulk modal (per-selection): a checkbox list of rules (unified pool); a checked rule is added to every selected option. It is not prefilled (a "common state" makes no sense across a heterogeneous selection), it only adds. Selected options travel in the hidden `optionIds` (the state does not survive the submit); `parameterId` is persistent and rule items do not depend on it, they draw from the global pool.

public createComponentBulkAssignForm() : Form
Return values
Form

createComponentOptionRulesForm()

Per-option modal: checkbox list of rules (action = 1 of the select), pre-checked = controlling this option.

public createComponentOptionRulesForm() : Form
Return values
Form

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

handleAssignRules()

Opens the modal editing rules that control the given option (per-option axis).

public handleAssignRules(int $parameterId, int $optionId) : void

parameterId is passed explicitly: the link is built in the left column (main form) before the component on the right renders, so the persistent param would still be 0 in the link.

Parameters
$parameterId : int
$optionId : int

handleBulkAssignRules()

Opens the modal for bulk assigning a rule to several selected options (per-selection axis).

public handleBulkAssignRules(int $parameterId[, string $optionIds = '' ]) : void

optionIds is a CSV list of ids from the client ("select all" bar); parameterId is passed explicitly for the same reason as in the per-option variant.

Parameters
$parameterId : int
$optionIds : string = ''

handleDeleteRule()

Deletes the rule (DB FK cascade removes conditions, values and targets) and recomputes `always_visible`.

public handleDeleteRule(int $ruleId) : void

The link is a plain request (styled data-grid-confirm), so a redirect back follows the delete.

Parameters
$ruleId : int
Attributes
#[Requires]
$methods: 'POST'

handleEditTargets()

Opens the modal editing target options of a rule (per-rule axis).

public handleEditTargets(int $ruleId) : void
Parameters
$ruleId : int

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([int|null $parameterId = null ]) : void
Parameters
$parameterId : int|null = null

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

isTargetAllowed()

Returns whether the logged-in user may open the given admin target. For visibility (tiles, autocomplete, buttons); it does not throw.

protected isTargetAllowed(string|null $key) : bool

IMPORTANT: fail-closed like requirePrivilege(): an empty key and a presenter without isAllowed() both mean no. A component that skips this question lists the target to everyone.

Parameters
$key : string|null
Return values
bool

operatorsDomain()

Domain of operator texts (`admin.bazaar.operators` / `admin.comcat.operators`).

protected operatorsDomain() : string
Return values
string

requirePrivilege()

Throws 403 when the logged-in user lacks the given admin privilege.

protected requirePrivilege(string $key) : void

Call it as the first statement of a mutating signal, before loading data, so the check cannot be bypassed by something being written first.

Parameters
$key : string

resolvePageTarget()

Returns the RBAC key of the target page: `<presenter>:<action>`, e.g. `:Admin:System:User:show`.

protected static resolvePageTarget(object|null $page) : string|null

Same interpretation as Menu::filterByPrivileges(), BasePresenter::authorizeListing() and PrivilegeCheckTrait::checkCurrentPrivilege(). The key is derived from the page target only, never from a file or class name.

Returns null when the page is missing or has no presenter, so there is nothing to allow.

Parameters
$page : object|null

AdminPage entity (hydrated, hence just object)

Return values
string|null

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
On this page

Search results