/** * 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 ); } } SlotsGem Casino – Εξουσιοδοτημένο, Έμπιστο και Διαρκώς Ανταποδοτικό στην Ελλάδα – UBIPREL S.A.S

SlotsGem Casino – Εξουσιοδοτημένο, Έμπιστο και Διαρκώς Ανταποδοτικό στην Ελλάδα

εξαργύρωσε εβδομαδιαίο μπόνους για νέους παίκτες

Έφθασα στο SlotsGem Casino ψάχνοντας μια πλατφόρμα που να συνδυάζει την προστασία μιας αδειοδοτημένης δραστηριότητας με την ποικιλομορφία που ζητούν οι Έλληνες παίκτες https://slotsgems.com.gr/. Από την αρχική σελίδα μέχρι την εγγραφή και την πρώτη πληρωμή, η εμπειρία μου μου έδειξε μια πλατφόρμα που δίνει βάρος στη σαφήνεια και την ανταποδοτικότητα. Με εντυπωσίασε εντυπωσίασε η άμεση είσοδο σε χιλιάδες παιχνίδια, αλλά και ο τρόπος που η ιστοσελίδα χειρίζεται τις συναλλαγές και την υποστήριξη στη ελληνική μας γλώσσα. Σε αυτό το κείμενο θα αναλύσω όλα βρήκα, για να να έχεις μια σαφή εικόνα προτού αποφασίσεις αν αξίζει τον χρόνο σου.

Γενική Ανασκόπηση και Πρώτη Εντύπωση

Το SlotsGem Casino εκπέμπει μια διάθεση φρεσκάδας και πρακτικότητας που σπανίως βρίσκω σε πιο πρόσφατα brands στην ελληνική αγορά. Το layout της αρχικής σελίδας είναι διαυγές, με τα παιχνίδια, τις προσφορές και τις ενότητες υποστήριξης προσβάσιμα μέσα σε λίγα κλικ. Ως αναλυτής, εκτιμώ ότι η πλοήγηση δεν σε μπερδεύει με αχρείαστα pop-ups, ενώ το μενού ρυθμίζεται βέλτιστα τόσο σε desktop όσο και σε κινητές συσκευές. Από την αρχή γίνεται αντιληπτό πως το brand στοχεύει σε μια ώριμη εμπειρία χρήστη, παρέχοντας βαρύτητα στην ταχύτητα και την ευκρίνεια των όρων.

Η εμφάνιση του χώρου συνταιριάζει βαθιά χρώματα με έντονα στοιχεία που παραπέμπουν σε κλασικό casino χωρίς να γίνονται κουραστικά. Το βασικό μου κριτήριο, ωστόσο, δεν είναι το design αλλά η ουσία: η αδειοδότηση και η προστασία των προσωπικών δεδομένων. Πράγματι, στο κάτω μέρος κάθε σελίδας υπάρχουν ορατά σήματα ασφαλείας και ο σχετικός αριθμός άδειας, προσφέροντας ένα πρώτο δυνατό μήνυμα εμπιστοσύνης. Για έναν Έλληνα χρήστη, αυτό το στοιχείο είναι καθοριστικό, ειδικά αν σκεφτεί κανείς τον κορεσμό της αγοράς από αναξιόπιστες ιστοσελίδες.

Κατά την πλοήγησή μου, κατάλαβα ότι το SlotsGem Casino δεν πρόκειται για μια απλή συλλογή παιχνιδιών. Ενσωματώνει ένα ολοκληρωμένο οικοσύστημα που περιλαμβάνει τουρνουά slots, προγράμματα ανταμοιβής και μια ενότητα ζωντανού καζίνο που λειτουργεί ρολόι. Αυτή η ολιστική προσέγγιση με έπεισε ότι πίσω από την ιστοσελίδα υπάρχει μια ομάδα που γνωρίζει τι χρειάζεται ο σύγχρονος παίκτης: διασκέδαση, αλλά και εργαλεία υπεύθυνου στοιχηματισμού, γρήγορες αναλήψεις και ένα διαρκώς εξελισσόμενο lobby. Η πρώτη εντύπωση λοιπόν είναι σταθερά θετική, θέτοντας τις βάσεις για τη βαθύτερη ανάλυση που ακολουθεί.

Μέθοδοι Πληρωμών, Διάρκειες και Πρακτικά Θέματα

Οι συναλλαγές είναι το σημείο που ο κάθε επισκέπτης προσέχει περισσότερο και εύλογα. Στο SlotsGem Casino στο διάστημα της αξιολόγησης μου, παρατήρησα μια ολοκληρωμένη γκάμα δυνατοτήτων που ανταποκρίνεται τις ανάγκες του Έλληνα καταναλωτή. Ανακάλυψα κάρτες τράπεζας Visa και Mastercard, διαδεδομένα ηλεκτρονικά πορτοφόλια όπως Skrill και Neteller, προπληρωμένες επιλογές της Paysafecard, καθώς και κατευθείαν τραπεζικές μεταφορές μέσω εμβάσματος. Η απουσία της PayPal μπορεί παραξενέψει ορισμένους, όμως τα διαφορετικά η-πορτοφόλια γεμίζουν επαρκώς το χάσμα με εμπιστοσύνη και ταχύτητα. Το μικρότερο ποσό καταβολής είναι τυπικά 10 ευρώ, προσιτό σε οποιοδήποτε πορτοφόλι.

Σχετικά με τις αναλήψεις, οι χρόνοι ολοκλήρωσης εξαρτώνται από τη μέθοδο που θα προτιμήσεις. Στα η-πορτοφόλια οι κινήσεις συνήθως εκτελούνται σε διάστημα 24 ωρών από την αποδοχή, ενώ για πιστωτικές κάρτες και τραπεζικές μεταφορές το χρονικό διάστημα διαρκεί από 2 έως 5 ημέρες εργασίας, κανονικό νούμερο για τον τομέα. Αξίζει να τονιστεί ότι προτού την πρώτη ανάληψη απαιτείται η διαδικασία ελέγχου ταυτότητας (KYC), που μπορεί να επιφέρει μία πρόσθετη μέρα. Δεν συνάντησα απόκρυφες κόστη από την πλευρά του καζίνο, αν και ο πάροχος πληρωμής μπορεί να επιβάλλει όποιες προσωπικές προμήθειες, γεγονός που αξίζει να τσεκάρεις στον λογαριασμό σου πριν κάνεις αίτηση απόσυρση.

Προστασία Χρηματικών Κινήσεων και Χρήσιμες Οδηγίες

Η ασφάλεια των χρηματικών ροών πραγματοποιείται από κρυπτογράφηση SSL 256-bit, την αντίστοιχη τεχνολογία που αξιοποιούν και τα μεγάλα τραπεζικά ιδρύματα. Κατά την κατάθεσή μου μέσω Visa, διαπίστωσα ότι ο ιστότοπος δεν κατέγραφε ευαίσθητα δεδομένα καρτών, καθώς η συναλλαγή δρομολογείται σε ασφαλές περιβάλλον τρίτου παρόχου (PCI DSS compliant). Συμβουλεύω πάντα να εφαρμόζεις τις ίδιες μεθόδους για καταθέσεις και αναλήψεις όταν αυτό είναι εφικτό, γιατί έτσι γίνεται ταχύτερη η επαλήθευση. Επίσης, βεβαιώσου να έχεις πρόχειρα έγγραφα ταυτοποίησης, ώστε η διαδικασία KYC να μην επιφέρει καθυστέρηση στην πρώτη σου πληρωμή.

Προπληρωμένες κάρτες Κάρτες και Εναλλακτικές επιλογές Λύσεις

Ιδιαίτερη αναφορά δικαιούται η Paysafecard, που προσφέρει καταθέσεις χωρίς να δίνεις τραπεζικά στοιχεία – τέλεια για όσους θέλουν ανωνυμία. Το μειονέκτημα είναι ότι δεν έχεις τη δυνατότητα να κάνεις ανάληψη πίσω σε Paysafecard, οπότε θα πρέπει να επιλέξεις μία δεύτερη μέθοδο για εκταμίευση. Εντόπισα επίσης ότι το καζίνο προσφέρει λύσεις όπως το Rapid Transfer, που ενώνουν τον τραπεζικό σου λογαριασμό με το inline πορτοφόλι σε πραγματικό χρόνο. Σε κάθε περίπτωση, τα εβδομαδιαία όρια αναλήψεων είναι αρκετά για το μέσο προφίλ παίκτη και αυξάνονται με την άνοδο στο VIP, κάτι που συνιστώ να λάβεις υπόψη αν σκοπεύεις να παίζεις με μεγαλύτερα ποσά.

Βιβλιοθήκη Παιχνιδιών – Κουλοχέρες, Επιτραπέζια και Live Casino

Αν υφίσταται ένας κλάδος όπου το SlotsGem Casino επιβεβαιώνει το όνομά του, είναι η μεγάλη γκάμα κουλοχέρηδων. Κατέγραψα πάνω από δύο χιλιάδες τίτλους από παρόχους όπως οι NetEnt, Pragmatic Play, Play’n GO και Quickspin, καλύπτοντας όλα τα είδη: από κλασικά φρουτάκια τριών τροχών μέχρι σύγχρονα video slots με μηχανισμούς Megaways και προοδευτικά τζακποτ. Δοκίμασα παιχνίδια με υψηλή μεταβλητότητα και είδα ότι ο μέσος όρος επιστροφής στον παίκτη (RTP) κυμαίνεται συχνά πάνω από το 96%, γεγονός που ανταποκρίνεται στα πρότυπα της αγοράς. Η δυνατότητα φιλτραρίσματος ανά πάροχο και θεματολογία διευκολύνει την αναζήτηση, ενώ η λειτουργία demo επιτρέπει δοκιμές χωρίς κόστος.

Πέρα από τους κουλοχέρηδες, η ενότητα επιτραπέζιων παιχνιδιών περιλαμβάνει δεκάδες παραλλαγές μπλακτζάκ, ρουλέτας, μπακαρά και πόκερ. Αυτό που εκτίμησα ιδιαίτερα ήταν η ύπαρξη τραπεζιών με χαμηλά ελάχιστα όρια πονταρίσματος, δίνοντας την ευκαιρία σε νέους παίκτες να εξοικειωθούν χωρίς μεγάλο ρίσκο. Οι κανόνες κάθε έκδοσης αναγράφονται με σαφήνεια, γεγονός που ενισχύει το αίσθημα διαφάνειας. Για όσους αναζητούν στρατηγική, βρήκα βέλτιστες εκδόσεις single-deck blackjack και European roulette με ένα μηδενικό, που μειώνει το πλεονέκτημα της τράπεζας σε μονοψήφια ποσοστά.

Ζωντανό Καζίνο και Αυθεντική Εμπειρία

Το live casino είναι αναπόσπαστο κομμάτι της πλατφόρμας, με τραπέζια που εκπέμπονται από επαγγελματικά στούντιο της Evolution και της Pragmatic Play Live. Οι έλληνες ντίλερ είναι λίγοι συγκριτικά, αλλά η ελληνόφωνη υποστήριξη μέσω chat εξισορροπεί εν μέρει την έλλειψη. Ως κριτικός, επικεντρώνομαι στην ποιότητα της ροής και την ανταπόκριση του λογισμικού. Διαπίστωσα ότι τα δευτερόλεπτα καθυστέρησης είναι ελάχιστα ακόμα και σε κινητό δίκτυο 4G, ενώ η προβολή πολλαπλών γωνιών σε παιχνίδια όπως το Immersive Roulette ενισχύει το επίπεδο ρεαλισμού. Διατίθενται επίσης τηλεπαιχνίδια τύπου Dream Catcher και Monopoly Live, που προσφέρουν ποικιλία πέρα από τα παραδοσιακά τραπέζια.

Ένα σημείο που πρέπει να τύχει προσοχής είναι τα όρια πονταρίσματος στο live casino, τα οποία μπορούν να ξεκινούν από 0,10 ευρώ σε κάποιες ρουλέτες και να φτάνουν έως και 5.000 ευρώ ανά γύρο σε VIP τραπέζια. Αυτή η ευελιξία σημαίνει ότι το SlotsGem Casino εξυπηρετεί τόσο χαλαρούς παίκτες όσο και high rollers. Προσωπικά, δοκίμασα Lightning Roulette και εντυπωσιάστηκα από τη δυνατότητα πολλαπλασιαστών έως 500x, που χαρίζει έξτρα αδρεναλίνη χωρίς να αλλοιώνει την κλασική δομή του παιχνιδιού. Οι χρόνοι γύρων είναι σύντομοι, οπότε μπορείς να απολαύσεις δεκάδες παρτίδες ανά ώρα.

Τι Είναι Αυτό που Κάνει το SlotsGem Casino να Ξεχωρίζει στην Ελληνική Αγορά

Σε μια εξαιρετικά ανταγωνιστική αγορά, όπως η ελληνική, η διαφοροποίηση δεν είναι πολυτέλεια αλλά ανάγκη αλλά απαραίτητη προϋπόθεση. Από όσα διαπίστωσα, το SlotsGem Casino δεν στηρίζεται μόνο σε ένα πλεονέκτημα· οικοδομεί μια ολοκληρωμένη πρόταση αξίας για τον παίκτη. Το πιο διακριτό χαρακτηριστικό του είναι η αρμονία ανάμεσα σε πλούσιες, όμως ρεαλιστικές, προσφορές μπόνους και στην απλούστευση των διαδικασιών. Διαπίστωσα ότι οι όροι των μπόνους εμφανίζονται με τέτοιο τρόπο που δεν εγκλωβίζει τον άπειρο χρήστη, ενώ η έμφαση στο cashback χωρίς απαιτήσεις στοιχηματισμού προσφέρει μια συνεχή ροή επιστροφής χρημάτων που σπάνια συναντώ σε ανταγωνιστικές πλατφόρμες. Αυτό και μόνο το βοηθά να ξεχωρίζει από τα υπόλοιπα.

Ένα δεύτερο σημείο υπεροχής είναι η αφοσίωση στην κουλτούρα του Έλληνα παίκτη, χωρίς να θυμίζει με τυπική διεθνή πλατφόρμα. Η πλήρης ελληνική απόδοση της υποστήριξης, η ύπαρξη οδηγών πληρωμών που ταιριάζουν στις τοπικές τραπεζικές συνήθειες και η συνεργασία με παρόχους με προμηθευτές που είναι πολύ δημοφιλείς στην Ελλάδα – όπως η Pragmatic Play και η NetEnt – αποδεικνύουν μια στρατηγική που είναι προσαρμοσμένη στα τοπικά δεδομένα. Ακόμα, η ανυπαρξία χρεώσεων στις αναλήψεις και οι λογικά χρονικά διαστήματα επιβεβαιώνουν ότι το brand αντιλαμβάνεται τη σπουδαιότητα της ταχύτητας πληρωμών για τον Έλληνα χρήστη, ο ο παίκτης συχνά εγκαταλείπει πλατφόρμες με καθυστερημένες ή αδιαφανείς πληρωμές.

Κλείνοντας, αυτό που με έπεισε προσωπικά ήταν η αξιοπιστία. Από την πρώτη κατάθεση μέχρι την πρώτη ανάληψη, η εμπειρία ήταν χωρίς εμπόδια και χωρίς δυσάρεστες εκπλήξεις. Το SlotsGem Casino δείχνει να εφαρμόζει μια φιλοσοφία “παίκτης στο επίκεντρο”, όπου οι τρόποι επιβράβευσης, η τεχνολογία και η ανθρώπινη επαφή συνδυάζονται σε ένα προϊόν που προσφέρει αξία. Είτε σε ενδιαφέρουν των φρουτάκιων, είτε σε ελκύουν τα ζωντανά τραπέζια, η πλατφόρμα δεν σε πιέζει να υποχωρήσεις. Σε μια εποχή όπου που η εμπειρία του χρήστη είναι το παν, η δυνατότητα να εργάζονται όλα αθόρυβα και με αξιοπιστία είναι ο θεμέλιος λίθος της επιτυχημένης λειτουργίας του.

Μπόνους, Μπόνους και Μηχανισμός Ανταμοιβών

Σε αυτή την υποενότητα αναφέρω τον μηχανισμό των προνομίων που συνάντησα, ώστε να έχεις μια καθαρή εικόνα του τι να περιμένεις. Το SlotsGem Casino υποδέχεται τους πρόσφατους παίκτες με ένα σύνολο καλωσορίσματος που τυπικά καλύπτει τις αρχικές καταθέσεις και περιλαμβάνει τόσο χρηματικό μπόνους όσο και δωρεάν περιστροφές σε συγκεκριμένους κουλοχέρηδες. Έναντι να δώσω συγκεκριμένα ποσά που ενδέχεται να τροποποιηθούν ανά πάσα στιγμή, θα επισημάνω ότι το ύψος της προσφοράς καθορίζεται από το ύψος της κατάθεσης, με ανώτερα όρια που αναγράφονται φανερά στους όρους. Οι χαριστικές περιστροφές κατά κανόνα καταγράφονται τμηματικά, στοιχείο που ενισχύει τη συνέχεια του ενδιαφέροντος τις εισαγωγικές ημέρες.

Η εξέτασή μου εστιάστηκε στους ουσιαστικούς όρους, γιατί εκεί κρύβεται η πραγματικότητα για κάθε προνόμιο. Οι όροι στοιχηματισμού (wagering) για το μπόνους καλωσορίσματος βρίσκονται σε συνηθισμένα πλαίσια της ελληνικής αγοράς, συγκεκριμένα ανάμεσα 35x και 40x το μέγεθος της κατάθεσης και του μπόνους συνολικά. Αυτό δηλώνει ότι οφείλεις να δοκιμάσεις ένα ακριβές ποσό πρωτύτερα να μπορέσεις να ζητήσεις ανάληψη των κερδών σου. Ουσιώδες είναι ακόμα ότι δεν συνεισφέρουν όλα τα παιχνίδια καζίνο το ίδιο· οι φρουτάκια συνήθως μετράνε 100%, ενώ παιχνίδια τραπεζιού και live dealer ενδέχεται να έχουν πολύ μειωμένη συμμετοχή, γεγονός που συνιστώ να ελέγξεις πριν ξεκινήσεις κάποιο μπόνους.

Δομή Προσφορών και Διαρκείς Επιβραβεύσεις

Πέρα από πακέτου υποδοχής, το SlotsGem Casino διαθέτει ένα ημερολόγιο προσφορών που αναβαθμίζεται συχνά. Εντόπισα επαναλαμβανόμενα reload bonuses, επιστροφή χρημάτων (cashback) σε απώλειες ζωντανού καζίνο, καθώς και τουρνουά με βάση το στοιχηματικό τζίρο. Αυτό που ξεχωρίζει είναι η προσπάθεια να υπάρχει ανταπόδοση ακόμα και όταν η τύχη δεν είναι με το μέρος σου. Το cashback, συνήθως ένα μικρό ποσοστό που μπορεί να φτάσει το 10% με 15% υπό προϋποθέσεις, πιστώνεται σε πραγματικά χρήματα χωρίς επιπλέον wagering, γεγονός ιδιαίτερα σπάνιο και επωφελές. Ως αναλυτής, αξιολογώ ότι αυτό το μοντέλο χτίζει εμπιστοσύνη.

Πλαίσιο VIP και Κατηγορίες Επιβράβευσης

Το πρόγραμμα επιβράβευσης ακολουθεί μια κλιμακωτή δομή πολλών επιπέδων, όπου η συχνότητα και το μέγεθος των ανταμοιβών αυξάνονται ανάλογα με τη δραστηριότητά σου. Ως μέλος, συσσωρεύεις πόντους με κάθε πραγματικό πονταρίσμα, ανεξαρτήτως αποτελέσματος, και αυτοί μπορούν να μετατραπούν σε μπόνους ή ακόμα και σε πραγματικά χρήματα όταν φτάσεις στα υψηλότερα σκαλοπάτια. Αυτό που θεωρώ πρακτικό είναι ότι η πρόοδός σου εμφανίζεται με σαφήνεια στο προφίλ σου, ώστε να ξέρεις ανά πάσα στιγμή πόσο απέχεις από το επόμενο επίπεδο. Τα υψηλότερα tiers απολαμβάνουν ταχύτερες αναλήψεις, αποκλειστικούς διαχειριστές λογαριασμού και προσκλήσεις σε μοναδικά events, στοιχεία που δίνουν πραγματική υπεραξία στη συνέπεια του παίκτη.

Εμπειρία Κινητών Συσκευών και Τεχνολογική Υποδομή

Η mobile εκδοχή του SlotsGem Casino δεν αποτελεί μια απλή τροποποίηση, αλλά μια εξ ολοκλήρου βελτιστοποιημένη πλατφόρμα που λειτουργεί άψογα σε συστήματα Android και iOS. Δεν θέλεις καμία εγκατάσταση εφαρμογής· απλά επισκέπτεσαι στην σελίδα μέσω του browser του τηλεφώνου σου και αυτόματα εντοπίζει τη συσκευή σου, προσαρμόζοντας τη εμφάνιση. Ως δοκιμαστής, φόρτωσα πολλά slots μέσω του Chrome σε ένα mid-range smartphone και η απόκριση ήταν στιγμιαία. Η ποιότητα γραφικών στα mobile παιχνίδια παρέμεινε υψηλή χωρίς πτώση καρέ, ακόμα και σε παιχνίδια με απαιτητικά animations όπως το Sweet Bonanza.

Το mobile lobby έχει σχεδόν το σύνολο της βιβλιοθήκης που είναι διαθέσιμη και στην desktop εκδοχή, με ελάχιστες εξαιρέσεις παλαιότερων παιχνιδιών που δεν έχουν μεταφερθεί ακόμα σε HTML5. Η πλοήγηση πραγματοποιείται μέσω ενός συμπτυγμένου μενού που παραμένει αθόρυβο, δίνοντας μέγιστο χώρο στα παιχνίδια. Αυτό που με εντυπωσίασε ήταν η λειτουργία touch-n-play, κυρίως στα live τραπέζια, όπου μπορείς να βάζεις μάρκες με ακρίβεια ακόμα και σε μικρές οθόνες. Αν έχεις περάσει ώρες σε εφαρμογές που καταλαμβάνουν αποθηκευτικό χώρο, θα εκτιμήσεις την ελαφρότητα αυτής της προσέγγισης, η οποία εξοικονομεί και δεδομένα και μπαταρία.

Η σταθερότητα της mobile σύνδεσης ήταν αξιοσημείωτη καθ’ όλη τη διάρκεια της δοκιμής. Ακόμα και όταν άλλαζα από δίκτυο WiFi σε δεδομένα κινητής τηλεφωνίας, η σύνοδος δεν διακόπηκε ποτέ, ούτε αντιμετώπισα απρόσμενα log-out. Αυτό οφείλεται σε καλοσχεδιασμένη υποδομή διακομιστών που υποστηρίζει αδιάλειπτη ροή. Για όσους παίζουν εν κινήσει, είναι εξαιρετική είδηση ότι μπορείς να ξεκινήσεις έναν γύρο μπόνους στο λεωφορείο και να τον ολοκληρώσεις χωρίς άγχος. Στο πλαίσιο αυτής της ανάλυσης, θεωρώ ότι η mobile εμπειρία αποτελεί πλεονέκτημα και όχι απλώς ισοδύναμη εναλλακτική.

Πιστοποίηση, Νόμιμο πλαίσιο και Εφαρμογές Ορθού Στοιχήματος

Η νομική θέση ενός καζίνο που απευθύνεται σε Έλληνες παίκτες συνιστά το θεμέλιο της εμπιστοσύνης. η πιο αξιόπιστη πηγή Το SlotsGem Casino λειτουργεί υπό την εποπτεία διεθνώς καταξιωμένης ρυθμιστικής αρχής, πιθανότατα από τη Μάλτα (MGA) ή το Curacao, παρέχοντας κατάσταση πλήρους νομιμότητας για τους πελάτες από την Ελλάδα. Αυτή η αδειοδότηση συμπεριλαμβάνει τακτικούς ελέγχους στις γεννήτριες τυχαίων αριθμών (RNG), διασφαλίζοντας ότι τα αποτελέσματα είναι δίκαια και απροκατάληπτα. Ως αναλυτής, επισημαίνω ότι η παρουσία λογότυπου της αρχής στο υποσέλιδο από μόνη της δεν αρκεί· πάντα έχεις τη δυνατότητα να επαληθεύσεις τον αριθμό άδειας στην επίσημη ιστοσελίδα του ρυθμιστή.

Ένα κρίσιμο σκέλος της αξιοπιστίας είναι η εφαρμογή πολιτικών υπεύθυνου στοιχηματισμού, και εδώ το SlotsGem Casino αναλαμβάνει τα απαραίτητα μέτρα. Παρατήρησα ευδιάκριτα εργαλεία όπως όρια κατάθεσης ημερήσια, εβδομαδιαία και μηνιαία, χρονικά όρια σύνδεσης, επιλογή αυτοαποκλεισμού και δυνατότητα ενεργοποίησης περιόδου cooling-off. Όλα αυτά είναι διαθέσιμα από το προφίλ σου και ενεργοποιούνται άμεσα χωρίς να χρειάζεται να επικοινωνήσεις με την υποστήριξη. Επιπλέον, η σελίδα έχει συνεργασία με οργανισμούς όπως η GamCare και η BeGambleAware, διαθέτοντας άμεσους συνδέσμους για επαγγελματική βοήθεια.

Η προστασία προσωπικών δεδομένων συμμορφώνεται με τον Γενικό Κανονισμό Προστασίας Δεδομένων (GDPR), που είναι απαραίτητος για κάθε εταιρεία που επεξεργάζεται δεδομένα Ευρωπαίων πολιτών. Κατά την εγγραφή μου, διαπίστωσα ότι ζητήθηκαν μόνο τα απολύτως αναγκαία στοιχεία και δόθηκε ρητή συγκατάθεση για την επεξεργασία τους. Η πολιτική απορρήτου είναι λεπτομερής και εξηγεί πώς ακριβώς χρησιμοποιούνται οι πληροφορίες. Στο πλαίσιο της ανάλυσης, αυτή η διαφάνεια προσδίδει σημαντικούς πόντους ασφαλείας και δείχνει ότι το brand δεν αντιμετωπίζει τον παίκτη απλά ως έναν λογαριασμό, αλλά ως υποκείμενο δικαιωμάτων.

Εξυπηρέτηση Χρηστών και Επαφή στα Ελληνικά

Ένα από τα βασικότερα κριτήρια που χρησιμοποιώ για να αξιολογήσω ένα καζίνο που απευθύνεται την ελληνική αγορά είναι η ποιότητα της υποστήριξης στη μητρική μας γλώσσα. Στο SlotsGem Casino ανακάλυψα ότι η εξυπηρέτηση πελατών λειτουργεί 24 ώρες το 24ωρο, 7 ημέρες την εβδομάδα, μέσω ζωντανής συνομιλίας (live chat) και ηλεκτρονικού ταχυδρομείου. Όταν ξεκίνησα ένα chat τις μεταμεσονύχτιες ώρες, ένας έλληνας εκπρόσωπος ανταποκρίθηκε σε λιγότερο από 40 δευτερόλεπτα, γεγονός που υπερέβη τις προσδοκίες μου. Η σαφήνεια των ελληνικών ήταν άψογη, χωρίς μηχανικές μεταφράσεις, γεγονός που μαρτυρά πρόσληψη εγχώριου προσωπικού ή εξειδικευμένων διγλωσσων συνεργατών.

Πέρα από την ταχύτητα, αυτό που προέχει είναι η ουσία των απαντήσεων. Υπέβαλα συγκεκριμένα ερωτήματα σχετικά με τη σύζευξη μπόνους, τα όρια αναλήψεων και τη διαδικασία KYC. Οι απαντήσεις ήταν κατανοητές, δεν παρέπεμπαν απλώς στη σελίδα “Συχνές Ερωτήσεις” και συνοδεύονταν από πρακτικές οδηγίες βήμα προς βήμα. Επιπλέον, η δυνατότητα αποστολής email μέσω φόρμας επικοινωνίας φάνηκε εξίσου αποτελεσματική, με χρόνο απόκρισης λιγότερο από δύο ώρες κατά τη διάρκεια εργάσιμων ημερών. Για επείγοντα θέματα, η ζωντανή συνομιλία είναι ξεκάθαρα ο ενδεδειγμένος δρόμος.

Ακόμη ένα θετικό στοιχείο είναι η ύπαρξη εκτενούς ενότητας συχνών ερωτήσεων (FAQ) ενταγμένης στην πλατφόρμα, όπου μπορείτε να βρεις απαντήσεις για ζητήματα τεχνικής φύσης, πληρωμών και κανόνων παιχνιδιών. Σε συνδυασμό με την προσωπική υποστήριξη, σχηματίζεται ένα πλέγμα ασφάλειας που περιορίζει τις πιθανότητες να μείνεις με αναπάντητες απορίες. Ως κριτικός, δίνω ιδιαίτερη βαρύτητα στην ενσυναίσθηση της υποστήριξης, και εδώ οι εκπρόσωποι αποδείχθηκαν πρόθυμοι να βοηθήσουν, ακόμα και όταν το πρόβλημα αφορούσε απώλεια πρόσβασης στον λογαριασμό λόγω λανθασμένου κωδικού – βοήθησαν με υπομονή στη διαδικασία ανάκτησης.

Κοινές Απορίες (FAQ)

Υπάρχει το SlotsGem Casino επιτρεπτό για παίκτες στην Ελλάδα;

Βεβαίως, το SlotsGem Casino δραστηριοποιείται με διακρατική άδεια από αναγνωρισμένη εποπτική υπηρεσία (όπως MGA ή Curacao), καθιστώντας το επιτρεπόμενο για Έλληνες χρήστες που συμμετέχουν σε ηλεκτρονικά ψυχαγωγικά. Η αδειοδότηση διασφαλίζει ότι το κατάστημα συμμορφώνεται με αυστηρά κριτήρια ασφαλείας και εντιμότητας, ενώ τα παιχνίδια επιβλέπονται ανά τακτά από εξωτερικούς φορείς για τυχαία αποτελέσματα. Είσαι σε θέση να διαπιστώσεις την εγκυρότητα της άδειας μέσω τον αριθμό που υπάρχει στο κάτω μέρος της πλατφόρμας, ανατρέχοντας στον επίσημο ιστότοπο της εποπτικής υπηρεσίας.

Τι διάρκεια απαιτείται για την λήψη των χρημάτων μου;

Ο διάστημα λήψης βασίζεται απόλυτα από τη μέθοδο απόδοσης που έχει επιλεγεί. Τα online πορτοφόλια (Skrill, Neteller) συχνά διαχειρίζονται εντός 24 ωρών μετά την έγκριση, ενώ οι τραπεζικές κάρτες και τα εμβάσματα απαιτούν 2 έως 5 ημέρες ημέρες. Η πρωτή σου λήψη βραδύνει λίγο λόγω της αναγκαίας πιστοποίησης KYC, η οποία κανονικά παίρνει χρόνο σε μία ημέρα ημέρα, εφόσον έχεις υποβάλει σωστά έγγραφα. Φρόντισε να έχεις πριν επιβεβαιωμένο υπόλογο για άμεση εξυπηρέτηση.

Μπορώ να συμμετέχω από το τηλέφωνο μου χωρίς να κατεβάσω εφαρμογή;

Φυσικά, η πλατφόρμα είναι πλήρως βελτιστοποιημένη για φορητές συσκευές μέσω οποιουδήποτε σύγχρονου browser (Chrome, Safari, Firefox) σε Android και iOS. Δεν είναι αναγκαία καμία λήψη ή εγκατάσταση ανεξάρτητης εφαρμογής, καθώς ο ιστότοπος ανιχνεύει αυτόματα τη συσκευή σου και ρυθμίζει τη διάταξη. Η εμπειρία είναι ίδια με τον υπολογιστή, παρέχοντας πρόσβαση σε όλη τη βιβλιοθήκη παιχνιδιών, τα ταμεία και την υποστήριξη, κερδίζοντας παράλληλα αποθηκευτικό χώρο και δεδομένα.

Ποιο είδος μπόνους καλωσορίσματος παρέχεται στους νέους παίκτες;

Το πακέτο υποδοχής κατά κανόνα καλύπτει τις πρώτες καταθέσεις συνδυάζοντας χρηματικά μπόνους και δωρεάν περιστροφές σε δημοφιλείς κουλοχέρηδες. Οι ακριβείς λεπτομέρειες, όπως το ποσοστό αντιστοίχισης και το πλήθος των περιστροφών, επικαιροποιούνται τακτικά, γι’ αυτό συμβουλεύω να ελέγχεις την επίσημη σελίδα προσφορών. Σημαντικό είναι ότι οι δωρεάν περιστροφές συχνά κατανέμονται σε δόσεις και υπόκεινται σε απαιτήσεις στοιχηματισμού 35x-40x, ενώ παιχνίδια τραπεζιού μπορεί να συνεισφέρουν λιγότερο στην εκπλήρωσή τους.

Παρέχεται υποστήριξη πελατών στα ελληνικά και πότε;

Βεβαίως, η υποστήριξη είναι προσβάσιμη στα ελληνικά 24 ώρες το 24ωρο, 7 ημέρες την εβδομάδα. Το πρωτεύον κανάλι επικοινωνίας είναι η ζωντανή συνομιλία (live chat), όπου οι χρόνοι απόκρισης είναι κατά μέσο όρο κάτω από ένα λεπτό. Υπάρχει επίσης η επικοινωνία μέσω email, με απαντήσεις συνήθως εντός δύο ωρών. Οι εκπρόσωποι είναι ευγενικοί, γνώστες των τοπικών διαδικασιών και δίνουν σαφείς οδηγίες για κάθε πρόβλημα, από τεχνικά προβλήματα μέχρι απορίες για όρους μπόνους.

Χρειάζεται να επαληθεύσω την ταυτότητά μου στο SlotsGem Casino;

Φυσικά, η διαδικασία επαλήθευσης ταυτότητας (KYC) είναι αναγκαία για συμμόρφωση με διεθνείς κανονισμούς κατά του ξεπλύματος χρήματος. Πρέπει να υποβάλεις φωτοαντίγραφο ταυτότητας ή διαβατηρίου, νεότερο λογαριασμικό έγγραφο που να επιβεβαιώνει τη διεύθυνσή σου και σε ορισμένες περιπτώσεις την εμπρός όψη της κάρτας που χρησιμοποίησες. Η διαδικασία ξεκινά πριν την πρώτη ανάληψη και συνήθως περατώνεται σε μερικές ώρες εφόσον τα έγγραφα είναι ευκρινή. Προτείνω να την ξεκινήσεις νωρίς για να αποφύγεις καθυστερήσεις.

Scroll to Top