Manifest modul - Jet\Application_Module_Manifest

Manifest jsou metadata modulu. Fakticky se jedná o soubor manifest.php v adresáři modulu. V tomto souboru jsou metadata uložená klasicky v podobě asociovaného pole.

Třída Jet\Application_Module_Manifest pak s metadaty pracuje. Jednoduše řečeno je to nosič souhrnných informací o modulu. A i zde platí, že pokud vám nevyhovuje tato třída a její implementace, tak si můžete udělat svoji třídu pro manifest a systému ji vnutit pomocí továrny. Jediná podmínka je, aby vaše třída od třídy Jet\Application_Module_Manifest dědila.

A nyní se podívejme, co manifest umí:

Základní metody

Metoda Význam
public __construct(
?string $module_name = null
)
Parametr $module_name je nepovinný a to zda je / není specifikován zásadně ovlivňuje chování.

Pokud je název modulu předán konstruktoru, tak konstruktor provede celkovou inicializaci. Tedy pomocí volání Application_Modules::readManifestData$module_name ) načte data manifestu, ty ověří a inicializuje.

Pokud parametr hodnotu nemá, tak je připraven prázdný manifest a inicializace se vůbec neprovádí. Takové chování je potřebné pro nástroje, které mohou generovat nové moduly.
public getName(
): string
Vrátí název modulu (např. Content.Articles.Admin)
public getModuleDir(
): string
Vrátí plnou cestu k adresáři modulu.
public getModuleInstallDirPath(
): string
Vrátí plnou cestu k instalačnímu adresáři modulu.
public getModuleInstallDictionariesDirPath(
): string
Vrátí plnou cestu k adresáři slovníků modulu.
public getNamespace(
): string
Vrátí jmenný prostor modulu.
public getVendor(
): string
Vrátí dodavatele / autora modulu.

Jde o informaci získanou ze souboru manifestu.
public getVersion(
): string
Vrátí verzi modulu.

Jde o informaci získanou ze souboru manifestu.
public getLabel(
): string
Vrátí uživatelem čitelný název modulu.

Jde o informaci získanou ze souboru manifestu.
public getDescription(
): string
Vrátí pro uživatele určený popis modulu.

Jde o informaci získanou ze souboru manifestu.
public isMandatory(
): bool
Vrátí indikuje zda je / není modul povinný a zda je tedy nutné jej nainstalovat a aktivovat bez ohledu na vůli uživatele.

Jde o informaci získanou ze souboru manifestu.
public isInstalled(
): bool
Indikuje zda modul je / není nainstalován.
public isActivated(
): bool
Indikuje zda modul je / není aktivní.

ACL - akce a autorizace

Modul může pro systém kontroly autentizace a autorizace poskytnou svou sadu operací, které může provádět a jejichž autorizace má podléhat schválení a kontrole pomocí uživatelských rolí. Na tuto sadu operací se rovněž odkazuje mikrorouter kontroleru.

Ale řekněme to jednoduše. Dejme tomu, že administrační modul bude provádět klasické operace: něco přidávat, něco editovat, něco prohlížet a něco mazat. A pochopitelně je někdy nutné omezovat kdo co smí provádět (jaký uživatel, nebo lépe jaká skupina uživatelů - role). Za tímto účelem má Jet systém uživatelských rolí a řídí oprávnění. Ovšem ten systém musí vědět jaká oprávnění jsou k dispozici - co má vlastně povolovat. A jednou ze sad možných práv jsou právě ACL akce modulů. Tedy zmíněný administrační modul bude mít v manifestu například toto: return [
    
// ... ... ...
    
'ACL_actions' => [
        
'get_article' => 'Get article data',
        
'add_article' => 'Add new article',
        
'update_article' => 'Update article',
        
'delete_article' => 'Delete article',
    ],
];

Metoda Význam
public getACLActions(
bool $translate_description = true,
?Locale $translate_locale = null
): array
Vrátí seznam dostupných akcí. Metoda rovnou překládá popisy akcí pomocí překladače, ale překladu je možno zamezit (parametr $translate_description). Zároveň je možné pro překladači specifikovat konkrétní lokalizaci (pokud není určena, je použita aktuální).
public hasACLAction(
string $action
): bool
Indikuje zda modul má / nemá konkrétní akci.

Kontrola kompatibility

V ukázkové aplikaci kontrola kompatibility není implementována. Ovšem pokud bude na Jet postaven ucelený produkt s dlouhým životním cyklem a třeba i komunitou sdílející pro takový produkt určené moduly, tak je kontrola kompatibility nutná. Ovšem její implementace je záležitostí aplikace. Je tisíc cest jak toto dělat a není možné vybrat pouze jednu. Proto Jet (jakožto framework) poskytuje potřebné prostředky jak to udělat, ale již se do toho sám neplete.

Metoda Význam
public static setCompatibilityChecker(
callable $compatibility_checker
): void
Nastaví callback pro zjišťování kompatibility. Prototyp takového callbacku je: function ( Application_Module_Manifest $manifest ) : bool .
public static getCompatibilityChecker(
): callable
Vrátí ověřovací callback.
public isCompatible(
): bool
Ověří zda je modul kompatibilní a to pomocí callbacku. Pokud ten není nastaven, tak vždy vrátí true.

Úkládání

Metoda Význam
public toArray(
): array
Vrátí data manifestu v podobě asociovaného pole. Používá se pro ukládání manifestu.
public saveDatafile(
): void
Zapíše soubor manifestu modulu. Metoda operaci neprovádí, ale volá: Application_Modules::saveManifest$this );
Předchozí kapitola
Jet\Application_Modules_Handler
Další kapitola
Hlavní třída modulu - Jet\Application_Module