(meta, OG, polices locales) * Contenu principal (logo, titre, message, Lottie, vidéo, parallax) * Panneau latéral repliable + compte à rebours * Modales (notification email + accès visiteur) * JavaScript (compte à rebours, panneau, AJAX abonnement/connexion) * Helpers PHP (darken_color, hex_to_rgb, hex_to_rgba) */ class MGENIUS_Frontend { private $settings; /** * L'animation Lottie peut-elle etre servie dans le contexte courant ? * * Le lecteur lui-meme est heberge dans le plugin : il ne pose aucun probleme * de confidentialite. Seule l'ORIGINE de l'animation en pose un. En mode * RGPD, on refuse donc les URL pointant vers un domaine tiers, mais on * accepte les fichiers televerses sur le site. * * @return bool */ private function lottie_src_allowed() { $url = $this->settings['lottie_url'] ?? ''; if ('' === $url) { return false; } if (empty($this->settings['rgpd_mode'])) { return true; } $host = wp_parse_url($url, PHP_URL_HOST); if (empty($host)) { return true; // chemin relatif : forcement local } $site_host = wp_parse_url(home_url(), PHP_URL_HOST); return strtolower($host) === strtolower((string) $site_host); } public function __construct($settings) { $this->settings = $settings; // v2.9.175 — un titre jamais modifié suit le mode affiché. $mgenius_mode = isset( $this->settings['page_mode'] ) ? $this->settings['page_mode'] : 'maintenance'; $mgenius_title = isset( $this->settings['title'] ) ? (string) $this->settings['title'] : ''; $mgenius_en = MGENIUS_Settings::untouched_english_defaults(); if ( '' === $mgenius_title || in_array( $mgenius_title, array( MGENIUS_Settings::default_title_for( 'maintenance' ), MGENIUS_Settings::default_title_for( 'coming_soon' ) ), true ) || in_array( trim( $mgenius_title ), $mgenius_en['title'], true ) ) { $this->settings['title'] = MGENIUS_Settings::default_title_for( $mgenius_mode ); } // v2.9.181 — message par défaut anglais jamais modifié : texte traduit. $mgenius_msg = isset( $this->settings['message'] ) ? trim( wp_strip_all_tags( (string) $this->settings['message'] ) ) : ''; if ( in_array( $mgenius_msg, $mgenius_en['message'], true ) ) { $this->settings['message'] = __( 'We are updating our website. We will be back very soon.', '1001web-maintenance-launch-pages' ); } } /** * Afficher la page de maintenance */ public function render() { $page_mode = $this->settings['page_mode'] ?? 'maintenance'; if ( $page_mode === 'coming_soon' || empty( $this->settings['seo_503_enabled'] ) ) { // Page affichee = 200, meme sur une URL inexistante. status_header( 200 ); } else { status_header(503); if (!empty($this->settings['retry_after_hours'])) { $retry_seconds = intval($this->settings['retry_after_hours']) * 3600; // v2.9.174 — when the end is known (countdown that ends the // maintenance, or scheduled end), Retry-After says when to // come back instead of a fixed 24 h. $known_end = 0; if (!empty($this->settings['countdown_enabled']) && !empty($this->settings['countdown_auto_disable'])) { $known_end = MGENIUS_Main::countdown_target_timestamp($this->settings); } if (!$known_end && !empty($this->settings['schedule_enabled']) && !empty($this->settings['schedule_auto_on'])) { $window = MGENIUS_Main::schedule_window($this->settings); $known_end = $window ? (int) $window['end'] : 0; } if ($known_end > time()) { $retry_seconds = max(60, min($retry_seconds, $known_end - time())); } header('Retry-After: ' . $retry_seconds); } } // No « Visitor Access » button without a password: the form would // always answer « Visitor access is disabled ». $show_visitor_button = !empty($this->settings['visitor_access_enabled']) && !empty($this->settings['visitor_password']); $show_admin_button = !empty($this->settings['show_admin_button']); $bg_color_1 = $this->settings['bg_color_1'] ?? '#D4BADD'; $bg_color_1_opacity = intval($this->settings['bg_color_1_opacity'] ?? 100); $bg_color_2 = $this->settings['bg_color_2'] ?? '#E4EFC5'; $bg_color_2_opacity = intval($this->settings['bg_color_2_opacity'] ?? 100); $title_color = $this->settings['title_color'] ?? '#F97316'; $title_opacity = intval($this->settings['title_opacity'] ?? 100); $message_color = $this->settings['message_color'] ?? '#555555'; $message_opacity = intval($this->settings['message_opacity'] ?? 100); $button_color = $this->settings['button_color'] ?? '#F97316'; $button_opacity = intval($this->settings['button_opacity'] ?? 100); $bg_image_enabled = $this->settings['bg_image_enabled'] ?? false; $bg_image_url = $this->settings['bg_image_url'] ?? ''; $bg_overlay = intval($this->settings['bg_overlay_opacity'] ?? 50); $container_bg = $this->settings['container_bg_color'] ?? '#ffffff'; $container_opacity = intval($this->settings['container_bg_opacity'] ?? 95); $container_shadow = $this->settings['container_shadow_enabled'] ?? true; $container_shadow_intensity = intval($this->settings['container_shadow_intensity'] ?? 30); $title_font = $this->settings['title_font'] ?? 'Poppins'; $message_font = $this->settings['message_font'] ?? 'Open Sans'; $mgenius_font_whitelist = MGENIUS_Settings::get_fonts(); if ( ! isset( $mgenius_font_whitelist[ $title_font ] ) ) { $title_font = 'Poppins'; } if ( ! isset( $mgenius_font_whitelist[ $message_font ] ) ) { $message_font = 'Open Sans'; } // Polices par defaut hebergees dans le plugin (licence OFL) : // aucune requete externe, donc affichees aussi en mode RGPD. // Les 10 polices proposees sont fournies avec le plugin // (paquets Fontsource 5.3.0, licence OFL) : plus aucun appel a Google. $mgenius_local_fonts = array( 'Poppins' => 'poppins', 'Open Sans' => 'open-sans', 'Roboto' => 'roboto', 'Lato' => 'lato', 'Montserrat' => 'montserrat', 'Playfair Display' => 'playfair-display', 'Raleway' => 'raleway', 'Inter' => 'inter', 'Nunito' => 'nunito', 'Merriweather' => 'merriweather', ); $title_size = intval($this->settings['title_size'] ?? 42); $message_size = intval($this->settings['message_size'] ?? 18); $logo_size = intval($this->settings['logo_size'] ?? 150); $sidebar_tab_color = $this->settings['sidebar_tab_color'] ?? '#F97316'; $container_max_width = intval($this->settings['container_max_width'] ?? 600); $container_padding = intval($this->settings['container_padding'] ?? 60); $container_border_radius = intval($this->settings['container_border_radius'] ?? 20); $animation_enabled = $this->settings['animation_enabled'] ?? true; $logo_animation = $this->settings['logo_animation'] ?? 'pulse'; $text_animation = $this->settings['text_animation'] ?? 'fadeIn'; $button_animation = $this->settings['button_animation'] ?? 'slideUp'; $animation_duration = intval($this->settings['animation_duration'] ?? 1000); $rgpd_mode = !empty($this->settings['rgpd_mode']); $system_fonts = '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'; $sidebar_enabled = !empty($this->settings['sidebar_enabled']); // v2.9.174 — pas de volet vide : sans aucun lien ni contact, il n'est pas affiché. if ($sidebar_enabled) { $sidebar_has_content = false; foreach (['social_facebook', 'social_twitter', 'social_instagram', 'social_linkedin', 'social_youtube', 'social_tiktok', 'contact_email', 'contact_phone', 'contact_whatsapp'] as $sidebar_key) { if (!empty($this->settings[$sidebar_key])) { $sidebar_has_content = true; break; } } $sidebar_enabled = $sidebar_has_content; } $sidebar_position = $this->settings['sidebar_position'] ?? 'right'; $sidebar_tab_color = $this->settings['sidebar_tab_color'] ?? '#F97316'; $logo_size = intval($this->settings['logo_size'] ?? 150); $bg1_rgba = $this->hex_to_rgba($bg_color_1, $bg_color_1_opacity); $container_bg_rgba = $this->hex_to_rgba($container_bg, $container_opacity); $bg2_rgba = $this->hex_to_rgba($bg_color_2, $bg_color_2_opacity); $title_rgba = $this->hex_to_rgba($title_color, $title_opacity); $message_rgba = $this->hex_to_rgba($message_color, $message_opacity); $button_rgba = $this->hex_to_rgba($button_color, $button_opacity); $button_border = $this->darken_color($button_color, 10); $button_rgb = $this->hex_to_rgb($button_color); // Lisibilite automatique des boutons. Le texte du bouton // plein prend blanc ou noir selon sa couleur ; le bouton « Visitor // Access » (contour) prend la couleur du bouton seulement si elle se // lit sur la carte, sinon celle du titre, sinon blanc ou noir. $mgenius_box_hex = MGENIUS_Settings::color_mix($container_bg, $bg_color_1, $container_opacity / 100); $mgenius_button_text = MGENIUS_Settings::readable_text_on($button_color); if (MGENIUS_Settings::color_contrast($button_color, $mgenius_box_hex) >= 4.5) { $mgenius_visitor_color = $button_rgba; } elseif (MGENIUS_Settings::color_contrast($title_color, $mgenius_box_hex) >= 4.5) { $mgenius_visitor_color = $title_rgba; } else { $mgenius_visitor_color = MGENIUS_Settings::readable_text_on($mgenius_box_hex); } if ($bg_image_enabled && !empty($bg_image_url)) { $bg_overlay_value = floatval($bg_overlay) / 100.0; $bg_overlay_rgba = 'rgba(0, 0, 0, ' . $bg_overlay_value . ')'; $background_css = " background-image: linear-gradient({$bg_overlay_rgba}, {$bg_overlay_rgba}), url('" . esc_url($bg_image_url) . "'); background-size: cover; background-position: center; background-attachment: fixed; "; } else { $background_css = "background: linear-gradient(135deg, {$bg1_rgba} 0%, {$bg2_rgba} 100%);"; } // CRITIQUE : on utilise $bg1_rgba et $bg2_rgba (avec opacités utilisateur) au lieu de // valeurs hardcoded, sinon les sliders d'opacité sont ignorés. $is_genius_preset = ( strtolower($bg_color_1) === '#1f2937' && strtolower($bg_color_2) === '#0f172a' ); if ( $is_genius_preset && !($bg_image_enabled && !empty($bg_image_url)) ) { // Background Geometric Grid Tech respectant les opacités custom. // Les grilles orange (alpha 0.08) restent fixes — elles font partie de l'identité // visuelle du preset, pas un paramètre user. $background_css = " background-color: {$bg2_rgba}; background-image: repeating-linear-gradient(0deg, transparent 0, transparent 39px, rgba(249,115,22,0.18) 40px), repeating-linear-gradient(90deg, transparent 0, transparent 39px, rgba(249,115,22,0.18) 40px), radial-gradient(ellipse at center, {$bg1_rgba} 0%, {$bg2_rgba} 100%); "; } ?> settings['noindex_enabled'])): ?> <?php echo esc_html($this->settings['title']); ?> settings['title'] ?? MGENIUS_Settings::default_title(); $mm_description = wp_trim_words( wp_strip_all_tags( $this->settings['message'] ?? '' ), 30, '…' ); if ( empty( $mm_description ) ) { /* translators: %s: site name */ $mm_description = sprintf( __( '%s is currently performing scheduled maintenance. We will be back shortly.', '1001web-maintenance-launch-pages' ), $site_name ); } $mm_image = ! empty( $this->settings['logo_url'] ) ? $this->settings['logo_url'] : ( ! empty( $bg_image_url ) ? $bg_image_url : '' ); $mm_image = esc_url( $mm_image ); ?> 'https://schema.org', '@type' => 'SpecialAnnouncement', 'name' => $mm_title, 'text' => $mm_description, 'datePosted' => gmdate( 'c' ), 'expires' => gmdate( 'c', time() + DAY_IN_SECONDS ), 'category' => 'Scheduled maintenance', // Texte libre valide (l'URL schema.org/MaintenanceAnnouncement n'existe pas) 'spatialCoverage' => [ '@type' => 'WebSite', 'name' => $site_name, 'url' => $site_url, ], 'publisher' => [ '@type' => 'Organization', 'name' => $site_name, 'url' => $site_url, ], ], $mgenius_jsonld_flags ), array( 'type' => 'application/ld+json' ) ); wp_print_inline_script_tag( wp_json_encode( [ '@context' => 'https://schema.org', '@type' => 'WebSite', 'name' => $site_name, 'url' => $site_url, ], $mgenius_jsonld_flags ), array( 'type' => 'application/ld+json' ) ); ?> settings['turnstile_enabled']); $turnstile_site_key = $this->settings['turnstile_site_key'] ?? ''; $turnstile_secret_key = $this->settings['turnstile_secret_key'] ?? ''; $turnstile_on_notification = !empty($this->settings['turnstile_on_notification']); $turnstile_on_visitor = !empty($this->settings['turnstile_on_visitor']); if ($turnstile_enabled && !empty($turnstile_site_key)) { // Turnstile enfilé puis imprimé explicitement : la page de maintenance // est un document autonome et n'appelle pas wp_head(). // // Le script est servi par Cloudflare et ne peut pas etre heberge // localement : le widget verifie l'origine de son propre code. Ce // service tiers est declare dans la section External Services du // readme.txt, avec ses conditions et sa politique de confidentialite. // phpcs:disable PluginCheck.CodeAnalysis.EnqueuedResourceOffloading.OffloadedContent -- Service tiers documente au readme.txt, non hebergeable localement. wp_register_script( 'mgenius-turnstile', 'https://challenges.cloudflare.com/turnstile/v0/api.js', array(), MGENIUS_VERSION, array( 'strategy' => 'defer', 'in_footer' => false ) ); // phpcs:enable PluginCheck.CodeAnalysis.EnqueuedResourceOffloading.OffloadedContent wp_script_add_data( 'mgenius-turnstile', 'async', true ); wp_enqueue_script( 'mgenius-turnstile' ); wp_print_scripts( 'mgenius-turnstile' ); } $mgenius_dyn_css = ''; $mgenius_ranges = array( 'latin' => 'U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD', 'latin-ext' => 'U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF', ); foreach ( array_unique( array( $title_font, $message_font ) ) as $mgenius_family ) { if ( ! isset( $mgenius_local_fonts[ $mgenius_family ] ) ) { continue; } foreach ( array( 400, 700 ) as $mgenius_weight ) { foreach ( $mgenius_ranges as $mgenius_subset => $mgenius_range ) { $mgenius_font_url = MGENIUS_PLUGIN_URL . 'assets/fonts/' . $mgenius_local_fonts[ $mgenius_family ] . '-' . $mgenius_subset . '-' . $mgenius_weight . '-normal.woff2'; $mgenius_dyn_css .= "@font-face{font-family:'" . $mgenius_family . "';font-style:normal;font-weight:" . (int) $mgenius_weight . ";font-display:swap;src:url(" . esc_url( $mgenius_font_url ) . ") format('woff2');unicode-range:" . esc_html( $mgenius_range ) . ";}\n"; } } } // Couleurs, tailles et polices des reglages : proprietes CSS lues par // assets/css/page.css. Polices : liste blanche get_fonts() / pile systeme // codee en dur (esc_attr() encoderait les guillemets). if ( $container_shadow ) { // Ombre proportionnelle a l'intensite, visible meme sur fond sombre. $shadow_alpha = floatval( $container_shadow_intensity ) / 100; $shadow_blur = 20 + intval( $container_shadow_intensity ) / 2; // 20px -> 70px $shadow_spread = intval( $container_shadow_intensity ) / 10; // 0 -> 10px $mgenius_shadow = '0 ' . esc_attr( $shadow_spread + 10 ) . 'px ' . esc_attr( $shadow_blur ) . 'px ' . esc_attr( $shadow_spread ) . 'px rgba(0, 0, 0, ' . esc_attr( $shadow_alpha * 0.85 ) . ')'; } else { $mgenius_shadow = 'none'; } $mgenius_vars = array( '--mg-container-shadow' => $mgenius_shadow, '--mg-container-radius' => esc_attr( $container_border_radius ) . 'px', '--mg-container-max-width' => esc_attr( $container_max_width ) . 'px', '--mg-container-padding' => esc_attr( $container_padding ) . 'px', '--mg-subtitle-size' => esc_attr( max( 18, intval( $title_size ) - 16 ) ) . 'px', '--mg-container-radius-sm' => esc_attr( max( 12, intval( $container_border_radius * 0.6 ) ) ) . 'px', '--mg-message-size-sm' => esc_attr( max( 14, intval( $message_size * 0.85 ) ) ) . 'px', '--mg-title-size-xs' => esc_attr( max( 20, intval( $title_size * 0.6 ) ) ) . 'px', '--mg-title-size-sm' => esc_attr( max( 22, intval( $title_size * 0.7 ) ) ) . 'px', '--mg-logo-size-sm' => esc_attr( min( 150, intval( $logo_size * 0.7 ) ) ) . 'px', '--mg-logo-size' => esc_attr( $logo_size ) . 'px', '--mg-message-size' => esc_attr( $message_size ) . 'px', '--mg-title-size' => esc_attr( $title_size ) . 'px', '--mg-button-rgb' => esc_attr( $button_rgb ), '--mg-button-border' => esc_attr( $button_border ), '--mg-button-bg' => esc_attr( $button_rgba ), '--mg-container-bg' => esc_attr( $container_bg_rgba ), '--mg-message-color' => esc_attr( $message_rgba ), '--mg-button-text' => esc_attr( $mgenius_button_text ), '--mg-visitor-color' => esc_attr( $mgenius_visitor_color ), '--mg-sidebar-tab' => esc_attr( $sidebar_tab_color ), '--mg-sidebar-tab-dark' => esc_attr( $this->darken_color( $sidebar_tab_color, 15 ) ), '--mg-title-color' => esc_attr( $title_rgba ), '--mg-message-font' => isset( $mgenius_local_fonts[ $message_font ] ) ? "'" . $message_font . "', " . $system_fonts : ( $rgpd_mode ? $system_fonts : "'" . $message_font . "', sans-serif" ), '--mg-title-font' => isset( $mgenius_local_fonts[ $title_font ] ) ? "'" . $title_font . "', " . $system_fonts : ( $rgpd_mode ? $system_fonts : "'" . $title_font . "', sans-serif" ), ); $mgenius_dyn_css .= ':root{'; foreach ( $mgenius_vars as $mgenius_var => $mgenius_val ) { $mgenius_dyn_css .= $mgenius_var . ':' . $mgenius_val . ';'; } $mgenius_dyn_css .= "}\n"; // Fond (image, degrade ou motif GENIUS), deja assaini plus haut. $mgenius_dyn_css .= 'body{' . $background_css . "}\n"; if ( $animation_enabled ) { $mgenius_dyn_css .= '/* Appliquer les animations */ .maintenance-logo { animation: ' . esc_attr( $logo_animation ) . ' ' . esc_attr( $animation_duration ) . 'ms ease-out; } .maintenance-title, .maintenance-message { animation: ' . esc_attr( $text_animation ) . ' ' . esc_attr( $animation_duration ) . 'ms ease-out; } .maintenance-title { animation-delay: 0.2s; animation-fill-mode: both; } .maintenance-message { animation-delay: 0.4s; animation-fill-mode: both; } .maintenance-buttons { animation: ' . esc_attr( $button_animation ) . ' ' . esc_attr( $animation_duration ) . 'ms ease-out; animation-delay: 0.6s; animation-fill-mode: both; }' . "\n"; } // Feuille statique + CSS genere : imprimes explicitement, la page de // maintenance n'appelant pas wp_head(). wp_register_style( 'mgenius-mm-styles', MGENIUS_PLUGIN_URL . 'assets/css/page.css', array(), MGENIUS_VERSION ); wp_add_inline_style( 'mgenius-mm-styles', $mgenius_dyn_css ); wp_print_styles( 'mgenius-mm-styles' ); ?> etait rendu, // mais le composant jamais defini — d'ou un emplacement vide. // Ce qui releve du RGPD, c'est l'URL de l'animation lorsqu'elle est externe : // filtree par MGENIUS_Frontend::lottie_src_allowed(). $lottie_enabled = !empty($this->settings['lottie_enabled']) && !empty($this->settings['lottie_url']) && $this->lottie_src_allowed(); if ($lottie_enabled): ?> below carries « light »: the player then loads // the lottie-web build without expressions, so JavaScript contained in an // animation file is never run. wp_enqueue_script( 'mgenius-dotlottie', MGENIUS_PLUGIN_URL . 'assets/js/vendor/dotlottie/dotlottie-player.mjs', array(), MGENIUS_VERSION, false ); add_filter( 'script_loader_tag', array( __CLASS__, 'dotlottie_module_tag' ), 10, 2 ); wp_print_scripts( 'mgenius-dotlottie' ); remove_filter( 'script_loader_tag', array( __CLASS__, 'dotlottie_module_tag' ), 10 ); ?> settings['lottie_enabled']) && !empty($this->settings['lottie_url']) && $this->lottie_src_allowed(); $lottie_position = $this->settings['lottie_position'] ?? 'above-title'; $lottie_size = $this->settings['lottie_size'] ?? 200; // Décalage : transform translate() plutôt que position absolue — n'affecte // pas le flux des autres éléments, accéléré par le GPU, et remettre à zéro // rétablit exactement la position d'origine. $lottie_ox = (int) ( $this->settings['lottie_offset_x'] ?? 0 ); $lottie_oy = (int) ( $this->settings['lottie_offset_y'] ?? 0 ); // En arrière-plan l'animation couvre déjà l'écran : le décalage n'a pas de sens. if ( ( $this->settings['lottie_position'] ?? '' ) === 'background' ) { $lottie_ox = 0; $lottie_oy = 0; } // Variables CSS plutot qu'un transform inline : un style inline ne peut pas // etre module par une media query, alors qu'une variable si. C'est ce qui // permet de reduire le decalage de moitie sur petit ecran. $lottie_shift = ( $lottie_ox || $lottie_oy ) ? sprintf( '--mgenius-ox:%dpx; --mgenius-oy:%dpx;', $lottie_ox, $lottie_oy ) : ''; $lottie_url = $this->settings['lottie_url'] ?? ''; $lottie_loop = $this->settings['lottie_loop'] ?? true; $lottie_autoplay = $this->settings['lottie_autoplay'] ?? true; $lottie_speed = $this->settings['lottie_speed'] ?? 1; if ($lottie_enabled && $lottie_position === 'background'): ?> settings['video_bg_enabled']) && !empty($this->settings['video_bg_url']); $lottie_bg_active = $lottie_enabled && $lottie_position === 'background'; if ($video_bg_enabled && !$lottie_bg_active): $video_url = $this->settings['video_bg_url']; $video_opacity = intval($this->settings['video_bg_opacity'] ?? 30); $video_muted = $this->settings['video_bg_muted'] ?? true; $video_id = ''; $video_type = ''; if (preg_match('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/', $video_url, $matches)) { $video_id = $matches[1]; $video_type = 'youtube'; } elseif (preg_match('/(?:vimeo\.com\/)(\d+)/', $video_url, $matches)) { $video_id = $matches[1]; $video_type = 'vimeo'; } if ($video_id): ?>
>
settings['logo_url'])): ?>

settings['title']); ?>

