AdvertResponses
extends BaseComponent
in package
uses
ModalAwareTrait, PrivilegeGuardTrait, OwnerContextGuardTrait
Manages the responses to a company profile ({@see Response}) in the company profile edit form.
A flat list, adding and editing in the shared admin
ModalWindow (mounted in
@layout.latte) and soft delete (the deleted flag, signal toggleDeleted!). Keyed by
advertId; the edit form renders it in the responses tab.
Usage:
{control advertResponses $advertId}
The form (responseForm) is ajax; after saving, the modal stays open (confirmation) and the
list ({snippet responseList}) is redrawn. advertId travels in a hidden field, not a
persistent parameter, because the form link('this') does not carry it. The sender (user)
is never changed in the modal: an edit keeps the original, a response added by the admin has none.
Table of Contents
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
- $adding : bool
- Whether a new response is being added (modal with an empty form).
- $advertId : int
- Company profile whose responses the component manages; not a persistent parameter (signals and a hidden field carry it).
- $advertResponseManager : ResponseManager
- $editId : int|null
- Edited item (set by `handleEdit()` and the submit for the modal re-render); null when adding.
- $justSaved : bool
- Whether a response was just saved; the modal then shows a confirmation instead of the form.
- $ownerContextProvider : callable(): mixed|null
- $toggleFailed : bool
- Whether the `deleted` toggle (`toggleDeleted!`) failed; the list then renders an error message.
Methods
- __call() : mixed
- Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
- __construct() : mixed
- createComponent() : IComponent|null
- createComponentResponseForm() : Form
- 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
- handleAdd() : void
- Opens the shared modal for adding a response.
- handleEdit() : void
- Opens the shared modal for editing a response.
- handleToggleDeleted() : void
- Soft-deletes or restores a response by toggling the `deleted` flag.
- hasServiceByType() : bool
- Returns whether the container has a service of the given type.
- initializeAllContexts() : void
- injectDeviceDetector() : void
- onCreate() : void
- onResponseFormError() : void
- onResponseFormSuccess() : void
- render() : void
- setAppContext() : $this
- setComponentParameter() : void
- Sets a component parameter.
- setCurrencyContext() : $this
- setLanguageContext() : $this
- setLocalizationContext() : $this
- setOwnerContext() : static
- Sets the host callback returning the id of the owner currently being edited (advert or post).
- setSettingContext() : $this
- setThemeContext() : $this
- setup() : void
- setupAppContext() : void
- typedComponent() : T
- Returns a subcomponent with a verified type.
- contextOwnerId() : int|null
- Owner id from the host context; null when the host edits nothing (fail-closed).
- 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.
- requireContextOwner() : int
- Signal gate: an owner id from a hand-built URL is usable only when it equals the host context; otherwise 403.
- 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
- submittedOwnerId() : int|null
- Owner for a form submit: the host context, or null when it is missing or the posted hidden id differs from it (a forged form of another record).
- 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).
- findItem() : Response|null
- Returns the response by id, only within the edited company profile.
- loadItems() : array<int, Response>
- Returns the company profile responses, newest first by insert time.
- renderModalContent() : string
- showModal() : void
- str() : string
- strOrNull() : string|null
- tr() : string
- Translates a key in the form domain to a ready string (for fields with `setTranslator(null)`).
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
= 'admin.comcat.components.advertResponses'
$adding
Whether a new response is being added (modal with an empty form).
private
bool
$adding
= false
$advertId
Company profile whose responses the component manages; not a persistent parameter (signals and a hidden field carry it).
private
int
$advertId
= 0
$advertResponseManager read-only
private
ResponseManager
$advertResponseManager
$editId
Edited item (set by `handleEdit()` and the submit for the modal re-render); null when adding.
private
int|null
$editId
= null
$justSaved
Whether a response was just saved; the modal then shows a confirmation instead of the form.
private
bool
$justSaved
= false
$ownerContextProvider
private
callable(): mixed|null
$ownerContextProvider
= null
$toggleFailed
Whether the `deleted` toggle (`toggleDeleted!`) failed; the list then renders an error message.
private
bool
$toggleFailed
= false
Per request (the component is rebuilt on every request), so the message does not survive
another redraw. A flash message cannot be used: the signal runs over ajax and the layout
flashMessagesSnippet is not redrawn in a component response.
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(ResponseManager $advertResponseManager) : mixed
Parameters
- $advertResponseManager : ResponseManager
createComponent()
public
createComponent(string $name) : IComponent|null
Parameters
- $name : string
Return values
IComponent|nullcreateComponentResponseForm()
public
createComponentResponseForm() : Form
Return values
FormgetAppContext()
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|nullhandleAdd()
Opens the shared modal for adding a response.
public
handleAdd(int $advertId) : void
Parameters
- $advertId : int
handleEdit()
Opens the shared modal for editing a response.
public
handleEdit(int $advertId, int $id) : void
Parameters
- $advertId : int
- $id : int
handleToggleDeleted()
Soft-deletes or restores a response by toggling the `deleted` flag.
public
handleToggleDeleted(int $advertId, int $id) : void
Parameters
- $advertId : int
- $id : int
Attributes
- #[Requires]
- $methods: 'POST'
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
Return values
boolinitializeAllContexts()
public
initializeAllContexts() : void
injectDeviceDetector()
public
injectDeviceDetector(DeviceDetector $detector) : void
Parameters
- $detector : DeviceDetector
onCreate()
public
onCreate() : void
onResponseFormError()
public
onResponseFormError(Form $form) : void
Parameters
- $form : Form
onResponseFormSuccess()
public
onResponseFormSuccess(Form $form, ArrayHash<string|int, mixed> $values) : void
Parameters
- $form : Form
- $values : ArrayHash<string|int, mixed>
render()
public
render([int|null $advertId = null ]) : void
Parameters
- $advertId : int|null = null
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
$thissetOwnerContext()
Sets the host callback returning the id of the owner currently being edited (advert or post).
public
setOwnerContext(callable(): mixed $provider) : static
It is called on every use, so a value from an earlier request never lingers.
Parameters
- $provider : callable(): mixed
Return values
staticsetSettingContext()
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
TcontextOwnerId()
Owner id from the host context; null when the host edits nothing (fail-closed).
protected
contextOwnerId() : int|null
Return values
int|nullfrontPresenter()
Returns the front presenter the component is attached to (null outside the front end or when detached).
protected
frontPresenter() : BasePresenter|null
Return values
BasePresenter|nullgetModalWindow()
protected
getModalWindow() : ModalWindow
Return values
ModalWindowgetTranslator()
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
boolrequireContextOwner()
Signal gate: an owner id from a hand-built URL is usable only when it equals the host context; otherwise 403.
protected
requireContextOwner(int $ownerId) : int
Parameters
- $ownerId : int
Return values
intrequirePrivilege()
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
selfsubmittedOwnerId()
Owner for a form submit: the host context, or null when it is missing or the posted hidden id differs from it (a forged form of another record).
protected
submittedOwnerId(mixed $postedOwnerId) : int|null
Parameters
- $postedOwnerId : mixed
Return values
int|nullcreateMultiplierComponent()
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|nullfindItem()
Returns the response by id, only within the edited company profile.
private
findItem(int $id) : Response|null
A foreign response and a missing host context both count as not found, so edit, prefill and
the deleted toggle never touch it.
Parameters
- $id : int
Return values
Response|nullloadItems()
Returns the company profile responses, newest first by insert time.
private
loadItems() : array<int, Response>
Return values
array<int, Response>renderModalContent()
private
renderModalContent() : string
Return values
stringshowModal()
private
showModal() : void
str()
private
str(mixed $value) : string
Parameters
- $value : mixed
Return values
stringstrOrNull()
private
strOrNull(mixed $value) : string|null
Parameters
- $value : mixed
Return values
string|nulltr()
Translates a key in the form domain to a ready string (for fields with `setTranslator(null)`).
private
tr(string $key) : string
Parameters
- $key : string