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 '
';
});
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();