CoolCMS API

CountryManager extends Manager
in package
uses VatIdCheckTrait

Countries for Front forms + the VAT id verification bridge.

Country reads are public (:Api:System:Country:get* guest / registrated / admin).

Tags
extends

one-argument form like every Front manager (see PageSectionManager docblock)

Table of Contents

Properties

$service  : TService
Manager service; subclasses narrow the type (`@property` in the Api/Admin/Front manager).
$appContext  : AppContext
$cacheTagInvalidator  : CacheTagInvalidator|null
Post-commit invalidator of the wire-payload query cache (tag bump per entity class).
$languageContext  : LanguageContext|null
$paramsConfig  : Config|null
Neon parameters (`%params%`: server paths and directories), set by the decorator (`decorators.neon`) like `setAppContext()`.
$presenterContext  : PresenterContext
$settingContext  : SettingContext
$vatIdOnlineChecks  : array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}|null

Methods

__construct()  : mixed
find()  : SingleQuery<string|int, T>
Finds one entity by ID and returns a `SingleQuery` object.
findAll()  : Query<string|int, T>
Finds all entities and returns a `Query` object.
findBy()  : SingleQuery<string|int, T>
Finds one entity by filters and returns a `SingleQuery` object.
findSelectOptions()  : array<string, string>
Country select options: active countries, CZ and SK first, then by name in `$languageId`.
findVatIdOnlineChecks()  : array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}
Remaining online checks of the current user without consuming one (request cache).
getAppContext()  : AppContext
getLanguageContext()  : LanguageContext|null
getPresenterContext()  : PresenterContext
getSettingContext()  : SettingContext
getSettings()  : array<int, array<string, mixed>>
getTotalCount()  : int|null
Returns the total count of the last `findAll()` of this manager's service, computed only when the query asked for it (`findAll(..., computeTotalCount: true)`); otherwise the last stored value.
initializeAllContexts()  : void
setAppContext()  : $this
setCacheTagInvalidator()  : static
setLanguageContext()  : $this
setParamsConfig()  : static
setPresenterContext()  : $this
setSettingContext()  : $this
verifyVatId()  : array<string, mixed>
`forceOnline` = the button (calls VIES, counts against the limit); false = the stored evidence only.
bumpCacheTags()  : void
Bumps cache tags for the entity after commit: its class, the owned-cascade classes from metadata and the optional `additionalCacheTags()` of the manager.
bumpCacheTagsExplicit()  : void
Bumps the given classes explicitly (raw-DBAL paths with a cross-entity effect).
bumpCacheTagsForClass()  : void
Bumps cache tags by class name when there is no instance (bulk delete, `updateColumns()`, raw DBAL, tree operations).
classCacheTags()  : array<string|int, string>
Returns extra tags for a bump that has no entity, typically tree operations ({@see \App\Core\Traits\Api\Models\Managers\TreeTrait::treeTransaction()}) that rewrite `lft`/`rgt` on many rows.
getService()  : TService
Returns the service for the traits.
buildVatIdOnlineChecks()  : array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}

Properties

$service

Manager service; subclasses narrow the type (`@property` in the Api/Admin/Front manager).

public TService $service

$cacheTagInvalidator

Post-commit invalidator of the wire-payload query cache (tag bump per entity class).

protected CacheTagInvalidator|null $cacheTagInvalidator = null

Set by the decorator (decorators.neon) like setParamsConfig(). Nullable and fail-open: without wiring (or without Redis) a bump is a no-op.

$paramsConfig

Neon parameters (`%params%`: server paths and directories), set by the decorator (`decorators.neon`) like `setAppContext()`.

protected Config|null $paramsConfig = null

Write logic (asset directories) reads paths from here, not from getSettings() or the setting context, which may be filled by the client without server paths. The property cannot be named $config: it collides with the promoted $config in some managers.

$vatIdOnlineChecks

private array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}|null $vatIdOnlineChecks = null

Methods

find()

Finds one entity by ID and returns a `SingleQuery` object.

public find(int $id[, string|array<string|int, mixed> $includes = [] ]) : SingleQuery<string|int, T>

Usage:

$query = $manager->find(1, ['translations']);
$entity = $query->include(['routes'])->execute(); // or ->get()
$title = $query->getTitle(); // magic call, forwarded to the entity
Parameters
$id : int

entity ID

$includes : string|array<string|int, mixed> = []

relations to load ['translations', 'routes'], or '*' for all

Return values
SingleQuery<string|int, T>

findAll()

Finds all entities and returns a `Query` object.

public findAll([array<string|int, mixed>|null $filters = [] ][, array<string|int, mixed>|null $orderBy = null ][, int|null $offset = null ][, int|null $limit = null ][, array<string|int, mixed>|null $columns = null ][, string|array<string|int, mixed> $includes = [] ][, bool $computeTotalCount = false ]) : Query<string|int, T>

Usage:

$query = $manager->findAll(['active' => true], ['created' => 'desc']);
$items = $query->include(['translations'])->limit(10)->execute();
foreach ($query as $item) { ... } // the query runs lazily on iteration
Parameters
$filters : array<string|int, mixed>|null = []

