get_stylesheet(); $tpl = $theme->get_template(); return in_array($sheet, ['restocommerce', 'gastrocomplete'], true) || in_array($tpl, ['restocommerce', 'gastrocomplete'], true); } // Alias for leftover callers. if (!function_exists('gc_is_lieferando_frontend')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound -- Bewahrte öffentliche Kompatibilitätsfunktion gc_is_lieferando_frontend mit RestoCommerce-/GastroComplete-Namensraumpräfix rc_, mom_ bzw. gc_theme_. Pro, mitgeliefertes Theme und vorhandene Integrationen rufen diese Namen auf; neue Hilfsfunktionen erhalten restocommerce_. Kein generischer ungeschützter Funktionsname. function gc_is_lieferando_frontend(): bool { return rc_is_storefront_theme(); } } $restocommerce_rc_activate = static function () { // Lightweight activation — must succeed without WooCommerce. require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-setup-presets.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-setup.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-theme-sync.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-migration.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-core.php'; if (class_exists('GC_Secret_Store')) { GC_Secret_Store::ensure_master_key(); } if (class_exists('GC_Request_Log')) { GC_Request_Log::ensure_dir(); } if (class_exists('MoM_GastroComplete_Migration')) { MoM_GastroComplete_Migration::run(); } flush_rewrite_rules(); // Installing and activating the shop theme requires the explicit wizard action. // Plugin activation must preserve the existing website theme. if (class_exists('GC_Setup_Presets') && class_exists('GC_Setup_Wizard')) { $state = GC_Setup_Presets::get_state(); if (empty($state['completed']) && !GC_Setup_Wizard::is_existing_shop()) { GC_Setup_Presets::update_state(['dismissed' => false]); set_transient('gc_setup_activation_redirect', 1, 120); set_transient('rc_setup_activation_redirect', 1, 120); } } }; register_activation_hook(__FILE__, $restocommerce_rc_activate); register_deactivation_hook(__FILE__, static function () { flush_rewrite_rules(); }); // Always-safe setup stack (Wizard works without WooCommerce). // Do not declare WooCommerce as an activation dependency: this wizard installs it. // Commerce modules remain gated by rc_woocommerce_active() below. require_once RESTOCOMMERCE_PATH . 'includes/class-mom-core.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-migration.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-setup-presets.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-installer.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-theme-sync.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-setup-menu.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-setup.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-moms-client-api.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-portal-agent.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-entitlements.php'; // WooCommerce missing: clear notice + Wizard link (outside wizard page). add_action('admin_notices', static function () { if (!current_user_can('activate_plugins') && !current_user_can('manage_options')) { return; } if (rc_woocommerce_active()) { return; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- restocommerce.php::gc_is_lieferando_frontend: ausschließlich Anzeige/Filter/fester Navigationspfad; kein Speichern oder Erteilen einer Berechtigung. Mutierende Handler besitzen eigene Prüfung. $page = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : ''; if ($page === 'gc-setup') { return; } $wizard = admin_url('admin.php?page=gc-setup'); echo '

'; echo esc_html__('RestoCommerce benötigt WooCommerce. Starte den Einrichtungsassistenten, um WooCommerce zu installieren.', 'restocommerce'); echo ' '; echo esc_html__('Einrichtungsassistent', 'restocommerce'); echo '

