anotherModule] or [before => anotherModule] */ public function getPosition(): array; /** * Returns a modules appearance options, e.g. used for module menu */ public function getAppearance(): array; /** * Can be user (editor permissions), admin, or systemMaintainer */ public function getAccess(): string; /** * Can be "*" (= empty) or "live" or "offline" */ public function getWorkspaceAccess(): string; /** * The identifier of the parent module during registration */ public function getParentIdentifier(): string; /** * Set a reference to the next upper menu item * * @internal Might vanish soon */ public function setParentModule(ModuleInterface $module): void; /** * Get the reference to the next upper menu item */ public function getParentModule(): ?ModuleInterface; /** * Can be checked if the module is a "main module" */ public function hasParentModule(): bool; /** * Used to set another module as part of the parent module * * @internal Might vanish soon */ public function addSubModule(ModuleInterface $module): void; /** * Remove a submodule * * @internal Might vanish soon */ public function removeSubModule(string $identifier): void; /** * Checks whether this module has a submodule with the given identifier */ public function hasSubModule(string $identifier): bool; /** * Checks if this module has further submodules */ public function hasSubModules(): bool; /** * Return a submodule given by its full identifier */ public function getSubModule(string $identifier): ?ModuleInterface; /** * Return all direct descendants of this module * @return ModuleInterface[] */ public function getSubModules(): array; /** * Returns module related route options - used for the router */ public function getDefaultRouteOptions(): array; /** * Get allowed and available module data properties and their default values. */ public function getDefaultModuleData(): array; /** * Return a list of identifiers that are aliases to this module */ public function getAliases(): array; /** * Whether this module should display a card-based overview of its submodules * instead of automatically routing to the first available submodule. */ public function hasSubmoduleOverview(): bool; }