filters for the where conditions

$orderBy : array<string|int, mixed>|null = null

ordering ['column' => 'ASC/DESC']

$offset : int|null = null

offset for pagination

$limit : int|null = null

result limit

$columns : array<string|int, mixed>|null = null

specific columns to load

$includes : string|array<string|int, mixed> = []

relations to load ['translations', 'routes.translations'], or '*' for all

$computeTotalCount : bool = false

whether to compute the total count for pagination

Return values
Query<string|int, T>

findBy()

Finds one entity by filters and returns a `SingleQuery` object.

public findBy([array<string|int, mixed> $filters = [] ][, string|array<string|int, mixed> $includes = [] ]) : SingleQuery<string|int, T>

Usage:

$query = $manager->findBy(['slug' => 'my-page'], ['translations']);
$entity = $query->include(['routes'])->execute(); // or ->get()
$title = $query->getTitle(); // magic call, forwarded to the entity
Parameters
$filters : array<string|int, mixed> = []

filters for the where conditions

$includes : string|array<string|int, mixed> = []

relations to load ['translations', 'routes'], or '*' for all

Return values
SingleQuery<string|int, T>

findSelectOptions()

Country select options: active countries, CZ and SK first, then by name in `$languageId`.

public findSelectOptions(int|null $languageId[, string|null $keepCode = null ]) : array<string, string>

$keepCode keeps a stored, meanwhile deactivated country selectable.

Parameters
$languageId : int|null
$keepCode : string|null = null
Return values
array<string, string> —

ISO code → name

findVatIdOnlineChecks()

Remaining online checks of the current user without consuming one (request cache).

public findVatIdOnlineChecks() : array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}

A bridge failure (guest without the grant) → canCheckOnline false: hide the button.

Return values
array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}

getSettings()

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

getTotalCount()

Returns the total count of the last `findAll()` of this manager's service, computed only when the query asked for it (`findAll(..., computeTotalCount: true)`); otherwise the last stored value.

public getTotalCount() : int|null

Same value as Query::getTotalCount() of that query.

Return values
int|null

setParamsConfig()

public setParamsConfig(Config $paramsConfig) : static
Parameters
$paramsConfig : Config
Return values
static

verifyVatId()

`forceOnline` = the button (calls VIES, counts against the limit); false = the stored evidence only.

public verifyVatId(string $vatId[, bool $forceOnline = false ][, string|null $countryCode = null ][, bool $automatic = false ]) : array<string, mixed>

automatic = check after a save (registration, profile): online only for a VAT id of another EU state than the seller's, stale / missing evidence refreshed, per-IP safety cap instead of the button quota. An exhausted limit is not an error: verified false + flag VAT_ID_CHECK_LIMIT_REACHED + onlineChecks.resetsAt.

Parameters
$vatId : string
$forceOnline : bool = false
$countryCode : string|null = null
$automatic : bool = false
Return values
array<string, mixed> —

verification (verified, valid, flags, name, onlineChecks, automaticOnline, …), empty on a bridge failure

bumpCacheTags()

Bumps cache tags for the entity after commit: its class, the owned-cascade classes from metadata and the optional `additionalCacheTags()` of the manager.

protected bumpCacheTags(object $entity) : void

Fail-open (the invalidator swallows exceptions). Called from the manager Save/Delete/Tree traits after the commit.

Parameters
$entity : object

bumpCacheTagsExplicit()

Bumps the given classes explicitly (raw-DBAL paths with a cross-entity effect).

protected bumpCacheTagsExplicit(array<string|int, string> $classes) : void
Parameters
$classes : array<string|int, string>

bumpCacheTagsForClass()

Bumps cache tags by class name when there is no instance (bulk delete, `updateColumns()`, raw DBAL, tree operations).

protected bumpCacheTagsForClass(class-string $rootClass[, array<string|int, string> $extraTags = [] ]) : void

Bumps the root class and its owned-cascade classes.

Parameters
$rootClass : class-string
$extraTags : array<string|int, string> = []

classCacheTags()

Returns extra tags for a bump that has no entity, typically tree operations ({@see \App\Core\Traits\Api\Models\Managers\TreeTrait::treeTransaction()}) that rewrite `lft`/`rgt` on many rows.

protected classCacheTags() : array<string|int, string>

IMPORTANT: additionalCacheTags(object) receives an entity, so a class-level bump cannot use it; without this hook a delete would lose the cross-entity tag (Comment to CommentThread). A manager whose cross-entity tag does not depend on a particular entity returns it here.

NOTE: unlike additionalCacheTags(), this hook is declared (with an empty default) instead of being an opt-in through method_exists(); method_exists() is always true in a manager that has the method, which phpstan reports as alreadyNarrowedType.

Return values
array<string|int, string>

getService()

Returns the service for the traits.

protected getService() : TService
Return values
TService

buildVatIdOnlineChecks()

private buildVatIdOnlineChecks(array<string|int, mixed> $onlineChecks) : array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}
Parameters
$onlineChecks : array<string|int, mixed>
Return values
array{unlimited: bool, canCheckOnline: bool, limit: int|null, remaining: int|null, resetsAt: string|null}
On this page

Search results