/**
* Astra Updates
*
* Functions for updating data, used by the background updater.
*
* @package Astra
* @version 2.1.3
*/
defined( 'ABSPATH' ) || exit;
/**
* Clear Astra + Astra Pro assets cache.
*
* @since 3.6.1
* @return void.
*/
function astra_clear_all_assets_cache() {
if ( ! class_exists( 'Astra_Cache_Base' ) ) {
return;
}
// Clear Astra theme asset cache.
$astra_cache_base_instance = new Astra_Cache_Base( 'astra' );
$astra_cache_base_instance->refresh_assets( 'astra' );
// Clear Astra Addon's static and dynamic CSS asset cache.
$astra_addon_cache_base_instance = new Astra_Cache_Base( 'astra-addon' );
$astra_addon_cache_base_instance->refresh_assets( 'astra-addon' );
}
/**
* 4.0.0 backward handling part.
*
* 1. Migrate existing setting & do required onboarding for new admin dashboard v4.0.0 app.
* 2. Migrating Post Structure & Meta options in title area meta parts.
*
* @since 4.0.0
* @return void
*/
function astra_theme_background_updater_4_0_0() {
// Dynamic customizer migration starts here.
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['dynamic-blog-layouts'] ) && ! isset( $theme_options['theme-dynamic-customizer-support'] ) ) {
$theme_options['dynamic-blog-layouts'] = false;
$theme_options['theme-dynamic-customizer-support'] = true;
$post_types = Astra_Posts_Structure_Loader::get_supported_post_types();
// Archive summary box compatibility.
$archive_title_font_size = array(
'desktop' => isset( $theme_options['font-size-archive-summary-title']['desktop'] ) ? $theme_options['font-size-archive-summary-title']['desktop'] : 40,
'tablet' => isset( $theme_options['font-size-archive-summary-title']['tablet'] ) ? $theme_options['font-size-archive-summary-title']['tablet'] : '',
'mobile' => isset( $theme_options['font-size-archive-summary-title']['mobile'] ) ? $theme_options['font-size-archive-summary-title']['mobile'] : '',
'desktop-unit' => isset( $theme_options['font-size-archive-summary-title']['desktop-unit'] ) ? $theme_options['font-size-archive-summary-title']['desktop-unit'] : 'px',
'tablet-unit' => isset( $theme_options['font-size-archive-summary-title']['tablet-unit'] ) ? $theme_options['font-size-archive-summary-title']['tablet-unit'] : 'px',
'mobile-unit' => isset( $theme_options['font-size-archive-summary-title']['mobile-unit'] ) ? $theme_options['font-size-archive-summary-title']['mobile-unit'] : 'px',
);
$single_title_font_size = array(
'desktop' => isset( $theme_options['font-size-entry-title']['desktop'] ) ? $theme_options['font-size-entry-title']['desktop'] : '',
'tablet' => isset( $theme_options['font-size-entry-title']['tablet'] ) ? $theme_options['font-size-entry-title']['tablet'] : '',
'mobile' => isset( $theme_options['font-size-entry-title']['mobile'] ) ? $theme_options['font-size-entry-title']['mobile'] : '',
'desktop-unit' => isset( $theme_options['font-size-entry-title']['desktop-unit'] ) ? $theme_options['font-size-entry-title']['desktop-unit'] : 'px',
'tablet-unit' => isset( $theme_options['font-size-entry-title']['tablet-unit'] ) ? $theme_options['font-size-entry-title']['tablet-unit'] : 'px',
'mobile-unit' => isset( $theme_options['font-size-entry-title']['mobile-unit'] ) ? $theme_options['font-size-entry-title']['mobile-unit'] : 'px',
);
$archive_summary_box_bg = array(
'desktop' => array(
'background-color' => ! empty( $theme_options['archive-summary-box-bg-color'] ) ? $theme_options['archive-summary-box-bg-color'] : '',
'background-image' => '',
'background-repeat' => 'repeat',
'background-position' => 'center center',
'background-size' => 'auto',
'background-attachment' => 'scroll',
'background-type' => '',
'background-media' => '',
),
'tablet' => array(
'background-color' => '',
'background-image' => '',
'background-repeat' => 'repeat',
'background-position' => 'center center',
'background-size' => 'auto',
'background-attachment' => 'scroll',
'background-type' => '',
'background-media' => '',
),
'mobile' => array(
'background-color' => '',
'background-image' => '',
'background-repeat' => 'repeat',
'background-position' => 'center center',
'background-size' => 'auto',
'background-attachment' => 'scroll',
'background-type' => '',
'background-media' => '',
),
);
// Single post structure.
foreach ( $post_types as $post_type ) {
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$single_post_structure = isset( $theme_options['blog-single-post-structure'] ) ? $theme_options['blog-single-post-structure'] : array( 'single-image', 'single-title-meta' );
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$migrated_post_structure = array();
if ( ! empty( $single_post_structure ) ) {
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
foreach ( $single_post_structure as $key ) {
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( 'single-title-meta' === $key ) {
$migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title';
if ( 'post' === $post_type ) {
$migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-meta';
}
}
if ( 'single-image' === $key ) {
$migrated_post_structure[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-image';
}
}
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-structure' ] = $migrated_post_structure;
}
// Single post meta.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$single_post_meta = isset( $theme_options['blog-single-meta'] ) ? $theme_options['blog-single-meta'] : array( 'comments', 'category', 'author' );
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$migrated_post_metadata = array();
if ( ! empty( $single_post_meta ) ) {
$tax_counter = 0;
$tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy';
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
foreach ( $single_post_meta as $key ) {
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
switch ( $key ) {
case 'author':
$migrated_post_metadata[] = 'author';
break;
case 'date':
$migrated_post_metadata[] = 'date';
break;
case 'comments':
$migrated_post_metadata[] = 'comments';
break;
case 'category':
if ( 'post' === $post_type ) {
$migrated_post_metadata[] = $tax_slug;
$theme_options[ $tax_slug ] = 'category';
$tax_counter = ++$tax_counter;
$tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy-' . $tax_counter;
}
break;
case 'tag':
if ( 'post' === $post_type ) {
$migrated_post_metadata[] = $tax_slug;
$theme_options[ $tax_slug ] = 'post_tag';
$tax_counter = ++$tax_counter;
$tax_slug = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-taxonomy-' . $tax_counter;
}
break;
default:
break;
}
}
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-metadata' ] = $migrated_post_metadata;
}
// Archive layout compatibilities.
$archive_banner_layout = class_exists( 'WooCommerce' ) && 'product' === $post_type ? false : true; // Setting WooCommerce archive option disabled as WC already added their header content on archive.
$theme_options[ 'ast-archive-' . esc_attr( $post_type ) . '-title' ] = $archive_banner_layout;
// Single layout compatibilities.
$single_banner_layout = class_exists( 'WooCommerce' ) && 'product' === $post_type ? false : true; // Setting WC single option disabled as there is no any header set from default WooCommerce.
$theme_options[ 'ast-single-' . esc_attr( $post_type ) . '-title' ] = $single_banner_layout;
// BG color support.
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-image-type' ] = ! empty( $theme_options['archive-summary-box-bg-color'] ) ? 'custom' : 'none';
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-custom-bg' ] = $archive_summary_box_bg;
// Archive title font support.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-family' ] = ! empty( $theme_options['font-family-archive-summary-title'] ) ? $theme_options['font-family-archive-summary-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-size' ] = $archive_title_font_size;
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-weight' ] = ! empty( $theme_options['font-weight-archive-summary-title'] ) ? $theme_options['font-weight-archive-summary-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$archive_dynamic_line_height = ! empty( $theme_options['line-height-archive-summary-title'] ) ? $theme_options['line-height-archive-summary-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$archive_dynamic_text_transform = ! empty( $theme_options['text-transform-archive-summary-title'] ) ? $theme_options['text-transform-archive-summary-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-title-font-extras' ] = array(
'line-height' => $archive_dynamic_line_height,
'line-height-unit' => 'em',
'letter-spacing' => '',
'letter-spacing-unit' => 'px',
'text-transform' => $archive_dynamic_text_transform,
'text-decoration' => '',
);
// Archive title colors support.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-title-color' ] = ! empty( $theme_options['archive-summary-box-title-color'] ) ? $theme_options['archive-summary-box-title-color'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-text-color' ] = ! empty( $theme_options['archive-summary-box-text-color'] ) ? $theme_options['archive-summary-box-text-color'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
// Single title colors support.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-banner-title-color' ] = ! empty( $theme_options['entry-title-color'] ) ? $theme_options['entry-title-color'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
// Single title font support.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-family' ] = ! empty( $theme_options['font-family-entry-title'] ) ? $theme_options['font-family-entry-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-size' ] = $single_title_font_size;
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-weight' ] = ! empty( $theme_options['font-weight-entry-title'] ) ? $theme_options['font-weight-entry-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$single_dynamic_line_height = ! empty( $theme_options['line-height-entry-title'] ) ? $theme_options['line-height-entry-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$single_dynamic_text_transform = ! empty( $theme_options['text-transform-entry-title'] ) ? $theme_options['text-transform-entry-title'] : '';
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-extras' ] = array(
'line-height' => $single_dynamic_line_height,
'line-height-unit' => 'em',
'letter-spacing' => '',
'letter-spacing-unit' => 'px',
'text-transform' => $single_dynamic_text_transform,
'text-decoration' => '',
);
}
// Set page specific structure, as page only has featured image at top & title beneath to it, hardcoded writing it here.
$theme_options['ast-dynamic-single-page-structure'] = array( 'ast-dynamic-single-page-image', 'ast-dynamic-single-page-title' );
// EDD content layout & sidebar layout migration in new dynamic option.
$theme_options['archive-download-content-layout'] = isset( $theme_options['edd-archive-product-layout'] ) ? $theme_options['edd-archive-product-layout'] : 'default';
$theme_options['archive-download-sidebar-layout'] = isset( $theme_options['edd-sidebar-layout'] ) ? $theme_options['edd-sidebar-layout'] : 'no-sidebar';
$theme_options['single-download-content-layout'] = isset( $theme_options['edd-single-product-layout'] ) ? $theme_options['edd-single-product-layout'] : 'default';
$theme_options['single-download-sidebar-layout'] = isset( $theme_options['edd-single-product-sidebar-layout'] ) ? $theme_options['edd-single-product-sidebar-layout'] : 'default';
update_option( 'astra-settings', $theme_options );
}
// Admin backward handling starts here.
$admin_dashboard_settings = get_option( 'astra_admin_settings', array() );
if ( ! isset( $admin_dashboard_settings['theme-setup-admin-migrated'] ) ) {
if ( ! isset( $admin_dashboard_settings['self_hosted_gfonts'] ) ) {
$admin_dashboard_settings['self_hosted_gfonts'] = isset( $theme_options['load-google-fonts-locally'] ) ? $theme_options['load-google-fonts-locally'] : false;
}
if ( ! isset( $admin_dashboard_settings['preload_local_fonts'] ) ) {
$admin_dashboard_settings['preload_local_fonts'] = isset( $theme_options['preload-local-fonts'] ) ? $theme_options['preload-local-fonts'] : false;
}
// Consider admin part from theme side migrated.
$admin_dashboard_settings['theme-setup-admin-migrated'] = true;
update_option( 'astra_admin_settings', $admin_dashboard_settings );
}
// Check if existing user and disable smooth scroll-to-id.
if ( ! isset( $theme_options['enable-scroll-to-id'] ) ) {
$theme_options['enable-scroll-to-id'] = false;
update_option( 'astra-settings', $theme_options );
}
// Check if existing user and disable scroll to top if disabled from pro addons list.
$scroll_to_top_visibility = false;
/** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'scroll-to-top' ) ) {
/** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$scroll_to_top_visibility = true;
}
if ( ! isset( $theme_options['scroll-to-top-enable'] ) ) {
$theme_options['scroll-to-top-enable'] = $scroll_to_top_visibility;
update_option( 'astra-settings', $theme_options );
}
// Default colors & typography flag.
if ( ! isset( $theme_options['update-default-color-typo'] ) ) {
$theme_options['update-default-color-typo'] = false;
update_option( 'astra-settings', $theme_options );
}
// Block editor experience improvements compatibility flag.
if ( ! isset( $theme_options['v4-block-editor-compat'] ) ) {
$theme_options['v4-block-editor-compat'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* 4.0.2 backward handling part.
*
* 1. Read Time option backwards handling for old users.
*
* @since 4.0.2
* @return void
*/
function astra_theme_background_updater_4_0_2() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-0-2-update-migration'] ) && isset( $theme_options['blog-single-meta'] ) && in_array( 'read-time', $theme_options['blog-single-meta'] ) ) {
if ( isset( $theme_options['ast-dynamic-single-post-metadata'] ) && ! in_array( 'read-time', $theme_options['ast-dynamic-single-post-metadata'] ) ) {
$theme_options['ast-dynamic-single-post-metadata'][] = 'read-time';
$theme_options['v4-0-2-update-migration'] = true;
update_option( 'astra-settings', $theme_options );
}
}
}
/**
* Handle backward compatibility on version 4.1.0
*
* @since 4.1.0
* @return void
*/
function astra_theme_background_updater_4_1_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-1-0-update-migration'] ) ) {
$theme_options['v4-1-0-update-migration'] = true;
$current_payment_list = array();
$old_payment_list = isset( $theme_options['single-product-payment-list']['items'] ) ? $theme_options['single-product-payment-list']['items'] : array();
$visa_payment = isset( $theme_options['single-product-payment-visa'] ) ? $theme_options['single-product-payment-visa'] : '';
$mastercard_payment = isset( $theme_options['single-product-payment-mastercard'] ) ? $theme_options['single-product-payment-mastercard'] : '';
$discover_payment = isset( $theme_options['single-product-payment-discover'] ) ? $theme_options['single-product-payment-discover'] : '';
$paypal_payment = isset( $theme_options['single-product-payment-paypal'] ) ? $theme_options['single-product-payment-paypal'] : '';
$apple_pay_payment = isset( $theme_options['single-product-payment-apple-pay'] ) ? $theme_options['single-product-payment-apple-pay'] : '';
false !== $visa_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-100',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-visa',
'image' => '',
'label' => __( 'Visa', 'astra' ),
)
) : '';
false !== $mastercard_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-101',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-mastercard',
'image' => '',
'label' => __( 'Mastercard', 'astra' ),
)
) : '';
false !== $mastercard_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-102',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-amex',
'image' => '',
'label' => __( 'Amex', 'astra' ),
)
) : '';
false !== $discover_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-103',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-discover',
'image' => '',
'label' => __( 'Discover', 'astra' ),
)
) : '';
$paypal_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-104',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-paypal',
'image' => '',
'label' => __( 'Paypal', 'astra' ),
)
) : '';
$apple_pay_payment ? array_push(
$current_payment_list,
array(
'id' => 'item-105',
'enabled' => true,
'source' => 'icon',
'icon' => 'cc-apple-pay',
'image' => '',
'label' => __( 'Apple Pay', 'astra' ),
)
) : '';
if ( $current_payment_list ) {
$theme_options['single-product-payment-list'] = array(
'items' => array_merge(
$current_payment_list,
$old_payment_list
),
);
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['woo_support_global_settings'] ) ) {
$theme_options['woo_support_global_settings'] = true;
update_option( 'astra-settings', $theme_options );
}
if ( isset( $theme_options['theme-dynamic-customizer-support'] ) ) {
$post_types = Astra_Posts_Structure_Loader::get_supported_post_types();
foreach ( $post_types as $post_type ) {
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-title-font-extras' ]['text-transform'] = '';
}
update_option( 'astra-settings', $theme_options );
}
}
}
/**
* 4.1.4 backward handling cases.
*
* 1. Migrating users to combined color overlay option to new dedicated overlay options.
*
* @since 4.1.4
* @return void
*/
function astra_theme_background_updater_4_1_4() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-1-4-update-migration'] ) ) {
$ast_bg_control_options = array(
'off-canvas-background',
'footer-adv-bg-obj',
'footer-bg-obj',
);
foreach ( $ast_bg_control_options as $bg_option ) {
if ( isset( $theme_options[ $bg_option ] ) && ! isset( $theme_options[ $bg_option ]['overlay-type'] ) ) {
$bg_type = isset( $theme_options[ $bg_option ]['background-type'] ) ? $theme_options[ $bg_option ]['background-type'] : '';
$theme_options[ $bg_option ]['overlay-type'] = 'none';
$theme_options[ $bg_option ]['overlay-color'] = '';
$theme_options[ $bg_option ]['overlay-opacity'] = '';
$theme_options[ $bg_option ]['overlay-gradient'] = '';
if ( 'image' === $bg_type ) {
$bg_img = isset( $theme_options[ $bg_option ]['background-image'] ) ? $theme_options[ $bg_option ]['background-image'] : '';
$bg_color = isset( $theme_options[ $bg_option ]['background-color'] ) ? $theme_options[ $bg_option ]['background-color'] : '';
if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) {
$theme_options[ $bg_option ]['overlay-type'] = 'classic';
$theme_options[ $bg_option ]['overlay-color'] = $bg_color;
$theme_options[ $bg_option ]['overlay-opacity'] = '';
$theme_options[ $bg_option ]['overlay-gradient'] = '';
}
}
}
}
$ast_resp_bg_control_options = array(
'hba-footer-bg-obj-responsive',
'hbb-footer-bg-obj-responsive',
'footer-bg-obj-responsive',
'footer-menu-bg-obj-responsive',
'hb-footer-bg-obj-responsive',
'hba-header-bg-obj-responsive',
'hbb-header-bg-obj-responsive',
'hb-header-bg-obj-responsive',
'header-mobile-menu-bg-obj-responsive',
'site-layout-outside-bg-obj-responsive',
'content-bg-obj-responsive',
);
$post_types = Astra_Posts_Structure_Loader::get_supported_post_types();
foreach ( $post_types as $index => $post_type ) {
$ast_resp_bg_control_options[] = 'ast-dynamic-archive-' . esc_attr( $post_type ) . '-banner-custom-bg';
$ast_resp_bg_control_options[] = 'ast-dynamic-single-' . esc_attr( $post_type ) . '-banner-background';
}
$component_limit = defined( 'ASTRA_EXT_VER' ) ? Astra_Builder_Helper::$component_limit : Astra_Builder_Helper::$num_of_header_menu;
for ( $index = 1; $index <= $component_limit; $index++ ) {
$_prefix = 'menu' . $index;
$ast_resp_bg_control_options[] = 'header-' . $_prefix . '-bg-obj-responsive';
}
foreach ( $ast_resp_bg_control_options as $resp_bg_option ) {
// Desktop version.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( isset( $theme_options[ $resp_bg_option ]['desktop'] ) && is_array( $theme_options[ $resp_bg_option ]['desktop'] ) && ! isset( $theme_options[ $resp_bg_option ]['desktop']['overlay-type'] ) ) {
// @codingStandardsIgnoreStart
$desk_bg_type = isset( $theme_options[ $resp_bg_option ]['desktop']['background-type'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-type'] : '';
// @codingStandardsIgnoreEnd
$theme_options[ $resp_bg_option ]['desktop']['overlay-type'] = '';
$theme_options[ $resp_bg_option ]['desktop']['overlay-color'] = '';
$theme_options[ $resp_bg_option ]['desktop']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['desktop']['overlay-gradient'] = '';
if ( 'image' === $desk_bg_type ) {
$bg_img = isset( $theme_options[ $resp_bg_option ]['desktop']['background-image'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-image'] : '';
$bg_color = isset( $theme_options[ $resp_bg_option ]['desktop']['background-color'] ) ? $theme_options[ $resp_bg_option ]['desktop']['background-color'] : '';
if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) {
$theme_options[ $resp_bg_option ]['desktop']['overlay-type'] = 'classic';
$theme_options[ $resp_bg_option ]['desktop']['overlay-color'] = $bg_color;
$theme_options[ $resp_bg_option ]['desktop']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['desktop']['overlay-gradient'] = '';
}
}
}
// Tablet version.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( isset( $theme_options[ $resp_bg_option ]['tablet'] ) && is_array( $theme_options[ $resp_bg_option ]['tablet'] ) && ! isset( $theme_options[ $resp_bg_option ]['tablet']['overlay-type'] ) ) {
// @codingStandardsIgnoreStart
$tablet_bg_type = isset( $theme_options[ $resp_bg_option ]['tablet']['background-type'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-type'] : '';
// @codingStandardsIgnoreEnd
$theme_options[ $resp_bg_option ]['tablet']['overlay-type'] = '';
$theme_options[ $resp_bg_option ]['tablet']['overlay-color'] = '';
$theme_options[ $resp_bg_option ]['tablet']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['tablet']['overlay-gradient'] = '';
if ( 'image' === $tablet_bg_type ) {
$bg_img = isset( $theme_options[ $resp_bg_option ]['tablet']['background-image'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-image'] : '';
$bg_color = isset( $theme_options[ $resp_bg_option ]['tablet']['background-color'] ) ? $theme_options[ $resp_bg_option ]['tablet']['background-color'] : '';
if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) {
$theme_options[ $resp_bg_option ]['tablet']['overlay-type'] = 'classic';
$theme_options[ $resp_bg_option ]['tablet']['overlay-color'] = $bg_color;
$theme_options[ $resp_bg_option ]['tablet']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['tablet']['overlay-gradient'] = '';
}
}
}
// Mobile version.
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( isset( $theme_options[ $resp_bg_option ]['mobile'] ) && is_array( $theme_options[ $resp_bg_option ]['mobile'] ) && ! isset( $theme_options[ $resp_bg_option ]['mobile']['overlay-type'] ) ) {
// @codingStandardsIgnoreStart
$mobile_bg_type = isset( $theme_options[ $resp_bg_option ]['mobile']['background-type'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-type'] : '';
// @codingStandardsIgnoreEnd
$theme_options[ $resp_bg_option ]['mobile']['overlay-type'] = '';
$theme_options[ $resp_bg_option ]['mobile']['overlay-color'] = '';
$theme_options[ $resp_bg_option ]['mobile']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['mobile']['overlay-gradient'] = '';
if ( 'image' === $mobile_bg_type ) {
$bg_img = isset( $theme_options[ $resp_bg_option ]['mobile']['background-image'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-image'] : '';
$bg_color = isset( $theme_options[ $resp_bg_option ]['mobile']['background-color'] ) ? $theme_options[ $resp_bg_option ]['mobile']['background-color'] : '';
if ( '' !== $bg_img && '' !== $bg_color && ( ! is_numeric( strpos( $bg_color, 'linear-gradient' ) ) && ! is_numeric( strpos( $bg_color, 'radial-gradient' ) ) ) ) {
$theme_options[ $resp_bg_option ]['mobile']['overlay-type'] = 'classic';
$theme_options[ $resp_bg_option ]['mobile']['overlay-color'] = $bg_color;
$theme_options[ $resp_bg_option ]['mobile']['overlay-opacity'] = '';
$theme_options[ $resp_bg_option ]['mobile']['overlay-gradient'] = '';
}
}
}
}
$theme_options['v4-1-4-update-migration'] = true;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.1.6
*
* @since 4.1.6
* @return void
*/
function astra_theme_background_updater_4_1_6() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['list-block-vertical-spacing'] ) ) {
$theme_options['list-block-vertical-spacing'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Set flag to avoid direct reflections on live site & to maintain backward compatibility for existing users.
*
* @since 4.1.7
* @return void
*/
function astra_theme_background_updater_4_1_7() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['add-hr-styling-css'] ) ) {
$theme_options['add-hr-styling-css'] = false;
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['astra-site-svg-logo-equal-height'] ) ) {
$theme_options['astra-site-svg-logo-equal-height'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Migrating users to new container layout options
*
* @since 4.2.0
* @return void
*/
function astra_theme_background_updater_4_2_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-2-0-update-migration'] ) ) {
$post_types = Astra_Posts_Structure_Loader::get_supported_post_types();
$theme_options = get_option( 'astra-settings' );
$blog_types = array( 'single', 'archive' );
$third_party_layouts = array( 'woocommerce', 'edd', 'lifterlms', 'lifterlms-course-lesson', 'learndash' );
// Global.
if ( isset( $theme_options['site-content-layout'] ) ) {
$theme_options = astra_apply_layout_migration( 'site-content-layout', 'ast-site-content-layout', 'site-content-style', 'site-sidebar-style', $theme_options );
}
// Single, archive.
foreach ( $blog_types as $blog_type ) {
foreach ( $post_types as $post_type ) {
$old_layout = $blog_type . '-' . esc_attr( $post_type ) . '-content-layout';
$new_layout = $blog_type . '-' . esc_attr( $post_type ) . '-ast-content-layout';
$content_style = $blog_type . '-' . esc_attr( $post_type ) . '-content-style';
$sidebar_style = $blog_type . '-' . esc_attr( $post_type ) . '-sidebar-style';
if ( isset( $theme_options[ $old_layout ] ) ) {
$theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options );
}
}
}
// Third party existing layout migrations to new layout options.
foreach ( $third_party_layouts as $layout ) {
$old_layout = $layout . '-content-layout';
$new_layout = $layout . '-ast-content-layout';
$content_style = $layout . '-content-style';
$sidebar_style = $layout . '-sidebar-style';
if ( isset( $theme_options[ $old_layout ] ) ) {
if ( 'lifterlms' === $layout ) {
// Lifterlms course/lesson sidebar style migration case.
$theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, 'lifterlms-course-lesson-sidebar-style', $theme_options );
}
$theme_options = astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options );
}
}
if ( ! isset( $theme_options['fullwidth_sidebar_support'] ) ) {
$theme_options['fullwidth_sidebar_support'] = false;
}
$theme_options['v4-2-0-update-migration'] = true;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle migration from old to new layouts.
*
* Migration cases for old users, old layouts -> new layouts.
*
* @since 4.2.0
* @param mixed $old_layout old_layout.
* @param mixed $new_layout new_layout.
* @param mixed $content_style content_style.
* @param mixed $sidebar_style sidebar_style.
* @param array $theme_options theme_options.
* @return array $theme_options The updated theme options.
*/
function astra_apply_layout_migration( $old_layout, $new_layout, $content_style, $sidebar_style, $theme_options ) {
switch ( astra_get_option( $old_layout ) ) {
case 'boxed-container':
$theme_options[ $new_layout ] = 'normal-width-container';
$theme_options[ $content_style ] = 'boxed';
$theme_options[ $sidebar_style ] = 'boxed';
break;
case 'content-boxed-container':
$theme_options[ $new_layout ] = 'normal-width-container';
$theme_options[ $content_style ] = 'boxed';
$theme_options[ $sidebar_style ] = 'unboxed';
break;
case 'plain-container':
$theme_options[ $new_layout ] = 'normal-width-container';
$theme_options[ $content_style ] = 'unboxed';
$theme_options[ $sidebar_style ] = 'unboxed';
break;
case 'page-builder':
$theme_options[ $new_layout ] = 'full-width-container';
$theme_options[ $content_style ] = 'unboxed';
$theme_options[ $sidebar_style ] = 'unboxed';
break;
case 'narrow-container':
$theme_options[ $new_layout ] = 'narrow-width-container';
$theme_options[ $content_style ] = 'unboxed';
$theme_options[ $sidebar_style ] = 'unboxed';
break;
default:
$theme_options[ $new_layout ] = 'default';
$theme_options[ $content_style ] = 'default';
$theme_options[ $sidebar_style ] = 'default';
break;
}
return $theme_options;
}
/**
* Handle backward compatibility on version 4.2.2
*
* @since 4.2.2
* @return void
*/
function astra_theme_background_updater_4_2_2() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-2-2-core-form-btns-styling'] ) ) {
$theme_options['v4-2-2-core-form-btns-styling'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.6.0
*
* @since 4.4.0
* @return void
*/
function astra_theme_background_updater_4_4_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-4-0-backward-option'] ) ) {
$theme_options['v4-4-0-backward-option'] = false;
// Migrate primary button outline styles to secondary buttons.
if ( isset( $theme_options['font-family-button'] ) ) {
$theme_options['secondary-font-family-button'] = $theme_options['font-family-button'];
}
if ( isset( $theme_options['font-size-button'] ) ) {
$theme_options['secondary-font-size-button'] = $theme_options['font-size-button'];
}
if ( isset( $theme_options['font-weight-button'] ) ) {
$theme_options['secondary-font-weight-button'] = $theme_options['font-weight-button'];
}
if ( isset( $theme_options['font-extras-button'] ) ) {
$theme_options['secondary-font-extras-button'] = $theme_options['font-extras-button'];
}
if ( isset( $theme_options['button-bg-color'] ) ) {
$theme_options['secondary-button-bg-color'] = $theme_options['button-bg-color'];
}
if ( isset( $theme_options['button-bg-h-color'] ) ) {
$theme_options['secondary-button-bg-h-color'] = $theme_options['button-bg-h-color'];
}
if ( isset( $theme_options['theme-button-border-group-border-color'] ) ) {
$theme_options['secondary-theme-button-border-group-border-color'] = $theme_options['theme-button-border-group-border-color'];
}
if ( isset( $theme_options['theme-button-border-group-border-h-color'] ) ) {
$theme_options['secondary-theme-button-border-group-border-h-color'] = $theme_options['theme-button-border-group-border-h-color'];
}
if ( isset( $theme_options['button-radius-fields'] ) ) {
$theme_options['secondary-button-radius-fields'] = $theme_options['button-radius-fields'];
}
// Single - Article Featured Image visibility migration.
$post_types = Astra_Posts_Structure_Loader::get_supported_post_types();
foreach ( $post_types as $post_type ) {
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-position-layout-1' ] = 'none';
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-position-layout-2' ] = 'none';
$theme_options[ 'ast-dynamic-single-' . esc_attr( $post_type ) . '-article-featured-image-ratio-type' ] = 'default';
}
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.5.0.
*
* @since 4.5.0
* @return void
*/
function astra_theme_background_updater_4_5_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-5-0-backward-option'] ) ) {
$theme_options['v4-5-0-backward-option'] = false;
$palette_options = get_option( 'astra-color-palettes', Astra_Global_Palette::get_default_color_palette() );
if ( ! isset( $palette_options['presets'] ) ) {
$palette_options['presets'] = astra_get_palette_presets();
update_option( 'astra-color-palettes', $palette_options );
}
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.5.2.
*
* @since 4.5.2
* @return void
*/
function astra_theme_background_updater_4_5_2() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['scndry-btn-default-padding'] ) ) {
$theme_options['scndry-btn-default-padding'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.6.0
*
* @since 4.6.0
* @return void
*/
function astra_theme_background_updater_4_6_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-6-0-backward-option'] ) ) {
$theme_options['v4-6-0-backward-option'] = false;
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$blog_post_structure = isset( $theme_options['blog-post-structure'] ) ? $theme_options['blog-post-structure'] : array( 'image', 'title-meta' );
/** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$migrated_post_structure = array();
if ( ! empty( $blog_post_structure ) ) {
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
foreach ( $blog_post_structure as $key ) {
/** @psalm-suppress PossiblyInvalidIterator */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( 'title-meta' === $key ) {
$migrated_post_structure[] = 'title';
$migrated_post_structure[] = 'title-meta';
}
if ( 'image' === $key ) {
$migrated_post_structure[] = 'image';
}
}
$migrated_post_structure[] = 'excerpt';
$migrated_post_structure[] = 'read-more';
$theme_options['blog-post-structure'] = $migrated_post_structure;
}
if ( defined( 'ASTRA_EXT_VER' ) ) {
$theme_options['ast-sub-section-author-box-border-width'] = isset( $theme_options['author-box-border-width'] ) ? $theme_options['author-box-border-width'] : array(
'top' => '',
'right' => '',
'bottom' => '',
'left' => '',
);
$theme_options['ast-sub-section-author-box-border-radius'] = isset( $theme_options['author-box-border-radius'] ) ? $theme_options['author-box-border-radius'] : array(
'top' => '',
'right' => '',
'bottom' => '',
'left' => '',
);
$theme_options['ast-sub-section-author-box-border-color'] = isset( $theme_options['author-box-border-color'] ) ? $theme_options['author-box-border-color'] : '';
if ( isset( $theme_options['single-post-inside-spacing'] ) ) {
$theme_options['ast-sub-section-author-box-padding'] = $theme_options['single-post-inside-spacing'];
}
if ( isset( $theme_options['font-family-post-meta'] ) ) {
$theme_options['font-family-post-read-more'] = $theme_options['font-family-post-meta'];
}
if ( isset( $theme_options['font-extras-post-meta'] ) ) {
$theme_options['font-extras-post-read-more'] = $theme_options['font-extras-post-meta'];
}
}
if ( isset( $theme_options['single-post-inside-spacing'] ) ) {
$theme_options['ast-sub-section-related-posts-padding'] = $theme_options['single-post-inside-spacing'];
}
$theme_options['single-content-images-shadow'] = false;
$theme_options['ast-font-style-update'] = false;
update_option( 'astra-settings', $theme_options );
}
$docs_legacy_data = get_option( 'astra_docs_data', array() );
if ( ! empty( $docs_legacy_data ) ) {
delete_option( 'astra_docs_data' );
}
}
/**
* Handle backward compatibility on version 4.6.2.
*
* @since 4.6.2
* @return void
*/
function astra_theme_background_updater_4_6_2() {
$theme_options = get_option( 'astra-settings', array() );
// Unset "featured image" for pages structure.
if ( ! isset( $theme_options['v4-6-2-backward-option'] ) ) {
$theme_options['v4-6-2-backward-option'] = false;
$page_banner_layout = isset( $theme_options['ast-dynamic-single-page-layout'] ) ? $theme_options['ast-dynamic-single-page-layout'] : 'layout-1';
$page_structure = isset( $theme_options['ast-dynamic-single-page-structure'] ) ? $theme_options['ast-dynamic-single-page-structure'] : array( 'ast-dynamic-single-page-image', 'ast-dynamic-single-page-title' );
$layout_1_image_position = isset( $theme_options['ast-dynamic-single-page-article-featured-image-position-layout-1'] ) ? $theme_options['ast-dynamic-single-page-article-featured-image-position-layout-1'] : 'behind';
$migrated_page_structure = array();
if ( 'layout-1' === $page_banner_layout && 'none' === $layout_1_image_position && ! empty( $page_structure ) ) {
foreach ( $page_structure as $key ) {
if ( 'ast-dynamic-single-page-image' !== $key ) {
$migrated_page_structure[] = $key;
}
}
$theme_options['ast-dynamic-single-page-structure'] = $migrated_page_structure;
}
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.6.4.
*
* @since 4.6.4
* @return void
*/
function astra_theme_background_updater_4_6_4() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['btn-stylings-upgrade'] ) ) {
$theme_options['btn-stylings-upgrade'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for Elementor Pro heading's margin.
*
* @since 4.6.5
* @return void
*/
function astra_theme_background_updater_4_6_5() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['elementor-headings-style'] ) ) {
$theme_options['elementor-headings-style'] = defined( 'ELEMENTOR_PRO_VERSION' ) ? true : false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for Elementor Loop block post div container padding.
*
* @since 4.6.6
* @return void
*/
function astra_theme_background_updater_4_6_6() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['elementor-container-padding-style'] ) ) {
$theme_options['elementor-container-padding-style'] = defined( 'ELEMENTOR_PRO_VERSION' ) ? true : false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for Starter template library preview line height cases.
*
* @since 4.6.11
* @return void
*/
function astra_theme_background_updater_4_6_11() {
$theme_options = get_option( 'astra-settings', array() );
if ( isset( $theme_options['global-headings-line-height-update'] ) ) {
return;
}
$headers_fonts = array(
'h1' => '1.4',
'h2' => '1.3',
'h3' => '1.3',
'h4' => '1.2',
'h5' => '1.2',
'h6' => '1.25',
);
foreach ( $headers_fonts as $header_tag => $header_font_value ) {
if ( empty( $theme_options[ 'font-extras-' . $header_tag ]['line-height'] ) ) {
$theme_options[ 'font-extras-' . $header_tag ]['line-height'] = $header_font_value;
if ( empty( $theme_options[ 'font-extras-' . $header_tag ]['line-height-unit'] ) ) {
$theme_options[ 'font-extras-' . $header_tag ]['line-height-unit'] = 'em';
}
}
}
$theme_options['global-headings-line-height-update'] = true;
update_option( 'astra-settings', $theme_options );
}
/**
* Handle backward compatibility for heading `clear:both` css in single posts and pages.
*
* @since 4.6.12
* @return void
*/
function astra_theme_background_updater_4_6_12() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['single_posts_pages_heading_clear_none'] ) ) {
$theme_options['single_posts_pages_heading_clear_none'] = false;
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['elementor-btn-styling'] ) ) {
$theme_options['elementor-btn-styling'] = defined( 'ELEMENTOR_VERSION' ) ? true : false;
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['remove_single_posts_navigation_mobile_device_padding'] ) ) {
$theme_options['remove_single_posts_navigation_mobile_device_padding'] = true;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for following pointers.
*
* 1. unit less line-height support.
* 2. H5 font size case.
*
* @since 4.6.14
* @return void
*/
function astra_theme_background_updater_4_6_14() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['enable-4-6-14-compatibility'] ) ) {
$theme_options['enable-4-6-14-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for following cases.
*
* 1. Making edd default option enable by default.
* 2. Handle backward compatibility for Heading font size fix.
*
* @since 4.7.0
* @return void
*/
function astra_theme_background_updater_4_7_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( class_exists( 'Easy_Digital_Downloads' ) && ! isset( $theme_options['can-update-edd-featured-image-default'] ) ) {
$theme_options['can-update-edd-featured-image-default'] = false;
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['heading-widget-font-size'] ) ) {
$theme_options['heading-widget-font-size'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for version 4.7.1
*
* @since 4.7.1
* @return void
*/
function astra_theme_background_updater_4_7_1() {
$theme_options = get_option( 'astra-settings', array() );
// Setting same background color for above and below transparent headers as on transparent primary header.
if ( isset( $theme_options['transparent-header-bg-color-responsive'] ) ) {
if ( ! isset( $theme_options['hba-transparent-header-bg-color-responsive'] ) ) {
$theme_options['hba-transparent-header-bg-color-responsive'] = $theme_options['transparent-header-bg-color-responsive'];
}
if ( ! isset( $theme_options['hbb-transparent-header-bg-color-responsive'] ) ) {
$theme_options['hbb-transparent-header-bg-color-responsive'] = $theme_options['transparent-header-bg-color-responsive'];
}
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility Spectra Heading max-width with Astra when fullwidth layout is selected.
*
* @since 4.8.0
* @return void
*/
function astra_theme_background_updater_4_8_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['enable-4-8-0-compatibility'] ) ) {
$theme_options['enable-4-8-0-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility Single post outside spacing issue.
*
* @since 4.8.2
* @return void
*/
function astra_theme_background_updater_4_8_2() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-8-2-backward-option'] ) ) {
$theme_options['v4-8-2-backward-option'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for Spectra container margin left and right.
* Handle backward compatibility for Heading font size px to em conversion cases.
*
* @since 4.8.4
* @return void
*/
function astra_theme_background_updater_4_8_4() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['enable-4-8-4-compatibility'] ) ) {
$theme_options['enable-4-8-4-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
if ( ! isset( $theme_options['astra-heading-font-size-compatibility'] ) ) {
$theme_options['astra-heading-font-size-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Set key to show NPS survey popup immediately for old user.
*
* @since 4.8.7
* @return void
*/
function astra_theme_background_updater_4_8_7() {
// Bail early if the starter template is being imported.
if ( get_option( 'astra_sites_import_started' ) === 'yes' ) {
return;
}
update_option( 'astra_nps_show', true );
}
/**
* Handle backward compatibility on version 4.8.9.
* 1. Reorganizing color palettes.
*
* @since 4.8.9
* @return void
*/
function astra_theme_background_updater_4_8_9() {
// Bail early if the starter template is being imported.
if ( get_option( 'astra_sites_import_started' ) === 'yes' || astra_get_option( 'new-color-labels' ) ) {
astra_update_option( 'new-color-labels', true );
}
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['enable-4-8-9-compatibility'] ) ) {
$theme_options['enable-4-8-9-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
// Enable off canvas move body option for existing users.
if ( ! isset( $theme_options['off-canvas-move-body'] ) ) {
$theme_options['off-canvas-move-body'] = true;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility on version 4.8.10.
*
* @since 4.8.10
* @return void
*/
function astra_theme_background_updater_4_8_10() {
$theme_options = get_option( 'astra-settings', array() );
/**
* Enable star rating compatibility for existing users, excluding template import scenarios.
*/
if ( get_option( 'astra_sites_import_started' ) !== 'yes' ) {
$theme_options['star-rating-comp'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Handle backward compatibility for dark palette.
* Dark palette backward compatibility for some cases default option .
*
* @since 4.9.0
* @return void
*/
function astra_theme_background_updater_4_9_0() {
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['v4-9-0-backward-option'] ) ) {
$theme_options['v4-9-0-backward-option'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Background updater function for theme v4.10.0
*
* @since 4.10.0
* @return void
*/
function astra_theme_background_updater_4_10_0() {
// Retrieve the installed time and optin status of BSF Analytics and update it as per product specific key.
$analytics_options = array(
'bsf_analytics_installed_time' => 'astra_usage_installed_time',
'bsf_analytics_optin' => 'astra_usage_optin',
);
foreach ( $analytics_options as $source => $target ) {
$status = get_site_option( $source );
if ( ! get_site_option( $target ) && $status ) {
update_option( $target, $status );
}
}
}
/**
* Background updater function for theme v4.11.6
*
* @since 4.11.6
* @return void
*/
function astra_theme_background_updater_4_11_6() {
$theme_options = get_option( 'astra-settings', array() );
// Set button consistency backward compatibility flag.
if ( ! isset( $theme_options['btn-consist-comp'] ) ) {
$theme_options['btn-consist-comp'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Background updater function for theme v4.11.12
*
* @since 4.11.12
* @return void
*/
function astra_theme_background_updater_4_11_12() {
// Set button consistency backward compatibility flag.
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['enable-4-11-12-compatibility'] ) ) {
$theme_options['enable-4-11-12-compatibility'] = false;
update_option( 'astra-settings', $theme_options );
}
}
/**
* Background updater function for addon v4.12.0
*
* @since 4.12.0
* @return void
*/
function astra_theme_background_updater_4_12_0() {
// Plain get_option, not astra_get_options — its request-static cache may hold a filtered copy that would bypass the updater filter detach.
$theme_options = get_option( 'astra-settings', array() );
// Migrate post card featured overlay color to background overlay setting which supports gradients.
if ( isset( $theme_options['post-card-featured-overlay'] ) ) {
$theme_options['post-card-background-overlay'] = array(
'background-type' => 'color',
'background-color' => $theme_options['post-card-featured-overlay'],
);
update_option( 'astra-settings', $theme_options );
}
}
/**
* Background updater function for theme v4.12.2
*
* @since 4.12.2
* @return void
*/
function astra_theme_background_updater_4_12_2() {
// Retrieve the installed time and optin status of BSF Analytics and update it as per new key option.
$analytics_options = array(
'astra_analytics_installed_time' => 'astra_usage_installed_time',
'astra_analytics_optin' => 'astra_usage_optin',
);
foreach ( $analytics_options as $source => $target ) {
$status = get_site_option( $source );
if ( ! get_site_option( $target ) && $status ) {
update_option( $target, $status );
}
}
}
/**
* Background updater function for theme v4.13.11
*
* @since 4.13.11
* @return void
*/
function astra_theme_background_updater_4_13_11() {
// Existing sites have been rendering excerpts without a truncation marker, so keep it that way.
$theme_options = get_option( 'astra-settings', array() );
if ( ! isset( $theme_options['blog-excerpt-marker'] ) ) {
$theme_options['blog-excerpt-marker'] = '';
update_option( 'astra-settings', $theme_options );
}
}
Οδηγός για το Lightning Roulette από το Maxbet Casino – UBIPREL S.A.S
Ir al contenido
Το Lightning Roulette δεν είναι μόνο μια ακόμη παραλλαγή ρουλέτας· αποτελεί μια εμπειρία που συνταιριάζει την κλασική αίσθηση του ζωντανού καζίνο με ένα ηλεκτρισμένο στοιχείο πολλαπλασιαστών που μπορούν να αυξήσουν τις αποδόσεις. Όταν το πρωτογνώρισα στο Maxbet άνοιγμα λογαριασμού Casino, αυτό που με τράβηξε την προσοχή δεν ήταν μόνο το οπτικό θέαμα του στούντιο, αλλά και το πόσο διαφορετική είναι η στρατηγική προσέγγιση που χρειάζεται σε σύγκριση με την ευρωπαϊκή ρουλέτα. Σε αυτόν τον οδηγό θα παρουσιάσω αναλυτικά κάθε πτυχή του παιχνιδιού, από τους βασικούς κανόνες μέχρι τις προχωρημένες τακτικές, και θα αναφέρω πώς μπορείτε να εκμεταλλευτείτε πλήρως την πλατφόρμα του Maxbet Casino για μια ολοκληρωμένη εμπειρία. Το περιβάλλον είναι προσαρμοσμένο προς τον Έλληνα παίκτη, με υποστήριξη στα ελληνικά και γρήγορη πρόσβαση σε όλα τα απαραίτητα εργαλεία.
Τα κύρια κανονισμοί και η ροή ενός γύρου βήμα προς βήμα
Όλος γύρος στο Lightning Roulette αρχίζει με το περιοχή πονταρίσματος, το οποίο διατηρείται ανοιχτό για ένα συγκεκριμένο χρονικό περιθώριο που συχνά κινείται γύρω στα 12 με 15 δευτερόλεπτα. Κατά τη διάρκεια αυτής της περιόδου, μπορείτε να βάλετε μάρκες σε όλες τις συνηθισμένες πιθανότητες της ρουλέτας: ευθεία, δίχαλα, στήλες, ντουζίνες, μαύρο-κόκκινο, μονά-ζυγά και άλλα. Η διεπαφή στο Maxbet Casino είναι εξαιρετικά λεπτομερής, με ευδιάκριτα ενδείξεις και τη επιλογή να παρακολουθείτε το ιστορικό των προηγούμενων γύρων. Καθώς κλείσει το παράθυρο πονταρίσματος, ο ντίλερ περιστρέφει τον τροχό και ταυτόχρονα ενεργοποιεί τη λειτουργία των κεραυνών, που είναι το σήμα κατατεθέν του παιχνιδιού.
Η διαδικαστικό που ακολουθεί είναι σημαντική για την αντίληψη του παιχνιδιού: ένα σύστημα γεννήτριας τυχαίων αριθμών αναδεικνύει από έναν έως πέντε τυχερούς αριθμούς από τα 37 προσφερόμενα νούμερα του τροχού. Σε καθέναν από αυτούς τους αριθμούς δημιουργείται ένας τυχαίος πολλαπλάσιος, ο οποίος μπορεί να είναι 50x, 100x, 200x, 300x, 400x ή και 500x. Αν η μπίλια πέσει σε έναν αριθμό που έχετε ποντάρει ευθεία και αυτός ο αριθμός επιλέχτηκε ως «κεραυνός», τότε η απόδοση σας πολλαπλασιάζεται αντίστοιχα. Είναι σημαντικό να λαμβάνετε υπόψη ότι οι πολλαπλασιαστές ισχύουν αποκλειστικά στα ευθεία πονταρίσματα· όλα τα υπόλοιπα πονταρίσματα αποδίδονται με τις κλασικές ποσοστά της ευρωπαϊκής ρουλέτας, χωρίς καμία αύξηση.
Επιλογές πληρωμών και περίοδοι ανάληψης στην πλατφόρμα
Η διαχείριση των χρημάτων σας στο Maxbet Casino υποστηρίζεται από ένα εύρος μεθόδων πληρωμής που ταιριάζουν τις προτιμήσεις των Ελλήνων παικτών. Είστε σε θέση να διαλέξετε ανάμεσα σε χρεωστικές και πιστωτικές κάρτες, προπληρωμένες κάρτες, τραπεζικές μεταφορές και μια γκάμα από ηλεκτρονικά πορτοφόλια. Οι καταθέσεις τυπικά εκτελούνται άμεσα, παρέχοντάς σας να αρχίσετε να παίζετε Lightning Roulette χωρίς καθυστέρηση. Τα ελάχιστα και μέγιστα όρια συναλλαγών μεταβάλλονται ανάλογα με τη μέθοδο, αλλά γενικά τοποθετούνται σε επίπεδα που καλύπτουν τόσο τους περιστασιακούς παίκτες όσο και εκείνους με μεγαλύτερο bankroll.
Οι αναλήψεις είναι το κομμάτι που χρειάζεται λίγη υπομονή, όπως ισχύει σε κάθε αδειοδοτημένο καζίνο. Οι χρόνοι επεξεργασίας εξαρτώνται από τη μέθοδο που θα επιλέξετε: τα ηλεκτρονικά πορτοφόλια έχουν την τάση να είναι η ταχύτερη επιλογή, με τις συναλλαγές να εκτελούνται συχνά εντός 24 ωρών από την έγκριση, ενώ οι τραπεζικές μεταφορές και οι κάρτες μπορεί να πάρουν από δύο έως πέντε εργάσιμες ημέρες. Βασικό είναι ότι το Maxbet Casino θέτει μια περίοδο εκκρεμότητας κατά την οποία μπορείτε να ακυρώσετε το αίτημα ανάληψης και να επιστρέψετε τα χρήματα στο υπόλοιπό σας, κάτι που χρησιμεύει ως δικλείδα ασφαλείας για τον έλεγχο των παρορμήσεων. Πριν από την πρώτη σας ανάληψη, επιβεβαιώστε ότι έχετε ολοκληρώσει πλήρως την επαλήθευση ταυτότητας, διαφορετικά η διαδικασία θα αργήσει.
Πώς να αρχίσετε στο Maxbet Casino και να βρείτε το παιχνίδι
Η μέθοδος εγγραφής στο Maxbet Casino είναι εύκολη και τηρεί τα τυπικά βήματα που βρίσκει κανείς στις αδειοδοτημένες πλατφόρμες που απευθύνονται στο ελληνικό κοινό. Αρχικά, θα είναι απαραίτητο να συμπληρώσετε μια φόρμα με ουσιώδη προσωπικά στοιχεία, όπως πλήρες όνομα, ημερομηνία γέννησης και διεύθυνση, και να επικυρώσετε ότι είστε άνω των 21 ετών, που είναι το συνηθισμένο όριο ηλικίας για συμμετοχή σε τυχερά παιχνίδια στην Ελλάδα. Στη συνέχεια, η πλατφόρμα θα σας ζητήσει να επιβεβαιώσετε τον λογαριασμό σας μέσω της υποβολής ενός εγγράφου ταυτοποίησης, μια πορεία αποκαλούμενη ως KYC που είναι αναγκαία για τη τήρηση με τους κανονισμούς και την προστασία των συναλλαγών σας.
Μόλις τελειώσει η εγγραφή και η επιβεβαίωση, η περιήγηση στο παιχνίδι είναι γρήγορη. Από την βασική σελίδα, είστε σε θέση να επιλέξετε την κατηγορία «Live Casino» ή να αξιοποιήσετε τη γραμμή αναζήτησης πληκτρολογώντας «Lightning Roulette». Το Maxbet Casino περιλαμβάνει συνήθως διάφορα τραπέζια του ίδιου παιχνιδιού, συμπεριλαμβανομένων εκδόσεων με διαφορετικά όρια πονταρίσματος, ώστε να ανακαλύψετε αυτό που ταιριάζει στο bankroll σας. Η πλατφόρμα παρέχει συχνά τη δυνατότητα να δείτε έναν γύρο ως θεατής πριν καθίσετε στο τραπέζι, κάτι που σας επιτρέπει να εξοικειωθείτε με τον ρυθμό του ντίλερ και τη συχνότητα των κεραυνών πριν δεσμεύσετε χρήματα.
Ασφάλεια, αδειοδότηση και υπεύθυνο παιχνίδι παιχνίδι
Καθώς παίζετε Lightning Roulette με πραγματικά χρήματα, η προστασία των ατομικών και οικονομικών σας πληροφοριών είναι υψίστης σημασίας. Το Maxbet Casino υπάρχει υπό άδεια από αναγνωρισμένη ρυθμιστική αρχή, γεγονός που σημαίνει ότι δεσμεύεται να τηρεί εξαιρετικά αυστηρά στάνταρ προστασίας δεδομένων, δίκαιου παιχνιδιού και διαχωρισμού των κεφαλαίων των παικτών από τα λειτουργικά κεφάλαια της εταιρείας. Η κρυπτογράφηση SSL είναι ενεργή σε όλες τις σελίδες, και είστε σε θέση να το ελέγξετε από το σύμβολο του λουκέτου στη γραμμή διευθύνσεων του προγράμματος πλοήγησης σας. Αυτό εγγυάται ότι οι επικοινωνίες σας με τον εξυπηρετητή παραμένουν απόρρητες.
Πέρα από την τεχνική ασφάλεια, η ιστοσελίδα διαθέτει λειτουργίες υπεύθυνου παιχνιδιού που σας βοηθούν να διατηρείτε τον έλεγχο της συμπεριφοράς σας. Είστε σε θέση να ορίσετε καθημερινά, εβδομαδιαία όρια ή μηνιαία όρια καταθέσεων, να θέσετε σε λειτουργία υπενθυμίσεις χρόνου χρόνου συνεδρίας και να ζητήσετε προσωρινό ή μόνιμο απενεργοποίηση του λογαριασμού σας αν νιώσετε ότι το παιχνίδι αλλάζει από τον ψυχαγωγικό του ρόλο. Το Lightning Roulette, με τον έντονο ρυθμό και την δυναμική των κεραυνών, μπορεί να γίνει απορροφητικό, γι’ αυτό πιστεύω σημαντικό να χρησιμοποιείτε αυτά τα εργαλεία προληπτικά, άσχετα από το επίπεδο εμπειρίας σας.
Η εμπειρία σε κινητές συσκευές και η υποστήριξη
Η μετάβαση από τον υπολογιστή στο κινητό είναι ένα από τα δυνατά σημεία της τρέχουσας πλατφόρμας του Maxbet Casino, και το Lightning Roulette δεν αποτελεί εξαίρεση. Το παιχνίδι έχει προσαρμοστεί ώστε να λειτουργεί απευθείας μέσα από το πρόγραμμα περιήγησης του smartphone ή του tablet σας, χωρίς να είναι αναγκαία λήψη κάποιας εφαρμογής, αν και συνήθως υπάρχει και μια αποκλειστική εφαρμογή για iOS και Android που δίνει κάπως γρηγορότερη φόρτωση και push ειδοποιήσεις. Στις δοκιμές που έκανα, η ποιότητα της ροής βίντεο διατηρήθηκε υψηλή ακόμη και σε δίκτυα 4G, με πολύ μικρή καθυστέρηση και χωρίς διακοπές, πράγμα που είναι κρίσιμο όταν πρέπει να βάλετε τα πονταρίσματά σας μέσα στο περιορισμένο χρονικό παράθυρο.
Το περιβάλλον αφής έχει σχεδιαστεί έξυπνα: τα κουμπιά πονταρίσματος είναι αρκετά μεγάλα ώστε να αποφεύγονται λάθος πατήματα, και η διάταξη του τραπεζιού προσαρμόζεται αυτόματα στην οριζόντια ή κάθετη λειτουργία της συσκευής σας. Μπορείτε να εστιάσετε σε ορισμένες περιοχές του τραπεζιού, να ελέγξετε το ιστορικό και να μιλήσετε με τον ντίλερ μέσω ζωντανής συνομιλίας, ακριβώς όπως και στην επιτραπέζια έκδοση. Αυτή η ευελιξία σημαίνει ότι είστε σε θέση να απολαύσετε μια πλήρη συνεδρία Lightning Roulette ενώ βρίσκεστε σε ένα διάλειμμα ή ταξιδεύετε, χωρίς να χάνετε ποιότητα ή λειτουργικότητα.
Η λειτουργία των πολλαπλασιασμών και η επιρροή τους στο παιχνίδι
Οι συγκεκριμένοι πολλαπλασιαστές αστραπής είναι ο πυρήνας που διαφοροποιεί το Lightning Roulette από κάθε εκδοχή ρουλέτας, και η γνώση της στατιστικής συμπεριφοράς τους αποτελεί απαραίτητη για κάθε σοβαρό παίκτη. Σε κάθε γύρο, η πιθανότητα ένας συγκεκριμένος αριθμός να χτυπηθεί από κεραυνό είναι σχεδόν 1 στις 37, αλλά το παιχνίδι καθορίζει διάφορους αριθμούς ταυτόχρονα, γεγονός που ενισχύει τη συνολική συχνότητα εμφάνισης εμφάνισης κεραυνών. Από τη προσωπική μου ανάλυση, παρατηρώ ότι σε βάθος εκατοντάδων γύρων, οι κεραυνοί συμβαίνουν σχεδόν σε κάθε γύρο, αλλά οι υψηλοί πολλαπλασιαστές των 400x και 500x είναι σπανιότεροι, όπως είναι αναμενόμενο. Αυτή η κατανομή διαμορφώνει ένα προφίλ κινδύνου που θυμίζει σε παιχνίδια με τζάκποτ, όπου η αναμονή για το μεγάλο χτύπημα είναι τμήμα της γοητείας.
Η μείωση της βασικής πληρωμής από 35:1 σε 30:1 είναι το τίμημα που καταβάλλετε για την ευκαιρία να πετύχετε πολλαπλασιαστή. Αυτό σημαίνει ότι αν παίζετε αποκλειστικά ευθεία πονταρίσματα χωρίς να ενεργοποιηθεί κεραυνός, το μαθηματικό πλεονέκτημα του καζίνο είναι ελαφρώς υψηλότερο από την κλασική ρουλέτα. Ωστόσο, η προστιθέμενη αξία των πολλαπλασιαστών αντισταθμίζει αυτή τη διαφορά μακροπρόθεσμα, αρκεί να υιοθετήσετε μια πειθαρχημένη προσέγγιση. Στο Maxbet Casino, το παιχνίδι τρέχει με διαφάνεια και μπορείτε να δείτε το ιστορικό των κεραυνών, κάτι που σας βοηθά να παρακολουθείτε αν το παιχνίδι βρίσκεται σε μια φάση όπου οι υψηλοί πολλαπλασιαστές εμφανίζονται συχνότερα ή σπανιότερα από το στατιστικά αναμενόμενο.
Τι ακριβώς είναι το Lightning Roulette και ποια η προέλευσή του
Το Lightning Roulette είναι ένα ζωντανό παιχνίδι καζίνο που κατασκευάστηκε από την Evolution Gaming, τον κορυφαίο πάροχο live καζίνο διεθνώς, και κυκλοφόρησε για πρώτη φορά το 2018. Η κύρια του δομή στηρίζεται στην ευρωπαϊκή ρουλέτα με ένα μόνο μηδέν, κάτι που συνεπάγεται ότι ο τροχός έχει 37 θέσεις με αριθμούς θέσεις, από το 0 έως το 36. Η ουσιαστική διαφορά βρίσκεται στον τρόπο πληρωμής των ευθέων πονταρισμάτων: αντί για την συνήθη απόδοση 35 προς 1, το παιχνίδι δίνει μικρότερη βάση 30 προς 1, αλλά ενσωματώνει τυχαίους πολλαπλασιαστές που λέγονται «Κεραυνοί» και έχουν τη δυνατότητα να αγγίξουν έως και 500x. Αυτή η μεταβολή μεταμορφώνει τη δυναμική του παιχνιδιού, κάνοντάς το μια συνδυαστική εμπειρία που εξισορροπεί ανάμεσα στη μεθοδική κάλυψη του τραπεζιού και την επιδίωξη της μεγάλης στιγμής.
Από την πρώτη στιγμή που παρουσιάστηκε, το Lightning Roulette απέκτησε γρήγορα αναγνωρισιμότητα στην Ελλάδα και στο εξωτερικό, εξαιτίας στην ικανότητά του να διατηρεί τον κοινωνικό χαρακτήρα ενός διαδραστικού ντίλερ ενώ προσθέτει ένα επίπεδο απροσδόκητου ενθουσιασμού. Στο Maxbet Casino το συναντώ ενσωματωμένο σε μια μεγαλύτερη ομάδα live παιχνιδιών, με ειδικευμένους παρουσιαστές που ομιλούν αγγλικά, αλλά το περιβάλλον χρήστη είναι εξολοκλήρου διαμορφωμένο στα ελληνικά. Η πορεία του παιχνιδιού δεν περιορίστηκε στην αρχική έκδοση· υπάρχουν παραλλαγές όπως το Lightning Roulette First Person με τρισδιάστατης απεικόνισης γραφικά, προσφέροντας δυνατότητες ανάλογα με το αν επιλέγετε την πραγματική ζωντανή ατμόσφαιρα ή έναν πιο διαχειρίσιμο ψηφιακό ρυθμό.
Τι κάνει την εμπειρία στο Maxbet Casino να ξεχωρίζει
Αυτό που κάνει διαφορετικό το Maxbet Casino από άλλες πλατφόρμες που φιλοξενούν το ίδιο παιχνίδι είναι ο τρόπος με τον οποίο ενσωματώνει το Lightning Roulette σε ένα μεγαλύτερο οικοσύστημα ψυχαγωγίας. Δεν πρόκειται απλώς για ένα ξεχωριστό τραπέζι· είναι μέρος μιας μεγάλης βιβλιοθήκης που αποτελείται από χιλιάδες φρουτάκια, υπόλοιπα επιτραπέζια παιχνίδια, στοιχηματισμό σε αθλητικά γεγονότα και μια ποικιλία από live game shows που ανανεώνουν την έννοια του καζίνο. Η ευχέρεια να περιηγείστε απρόσκοπτα από ένα στοίχημα σε αγώνα ποδοσφαίρου σε έναν γύρο Lightning Roulette χρησιμοποιώντας τον ίδιο λογαριασμό και το ίδιο υπόλοιπο είναι μια χρήσιμη ευκολία που θεωρώ σημαντική ιδιαίτερα.
Επίσης, η εξυπηρέτηση πελατών στα ελληνικά είναι ένα στοιχείο που πολλές φορές αγνοείται αλλά δημιουργεί ουσιαστική διαφορά όταν εμφανίζεται ένα πρόβλημα με μια κατάθεση, ένα μπόνους ή μια τεχνολογική δυσλειτουργία. Η ομάδα εξυπηρέτησης είναι προσβάσιμη μέσω άμεσης επικοινωνίας και email, και από την εμπειρία μου, οι χρόνοι ανταπόκρισης είναι σύντομοι κατά τις ώρες αιχμής. Συνδυάζοντας αυτή την υποστήριξη με την σταθερότητα μιας νόμιμης πλατφόρμας και την αριστεία του παιχνιδιού της Evolution Gaming, το σύνολο είναι ένα χώρος όπου είστε σε θέση να συγκεντρωθείτε στην ευχαρίστηση του Lightning Roulette, έχοντας επίγνωση ότι οι λοιπές παράμετροι είναι τακτοποιημένες.
Τακτικές πονταρίσματος που αξίζει να εξετάσετε
Δεν υπάρχει στρατηγική που να διασφαλίζει κέρδη σε ένα παιχνίδι που βασίζεται στην τύχη, αλλά η φύση του Lightning Roulette καθιστά δυνατή την ανάπτυξη προσεγγίσεων που ρυθμίζουν καλύτερα τη μεταβλητότητα. Μια διαδεδομένη τακτική είναι ο συνδυασμός ευθέων πονταρισμάτων με στοιχήματα σε εξωτερικά στοιχήματα, ώστε να φτιάχνετε ένα δίχτυ ασφαλείας. Για παράδειγμα, έχετε τη δυνατότητα να ποντάρετε μικρά ποσά σε μια ντουζίνα ή σε μαύρο-κόκκινο για να προστατεύετε μέρος του τραπεζιού, ενώ ταυτόχρονα τοποθετείτε ευθεία πονταρίσματα σε μια επιλεγμένη ομάδα αριθμών που θεωρείτε ότι έχουν πιθανότητες να επηρεαστούν από κεραυνό. Αυτή η μικτή μέθοδος περιορίζει τις διακυμάνσεις και σας κρατά στο παιχνίδι για περισσότερους γύρους.
Μια διαφορετική προσέγγιση που έχω ελέγξει και θεωρώ ενδιαφέρουσα είναι η στρατηγική της κάλυψης όσο το δυνατόν πιο πολλών αριθμών με ευθεία πονταρίσματα, χρησιμοποιώντας μικρότερες μάρκες. Αν στοιχηματίσετε, για παράδειγμα, 20 από τους 37 αριθμούς, αυξάνετε σημαντικά την πιθανότητα να βρεθείτε ανάμεσα στους τυχερούς όταν πέσει κεραυνός. Το αρνητικό είναι ότι το κόστος ανά γύρο είναι αυξημένο και οι απώλειες μαζεύονται γρήγορα όταν η μπίλια σταματά σε ακάλυπτο αριθμό. Στο Maxbet Casino, το εύρος πονταρίσματος είναι αρκετά ελαστικό ώστε να επιτρέπει τόσο συντηρητικά όσο και επιθετικά συστήματα, και σας συνιστώ να θέσετε ένα σαφές όριο απώλειας πριν εκκινήσετε οποιαδήποτε συνεδρία, ανεξάρτητα από τη στρατηγική που θα επιλέξετε.
Μπόνους που έχετε τη δυνατότητα να εκμεταλλευτείτε
Ένας από τους τομείς που αναδεικνύονται στο Maxbet Casino είναι η ποικιλομορφία των προσφορών που μπορούν να επεκτείνουν τον χρόνο παιχνιδιού σας στο Lightning Roulette. Αν και δεν μπορώ να αναφέρω συγκεκριμένους ποσά ή κωδικούς που ισχύουν αυτή τη στιγμή, η τυπική δομή εμπεριέχει ένα μπόνους καλωσορίσματος για νέους παίκτες, το οποίο συχνά συνδυάζει μια αναλογία στην πρώτη κατάθεση με δωρεάν περιστροφές ή ένα περιορισμένο ποσό που μπορεί να αναλωθεί σε ορισμένα παιχνίδια. Πρέπει να μελετήσετε προσεκτικά τους όρους και τις προϋποθέσεις, ειδικά το τμήμα που αναφέρεται στη συνεισφορά των παιχνιδιών στο αναγκαίο ποντάρισμα, δεδομένου ότι τα ζωντανά παιχνίδια όπως το Lightning Roulette συχνά συνεισφέρουν σε χαμηλότερο ποσοστό από ό,τι τα φρουτάκια.
Εκτός από το μπόνους καλωσορίσματος, η πλατφόρμα πραγματοποιεί επαναλαμβανόμενες προωθητικές ενέργειες που μπορεί να αποτελούνται από επιστροφή χρημάτων σε απώλειες ζωντανού καζίνο, τουρνουά ρουλέτας με βραβεία ή ειδικές αποστολές που ανταμείβουν τη σταθερή δραστηριότητα. Σας συμβουλεύω να ελέγχετε τακτικά τη σελίδα προσφορών εντός του λογαριασμού σας, γιατί αυτές οι ενέργειες αλλάζουν συχνά και μπορούν να σας δώσουν πρόσθετη αξία χωρίς να είναι αναγκαία πρόσθετη κατάθεση. Μην ξεχνάτε ότι οποιοδήποτε μπόνους συνοδεύεται από απαιτήσεις στοιχηματισμού, συνεπώς εκτιμήστε αν ο ρυθμός παιχνιδιού σας και το μέγεθος των πονταρισμάτων σας είναι σε θέση να εκπληρώσουν αυτές τις απαιτήσεις μέσα στο χρονικό περιθώριο που ορίζεται.