AbstractRuleEditor
extends BaseComponent
in package
uses
PrivilegeGuardTrait
Editor of a single option rule (`SHOW_SELECT_OPTIONS`, action = 1), rendered live as `{control ruleEditor-<id>}` into a modal outside `editForm`.
Instantiated per rule by AbstractParameterPresenter::createComponentRuleEditor() (Nette
Multiplier; key = ruleId, 0 = new). Shared parent of the Bazaar, Comcat and Eshop editors: module
entities appear only as object (see AbstractParameterRuleManager). The leaf supplies
$translatorDomain, operatorsDomain() and parameterTargetPresenter(); the module
RuleEditorFactory injects the managers.
It is a component rather than a presenter form because $control in its template is always this
component, so an AJAX snippet redraw cannot diverge $control (that broke a presenter-inline modal).
The Picker is hosted by this component, so the Picker::resolveForm() walk-up finds
editorForm on it, and the <form> is clean (outside editForm), so closest('form') in picker.js submits.
It saves immediately through AbstractParameterRuleManager::saveRuleConditions() (the whole condition set) plus granular targets, then closes the modal and redraws the rule list in AbstractOptionRules.
Table of Contents
Constants
- DEFAULT_MODAL_ID : mixed = 'rule-editor-modal'
- Default DOM id of the shell (Options / option reveal).
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
- $conditionOptionDefaults : array<int, array<int, int>>
- GET prefill of checked condition options for onAnchor, keyed by the condition row index.
- $modalId : string
- DOM id of the modal shell; differs for Options and display rules (two shells, one active).
- $parameterManager : Manager
- $parameterRuleManager : AbstractParameterRuleManager
- $pickerFactory : PickerFactory
- $ruleId : int
- Edited rule (0 = new); the Multiplier key.
- $selectId : int
- SELECT (>0) is the "reveal options" mode (Options); 0 is the "conditions only" mode (display rules).
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
- onEditorSuccess() : 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.
- createComponentEditorForm() : Form
- createComponentPicker() : Multiplier<string|int, Picker>
- frontPresenter() : BasePresenter|null
- Returns the front presenter the component is attached to (null outside the front end or when detached).
- 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`).
- parameterTargetPresenter() : string
- Presenter targeted by the condition source picker (`:Admin:Bazaar:Parameter` / `:Admin:Comcat:Parameter`).
- 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
- addConditionRow() : void
- Condition row: source (picker hidden), label, operator, and source options or a text value.
- applyDefaults() : void
- GET prefill from the stored rule: conditions (through the manager, works for floating rules too) and reveal targets.
- childOptionItems() : array<int, NotTranslate>
- Returns child parameters (options) of parameter `$parentId` as checkbox list items (id to name).
- 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).
- displayName() : string
- Parameter name in the current language (falls back to the first non-empty one).
-
parsePickerName()
: array{0: string, 1: list
} - pickers() : array<string, PickerConfig>
- Condition source picker: the field `conditions[<i>].parameterId` on `editorForm`.
- refreshConditionOptions() : void
- onAnchor: renders the source child options into the `options` checkbox list of each condition.
- resolveParameterLabel() : string|null
- suggestParameters() : array<int, array{id: int, label: string}>
- tr() : string
- Translates a key in the component domain to a final string.
- validatorOptions() : array<string, NotTranslate>
- Returns operators (Nette validators) as a select option list; skips codes longer than the DB column (varchar 15).
Constants
DEFAULT_MODAL_ID
Default DOM id of the shell (Options / option reveal).
public
mixed
DEFAULT_MODAL_ID
= 'rule-editor-modal'
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
= null
$conditionOptionDefaults
GET prefill of checked condition options for onAnchor, keyed by the condition row index.
private
array<int, array<int, int>>
$conditionOptionDefaults
= []
$modalId read-only
DOM id of the modal shell; differs for Options and display rules (two shells, one active).
private
string
$modalId
= self::DEFAULT_MODAL_ID
$parameterManager read-only
private
Manager
$parameterManager
$parameterRuleManager read-only
private
AbstractParameterRuleManager
$parameterRuleManager
$pickerFactory read-only
private
PickerFactory
$pickerFactory
$ruleId read-only
Edited rule (0 = new); the Multiplier key.
private
int
$ruleId
$selectId read-only
SELECT (>0) is the "reveal options" mode (Options); 0 is the "conditions only" mode (display rules).
private
int
$selectId
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(AbstractParameterRuleManager $parameterRuleManager, Manager $parameterManager, PickerFactory $pickerFactory, int $ruleId, int $selectId[, string $modalId = self::DEFAULT_MODAL_ID ]) : mixed
Parameters
- $parameterRuleManager : AbstractParameterRuleManager
- $parameterManager : Manager
- $pickerFactory : PickerFactory
- $ruleId : int
- $selectId : int
- $modalId : string = self::DEFAULT_MODAL_ID
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
onEditorSuccess()
public
onEditorSuccess(Form $form) : void
Parameters
- $form : Form
render()
public
render() : void
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
TcreateComponentEditorForm()
protected
createComponentEditorForm() : Form
Return values
FormcreateComponentPicker()
protected
createComponentPicker() : Multiplier<string|int, Picker>
Return values
Multiplier<string|int, Picker>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|nullgetTranslator()
protected
getTranslator() : ITranslator
Return values
ITranslatorisTargetAllowed()
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
booloperatorsDomain()
Domain of operator texts (`admin.bazaar.operators` / `admin.comcat.operators`).
protected
abstract operatorsDomain() : string
Return values
stringparameterTargetPresenter()
Presenter targeted by the condition source picker (`:Admin:Bazaar:Parameter` / `:Admin:Comcat:Parameter`).
protected
abstract parameterTargetPresenter() : string
Return values
stringrequirePrivilege()
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
-
AdminPageentity (hydrated, hence justobject)
Return values
string|nullsetTemplateFile()
protected
setTemplateFile(string $dir, string $filename) : void
Parameters
- $dir : string
- $filename : string
setTranslator()
protected
setTranslator(ITranslator $translator) : self
Parameters
- $translator : ITranslator
Return values
selfaddConditionRow()
Condition row: source (picker hidden), label, operator, and source options or a text value.
private
addConditionRow(Container $row) : void
Parameters
- $row : Container
applyDefaults()
GET prefill from the stored rule: conditions (through the manager, works for floating rules too) and reveal targets.
private
applyDefaults(Form $form) : void
Parameters
- $form : Form
childOptionItems()
Returns child parameters (options) of parameter `$parentId` as checkbox list items (id to name).
private
childOptionItems(int $parentId) : array<int, NotTranslate>
Parameters
- $parentId : int
Return values
array<int, NotTranslate>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|nullcreateStandardComponent()
Creates a standard component (not a multiplier).
private
createStandardComponent(string $name) : IComponent|null
Parameters
- $name : string
Return values
IComponent|nulldisplayName()
Parameter name in the current language (falls back to the first non-empty one).
private
displayName(ParameterInterface $parameter) : string
Parameters
- $parameter : ParameterInterface
Return values
stringparsePickerName()
private
parsePickerName(string $name) : array{0: string, 1: list}
Parameters
- $name : string
Return values
array{0: string, 1: listpickers()
Condition source picker: the field `conditions[<i>].parameterId` on `editorForm`.
private
pickers() : array<string, PickerConfig>
The resolveForm walk-up finds editorForm on this component. After a pick the hidden editorRefresh is clicked and onAnchor renders the options.
Return values
array<string, PickerConfig>refreshConditionOptions()
onAnchor: renders the source child options into the `options` checkbox list of each condition.
private
refreshConditionOptions(Form $form) : void
Parameters
- $form : Form
resolveParameterLabel()
private
resolveParameterLabel(int $id) : string|null
Parameters
- $id : int
Return values
string|nullsuggestParameters()
private
suggestParameters(string $query) : array<int, array{id: int, label: string}>
Parameters
- $query : string
Return values
array<int, array{id: int, label: string}>tr()
Translates a key in the component domain to a final string.
private
tr(string $key) : string
Parameters
- $key : string
Return values
stringvalidatorOptions()
Returns operators (Nette validators) as a select option list; skips codes longer than the DB column (varchar 15).
private
validatorOptions() : array<string, NotTranslate>