/** * 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 ); } } news – UBIPREL S.A.S https://ubiprel.com Somos una empresa que presta servicios integrados de telecomunicaciones. Thu, 22 Oct 2026 19:27:31 +0000 es-CO hourly 1 https://wordpress.org/?v=7.1.3 https://ubiprel.com/wp-content/uploads/2023/06/cropped-INTERNET-1.0-54-32x32.png news – UBIPREL S.A.S https://ubiprel.com 32 32 Comment Reconnaître Un Problème De Jeu Excessif Et Chercher De L’aide https://ubiprel.com/2026/10/22/comment-reconnaitre-un-probleme-de-jeu-excessif-et/ https://ubiprel.com/2026/10/22/comment-reconnaitre-un-probleme-de-jeu-excessif-et/#respond Thu, 22 Oct 2026 18:42:49 +0000 https://ubiprel.com/?p=4893 Comment Reconnaître Un Problème De Jeu Excessif Et Chercher De L’aide

Le jeu peut sembler inoffensif au début, mais pour certains d’entre nous, il devient rapidement une habitude problématique. Si vous vous posez des questions sur votre pratique du jeu ou celle d’un proche, il est crucial de savoir reconnaître les signaux d’alerte et de connaître les ressources disponibles. En Belgique, nous disposons de nombreuses structures d’aide professionnelles pour vous accompagner. Cet article vous guide à travers les étapes pour demander du soutien et reprendre le contrôle.

Reconnaître Les Signaux D’alerte Du Jeu Problématique

Le jeu excessif se manifeste par plusieurs comportements caractéristiques qu’il ne faut pas ignorer. Vous pouvez constater une perte progressive du contrôle : vous jouez plus longtemps ou avec des sommes plus importantes que prévu. Cette escalade est l’un des principaux indicateurs d’une dépendance naissante.

Voici les signaux d’alerte majeurs :

• Vous pensez constamment au jeu, même en dehors des moments de jeu

• Vous avez besoin de miser davantage pour ressentir de l’excitation

• Vous tentez régulièrement de réduire vos mises sans succès

• Vous ressentez de l’anxiété ou de l’irritabilité quand vous ne jouez pas

• Vous cachez l’ampleur réelle de vos pertes à votre entourage

• Vos finances, votre travail ou vos relations souffrent directement

• Vous avez emprunté de l’argent pour continuer à jouer

Si plusieurs de ces points vous concernent, une aide professionnelle devient essentielle. Ce n’est jamais une question de volonté personnelle isolée : la dépendance au jeu est une problématique psychologique nécessitant une prise en charge structurée.

Ressources D’aide Officielles En Belgique

La Belgique propose un cadre complet de services pour lutter contre le jeu problématique. Ces ressources sont accessibles, souvent gratuites ou à coût réduit, et garantissent une confidentialité totale. Nous vous recommandons de contacter au moins une de ces structures pour débuter votre démarche.

Organisations Spécialisées Et Services D’écoute

Le Syndicat National des Centres de Prévention du Jeu regroupe plusieurs organisations régionales en Wallonie, Bruxelles et Flandre. Parmi les principaux interlocuteurs :

StructureServiceContact
Jeu Info Écoute Ligne d’écoute anonyme 0800 30 230
Télé-Accueil Belgique Support psychologique 107
Centres locaux de prévention Consultations individuelles À consulter localement

Ces services proposent des consultations sans jugement. Les conseillers comprennent les mécanismes de l’addiction et vous orientent vers les solutions adaptées. Contactez directement vos ressources d’aide locales pour discuter de stratégies de restriction de jeu et explorer les options thérapeutiques disponibles.

Démarches À Suivre Pour Demander Du Soutien

Franchir le pas demande du courage, mais chaque action concrète vous rapproche de la guérison. Nous vous proposons une progression logique pour structurer votre demande d’aide.

Parler À Un Professionnel De La Santé

Commencez par consulter votre médecin généraliste ou votre médecin traitant. Cette démarche est fondamentale car votre médecin :

• Peut diagnostiquer formellement le trouble du jeu

• Établit un référencement vers des spécialistes (psychologues, psychiatres)

• Détecte d’éventuelles problématiques associées (dépression, anxiété)

• Vous aide à mettre en place des mesures d’auto-exclusion des jeux d’argent

Votre médecin peut également vous prescrire une thérapie cognitivo-comportementale (TCC), très efficace pour traiter l’addiction au jeu. Cette approche modifie progressivement vos patterns de pensée et vos comportements face aux tentations de jouer.

Soutien Familial Et Thérapies Adaptées

Votre famille joue un rôle crucial dans votre rétablissement, mais à condition que le soutien soit bien structuré. Impliquer vos proches sans les surcharger crée un environnement favorable à la guérison.

Les thérapies les plus efficaces incluent :

• Thérapie individuelle : travail avec un psychologue pour identifier les déclencheurs (stress, ennui, solitude)

• Thérapie familiale : reconstruction de la confiance et clarification des rôles

• Groupes de soutien : partager avec d’autres personnes vivant la même réalité renforce la motivation

• Programmes d’auto-exclusion : blocage volontaire de l’accès aux jeux d’argent

N’oubliez pas que la guérison est un processus graduel. Les rechutes peuvent survenir, mais elles ne signifient pas l’échec. Chaque tentative vous renforce et vous rapproche de l’autonomie retrouvée. Contactez dès aujourd’hui l’une de nos structures d’aide : votre décision de chercher du soutien est déjà la première étape du changement.

]]>
https://ubiprel.com/2026/10/22/comment-reconnaitre-un-probleme-de-jeu-excessif-et/feed/ 0
Strīds Ar Kazino Par Bonusu Latvijā: Pilns Ceļvedis Jūsu Tiesību Aizstāvēšanai 2026 https://ubiprel.com/2026/10/16/strds-ar-kazino-par-bonusu-latvij-pilns-cevedis/ https://ubiprel.com/2026/10/16/strds-ar-kazino-par-bonusu-latvij-pilns-cevedis/#respond Fri, 16 Oct 2026 00:15:58 +0000 https://ubiprel.com/?p=4557 Strīds Ar Kazino Par Bonusu Latvijā: Pilns Ceļvedis Jūsu Tiesību Aizstāvēšanai 2026

Kazino bonusi izskatās pievilcīgi, bet strīdi par to noteikumiem un izmaksu ir bieži. Latvijas spēlētāji bieži saskaras ar situācijām, kad kazino atsakās izmaksāt labvēlības, atsaucoties uz neizpildītiem nosacījumiem vai neskaidru pantu interpretāciju. Mūsu ceļvedis palīdzēs jums saprast savas tiesības, identificēt problēmas un pareizi rīkoties.

Biežākās Problēmas Ar Kazino Bonusiem

Lielākā daļa strīdu rodas četru galveno problēmu dēļ:

  • Neskaidri vai mainīti noteikumi, kazino maina bonusa noteikumus bez brīdinājuma, spēlētājs zaudē labvēlības
  • Nepamatoti bloķēti konti, kazino uzsver krāpšanas riskus un bloķē kontu, neatgriežot bonusa apjomu
  • Nereālas omsummas (wagering requirements), 50x vai 100x atliekamā summa dažreiz ir praktiski neiespējams izpildīt
  • Kļūdas sistēmā, bonuss netika uzkrāts vai tika atmests bez skaidra iemesla

Vienā no biežākajiem gadījumiem spēlētājs saņem bonusu, sāk spēlēt, bet pēc tam kazino paziņo, ka bonuss nebija “derīgs” tā konkrētajiem spēļu veidiem. Šāda pieeja bieži vien pārkāpj godīgas spēles principus.

Regulators Un Atbildīgās Iestādes Latvijā

Latvijā lošanu regulē Lošanas likums (pieņemts 2009. gadā, ar pēdējiem labojumiem 2024. gadā). Pēc šī likuma:

TiesībaSīkumi
Informācijas pieejamība Kazino paziņo visus noteikumus skaidri un pieejami
Taisnīga spēle Bonusa noteikumi nedrīkst būt pēc spēles sākuma mainīti
Sūdzību iesniegšana Jums ir tiesības sūdzēties VUGD (Valsts Uzraudzības Ģenerālinstitūtā)
Kontu aizsardzība Kazino nedrīkst bloķēt kontu bez pamatota iemesla

Praktiskā jēga: ja kazino noraidījis bonusu izmaksu, tas nav jūsu privāts strīds, tā ir regulatīvā kwestija. Mūsu uzdevums ir nodrošināt, ka likums strādā jūsu labā.

Uz Ko Pievērst Uzmanību Bonusa Noteikumos

Pirms bonusa pieņemšanas, obligāti pārbaudiet:

  1. Atliekamās summas formulas, vai tas ir 30x, 50x vai 100x? Palūkojiet, vai tā ir pieņemama jūs laimam un budžetam.
  2. Spēļu ierobežojumi, dažas spēles ieskaitās tikai 25% atliekamajā summā (video slotos bieži 100%, bet mēs sapratīsim svārstības)
  3. Derīguma periodi, bonusam var būt 7, 14 vai 30 dienu derīguma termiņš: nerealizējusies summas pazūd
  4. Ar(e)o risinājumi, vai jūs varat izņemt vai tikai spēlēt? Daudz bonusu neļauj izvairot draudžu depozītu
  5. Valūtas ierobežojumi, ja reģistrējāties no Latvijas, pārliecinieties, ka bonuss attiecas uz EUR

Daudz spēlētāju palaist garām detaļas un pēc tam “apbrīnojās”, kāpēc bonuss bija bezvērtīgs. Izlasiet pilnīgos noteikumus, labākie ārzemju kazino vienmēr tos publicē skaidri.

Praktiski Soļi Strīda Risināšanai

Komunikācija Ar Kazino Atbalsta Dienestu

Jūs pamanījāt problēmu? Nekavējoties uzrakstiet atbalsta dienestam. Vienmēr sūtiet ziņojumu caur oficialā kanāla (live chat, e-mail, sūtņu forma), tas patstāvīgi dokumentē jūsu sūdzību. Aprakstiet skaidri:

  • Kāds bonuss jums bija
  • Kāda bija problema (neizspiests, neatgriests, u.c.)
  • Kad tas notika (datums un laiks)
  • Konts ID vai apstiprināšanas numurs

Kazino atbildēs 24–48 stundu laikā. Ja atbilde ir neskaidra vai nolaidīga, miniet, ka uzskatāt to par likuma pārkāpumu.

Dokumentācijas Savākšana

Tādi dokumenti, kas jums būtu nepieciešami:

  • Screenshot no bonusa piedāvājuma (kā tas bija piedāvāts, noteikumi)
  • Spēļu vēsture (kazino tīmekļa lapā: “Mani spēles”)
  • E-pasta korenspondence ar atbalsta dienestu
  • Maksas dokuments (deposīta apstiprinājums)
  • Ekrānuzņēmumi no konts statusiem (saldo, bonusa saldo izmaiņas)

Visos šajos dokumentos jāredz laika zīmes un personas dati, kas pierāda jūsu analoģiju.

Tiesības Un Aizsardzības Mehānismi

Ja kazino nereagē vai atbilde jums neder, vērsieties uz Valsts Uzraudzības Ģenerāldirektorāts (VUGD). Tā ir Latvijas galvenā regulatīvā iestāde, kas pārraudzī lošanas uzņēmumus.

Sūdzības iesniegšanas process:

  1. Aizpildiet VUGD sūdzības formu (pieejama vugd.gov.lv)
  2. Pievienojiet visus dokumentus, bonusa noteikumi, e-pasti, ekrānuzņēmumi
  3. Norādiet konkrētu prasību (piemēram, “vēlos 50 EUR atgriešanu, jo bonuss netika pareizi aprēķināts”)
  4. Sūtiet sūdzību reģistrētu paku vēstuli vai caur VUGD portālu

VUGD pārbaudīs jūsu sūdzību vidēji 30–45 dienu laikā. Ja VUGD konstatē likuma pārkāpumu, tas var pieprasīt kazino jums atmaksāt summu un var piemērot naudas sodu. Šis process ir bezmaksas un Latvijā spēlētājam visvairāk aizsardzības sniedz.

]]>
https://ubiprel.com/2026/10/16/strds-ar-kazino-par-bonusu-latvij-pilns-cevedis/feed/ 0
Kazino Be Registracijos: Pilnas Vadovas Priimtiesiems Lošėjams 2026 https://ubiprel.com/2026/10/15/kazino-be-registracijos-pilnas-vadovas/ https://ubiprel.com/2026/10/15/kazino-be-registracijos-pilnas-vadovas/#respond Thu, 15 Oct 2026 12:02:28 +0000 https://ubiprel.com/?p=4533 Kazino Be Registracijos: Pilnas Vadovas Priimtiesiems Lošėjams 2026

Kazino be registracijos yra sparčiai auganti industrija, kuri patraukia tūkstančius Lietuvos žaidėjų kasmet. Jei jūs ieškote greitos, paprastos prieigos prie lošimo, nebeprisiimę užpildyti ilgus formas, šis vadovas jums padės suprasti visą šio pasirinkimo grąžą ir rizikas. Mes analizuosime pagrindinius privalumus, potencialius pavojus ir tai, kaip apsisaugoti žaidžiant atregistruojamose platformose.

Kas Yra Kazino Be Registracijos

Kazino be registracijos – tai lošimo platformos, kuriose žaidėjai gali pradėti lošti iškart, be ilgų prieš tai išpildymo reikalavimų. Vietoj tradicinio registracijos proceso su el. pašto patvirtinimu ir asmeninės informacijos nuorodomis, šios platformos naudoja greitesnes autentifikacijos sistemas. Dažnai jos veikia naudodamos mobiliųjų telefonų numerius, e-piniginę arba mokėjimo korteles. Šis požiūris sumažina laiko, reikalingo pradėti lošti, nuo 20-30 minučių iki vos kelių sekundžių.

Pagrindiniai Privalumai Lošėjui

Greitas Prieiga ir Greitai Pradedama Lošti

Greičiausia realiojo laiko prieiga yra didžiausias privalumas. Nėra laikų, kai jūs laukiate patvirtinimo el. laiško ar bandote prisiminti slaptažodį. Jūs keliavote į kavinę su 15 minučių per pietus? Galite tiesiog atsidaryti telefoną ir iš karto pradėti žaisti. Platforma neatima suformuotos motivacijos dėl techninio proceso.

Didesnė Privatumas ir Duomenų Saugumas

Mažesnio duomenų rinkinio reiškia mažesnį jūsų asmeninės informacijos poveikį. Tradicinė registracija reikalauja pilno jūsų vardo, adreso, gimimo datos ir dažnai banko duomenų. Atregistruojamos platformos gauna tik tai, kas iš tiesų reikalinga – mobiliojo numerio ar e-piniginės. Tai sumažina riziką, kad jūsų duomenys bus perimti arba netinkamai panaudoti žalinga praktika.

Svarbiausios Rizikos ir Pavojai

Troškimas greitai pradėti lošti negali užtušuoti realiųjų pavojų. Štai pagrindinės rizikos:

  • Sumažėjęs žaidimo kontrolės turtas – kai nereikia naudoti savo tikrojo vardo, labai lengva nuslėpti savo žaidimo problemą
  • Negrįžtami pinigai – jei platforma susmėrka, jūsų pinigai gali būti lengvai prarasdami
  • Netikra ar suklaidanti informacija – kai registracija nėra reikalinga, žaidėjai gali naudoti suklaidintus duomenis, todėl platformos gali būti netinkamai naudojamos
  • Nėra jokios apsaugos nuo žalingų žaidžių įpročių – atRegistruojami kazinai dažnai neturi rimtos atsakomybės apribojimų, kurie gali padėti probleminių lošėjų suaugusiems asmenims

Šios rizikos nėra tik teorinės – jos yra realūs pavojai, kurie labiausiai pasitaiko mažiau žinomose platformose.

Reguliaciniai ir Teisiniai Klausimai

Teisinė padėtis atregistruojamų kazinų yra neaiški. Lietuvoje lošimas yra reguliuojamas Valstybinės loterijos ir azartinių žaidimų komiteto. Dauguma oficialiai registruotų kazinų turi tinkamas licencijas. Tačiau dauguma atRegistruojamų kazinų veikia šaltoje zonoje – jie gali būti registruoti kitoje šalyje, bet vis tiek prieinami Lietuvos žaidėjams. Tai reiškia, kad jei kas nors nutiks, jūs neturite tokios pačios teisinės apsaugos kaip žaidžiant licencijuotame kazine. Būtent todėl prieš renkantis vadinamuosius užsienio kazino internete verta pasidomėti, kokia institucija išdavė licenciją ir kur galima pateikti skundą.

Prieš pasirinkdami atRegistruotą platformą, nustatykite jos teisinę padėtį. Tikite legaliais Europos reguliavimo sertifikatais arba Maltos laisvomis licencijomis.

Kur Rasti Patikimas Atregistruojamas Platformas

Jei jūs sprendiate lošti atRegistruotame kazine, turėtumėte žinoti, kur ieškoti patikimų. Pagrindiniai punktai, kuriuos reikia patikrinti:

Vertinimo KriterijusKą ieškoti
Licenzija Maltos, Gibraltar arba Kipro reguliavimo
SSL Šifravimas HTTPS URL, žemiau dešinėje esanti užrakinta nuoroda
Komentarai ir Atsiliepimai Teigiami atsiliepimai nuo daugiau nei 1000 žaidėjų
Greitai Bankai Jie siūlo jūsų pageidaujamus sumokėjimo metodus
Atsakomybė Yra nuo-gamble nustatymai ir savikontrolės įrankiai

Atsidarykite su mažomis sumomis ir atminkite: jei rodosi per gera, kad būtų tiesa, tai greičiausiai yra.

]]>
https://ubiprel.com/2026/10/15/kazino-be-registracijos-pilnas-vadovas/feed/ 0
Dansk Casinolicens Forklaret: Din Komplette Guide til Sikker Spillerudgifter i 2026 https://ubiprel.com/2026/10/09/dansk-casinolicens-forklaret-din-komplette-guide/ https://ubiprel.com/2026/10/09/dansk-casinolicens-forklaret-din-komplette-guide/#respond Fri, 09 Oct 2026 14:24:10 +0000 https://ubiprel.com/?p=4231 Dansk Casinolicens Forklaret: Din Komplette Guide til Sikker Spillerudgifter i 2026

Når vi spiller på online casinoer, er det vigtigste spørgsmål: er platformen sikker og lovlig? En dansk casinolicens er svaret. Det er din garanti for, at casinoet overholder danske regler og beskytter dine penge. I denne guide forklarer vi, hvad licensen betyder for dig, hvordan du finder licenserede casinoer, og hvad du skal være opmærksom på for at spille ansvarligt og sikkert.

Hvad Er En Dansk Casinolicens?

En dansk casinolicens er en officiel tilladelse fra danske myndigheder, som tillader et online casino at operere lovligt på det danske marked. Uden denne licens kan et casino ikke udbyde sine tjenester til danskere. Licensen sikrer, at casinoet er underlagt streng regulering, regelmæssig kontrol og finansiel revision.

Licensen betyder, at casinoet skal overholde danske spillelove, beskytte persondata efter GDPR-regler, og sikre, at spillerne ikke udsættes for svindel. Det er kort sagt det juridiske bevis på, at casinoet er tillid værdigt og opererer indenfor lovens rammer.

En dansk casinolicens er ikke blot et formelt dokument – det er resultatet af en grundig vurdering af casinoets tekniske systemer, økonomiske stabilitet og drift. Licensen ernyes regelmæssigt, og casinoer kan miste den, hvis de ikke overholder kravene.

Hvem Udsteder Danske Casinolicenser?

Danske casinolicenser udstedes af Statens Lotteri- og Tipstjeneste, som er den officielle myndighed ansvarlig for al gambling-regulering i Danmark. De vurderer casinoer nøje, før de udsteder en licens, og de fortsætter med at overvåge og inspicere operatørerne løbende.

Myndigheden kontrollerer blandt andet:

  • Sikkerhedsstandarder og kryptering af spillerdata
  • Betalingssystemer og finansiel transparens
  • RTP (Return to Player) og fairness af spil
  • Ansvarlig spillepolitik og værktøjer til selvudelukkelse
  • Kontrol af ledelse og ejerskabsstruktur
  • Efterlevelse af hvidvaskmodnormerne

Statens Lotteri- og Tipstjeneste foretager uanmeldte inspektioner og kan pålægge bøder eller tilbagekalde licenser, hvis der opdages overtrædelser. Denne løbende overvågning sikrer, at casinoer ikke kan operere uden at overholde reglerne.

Hvilke Rettigheder Giver En Licens Til Dig Som Spiller?

Når du spiller på et licenseret casino, har du juridiske rettigheder, som beskytter dig. For det første er dine indskud sikret – hvis casinoet går konkurs, er der en spillerfond, som dækker en del af dine penge. Dette giver dig en sikkerhedsnet, som udenlandske casinoer ikke kan tilbyde.

Du har også ret til:

  • Fair spil: Alle spil er testet og godkendt, så der er ingen juks. Random Number Generators (RNG) kontrolleres regelmæssigt af uafhængige revisorer.
  • Sikre betalinger: Dine penge behandles på en sikker og krypteret måde. Casinoet må ikke blande dine penge med dets egne driftsmidler.
  • Kundeservice: Licenserede casinoer skal have professionel support på dansk, både på telefon og email.
  • Selvudelukkelse: Du kan få hjælp til at stoppe med at spille hvis du har problemer. Casinoet er forpligtet til at respektere dine ønsker.
  • Klageadgang: Hvis du uenig med casinoet, kan du indgive en klage til Spilleklagenævnet, som er en uafhængig instans.

Hvordan Identificerer Du Et Licenseret Casino?

Det er nemt at tjekke, om et casino er licenseret. Se på bunden af deres hjemmeside – licenserede casinoer viser altid deres licensnummer tydligt. Du kan også besøge Statens Lotteri- og Tipstjenestes officielle liste over godkendte operatører for at bekræfte, at casinoet er på listen.

Et licenseret casino vil altid have:

  • Synligt licensnummer og myndigheds-logo på hjemmesiden
  • Juridiske dokumenter let tilgængelige, herunder vilkår og betingelser
  • Information om persondatapolitik og ansvarlig spil
  • Kontaktinformation til Statens Lotteri- og Tipstjeneste og Spilleklagenævnet
  • Klar information om licensen, hvornår den blev udstedt, og hvornår den udløber

Hvis licensnummeret ikke findes på den officielle liste, eller hvis casinoet ikke viser sin licens, bør du blive skeptisk og søge efter et andet casino. Der er mange licenserede muligheder at vælge mellem.

Licensen Som Beskyttelse Mod Svindel

Udenlandske og uautoriserede casinoer kan være farlige. De har ingen dansk tilsyn, hvilket betyder, at hvis de stjæler dine penge eller vægrer sig ved at udbetale gevinster, har du næppe retsmidler. En dansk licens er dit skjold mod sådan svindel.

Historien viser, at uautoriserede casinoer har stjålet millioner af danske kroner fra spillere. Uden dansk regulering kunne offerne ikke få deres penge tilbage. Med en dansk licens har du juridisk beskyttelse, og casinoet kan kræves at håndtere klager gennem officielle kanaler.

Licenserede casinoer er forpligtet til at:

  • Gemme og beskytte dine data efter høje sikkerhedsstandarder, ofte med end-to-end kryptering
  • Udholde uafhængig revision af deres finanser mindst én gang årligt
  • Betale gevinster indenfor fastsatte frister, typisk 5-10 arbejdsdage
  • Handle åbent over for tilsynsmyndighederne og rapportere potentielle problemer
  • Havde separat kundekonti, så casinoets midler aldrig blandes med spillernes indskud

Udenlandske Casinoer Kontra Licenserede Operatører

Nogle spillere tror, at udenlandske casinoer er ligeså sikre, fordi de har en licens i deres hjemland, f.eks. Malta eller Gibraltar. Men en maltesisk licens giver dig ingen retsbeskyttelse i Danmark. Hvis noget går galt, kan du ikke klage til danske myndigheder, og danske domstole kan have svært ved at håndhæve en dom mod en udenlandsk operatør. Forskellen mellem dansk og udenlandsk licens bliver gennemgået mere detaljeret hos Csino hden ROFUS, hvis du vil forstå konsekvenserne bedre.

Derudover er der legal usikkerhed omkring at spille på uautoriserede casinoer. Teknisk set bryder det danske spilleloven, og nogle udenlandske casinoer nægter at udbetale gevinster, hvis de opdager, at spilleren er fra Danmark.

AspektLicenseret dansk casinoUdenlandsk casino
Dansk tilsyn Ja, løbende Nej
Spillerfond Dækker tab op til en vis grænse Ingen
Dansk kundeservice Påkrævet Ikke sikkert
Juridisk beskyttelse Høj – danske domstole kan håndhæve Lav – svært at sagsøge
Skat på gevinster Klart og lovlig Usikkert og potentielt ulovlig
Ansvarlig spil værktøjer Påkrævet og overvåget Frivilligt, ikke overvåget

Dit Ansvar Som Spiller Med En Licenseret Platform

En licens beskytter dig, men det betyder ikke, at du kan spille uden grænser. Som spiller har du også ansvar for at spille ansvarligt. Licenserede casinoer tilbyder værktøjer som indskudsbegrænsninger, selvudelukkelse og pauseperioder for at hjælpe dig med at kontrollere dit spil.

Brug disse værktøjer aktivt. Sæt dig et budgetlimit, som du kan tillade dig at miste – og behandl det som udgifter til underholdning, ikke som en investering. Spil aldrig når du er emotionel, desperat eller påvirket af alkohol, og søg hjælp hvis du mærker tegn på spilleafhængighed, såsom tab af kontrol, løgne omkring spil eller at spille for at genvinde tab.

Danske myndigheder og organisationer som Spillersamfundet kan guide dig. Du kan også tilmelde dig ROFUS (Registeret Over Førudbetalt Underspillende Spillere), som sperrer dig fra alle danske casinoer, hvis du vurderer, at det er nødvendigt for din egen beskyttelse.

]]>
https://ubiprel.com/2026/10/09/dansk-casinolicens-forklaret-din-komplette-guide/feed/ 0
History of Apple https://ubiprel.com/2026/10/06/history-of-apple/ https://ubiprel.com/2026/10/06/history-of-apple/#respond Tue, 06 Oct 2026 19:12:11 +0000 https://ubiprel.com/?p=4148 The Founding Years

Apple was founded on April 1, 1976, by Steve Jobs, Steve Wozniak, and Ronald Wayne in Cupertino, California. Their goal was to create user-friendly personal computers at a time when computing was still seen as a tool for specialists. Wozniak designed the Apple I, the company’s first product, which was sold as a motherboard rather than a complete computer. Despite its simplicity, it attracted the attention of enthusiasts and marked the beginning of a new era in home computing.

In 1977,Apple introduced the Apple II, a groundbreaking success. It was one of the first mass-produced microcomputers, equipped with color graphics and a user-friendly design. The Apple II became popular in schools and small businesses, giving the company financial stability and brand recognition.

The Macintosh Revolution (1984)

Apple continued to innovate through the early 1980s, culminating in the release of the Macintosh in 1984. Its launch was famously advertised during the Super Bowl with a commercial directed by Ridley Scott, positioning the Macintosh as a symbol of freedom and creativity against conformity.

The Macintosh introduced the graphical user interface (GUI) and mouse navigation to a mass audience. While sales were initially modest compared to IBM PCs, the Mac became iconic for its design and usability, especially among creative professionals.

Struggles and Leadership Changes (1985–1996)

After internal conflicts, Steve Jobs left Apple in 1985. The company struggled throughout the late 1980s and early 1990s, facing stiff competition from Microsoft’s Windows-based PCs. Although products like the Power Macintosh and the Newton PDA showed ambition, they failed to restore Apple’s leadership. By the mid-1990s, Apple was losing market share and profitability, leading analysts to predict its possible collapse.

The Return of Steve Jobs and the iMac Era (1997–2000)

In 1997, Apple acquired NeXT, the company founded by Jobs after his departure. This move brought Jobs back to Apple, where he soon became CEO. His return marked a turning point. Jobs streamlined Apple’s product line, eliminated underperforming projects, and focused on bold, innovative design.

In 1998, Apple launched the iMac, a colorful, all-in-one computer designed by Jony Ive. It was a commercial success that revitalized Apple’s image as a design-driven and consumer-friendly brand.

The iPod and iTunes Revolution (2001–2006)

Apple’s expansion beyond computers began with the release of the iPod in 2001. This portable music player, paired with the iTunes software and later the iTunes Store, transformed the way people consumed music. Apple quickly dominated the digital music industry, setting the stage for its evolution into a consumer electronics giant.

The iPhone and Global Dominance (2007–2011)

Perhaps the most significant moment in Apple’s history came in 2007, when Jobs introduced the iPhone. Combining a phone, iPod, and internet communicator, the iPhone redefined mobile technology. Its touchscreen interface and app ecosystem changed the industry forever.

The launch of the App Store in 2008 further fueled Apple’s growth, creating an entire economy of mobile applications. The iPhone became Apple’s flagship product, generating unprecedented profits and making Apple one of the most valuable companies in the world.

Post-Jobs Era and Continued Innovation (2011–Present)

Steve Jobs passed away in 2011, leaving Tim Cook as CEO. Under Cook’s leadership, Apple has continued to thrive. The company introduced new product lines such as the Apple Watch and AirPods, while continuing to refine its Mac, iPhone, and iPad ranges. Services like Apple Music, Apple TV+, and iCloud have diversified revenue streams beyond hardware.

Apple has also become a leader in sustainability and privacy advocacy, committing to carbon neutrality and emphasizing user data protection. In 2018, Apple became the first U.S. company to reach a market capitalization of $1 trillion, later surpassing $2 trillion.

]]>
https://ubiprel.com/2026/10/06/history-of-apple/feed/ 0
a16z generative ai https://ubiprel.com/2026/09/28/a16z-generative-ai/ https://ubiprel.com/2026/09/28/a16z-generative-ai/#respond Mon, 28 Sep 2026 18:25:04 +0000 https://ubiprel.com/?p=2710 Hippocratic AI raises $141M to staff hospitals with clinical AI agents

Story Partners with Stability AI to Empower Open-Source Innovation for Creators and Developers

a16z generative ai

Meanwhile, Kristina Dulaney, RN, PMH-C, the founder of Cherished Mom, an organization dedicated to solving maternal mental health challenges, helped to create an AI agent that’s focused on helping new mothers navigate such problems with postpartum mental health assessments and depression screening. The startup was initially focused on creating generative AI chatbots to support clinicians and other healthcare professionals, but has since switched its focus to patients themselves. Its most advanced models take advantage of the latest developments in AI agents, which are a form of AI that can perform more complex tasks while working unsupervised. Despite rapid advancements in AI, creators in open-source ecosystems face significant challenges in monetizing derivative works and securing proper attribution.

Story, the global intellectual property blockchain, has announced its integration with Stability AI’s state-of-the-art models to revolutionize open-source AI development. This collaboration enables creators, developers, and artists to capture the value they contribute to the AI ecosystem by leveraging blockchain technology to ensure proper attribution, tracking, and monetization of creative works generated through AI. Andreessen Horowitz, or a16z, is investing in AI and biotech to lead the way in innovation.

Your vote of support is important to us and it helps us keep the content FREE.

In a statement, Raspberry AI said the funding would be used to accelerate its product development and add top engineering, sales and marketing talent to its team. But with U.S. companies raising and/or spending record sums on new AI infrastructure that many experts have noted depreciate rapidly (due to hardware/chip and software advancements), the question remains which vision of the future will win out in the end to become the dominant AI provider for the world. Or maybe it will always be a multiplicity of models each with a smaller market share? That’s followed by more extensive evaluations and safety assessments by an extensive network of more than 6,000 nurses and 300 doctors, who will confirm that it passes all required safety tests.

a16z generative ai

Once the AI agent is up and running, the clinicians who created it will be able to claim a share of the revenue it generates from the startup’s customers. Currently the technology is being used by Under Armour, MCM Worldwide, Gruppo Teddy and Li & Fung to create and iterate apparel, footwear and accessories styles. The company’s existing investors Greycroft, Correlation Ventures and MVP Ventures also joined in the round, along with notable angel investors, including Gokul Rajaram and Ken Pilot. Clearly, even as he espouses a commitment to open source AI, Zuck is not convinced that DeepSeek’s approach of optimizing for efficiency while leveraging far fewer GPUs than major labs is the right one for Meta, or for the future of AI.

Raspberry AI secures 24 million US dollars in funding round

Story is the world’s intellectual property blockchain, transforming IP into networks that transcend mediums and platforms, unleashing global creativity and liquidity. By integrating Stability AI’s advanced models, Story is taking a significant step toward building a fair and sustainable internet for creators and developers in the age of generative AI. Hippocratic AI said it’s necessary to have clinicians onboard because they have, over the course of their careers, developed deep expertise in their respective fields, as well as the practical insights to help cure specific medical conditions and the clinical workflows involved.

Investing in Raspberry AI – Andreessen Horowitz

Investing in Raspberry AI.

Posted: Mon, 13 Jan 2025 08:00:00 GMT [source]

Story aims to bridge this gap by combining Stability AI’s cutting-edge technology with blockchain’s ability to secure digital property rights. For example, creators could register unique styles or voices as intellectual property on Story with transparent usage terms. This would enable others to train and fine-tune AI models using this IP, ensuring that all contributors in the creative chain benefit when outputs are monetized.

One click below supports our mission to provide free, deep, and relevant content.

Holger Mueller of Constellation Research Inc. said Hippocratic AI is bringing two of the leading technology trends to the healthcare industry, namely no-code or low-code software development and AI agents. The launch is a bold step forward in healthcare innovation, giving clinicians the opportunity to participate in the design of AI agents that can address various aspects of patient care. It says clinicians can create an AI agent prototype that specializes in their area of focus in less than 30 minutes, and around three to four hours to develop one that can be tested. Shah said the last nine months since the company’s previous $50 million funding round have seen it make tremendous progress. During that time, it has received its first U.S. patents, fully evaluated and verified the safety of its first AI healthcare agents, and signed contracts with 23 health systems, payers and pharma clients.

a16z generative ai

For instance, one of its AI agents is specialized in chronic care management, medication checks and post-discharge follow-up regarding specific conditions such as kidney failure and congestive heart failure. The healthcare-focused artificial intelligence startup Hippocratic AI Inc. said today it has closed on a $141 million Series B funding round that brings its total amount raised to more than $278 million. “This round of financing will accelerate the development and deployment of the Hippocratic generative AI-driven super staffing and continue our quest to make healthcare abundance a reality,” he promised. Raspberry AI, the generative AI platform for fashion creatives, has secured 24 million US dollars in Series A funding led by Andreessen Horowitz (a16z). Today, we’re going in-depth on blockchain innovation with Robert Roose, an entrepreneur who’s on a mission to fix today’s broken monetary system. Hippocratic AI’s early customers include Arkos Health Inc., Belong Health Inc., Cincinnati Children’s, Fraser Health Authority (Canada), GuideHealth, Honor Health, Deca Dental Management, LLC, OhioHealth, WellSpan Health and other well-known healthcare systems and hospitals.

By incorporating this wisdom into its AI agents, it’s making them safer and improving patient outcomes, it said. Crucially, any agent created using its platform will undergo extensive safety training by both the creator and Hippocratic AI’s own staff. Every clinician will have access to a dashboard to track their AI agent’s performance and use and receive feedback for further development.

a16z generative ai

All these indicate the commitment a16z has in shaping the future of technology and healthcare through strategic investments. Both platforms use Stability AI’s models to bring creators’ visions to life and Story’s blockchain technology to enable provenance and attribution throughout the creative process. These real-world applications highlight how creators can safeguard their intellectual property while thriving in a shared creative economy. Raspberry AI offers brands and manufacturing creative teams technology solutions, which can help accelerate each stage of the fashion product development cycle to increase speed to market and profitability while reducing costs. Andreessen Horowitz, or a16z, is one of the leading AI investors and targets only innovative startups. They participated in the round that funded Anysphere on January 14, 2025, with a total sum of $105 million for an AI coding tool known as Cursor, whose valuation has reached $2.5 billion.

Onyxcoin (XCN) Market Trends and Ozak AI’s Contribution to AI-Driven Blockchain

In order to ensure its AI agents can do their jobs safely, Hippocratic AI says it only works with licensed clinicians to develop them, taking steps to verify their qualifications and experience first. Once clinicians have built their agents, they’ll be submitted to the startup for an initial round of testing. Through the Hippocratic AI Agent App Store, healthcare organizations and hospitals will be able to access a range of specialized AI agents for different aspects of medical care.

a16z generative ai

The startup was co-founded by Chief Executive Officer and serial entrepreneur Munjal Shah and a group of physicians, hospital administrators, healthcare professionals and AI researchers from organizations including El Camino Health LLC, Johns Hopkins University, Stanford University, Microsoft Corp., Google and Nvidia Corp. PIP Labs, an initial core contributor to the Story Network, is backed by investors including a16z crypto, Endeavor, and Polychain. Co-founded by a serial entrepreneur with a $440M exit and DeepMind’s youngest PM, PIP Labs boasts a veteran founding executive team with expertise in consumer tech, generative AI, and Web3 infrastructure. The startup has also created other AI agents for tasks like pre- and post-surgery wound care, extreme heat wave preparation, home health checks, diabetes screening and education, and many more besides. The startup said its AI Agent creators include Dr. Vanessa Dorismond MD, MA, MAS, a distinguished obstetrician and gynecologist at El Camino Women’s Medical Group and Teal Health, who helped to create an AI agent that’s focused on cervical cancer check-ins and enhancing patient education. According to the startup, the objective of these AI agents is to try and solve the massive shortage of trained nurses, social workers and nutritionists in the healthcare industry, both in the U.S. and globally.

TechBullion

The same day, a16z also led a Series A investment in Slingshot AI, which has raised a total of $40 million to create a foundation model for psychology. Those investments highlight the commitment of the group to using AI to address important issues and are also focusing on how AI can improve different industries, including healthcare and consumer services. In general, a16z is committed to supporting AI innovations that could have a profound impact on society. We are thrilled to see our models used in Story’s blockchain technology to ensure proper attribution and reward contributors,” said Scott Trowbridge, Vice President of Stability AI. Others include Kacie Spencer, DNP, RN, the chief nursing officer at Adtalem Global Education Inc., who has more than 20 years of experience in emergency nursing and clinical education. Her AI agent is focused on patient education for the proper installation of child car seats.

It participated in an Anysphere round that had the company raising $105 million on January 14, 2025, when it pushed the valuation up to $2.5 billion. Beyond this, it has also released a $500 million Biotech Ecosystem Venture Fund with Eli Lilly to place a focus on health technologies, but with the aspect of innovative applications. On the same day, they led a Series A investment in Slingshot AI, a company that’s developing advanced generative AI technology for mental health. Additionally, a16z invested in Raspberry AI to bring generative AI to the front of fashion design and production. In December 2024, they envisioned a future in which AI was used aggressively in nearly all sectors.

  • The startup said its AI Agent creators include Dr. Vanessa Dorismond MD, MA, MAS, a distinguished obstetrician and gynecologist at El Camino Women’s Medical Group and Teal Health, who helped to create an AI agent that’s focused on cervical cancer check-ins and enhancing patient education.
  • Andreessen Horowitz, or a16z, is one of the leading AI investors and targets only innovative startups.
  • Hippocratic AI said it’s necessary to have clinicians onboard because they have, over the course of their careers, developed deep expertise in their respective fields, as well as the practical insights to help cure specific medical conditions and the clinical workflows involved.
  • It says clinicians can create an AI agent prototype that specializes in their area of focus in less than 30 minutes, and around three to four hours to develop one that can be tested.
]]>
https://ubiprel.com/2026/09/28/a16z-generative-ai/feed/ 0