'; }); add_action('plugins_loaded', static function () { if (class_exists('GC_Setup_Wizard')) { GC_Setup_Wizard::boot(); } }, 1); add_action('plugins_loaded', static function () { if (!rc_woocommerce_active()) { return; } // Catalog V2 + storefront (requires WooCommerce). require_once RESTOCOMMERCE_PATH . 'includes/catalog-v2/bootstrap.php'; add_action('init', ['GastroComplete\\V2\\DevelopmentStorage', 'register']); require_once RESTOCOMMERCE_PATH . 'includes/catalog-v2/admin/bootstrap.php'; GastroComplete\V2\Admin\Ui::boot(); require_once RESTOCOMMERCE_PATH . 'includes/catalog-v2/web/bootstrap.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-inventory.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-admin.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-rest.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-delivery.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-time-confirmation.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-reservations.php'; MoM_GastroComplete_Reservations::boot(); require_once RESTOCOMMERCE_PATH . 'includes/class-mom-admin-settings-api.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-mom-admin-rest.php'; require_once RESTOCOMMERCE_PATH . 'includes/payments/class-gc-payment-boot.php'; if (class_exists('GC_Payment_Boot')) { GC_Payment_Boot::load(); } require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-paypal-guard.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-importer.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-frontend.php'; require_once RESTOCOMMERCE_PATH . 'includes/setup/class-gc-storefront-legal.php'; require_once RESTOCOMMERCE_PATH . 'includes/compliance/class-gc-compliance-boot.php'; if (class_exists('GC_Compliance_Boot')) { GC_Compliance_Boot::load(); } require_once RESTOCOMMERCE_PATH . 'includes/class-gc-customer-cancellation.php'; require_once RESTOCOMMERCE_PATH . 'includes/class-rc-coupons.php'; RC_Coupons::boot(); require_once RESTOCOMMERCE_PATH . 'includes/class-gc-merchant-settings.php'; require_once RESTOCOMMERCE_PATH . 'includes/pro-upsell/class-rc-pro-upsell.php'; if (class_exists('GC_Frontend')) { GC_Frontend::register_tax_filters(); } if (class_exists('RestoCommerce_Extras_Plugin')) { require_once RESTOCOMMERCE_PATH . 'includes/class-gc-extras-compat.php'; require_once RESTOCOMMERCE_PATH . 'includes/legacy/class-rc-legacy-extras-compat.php'; } else { require_once RESTOCOMMERCE_PATH . 'modules/extras/mom-extras.php'; } if (!class_exists('RestoCommerce_Menu_UI')) { require_once RESTOCOMMERCE_PATH . 'modules/menu-ui/mom-menu-ui.php'; } if (class_exists('GC_Frontend') && rc_is_storefront_theme()) { GC_Frontend::boot(); if (class_exists('GC_Storefront_Legal')) { GC_Storefront_Legal::boot(); } } if (class_exists('GC_Customer_Cancellation')) { GC_Customer_Cancellation::boot(); } if (class_exists('GC_Merchant_Settings')) { GC_Merchant_Settings::boot(); } if (class_exists('MoM_GastroComplete_Migration')) { MoM_GastroComplete_Migration::maybe_run(); } if (class_exists('GC_Compliance_Boot')) { GC_Compliance_Boot::boot(); } if (class_exists('MoM_GastroComplete_Core')) { MoM_GastroComplete_Core::init(); } if (class_exists('MoM_GastroComplete_Admin')) { (new MoM_GastroComplete_Admin())->boot(); } if (class_exists('MoM_GastroComplete_REST')) { (new MoM_GastroComplete_REST())->boot(); } if (class_exists('MoM_Admin_Settings_API')) { MoM_Admin_Settings_API::get_instance()->boot(); } if (class_exists('MoM_Admin_REST')) { add_action('rest_api_init', ['MoM_Admin_REST', 'register_routes'], 10); } if (class_exists('MoM_GastroComplete_Delivery')) { (new MoM_GastroComplete_Delivery())->boot(); } if (class_exists('MoM_GastroComplete_Time_Confirmation')) { MoM_GastroComplete_Time_Confirmation::boot(); } if (class_exists('RC_Pro_Upsell')) { RC_Pro_Upsell::boot(); } add_filter('rest_post_dispatch', static function ($response, $server, $request) { if (!($response instanceof WP_REST_Response)) { return $response; } $response->header('X-Request-Id', mom_get_request_id()); $route = (string) $request->get_route(); if ($route !== '' && strpos($route, 'mom/v1') !== false) { $response->header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0'); $response->header('Pragma', 'no-cache'); } return $response; }, 10, 3); /** * Extension points for RestoCommerce Pro (no Pro logic in Basic). */ do_action('restocommerce_loaded'); }, 20); require_once __DIR__ . '/includes/class-rc-hub-access.php'; RC_Hub_Access::boot();