settings['subtitle'] ) ) : ?>

settings['subtitle']); ?>

>
>
settings['message'])); ?>
settings['countdown_enabled']); $countdown_date = $this->settings['countdown_date'] ?? ''; // End of the countdown in the site's time zone; 0 when the stored date // or time cannot be read (malformed import, edited database): no // countdown is shown instead of a fatal error halfway through the page. $target_timestamp = MGENIUS_Main::countdown_target_timestamp($this->settings); if ($countdown_enabled && !empty($countdown_date) && $target_timestamp > 0): $countdown_title = $this->settings['countdown_title'] ?? __('Launching in', '1001web-maintenance-launch-pages'); // v2.9.174 — the default « Launching in » suits a launch, not a // maintenance: in Maintenance mode it reads « Back in ». if ('coming_soon' !== ($this->settings['page_mode'] ?? 'maintenance') && __('Launching in', '1001web-maintenance-launch-pages') === $countdown_title) { $countdown_title = __('Back in', '1001web-maintenance-launch-pages'); } $countdown_end_text = $this->settings['countdown_end_text'] ?? __('The site is now online!', '1001web-maintenance-launch-pages'); $countdown_style = $this->settings['countdown_style'] ?? 'boxes'; $show_days = $this->settings['countdown_show_days'] ?? true; $show_hours = $this->settings['countdown_show_hours'] ?? true; $show_minutes = $this->settings['countdown_show_minutes'] ?? true; $show_seconds = $this->settings['countdown_show_seconds'] ?? true; $now_timestamp = time(); $diff = $target_timestamp - $now_timestamp; $auto_disable = !empty($this->settings['countdown_auto_disable']); ?>
settings['notification_enabled']); if ($mgenius_any_button) : ?>
settings['notification_enabled']); if ($notification_enabled): ?>
>
settings['notification_enabled'])): ?> admin_url( 'admin-ajax.php' ), 'i18n' => array( 'send' => __( 'Send', '1001web-maintenance-launch-pages' ), 'enter' => __( 'Enter', '1001web-maintenance-launch-pages' ), 'verifying' => __( 'Verifying...', '1001web-maintenance-launch-pages' ), 'error' => __( 'Server error. Please try again.', '1001web-maintenance-launch-pages' ), 'connectionError' => __( 'Connection error', '1001web-maintenance-launch-pages' ), 'turnstileRequired' => __( 'Please complete the security verification', '1001web-maintenance-launch-pages' ), 'closePanel' => __( 'Close contact panel', '1001web-maintenance-launch-pages' ), 'openPanel' => __( 'Open contact panel', '1001web-maintenance-launch-pages' ), 'redirectingHtml' => esc_html__( 'Redirecting...', '1001web-maintenance-launch-pages' ), 'showPassword' => __( 'Show password', '1001web-maintenance-launch-pages' ), 'hidePassword' => __( 'Hide password', '1001web-maintenance-launch-pages' ), ), ) ) . ';', 'before' ); wp_print_scripts( 'mgenius-mm-core' ); ?> settings['parallax_enabled']); if ($parallax_enabled): $parallax_intensity = intval($this->settings['parallax_intensity'] ?? 50); ?> $parallax_intensity ) ) . ';', 'before' ); wp_print_scripts( 'mgenius-mm-extra' ); ?> settings['stats_enabled']); if ($stats_enabled): ?> settings['show_powered_by'] ) ) : ?>
1001Web™' ); ?>
generee par WordPress. * @param string $handle Handle du script. * @return string */ public static function dotlottie_module_tag( $tag, $handle ) { if ( 'mgenius-dotlottie' !== $handle ) { return $tag; } return str_replace( '