automation_configurator */ public const AUTOPILOT = 'autopilot'; public const USER_MANAGER = 'user_manager'; public const USERS_GROUPS_TYPES = 'users_groups_types'; public const DROPSHIP = 'dropship'; public const DAKTELA = 'daktela'; public const SAVE_FORMS = 'save_forms'; /** @var GraphQL API */ public const GRAPHQL = 'graphql'; public const SUB_GRAPHQL_ADMIN = 'admin_api'; public const OSS_VATS = 'oss_vats'; public const VIDEOS = 'videos'; public const CDN = 'cdn'; public const SYSTEM_INSPECTION = 'system_inspection'; public const INVOICES = 'invoices'; // Generování čísel faktur, fakturační řady public const CHECK_APP = 'check_app'; // check-app - vstupní a výstupní kontrola public const SUB_ZEBRA_TEMPLATE_TYPE = 'zebra_template_type'; public const AUTOMATION_CONFIGURATOR = 'automation_configurator'; public const INVENTORO = 'inventoro'; public const SYNCHRONIZATION = 'synchronization'; public const RESERVATIONS = 'reservations'; public const RECLAMATIONS_SUPPLIERS = 'reclamations_suppliers'; public const JS_SHOP = 'js_shop'; public const SUB_JS_SHOP_PRODUCTS_COMPARE = 'products_compare'; public const JS_MENU = 'js_menu'; public const JS_MULTISETS = 'js_multisets'; public const RECAPTCHA = 'recaptcha'; public const SUB_CLOUDFLARE = 'cloudflare'; public const SUB_GCLOUD = 'gcloud'; public const AUTOMATIC_IMPORT = 'automatic_import'; public const B2B_PREORDERS = 'b2b_preorders'; public const AGE_VERIFY = 'age_verify'; public const LUIGIS_BOX = 'luigis_box'; public const TWO_FACTOR = 'two_factor'; public const SALES = 'sales'; public const COMPONENTS = 'components'; public const SUB_STORYBOOK = 'storybook'; public const RECOMMENDERS = 'recommenders'; public const COWORKERS = 'coworkers'; public const KAFKA = 'kafka'; public const LLM = 'llm'; public const GTM = 'gtm'; public const SUB_CONTAINER_CONFIG = 'container_config'; public const USER_ADDRESSES = 'user_addresses'; public const TRUSTPILOT = 'trustpilot'; public const SALESMAN = 'salesman'; public static function getStructure() { static $modulesHierarchy; if (isset($modulesHierarchy)) { return $modulesHierarchy; } $reflectionClass = new ReflectionClass(static::class); $tmp = []; $lastModule = null; foreach ($reflectionClass->getConstants() as $constantName => $constantValue) { if (!empty($lastModule) && mb_substr($constantName, 0, 4) === 'SUB_') { $tmp[$lastModule]['submodules'][mb_substr($constantName, 4)] = ['value' => $constantValue]; } else { $tmp[$constantName] = ['value' => $constantValue]; $lastModule = $constantName; } } $modulesHierarchy = $tmp; return $tmp; } public static function check(string $moduleConst, ?string $submoduleName): bool { $modules = static::getStructure(); $module = $modules[$moduleConst]['value'] ?? null; $submodule = $modules[$moduleConst]['submodules'][$submoduleName]['value'] ?? null; if (!isset($module)) { throw new InvalidArgumentException("Module constant '{$moduleConst}' is not defined in \Modules!"); } if (!isset($submodule) && isset($submoduleName)) { throw new InvalidArgumentException("Submodule '{$submoduleName}' is not defined in \Modules or it is not defined properly after module '{$moduleConst}'!"); } return (bool) findModule($module, $submodule); } }