{"translation-revision-date":"2025-09-18 08:02+0000","generator":"WP-CLI\/2.12.0","source":"gutenberg\/edit-pages-panel\/src\/components\/PagesList.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ar","plural-forms":"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100 >= 3 && n%100<=10 ? 3 : n%100 >= 11 && n%100<=99 ? 4 : 5;"},"Actions":["\u0627\u0644\u0625\u062c\u0631\u0627\u0621\u0627\u062a"],"Current page":["\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629"],"Edit":["\u062a\u062d\u0631\u064a\u0631"],"Edit Page":["\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0635\u0641\u062d\u0629"],"Loading...":["\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u0645\u064a\u0644..."],"No pages found.":["\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u064a \u0635\u0641\u062d\u0627\u062a."],"Title":["\u0627\u0644\u0639\u0646\u0648\u0627\u0646"]}}} /** * Copyright (C) 2014-2025 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Attribution: This code is part of the All-in-One WP Migration plugin, developed by * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set content bytes offset if ( isset( $params['content_bytes_offset'] ) ) { $content_bytes_offset = (int) $params['content_bytes_offset']; } else { $content_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress /* translators: 1: Number of files, 2: Progress. */ Ai1wm_Status::info( sprintf( __( 'Archiving %1$d content files...
%2$d%% complete', 'all-in-one-wp-migration' ), $total_content_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $content_list, $content_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = ai1wm_getcsv( $content_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get content bytes offset $content_bytes_offset = ftell( $content_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress /* translators: 1: Number of files, 2: Progress. */ Ai1wm_Status::info( sprintf( __( 'Archiving %1$d content files...
%2$d%% complete', 'all-in-one-wp-migration' ), $total_content_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the content list? if ( feof( $content_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset content bytes offset unset( $params['content_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total content files size unset( $params['total_content_files_size'] ); // Unset total content files count unset( $params['total_content_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set content bytes offset $params['content_bytes_offset'] = $content_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set completed flag $params['completed'] = $completed; } // Close the content list file ai1wm_close( $content_list ); return $params; } } /*! elementor-pro - v3.7.2 - 15-06-2022 */ .e-lottie__container{display:inline-block;max-width:var(--lottie-container-max-width);width:var(--lottie-container-width);opacity:var(--lottie-container-opacity)}.e-lottie__container:hover{opacity:var(--lottie-container-opacity-hover);-webkit-transition-duration:var(--lottie-container-transition-duration-hover);-o-transition-duration:var(--lottie-container-transition-duration-hover);transition-duration:var(--lottie-container-transition-duration-hover)}.e-lottie__container svg,.e-lottie__container svg *{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.e-lottie__caption{color:var(--caption-color);margin-top:var(--caption-margin-top);text-align:var(--caption-text-align)}/** * Gutena Forms admin submenu separators. */ #toplevel_page_gutena-forms .wp-submenu li.wp-first-item::after, #toplevel_page_gutena-forms .wp-submenu li:has(> a[href*="settings/entries"])::after { content: ""; border-bottom: 1px solid rgba(255, 255, 255, 0.2); display: block; float: left; margin: 8px 0; width: 100%; } import { TextControl, ToggleControl, SelectControl, PanelBody } from '@wordpress/components'; import { useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; const NotificationSettings = ( { settings, methods } ) => { const { emailFromName, emailNotifyAdmin, adminEmails, adminEmailSubject, replyToEmail, replyToName, replyToLastName, } = settings; const { setAttributes, getEmailFields, getTextFields, } = methods; const [ emailFields, setEmailFields ] = useState( [] ); const [ textFields, setTextFields ] = useState( [] ); useEffect( () => { setEmailFields( getEmailFields() ); setTextFields( getTextFields() ); }, [ getEmailFields, getTextFields ] ); useEffect( () => { if ( ! String( replyToEmail ).trim().length && emailFields[ 1 ] ) { setAttributes( { replyToEmail: emailFields[ 1 ].value } ); } if ( ! String( replyToName ).trim().length && textFields[ 1 ] ) { setAttributes( { replyToName: textFields[ 1 ].value } ); } }, [ emailFields, textFields ] ); return ( <> setAttributes( { emailFromName } ) } /> setAttributes( { emailNotifyAdmin } ) } /> { emailNotifyAdmin ? ( <> setAttributes( { adminEmails } ) } /> setAttributes( { adminEmailSubject } ) } /> setAttributes( { replyToEmail } ) } help={ __( 'Select email field for reply to address', 'gutena-forms' ) } __nextHasNoMarginBottom /> setAttributes( { replyToName } ) } help={ __( 'Select first or full name field for reply to address', 'gutena-forms' ) } __nextHasNoMarginBottom /> setAttributes( { replyToLastName } ) } help={ __( 'Select last name field for reply to address', 'gutena-forms' ) } __nextHasNoMarginBottom /> ) : ( '' ) } ); }; export default NotificationSettings;
postboxes.add_postbox_toggles(pagenow),jQuery(".postbox .hndle").off("click.postboxes",postboxes.handle_click);{"translation-revision-date":"2025-09-18 08:03+0000","generator":"WP-CLI\/2.12.0","source":"gutenberg\/edit-pages-panel\/src\/components\/StoreSetupButton.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es_MX","plural-forms":"nplurals=2; plural=n != 1;"},"Finish Setup":["Acabado"]}}} // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName use Automattic\Jetpack\Connection\Client; defined( 'VIDEOPRESS_MIN_WIDTH' ) || define( 'VIDEOPRESS_MIN_WIDTH', 60 ); defined( 'VIDEOPRESS_DEFAULT_WIDTH' ) || define( 'VIDEOPRESS_DEFAULT_WIDTH', 640 ); // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files. /** * VideoPress Privacy constants. */ abstract class VIDEOPRESS_PRIVACY { const IS_PUBLIC = 0; const IS_PRIVATE = 1; const SITE_DEFAULT = 2; } /** * Validate user-supplied guid values against expected inputs * * @since 1.1 * @param string $guid video identifier. * @return bool true if passes validation test */ function videopress_is_valid_guid( $guid ) { if ( ! empty( $guid ) && is_string( $guid ) && strlen( $guid ) === 8 && ctype_alnum( $guid ) ) { return true; } return false; } /** * Validates user-supplied video preload setting. * * @param mixed $value the preload value to validate. * @return bool */ function videopress_is_valid_preload( $value ) { return in_array( strtolower( $value ), array( 'auto', 'metadata', 'none' ), true ); } /** * Get details about a specific video by GUID: * * @param string $guid Video GUID. * @return object */ function videopress_get_video_details( $guid ) { if ( ! videopress_is_valid_guid( $guid ) ) { return new WP_Error( 'bad-guid-format', __( 'Invalid Video GUID!', 'jetpack-videopress-pkg' ) ); } $version = '1.1'; $endpoint = sprintf( '/videos/%1$s', $guid ); $query_url = sprintf( 'https://public-api.wordpress.com/rest/v%1$s%2$s', $version, $endpoint ); // Look for data in our transient. If nothing, let's make a new query. $data_from_cache = get_transient( 'jetpack_videopress_' . $guid ); if ( false === $data_from_cache ) { $response = wp_remote_get( esc_url_raw( $query_url ) ); $data = json_decode( wp_remote_retrieve_body( $response ) ); // Cache the response for an hour. set_transient( 'jetpack_videopress_' . $guid, $data, HOUR_IN_SECONDS ); } else { $data = $data_from_cache; } /** * Allow functions to modify fetched video details. * * This filter allows third-party code to modify the return data * about a given video. It may involve swapping some data out or * adding new parameters. * * @since 4.0.0 * * @param object $data The data returned by the WPCOM API. See: https://developer.wordpress.com/docs/api/1.1/get/videos/%24guid/ * @param string $guid The GUID of the VideoPress video in question. */ return apply_filters( 'videopress_get_video_details', $data, $guid ); } /** * Similar to `media_sideload_image` -- but returns an ID. * * @param string $url Image URL. * @param int $attachment_id Post ID. * * @return int|mixed|object|WP_Error */ function videopress_download_poster_image( $url, $attachment_id ) { // Set variables for storage, fix file filename for query strings. preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches ); if ( ! $matches ) { return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL', 'jetpack-videopress-pkg' ) ); } $file_array = array(); $file_array['name'] = basename( $matches[0] ); $file_array['tmp_name'] = download_url( $url ); // If error storing temporarily, return the error. if ( is_wp_error( $file_array['tmp_name'] ) ) { return $file_array['tmp_name']; } // Do the validation and storage stuff. $thumbnail_id = media_handle_sideload( $file_array, $attachment_id, null ); // Flag it as poster image, so we can exclude it from display. update_post_meta( $thumbnail_id, 'videopress_poster_image', 1 ); return $thumbnail_id; } /** * Creates a local media library item of a remote VideoPress video. * * @param string $guid Video GUID. * @param int $parent_id Parent post ID. * * @return int|object */ function create_local_media_library_for_videopress_guid( $guid, $parent_id = 0 ) { $vp_data = videopress_get_video_details( $guid ); if ( ! $vp_data || is_wp_error( $vp_data ) ) { return $vp_data; } $args = array( 'post_date' => $vp_data->upload_date, 'post_title' => wp_kses( $vp_data->title, array() ), 'post_content' => wp_kses( $vp_data->description, array() ), 'post_mime_type' => 'video/videopress', 'guid' => sprintf( 'https://videopress.com/v/%s', $guid ), ); $attachment_id = wp_insert_attachment( $args, null, $parent_id ); if ( ! is_wp_error( $attachment_id ) ) { update_post_meta( $attachment_id, 'videopress_guid', $guid ); wp_update_attachment_metadata( $attachment_id, array( 'width' => $vp_data->width, 'height' => $vp_data->height, ) ); $thumbnail_id = videopress_download_poster_image( $vp_data->poster, $attachment_id ); update_post_meta( $attachment_id, '_thumbnail_id', $thumbnail_id ); } return $attachment_id; } /** * Helper that will look for VideoPress media items that are more than 30 minutes old, * that have not had anything attached to them by a wpcom upload and deletes the ghost * attachment. * * These happen primarily because of failed upload attempts. * * @return int The number of items that were cleaned up. */ function videopress_cleanup_media_library() { // phpcs:disable Squiz.PHP.NonExecutableCode.Unreachable -- Function is disabled currently. // Disable this job for now. return 0; $query_args = array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'video/videopress', 'meta_query' => array( array( 'key' => 'videopress_status', 'value' => 'new', ), ), ); $query = new WP_Query( $query_args ); $cleaned = 0; $now = current_time( 'timestamp' ); // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp.Requested -- Probably should refactor, but this function is disabled. if ( $query->have_posts() ) { foreach ( $query->posts as $post ) { $post_time = strtotime( $post->post_date_gmt ); // If the post is older than 30 minutes, it is safe to delete it. if ( $now - $post_time > MINUTE_IN_SECONDS * 30 ) { // Force delete the attachment, because we don't want it appearing in the trash. wp_delete_attachment( $post->ID, true ); ++$cleaned; } } } return $cleaned; // phpcs:enable Squiz.PHP.NonExecutableCode.Unreachable } /** * Return an absolute URI for a given filename and guid on the CDN. * No check is performed to ensure the guid exists or the file is present. Simple centralized string builder. * * @param string $guid VideoPress identifier. * @param string $filename name of file associated with the guid (video file name or thumbnail file name). * * @return string Absolute URL of VideoPress file for the given guid. */ function videopress_cdn_file_url( $guid, $filename ) { return "https://videos.files.wordpress.com/{$guid}/{$filename}"; } /** * Get an array of the transcoding status for the given video post. * * @since 4.4 * @param int $post_id Post ID. * @return array|bool Returns an array of statuses if this is a VideoPress post, otherwise it returns false. */ function videopress_get_transcoding_status( $post_id ) { $meta = wp_get_attachment_metadata( $post_id ); // If this has not been processed by videopress, we can skip the rest. if ( ! $meta || ! isset( $meta['file_statuses'] ) ) { return false; } $info = (object) $meta['file_statuses']; $status = array( 'std_mp4' => isset( $info->mp4 ) ? $info->mp4 : null, 'std_ogg' => isset( $info->ogg ) ? $info->ogg : null, 'dvd_mp4' => isset( $info->dvd ) ? $info->dvd : null, 'hd_mp4' => isset( $info->hd ) ? $info->hd : null, ); return $status; } /** * Get the direct url to the video. * * @since 4.4 * @param string $guid VideoPress GUID. * @return string */ function videopress_build_url( $guid ) { // No guid, no videopress url. if ( ! $guid ) { return ''; } return 'https://videopress.com/v/' . $guid; } /** * Create an empty videopress media item that will be filled out later by an xmlrpc * callback from the VideoPress servers. * * @since 4.4 * @param string $title The post_title. * @param string $guid The VideoPress guid. * @return int|WP_Error */ function videopress_create_new_media_item( $title, $guid = null ) { $post = array( 'post_type' => 'attachment', 'post_mime_type' => 'video/videopress', 'post_title' => $title, 'post_content' => '', 'guid' => videopress_build_url( $guid ), ); $media_id = wp_insert_post( $post ); add_post_meta( $media_id, 'videopress_status', 'initiated' ); add_post_meta( $media_id, 'videopress_guid', $guid ); return $media_id; } /** * Merge VideoPress file status metadata. * * @param array $current_status The current status of the video. * @param array $new_meta The new meta data to merge with the current status. * @return array */ function videopress_merge_file_status( $current_status, $new_meta ) { $new_statuses = array(); if ( isset( $new_meta['videopress']['files_status']['hd'] ) ) { $new_statuses['hd'] = $new_meta['videopress']['files_status']['hd']; } if ( isset( $new_meta['videopress']['files_status']['dvd'] ) ) { $new_statuses['dvd'] = $new_meta['videopress']['files_status']['dvd']; } if ( isset( $new_meta['videopress']['files_status']['std']['mp4'] ) ) { $new_statuses['mp4'] = $new_meta['videopress']['files_status']['std']['mp4']; } if ( isset( $new_meta['videopress']['files_status']['std']['ogg'] ) ) { $new_statuses['ogg'] = $new_meta['videopress']['files_status']['std']['ogg']; } foreach ( $new_statuses as $format => $status ) { if ( ! isset( $current_status[ $format ] ) ) { $current_status[ $format ] = $status; continue; } if ( $current_status[ $format ] !== 'DONE' ) { $current_status[ $format ] = $status; } } return $current_status; } /** * Check to see if a video has completed processing. * * @since 4.4 * @param int $post_id Post ID. * @return bool */ function videopress_is_finished_processing( $post_id ) { $post = get_post( $post_id ); if ( is_wp_error( $post ) ) { return false; } $meta = wp_get_attachment_metadata( $post->ID ); if ( ! isset( $meta['videopress']['finished'] ) ) { return false; } return $meta['videopress']['finished']; } /** * Update the meta information status for the given video post. * * @since 4.4 * @param int $post_id Post ID. * @return bool */ function videopress_update_meta_data( $post_id ) { $meta = wp_get_attachment_metadata( $post_id ); // If this has not been processed by VideoPress, we can skip the rest. if ( ! $meta || ! isset( $meta['videopress'] ) ) { return false; } $info = (object) $meta['videopress']; $result = Client::wpcom_json_api_request_as_blog( 'videos/' . $info->guid ); if ( is_wp_error( $result ) ) { return false; } $response = json_decode( $result['body'], true ); // Update the attachment metadata. $meta['videopress'] = $response; wp_update_attachment_metadata( $post_id, $meta ); return true; } /** * Check to see if this is a VideoPress post that hasn't had a guid set yet. * * @param int $post_id Post ID. * @return bool */ function videopress_is_attachment_without_guid( $post_id ) { $post = get_post( $post_id ); if ( is_wp_error( $post ) ) { return false; } if ( $post->post_mime_type !== 'video/videopress' ) { return false; } $videopress_guid = get_post_meta( $post_id, 'videopress_guid', true ); if ( $videopress_guid ) { return false; } return true; } /** * Check to see if this is a VideoPress attachment. * * @param int $post_id Post ID. * @return bool */ function is_videopress_attachment( $post_id ) { $post = get_post( $post_id ); if ( ! $post instanceof WP_Post ) { return false; } if ( $post->post_mime_type !== 'video/videopress' ) { return false; } return true; } /** * Get the video update path * * @since 4.4 * @param string $guid VideoPress GUID. * @return string */ function videopress_make_video_get_path( $guid ) { return sprintf( '%s/rest/v%s/videos/%s', JETPACK__WPCOM_JSON_API_BASE, Client::WPCOM_JSON_API_VERSION, $guid ); } /** * Get the upload api path. * * @since 4.4 * @param int $blog_id The id of the blog we're uploading to. * @return string */ function videopress_make_media_upload_path( $blog_id ) { return sprintf( 'https://public-api.wordpress.com/rest/v1.1/sites/%s/media/new?locale=%s', $blog_id, get_locale() ); } /** * Get the resumable upload api path. * * @since 4.4 * @param int $blog_id The id of the blog we're uploading to. * @return string */ function videopress_make_resumable_upload_path( $blog_id ) { return sprintf( 'https://public-api.wordpress.com/rest/v1.1/video-uploads/%s/', $blog_id ); } /** * This is a mock of the internal VideoPress method, which is meant to duplicate the functionality * of the WPCOM API, so that the Jetpack REST API returns the same data with no modifications. * * @param int $blog_id Blog ID. * @param int $post_id Post ID. * @return stdClass */ function video_get_info_by_blogpostid( $blog_id, $post_id ) { $post = get_post( $post_id ); $video_info = new stdClass(); $video_info->post_id = 0; $video_info->description = ''; $video_info->title = ''; $video_info->caption = ''; $video_info->blog_id = $blog_id; $video_info->guid = null; $video_info->finish_date_gmt = '0000-00-00 00:00:00'; $video_info->rating = null; $video_info->privacy_setting = VIDEOPRESS_PRIVACY::SITE_DEFAULT; if ( ! $post ) { return $video_info; } $video_info->post_id = $post_id; $video_info->description = $post->post_content; $video_info->title = $post->post_title; $video_info->caption = $post->post_excerpt; if ( 'video/videopress' !== $post->post_mime_type ) { return $video_info; } // Since this is a VideoPress post, lt's fill out the rest of the object. $video_info->guid = get_post_meta( $post_id, 'videopress_guid', true ); $meta = wp_get_attachment_metadata( $post_id ); if ( $meta && isset( $meta['videopress'] ) ) { $videopress_meta = $meta['videopress']; $video_info->rating = isset( $videopress_meta['rating'] ) ? $videopress_meta['rating'] : null; $video_info->allow_download = isset( $videopress_meta['allow_download'] ) ? $videopress_meta['allow_download'] : 0; $video_info->display_embed = isset( $videopress_meta['display_embed'] ) ? $videopress_meta['display_embed'] : 0; $video_info->privacy_setting = ! isset( $videopress_meta['privacy_setting'] ) ? VIDEOPRESS_PRIVACY::SITE_DEFAULT : $videopress_meta['privacy_setting']; } /** Make sure we are keeping some meta keys updated for filtering purposes */ if ( get_post_meta( $post_id, 'videopress_rating', true ) !== $video_info->rating ) { update_post_meta( $post_id, 'videopress_rating', $video_info->rating ); } if ( get_post_meta( $post_id, 'videopress_privacy_setting', true ) !== $video_info->privacy_setting ) { update_post_meta( $post_id, 'videopress_privacy_setting', $video_info->privacy_setting ); } if ( videopress_is_finished_processing( $post_id ) ) { $video_info->finish_date_gmt = gmdate( 'Y-m-d H:i:s' ); } return $video_info; } /** * Check that a VideoPress video format has finished processing. * * This uses the info object, because that is what the WPCOM endpoint * uses, however we don't have a complete info object in the same way * WPCOM does, so we pull the meta information out of the post * options instead. * * Note: This mimics the WPCOM function of the same name and helps the media * API endpoint add all needed VideoPress data. * * @param stdClass $info Info object. * @param string $format Video format. * @return bool */ function video_format_done( $info, $format ) { // Avoids notice when a non-videopress item is found. if ( ! is_object( $info ) ) { return false; } $post_id = $info->post_id; if ( get_post_mime_type( $post_id ) !== 'video/videopress' ) { return false; } $post = get_post( $post_id ); if ( is_wp_error( $post ) ) { return false; } $meta = wp_get_attachment_metadata( $post->ID ); $video_format = str_replace( array( 'fmt_', 'fmt1_' ), '', $format ); if ( 'ogg' === $video_format ) { return isset( $meta['videopress']['files']['std']['ogg'] ); } else { return isset( $meta['videopress']['files'][ $video_format ]['mp4'] ); } } /** * Get the image URL for the given VideoPress GUID * * We look up by GUID, because that is what WPCOM does and this needs to be * parameter compatible with that. * * Note: This mimics the WPCOM function of the same name and helps the media * API endpoint add all needed VideoPress data. * * @param string $guid VideoPress GUID. * @param string $format Video format. * @return string */ function video_image_url_by_guid( $guid, $format ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable $post = videopress_get_post_by_guid( $guid ); if ( is_wp_error( $post ) ) { return null; } $meta = wp_get_attachment_metadata( $post->ID ); $poster = apply_filters( 'jetpack_photon_url', $meta['videopress']['poster'] ); return $poster; } /** * Using a GUID, find a post. * * @param string $guid The post guid. * @return WP_Post|false The post for that guid, or false if none is found. */ function videopress_get_post_by_guid( $guid ) { $cache_key = 'get_post_by_guid_' . $guid; $cache_group = 'videopress'; $cached_post = wp_cache_get( $cache_key, $cache_group ); if ( is_object( $cached_post ) && 'WP_Post' === get_class( $cached_post ) ) { return $cached_post; } $post_id = videopress_get_post_id_by_guid( $guid ); if ( is_int( $post_id ) ) { $post = get_post( $post_id ); wp_cache_set( $cache_key, $post, $cache_group, HOUR_IN_SECONDS ); return $post; } return false; } /** * Using a GUID, find the associated post ID. * * @since 8.4.0 * @param string $guid The guid to look for the post ID of. * @return int|false The post ID for that guid, or false if none is found. */ function videopress_get_post_id_by_guid( $guid ) { $cache_key = 'videopress_get_post_id_by_guid_' . $guid; $cached_id = get_transient( $cache_key ); if ( is_int( $cached_id ) ) { return $cached_id; } $args = array( 'post_type' => 'attachment', 'post_mime_type' => 'video/videopress', 'post_status' => 'inherit', 'no_found_rows' => true, 'fields' => 'ids', 'meta_query' => array( array( 'key' => 'videopress_guid', 'value' => $guid, 'compare' => '=', ), ), ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { $post_id = $query->next_post(); set_transient( $cache_key, $post_id, HOUR_IN_SECONDS ); return $post_id; } return false; } /** * From the given VideoPress post_id, return back the appropriate attachment URL. * * When the MP4 hasn't been processed yet or this is not a VideoPress video, this will return null. * * @param int $post_id Post ID of the attachment. * @return string|null */ function videopress_get_attachment_url( $post_id ) { // We only handle VideoPress attachments. if ( get_post_mime_type( $post_id ) !== 'video/videopress' ) { return null; } $meta = wp_get_attachment_metadata( $post_id ); // As of Jetpack 10.3 transcoded video files are reserved for the VideoPress player. // All other video file requests will receive the originally uploaded file, stored on the wpcom cdn. if ( ! isset( $meta['videopress']['original'] ) ) { // Use the original file as the url if it isn't transcoded yet. if ( isset( $meta['original'] ) ) { $return = $meta['original']; } else { // Otherwise, there isn't much we can do. return null; } } else { $return = $meta['videopress']['original']; } // If the URL is a string, return it. Otherwise, we shouldn't to avoid errors downstream, so null. return ( is_string( $return ) ) ? $return : null; } /** * Converts VideoPress flash embeds into oEmbed-able URLs. * * Older VideoPress embed depended on Flash, which no longer work, * so let us convert them to an URL that WordPress can oEmbed. * * Note that this file is always loaded via modules/module-extras.php and is not dependent on module status. * * @param string $content the content. * @return string filtered content */ function jetpack_videopress_flash_embed_filter( $content ) { // This receives data from the `the_content` filter, which unfortunately sometimes has bad content passed along as a param. if ( ! is_string( $content ) ) { return $content; } $regex = '%]*+>(?:\s*)?%i'; $content = preg_replace_callback( $regex, function ( $matches ) { $embed_code = $matches[0]; $url_matches = array(); // get video ID from flash URL. $url_matched = preg_match( '/src="http:\/\/v.wordpress.com\/([^"]+)"/', $embed_code, $url_matches ); if ( $url_matched ) { $video_id = $url_matches[1]; return "https://videopress.com/v/$video_id"; } }, $content ); return $content; } /** * Checks if the provided rating string is a valid VideoPress video rating value. * * @param mixed $rating The video rating to validate. * @return bool */ function videopress_is_valid_video_rating( $rating ) { return in_array( $rating, array( 'G', 'PG-13', 'R-17' ), true ); } add_filter( 'the_content', 'jetpack_videopress_flash_embed_filter', 7 ); // Needs to be priority 7 to allow Core to oEmbed. if ( ! function_exists( 'wp_startswith' ) ) : /** * Check whether a string starts with a specific substring. * * @param string $haystack String we are filtering. * @param string $needle The substring we are looking for. * @return bool */ function wp_startswith( $haystack, $needle ) { if ( ! $haystack || ! $needle || ! is_scalar( $haystack ) || ! is_scalar( $needle ) ) { return false; } $haystack = (string) $haystack; $needle = (string) $needle; return str_starts_with( $haystack, $needle ); } endif; /* flatpickr v4.1.4,, @license MIT */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.flatpickr=t()}(this,function(){"use strict";function e(e,t,n){return!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}function t(e,t,n){void 0===n&&(n=!1);var a;return function(){var i=this,o=arguments;null!==a&&clearTimeout(a),a=window.setTimeout(function(){a=null,n||e.apply(i,o)},t),n&&!a&&e.apply(i,o)}}function n(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function a(e,t,n){var a=window.document.createElement(e);return t=t||"",n=n||"",a.className=t,void 0!==n&&(a.textContent=n),a}function i(e,t){return t(e)?e:e.parentNode?i(e.parentNode,t):void 0}function o(e){var t=a("div","numInputWrapper"),n=a("input","numInput "+e),i=a("span","arrowUp"),o=a("span","arrowDown");return n.type="text",n.pattern="\\d*",t.appendChild(n),t.appendChild(i),t.appendChild(o),t}function r(r,s){for(var u=Array.prototype.slice.call(r),p=[],w=0;wi&&(c=n===X.hourElement?c-i-m(!X.amPM):a,s&&S(void 0,1,X.hourElement)),X.amPM&&d&&(1===o?c+r===23:Math.abs(c-r)>o)&&(X.amPM.textContent=X.l10n.amPM[m(X.amPM.textContent===X.l10n.amPM[0])]),n.value=f(c)}}(e),0!==X.selectedDates.length&&(!X.minDateHasTime||"input"!==e.type||e.target.value.length>=2?(w(),Q()):setTimeout(function(){w(),Q()},1e3))}function w(){if(void 0!==X.hourElement&&void 0!==X.minuteElement){var t=(parseInt(X.hourElement.value.slice(-2),10)||0)%24,n=(parseInt(X.minuteElement.value,10)||0)%60,a=void 0!==X.secondElement?(parseInt(X.secondElement.value,10)||0)%60:0;void 0!==X.amPM&&(t=function(e,t){return e%12+12*m(t===X.l10n.amPM[1])}(t,X.amPM.textContent)),X.config.minDate&&X.minDateHasTime&&X.latestSelectedDateObj&&0===e(X.latestSelectedDateObj,X.config.minDate)&&(t=Math.max(t,X.config.minDate.getHours()))===X.config.minDate.getHours()&&(n=Math.max(n,X.config.minDate.getMinutes())),X.config.maxDate&&X.maxDateHasTime&&X.latestSelectedDateObj&&0===e(X.latestSelectedDateObj,X.config.maxDate)&&(t=Math.min(t,X.config.maxDate.getHours()))===X.config.maxDate.getHours()&&(n=Math.min(n,X.config.maxDate.getMinutes())),b(t,n,a)}}function M(e){var t=e||X.latestSelectedDateObj;t&&b(t.getHours(),t.getMinutes(),t.getSeconds())}function b(e,t,n){void 0!==X.latestSelectedDateObj&&X.latestSelectedDateObj.setHours(e%24,t,n||0,0),X.hourElement&&X.minuteElement&&!X.isMobile&&(X.hourElement.value=f(X.config.time_24hr?e:(12+e)%12+12*m(e%12==0)),X.minuteElement.value=f(t),void 0!==X.amPM&&(X.amPM.textContent=X.l10n.amPM[m(e>=12)]),void 0!==X.secondElement&&(X.secondElement.value=f(n)))}function y(e,t,n){return t instanceof Array?t.forEach(function(t){return y(e,t,n)}):e instanceof Array?e.forEach(function(e){return y(e,t,n)}):(e.addEventListener(t,n),void X._handlers.push({element:e,event:t,handler:n}))}function x(e){return function(t){1===t.which&&e(t)}}function E(){z("onChange")}function N(){X._animationLoop.forEach(function(e){return e()}),X._animationLoop=[]}function k(e){var t=void 0!==e?q(e):X.latestSelectedDateObj||(X.config.minDate&&X.config.minDate>X.now?X.config.minDate:X.config.maxDate&&X.config.maxDateX.minRangeDate&&iX.selectedDates[0]&&(X.maxRangeDate=i)),"range"===X.config.mode&&(function(t){return!("range"!==X.config.mode||X.selectedDates.length<2)&&e(t,X.selectedDates[0])>=0&&e(t,X.selectedDates[1])<=0}(i)&&!V(i)&&c.classList.add("inRange"),1===X.selectedDates.length&&void 0!==X.minRangeDate&&void 0!==X.maxRangeDate&&(iX.maxRangeDate)&&c.classList.add("notAllowed")),X.weekNumbers&&"prevMonthDay"!==t&&o%7==1&&X.weekNumbers.insertAdjacentHTML("beforeend",""+X.config.getWeek(i)+""),z("onDayCreate",c),c}function I(e,t){var n=e+t||0,a=void 0!==e?X.days.childNodes[n]:X.selectedDateElem||X.todayDateElem||X.days.childNodes[0],i=function(){(a=a||X.days.childNodes[n]).focus(),"range"===X.config.mode&&R(a)};if(void 0===a&&0!==t)return t>0?(X.changeMonth(1,!0,void 0,!0),n%=42):t<0&&(X.changeMonth(-1,!0,void 0,!0),n+=42),Y(i);i()}function Y(e){!0===X.config.animate?X._animationLoop.push(e):e()}function _(e){if(void 0!==X.daysContainer){var t=(new Date(X.currentYear,X.currentMonth,1).getDay()-X.l10n.firstDayOfWeek+7)%7,n="range"===X.config.mode,i=X.utils.getDaysInMonth((X.currentMonth-1+12)%12),o=X.utils.getDaysInMonth(),r=window.document.createDocumentFragment(),l=i+1-t,c=0;for(X.weekNumbers&&X.weekNumbers.firstChild&&(X.weekNumbers.textContent=""),n&&(X.minRangeDate=new Date(X.currentYear,X.currentMonth-1,l),X.maxRangeDate=new Date(X.currentYear,X.currentMonth+1,(42-t)%o));l<=i;l++,c++)r.appendChild(T("prevMonthDay",new Date(X.currentYear,X.currentMonth-1,l),l,c));for(l=1;l<=o;l++,c++)r.appendChild(T("",new Date(X.currentYear,X.currentMonth,l),l,c));for(var d=o+1;d<=42-t;d++,c++)r.appendChild(T("nextMonthDay",new Date(X.currentYear,X.currentMonth+1,d%o),d,c));n&&1===X.selectedDates.length&&r.childNodes[0]?(X._hidePrevMonthArrow=X._hidePrevMonthArrow||!!X.minRangeDate&&X.minRangeDate>r.childNodes[0].dateObj,X._hideNextMonthArrow=X._hideNextMonthArrow||!!X.maxRangeDate&&X.maxRangeDate1;)X.daysContainer.removeChild(X.daysContainer.firstChild);else!function(e){for(;e.firstChild;)e.removeChild(e.firstChild)}(X.daysContainer);e&&e>=0?X.daysContainer.appendChild(s):X.daysContainer.insertBefore(s,X.daysContainer.firstChild),X.days=X.daysContainer.childNodes[0]}}function O(){X.weekdayContainer||(X.weekdayContainer=a("div","flatpickr-weekdays"));var e=X.l10n.firstDayOfWeek,t=X.l10n.weekdays.shorthand.slice();return e>0&&e\n "+t.join("")+"\n \n ",X.weekdayContainer}function P(e,t,n,a){void 0===t&&(t=!0),void 0===n&&(n=X.config.animate),void 0===a&&(a=!1);var i=t?e:e-X.currentMonth;if(!(i<0&&X._hidePrevMonthArrow||i>0&&X._hideNextMonthArrow)){if(X.currentMonth+=i,(X.currentMonth<0||X.currentMonth>11)&&(X.currentYear+=X.currentMonth>11?1:-1,X.currentMonth=(X.currentMonth+12)%12,z("onYearChange")),_(n?i:void 0),!n)return z("onMonthChange"),Z();var o=X.navigationCurrentMonth;if(i<0)for(;o.nextSibling&&/curr/.test(o.nextSibling.className);)X.monthNav.removeChild(o.nextSibling);else if(i>0)for(;o.previousSibling&&/curr/.test(o.previousSibling.className);)X.monthNav.removeChild(o.previousSibling);X.oldCurMonth=X.navigationCurrentMonth,X.navigationCurrentMonth=X.monthNav.insertBefore(X.oldCurMonth.cloneNode(!0),i>0?X.oldCurMonth.nextSibling:X.oldCurMonth);var r=X.daysContainer;if(r.firstChild&&r.lastChild&&(i>0?(r.firstChild.classList.add("slideLeft"),r.lastChild.classList.add("slideLeftNew"),X.oldCurMonth.classList.add("slideLeft"),X.navigationCurrentMonth.classList.add("slideLeftNew")):i<0&&(r.firstChild.classList.add("slideRightNew"),r.lastChild.classList.add("slideRight"),X.oldCurMonth.classList.add("slideRight"),X.navigationCurrentMonth.classList.add("slideRightNew"))),X.currentMonthElement=X.navigationCurrentMonth.firstChild,X.currentYearElement=X.navigationCurrentMonth.lastChild.childNodes[0],Z(),X.oldCurMonth.firstChild&&(X.oldCurMonth.firstChild.textContent=c(X.currentMonth-i,X.config.shorthandCurrentMonth,X.l10n)),Y(function(){return z("onMonthChange")}),a&&document.activeElement&&document.activeElement.$i){var l=document.activeElement.$i;Y(function(){I(l,0)})}}}function F(e){return!(!X.config.appendTo||!X.config.appendTo.contains(e))||X.calendarContainer.contains(e)}function L(e){if(X.isOpen&&!X.config.inline){var t=F(e.target),n=e.target===X.input||e.target===X.altInput||X.element.contains(e.target)||e.path&&e.path.indexOf&&(~e.path.indexOf(X.input)||~e.path.indexOf(X.altInput));("blur"===e.type?n&&e.relatedTarget&&!F(e.relatedTarget):!n&&!t)&&-1===X.config.ignoredFocusElements.indexOf(e.target)&&(X.close(),"range"===X.config.mode&&1===X.selectedDates.length&&(X.clear(!1),X.redraw()))}}function A(e){if(!(!e||X.currentYearElement.min&&eparseInt(X.currentYearElement.max))){var t=e,n=X.currentYear!==t;X.currentYear=t||X.currentYear,X.config.maxDate&&X.currentYear===X.config.maxDate.getFullYear()?X.currentMonth=Math.min(X.config.maxDate.getMonth(),X.currentMonth):X.config.minDate&&X.currentYear===X.config.minDate.getFullYear()&&(X.currentMonth=Math.max(X.config.minDate.getMonth(),X.currentMonth)),n&&(X.redraw(),z("onYearChange"))}}function j(t,n){void 0===n&&(n=!0);var a=X.parseDate(t,void 0,n);if(X.config.minDate&&a&&e(a,X.config.minDate,void 0!==n?n:!X.minDateHasTime)<0||X.config.maxDate&&a&&e(a,X.config.maxDate,void 0!==n?n:!X.maxDateHasTime)>0)return!1;if(!X.config.enable.length&&!X.config.disable.length)return!0;if(void 0===a)return!1;for(var i=X.config.enable.length>0,o=i?X.config.enable:X.config.disable,r=0,l=void 0;r=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function H(e){var t=e.target===X._input,n=F(e.target),a=X.config.allowInput,i=X.isOpen&&(!a||!t),o=X.config.inline&&t&&!a;if("Enter"===e.key&&t){if(a)return X.setDate(X._input.value,!0,e.target===X.altInput?X.config.altFormat:X.config.dateFormat),e.target.blur();X.open()}else if(n||i||o){var r=!!X.timeContainer&&X.timeContainer.contains(e.target);switch(e.key){case"Enter":r?Q():K(e);break;case"Escape":e.preventDefault(),X.close();break;case"Backspace":case"Delete":t&&!X.config.allowInput&&X.clear();break;case"ArrowLeft":case"ArrowRight":if(r)X.hourElement&&X.hourElement.focus();else if(e.preventDefault(),X.daysContainer){var l="ArrowRight"===e.key?1:-1;e.ctrlKey?P(l,!0,void 0,!0):I(e.target.$i,l)}break;case"ArrowUp":case"ArrowDown":e.preventDefault();var c="ArrowDown"===e.key?1:-1;X.daysContainer&&void 0!==e.target.$i?e.ctrlKey?(A(X.currentYear-c),I(e.target.$i,0)):r||I(e.target.$i,7*c):X.config.enableTime&&(!r&&X.hourElement&&X.hourElement.focus(),p(e),X._debouncedChange());break;case"Tab":e.target===X.hourElement?(e.preventDefault(),X.minuteElement.select()):e.target===X.minuteElement&&(X.secondElement||X.amPM)?(e.preventDefault(),void 0!==X.secondElement?X.secondElement.focus():void 0!==X.amPM&&X.amPM.focus()):e.target===X.secondElement&&X.amPM&&(e.preventDefault(),X.amPM.focus());break;case X.l10n.amPM[0].charAt(0):void 0!==X.amPM&&e.target===X.amPM&&(X.amPM.textContent=X.l10n.amPM[0],w(),Q());break;case X.l10n.amPM[1].charAt(0):void 0!==X.amPM&&e.target===X.amPM&&(X.amPM.textContent=X.l10n.amPM[1],w(),Q())}z("onKeyDown",e)}}function R(e){if(1===X.selectedDates.length&&e.classList.contains("flatpickr-day")&&void 0!==X.minRangeDate&&void 0!==X.maxRangeDate){for(var t=e.dateObj,n=X.parseDate(X.selectedDates[0],void 0,!0),a=Math.min(t.getTime(),X.selectedDates[0].getTime()),i=Math.max(t.getTime(),X.selectedDates[0].getTime()),o=!1,r=a;rX.maxRangeDate.getTime(),s=X.days.childNodes[r];if(d)return s.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){s.classList.remove(e)}),"continue";if(o&&!d)return"continue";["startRange","inRange","endRange","notAllowed"].forEach(function(e){s.classList.remove(e)});var u=Math.max(X.minRangeDate.getTime(),a),f=Math.min(X.maxRangeDate.getTime(),i);e.classList.add(tt&&c===n.getTime()&&s.classList.add("endRange"),c>=u&&c<=f&&s.classList.add("inRange")}(l,c)}}function W(e){return function(t){var n=X.config["_"+e+"Date"]=X.parseDate(t),a=X.config["_"+("min"===e?"max":"min")+"Date"];void 0!==n&&(X["min"===e?"minDateHasTime":"maxDateHasTime"]=n.getHours()>0||n.getMinutes()>0||n.getSeconds()>0),X.selectedDates&&(X.selectedDates=X.selectedDates.filter(function(e){return j(e)}),X.selectedDates.length||"min"!==e||M(n),Q()),X.daysContainer&&(J(),void 0!==n?X.currentYearElement[e]=n.getFullYear().toString():X.currentYearElement.removeAttribute(e),X.currentYearElement.disabled=!!a&&void 0!==n&&a.getFullYear()===n.getFullYear())}}function B(e){if(void 0===e&&(e=X._positionElement),void 0!==X.calendarContainer){var t=X.calendarContainer.offsetHeight,a=X.calendarContainer.offsetWidth,i=X.config.position,o=e.getBoundingClientRect(),r=window.innerHeight-o.bottom,l="above"===i||"below"!==i&&rt,c=window.pageYOffset+o.top+(l?-t-2:e.offsetHeight+2);if(n(X.calendarContainer,"arrowTop",!l),n(X.calendarContainer,"arrowBottom",l),!X.config.inline){var d=window.pageXOffset+o.left,s=window.document.body.offsetWidth-o.right,u=d+a>window.document.body.offsetWidth;n(X.calendarContainer,"rightMost",u),X.config.static||(X.calendarContainer.style.top=c+"px",u?(X.calendarContainer.style.left="auto",X.calendarContainer.style.right=s+"px"):(X.calendarContainer.style.left=d+"px",X.calendarContainer.style.right="auto"))}}}function J(){X.config.noCalendar||X.isMobile||(O(),Z(),_())}function K(t){t.preventDefault(),t.stopPropagation();var n=i(t.target,function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("disabled")&&!e.classList.contains("notAllowed")});if(void 0!==n){var a=n,o=X.latestSelectedDateObj=new Date(a.dateObj.getTime()),r=o.getMonth()!==X.currentMonth&&"range"!==X.config.mode;if(X.selectedDateElem=a,"single"===X.config.mode)X.selectedDates=[o];else if("multiple"===X.config.mode){var l=V(o);l?X.selectedDates.splice(parseInt(l),1):X.selectedDates.push(o)}else"range"===X.config.mode&&(2===X.selectedDates.length&&X.clear(),X.selectedDates.push(o),0!==e(o,X.selectedDates[0],!0)&&X.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(w(),r){var c=X.currentYear!==o.getFullYear();X.currentYear=o.getFullYear(),X.currentMonth=o.getMonth(),c&&z("onYearChange"),z("onMonthChange")}if(_(),X.config.minDate&&X.minDateHasTime&&X.config.enableTime&&0===e(o,X.config.minDate)&&M(X.config.minDate),Q(),X.config.enableTime&&setTimeout(function(){return X.showTimeInput=!0},50),"range"===X.config.mode&&(1===X.selectedDates.length?(R(a),X._hidePrevMonthArrow=X._hidePrevMonthArrow||void 0!==X.minRangeDate&&X.minRangeDate>X.days.childNodes[0].dateObj,X._hideNextMonthArrow=X._hideNextMonthArrow||void 0!==X.maxRangeDate&&X.maxRangeDate0)for(var a=0;n[a]&&aX.config.maxDate.getMonth():X.currentYear>X.config.maxDate.getFullYear()))}function Q(e){if(void 0===e&&(e=!0),!X.selectedDates.length)return X.clear(e);void 0!==X.mobileInput&&X.mobileFormatStr&&(X.mobileInput.value=void 0!==X.latestSelectedDateObj?X.formatDate(X.latestSelectedDateObj,X.mobileFormatStr):"");var t="range"!==X.config.mode?X.config.conjunction:X.l10n.rangeSeparator;X.input.value=X.selectedDates.map(function(e){return X.formatDate(e,X.config.dateFormat)}).join(t),void 0!==X.altInput&&(X.altInput.value=X.selectedDates.map(function(e){return X.formatDate(e,X.config.altFormat)}).join(t)),!1!==e&&z("onValueUpdate")}var X={};return X.parseDate=q,X.formatDate=function(e,t){return void 0!==X.config&&void 0!==X.config.formatDate?X.config.formatDate(e,t):t.split("").map(function(t,n,a){return D[t]&&"\\"!==a[n-1]?D[t](e,X.l10n,X.config):"\\"!==t?t:""}).join("")},X._animationLoop=[],X._handlers=[],X._bind=y,X._setHoursFromDate=M,X.changeMonth=P,X.changeYear=A,X.clear=function(e){void 0===e&&(e=!0),X.input.value="",X.altInput&&(X.altInput.value=""),X.mobileInput&&(X.mobileInput.value=""),X.selectedDates=[],X.latestSelectedDateObj=void 0,X.showTimeInput=!1,X.redraw(),e&&z("onChange")},X.close=function(){X.isOpen=!1,X.isMobile||(X.calendarContainer.classList.remove("open"),X._input.classList.remove("active")),z("onClose")},X._createElement=a,X.destroy=function(){void 0!==X.config&&z("onDestroy");for(var e=X._handlers.length;e--;){var t=X._handlers[e];t.element.removeEventListener(t.event,t.handler)}X._handlers=[],X.mobileInput?(X.mobileInput.parentNode&&X.mobileInput.parentNode.removeChild(X.mobileInput),X.mobileInput=void 0):X.calendarContainer&&X.calendarContainer.parentNode&&X.calendarContainer.parentNode.removeChild(X.calendarContainer),X.altInput&&(X.input.type="text",X.altInput.parentNode&&X.altInput.parentNode.removeChild(X.altInput),delete X.altInput),X.input&&(X.input.type=X.input._type,X.input.classList.remove("flatpickr-input"),X.input.removeAttribute("readonly"),X.input.value=""),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete X[e]}catch(e){}})},X.isEnabled=j,X.jumpToDate=k,X.open=function(e,t){if(void 0===t&&(t=X._input),X.isMobile)return e&&(e.preventDefault(),e.target&&e.target.blur()),setTimeout(function(){void 0!==X.mobileInput&&X.mobileInput.click()},0),void z("onOpen");if(!X._input.disabled&&!X.config.inline){var n=X.isOpen;X.isOpen=!0,B(t),X.calendarContainer.classList.add("open"),X._input.classList.add("active"),!n&&z("onOpen")}},X.redraw=J,X.set=function(e,t){null!==e&&"object"==typeof e?Object.assign(X.config,e):X.config[e]=t,X.redraw(),k()},X.setDate=function(e,t,n){if(void 0===t&&(t=!1),0!==e&&!e)return X.clear(t);U(e,n),X.showTimeInput=X.selectedDates.length>0,X.latestSelectedDateObj=X.selectedDates[0],X.redraw(),k(),M(),Q(t),t&&z("onChange")},X.toggle=function(){if(X.isOpen)return X.close();X.open()},function(){X.element=X.input=r,X.isOpen=!1,function(){var e=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange"];X.config=l({},C.defaultConfig);var n=l({},s,JSON.parse(JSON.stringify(r.dataset||{}))),a={};for(Object.defineProperty(X.config,"enable",{get:function(){return X.config._enable||[]},set:function(e){X.config._enable=$(e)}}),Object.defineProperty(X.config,"disable",{get:function(){return X.config._disable||[]},set:function(e){X.config._disable=$(e)}}),!n.dateFormat&&n.enableTime&&(a.dateFormat=n.noCalendar?"H:i"+(n.enableSeconds?":S":""):C.defaultConfig.dateFormat+" H:i"+(n.enableSeconds?":S":"")),n.altInput&&n.enableTime&&!n.altFormat&&(a.altFormat=n.noCalendar?"h:i"+(n.enableSeconds?":S K":" K"):C.defaultConfig.altFormat+" h:i"+(n.enableSeconds?":S":"")+" K"),Object.defineProperty(X.config,"minDate",{get:function(){return X.config._minDate},set:W("min")}),Object.defineProperty(X.config,"maxDate",{get:function(){return X.config._maxDate},set:W("max")}),Object.assign(X.config,a,n),i=0;iX.now.getTime()?X.config.minDate:X.config.maxDate&&X.config.maxDate.getTime()0||X.config.minDate.getMinutes()>0||X.config.minDate.getSeconds()>0),X.maxDateHasTime=!!X.config.maxDate&&(X.config.maxDate.getHours()>0||X.config.maxDate.getMinutes()>0||X.config.maxDate.getSeconds()>0),Object.defineProperty(X,"showTimeInput",{get:function(){return X._showTimeInput},set:function(e){X._showTimeInput=e,X.calendarContainer&&n(X.calendarContainer,"showTimeInput",e),B()}})}(),X.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=X.currentMonth),void 0===t&&(t=X.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:X.l10n.daysInMonth[e]}},X.isMobile||function(){var e=window.document.createDocumentFragment();if(X.calendarContainer=a("div","flatpickr-calendar"),X.calendarContainer.tabIndex=-1,!X.config.noCalendar){if(e.appendChild(function(){var e=window.document.createDocumentFragment();X.monthNav=a("div","flatpickr-month"),X.prevMonthNav=a("span","flatpickr-prev-month"),X.prevMonthNav.innerHTML=X.config.prevArrow,X.currentMonthElement=a("span","cur-month"),X.currentMonthElement.title=X.l10n.scrollTitle;var t=o("cur-year");return X.currentYearElement=t.childNodes[0],X.currentYearElement.title=X.l10n.scrollTitle,X.config.minDate&&(X.currentYearElement.min=X.config.minDate.getFullYear().toString()),X.config.maxDate&&(X.currentYearElement.max=X.config.maxDate.getFullYear().toString(),X.currentYearElement.disabled=!!X.config.minDate&&X.config.minDate.getFullYear()===X.config.maxDate.getFullYear()),X.nextMonthNav=a("span","flatpickr-next-month"),X.nextMonthNav.innerHTML=X.config.nextArrow,X.navigationCurrentMonth=a("div","flatpickr-current-month"),X.navigationCurrentMonth.appendChild(X.currentMonthElement),X.navigationCurrentMonth.appendChild(t),e.appendChild(X.prevMonthNav),e.appendChild(X.navigationCurrentMonth),e.appendChild(X.nextMonthNav),X.monthNav.appendChild(e),Object.defineProperty(X,"_hidePrevMonthArrow",{get:function(){return X.__hidePrevMonthArrow},set:function(e){X.__hidePrevMonthArrow!==e&&(X.prevMonthNav.style.display=e?"none":"block"),X.__hidePrevMonthArrow=e}}),Object.defineProperty(X,"_hideNextMonthArrow",{get:function(){return X.__hideNextMonthArrow},set:function(e){X.__hideNextMonthArrow!==e&&(X.nextMonthNav.style.display=e?"none":"block"),X.__hideNextMonthArrow=e}}),Z(),X.monthNav}()),X.innerContainer=a("div","flatpickr-innerContainer"),X.config.weekNumbers){var t=function(){X.calendarContainer.classList.add("hasWeeks");var e=a("div","flatpickr-weekwrapper");e.appendChild(a("span","flatpickr-weekday",X.l10n.weekAbbreviation));var t=a("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),i=t.weekWrapper,r=t.weekNumbers;X.innerContainer.appendChild(i),X.weekNumbers=r,X.weekWrapper=i}X.rContainer=a("div","flatpickr-rContainer"),X.rContainer.appendChild(O()),X.daysContainer||(X.daysContainer=a("div","flatpickr-days"),X.daysContainer.tabIndex=-1),_(),X.rContainer.appendChild(X.daysContainer),X.innerContainer.appendChild(X.rContainer),e.appendChild(X.innerContainer)}X.config.enableTime&&e.appendChild(function(){X.calendarContainer.classList.add("hasTime"),X.config.noCalendar&&X.calendarContainer.classList.add("noCalendar"),X.timeContainer=a("div","flatpickr-time"),X.timeContainer.tabIndex=-1;var e=a("span","flatpickr-time-separator",":"),t=o("flatpickr-hour");X.hourElement=t.childNodes[0];var n=o("flatpickr-minute");if(X.minuteElement=n.childNodes[0],X.hourElement.tabIndex=X.minuteElement.tabIndex=-1,X.hourElement.value=f(X.latestSelectedDateObj?X.latestSelectedDateObj.getHours():X.config.time_24hr?X.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(X.config.defaultHour)),X.minuteElement.value=f(X.latestSelectedDateObj?X.latestSelectedDateObj.getMinutes():X.config.defaultMinute),X.hourElement.step=X.config.hourIncrement.toString(),X.minuteElement.step=X.config.minuteIncrement.toString(),X.hourElement.min=X.config.time_24hr?"0":"1",X.hourElement.max=X.config.time_24hr?"23":"12",X.minuteElement.min="0",X.minuteElement.max="59",X.hourElement.title=X.minuteElement.title=X.l10n.scrollTitle,X.timeContainer.appendChild(t),X.timeContainer.appendChild(e),X.timeContainer.appendChild(n),X.config.time_24hr&&X.timeContainer.classList.add("time24hr"),X.config.enableSeconds){X.timeContainer.classList.add("hasSeconds");var i=o("flatpickr-second");X.secondElement=i.childNodes[0],X.secondElement.value=f(X.latestSelectedDateObj?X.latestSelectedDateObj.getSeconds():X.config.defaultSeconds),X.secondElement.step=X.minuteElement.step,X.secondElement.min=X.minuteElement.min,X.secondElement.max=X.minuteElement.max,X.timeContainer.appendChild(a("span","flatpickr-time-separator",":")),X.timeContainer.appendChild(i)}return X.config.time_24hr||(X.amPM=a("span","flatpickr-am-pm",X.l10n.amPM[m((X.latestSelectedDateObj?X.hourElement.value:X.config.defaultHour)>11)]),X.amPM.title=X.l10n.toggleTitle,X.amPM.tabIndex=-1,X.timeContainer.appendChild(X.amPM)),X.timeContainer}()),n(X.calendarContainer,"rangeMode","range"===X.config.mode),n(X.calendarContainer,"animate",X.config.animate),X.calendarContainer.appendChild(e);var l=void 0!==X.config.appendTo&&X.config.appendTo.nodeType;if((X.config.inline||X.config.static)&&(X.calendarContainer.classList.add(X.config.inline?"inline":"static"),X.config.inline&&(!l&&X.element.parentNode?X.element.parentNode.insertBefore(X.calendarContainer,X._input.nextSibling):void 0!==X.config.appendTo&&X.config.appendTo.appendChild(X.calendarContainer)),X.config.static)){var c=a("div","flatpickr-wrapper");X.element.parentNode&&X.element.parentNode.insertBefore(c,X.element),c.appendChild(X.element),X.altInput&&c.appendChild(X.altInput),c.appendChild(X.calendarContainer)}X.config.static||X.config.inline||(void 0!==X.config.appendTo?X.config.appendTo:window.document.body).appendChild(X.calendarContainer)}(),function(){if(X.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(X.element.querySelectorAll("[data-"+e+"]"),function(t){return y(t,"click",X[e])})}),X.isMobile)!function(){var e=X.config.enableTime?X.config.noCalendar?"time":"datetime-local":"date";X.mobileInput=a("input",X.input.className+" flatpickr-mobile"),X.mobileInput.step=X.input.getAttribute("step")||"any",X.mobileInput.tabIndex=1,X.mobileInput.type=e,X.mobileInput.disabled=X.input.disabled,X.mobileInput.placeholder=X.input.placeholder,X.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",X.selectedDates.length&&(X.mobileInput.defaultValue=X.mobileInput.value=X.formatDate(X.selectedDates[0],X.mobileFormatStr)),X.config.minDate&&(X.mobileInput.min=X.formatDate(X.config.minDate,"Y-m-d")),X.config.maxDate&&(X.mobileInput.max=X.formatDate(X.config.maxDate,"Y-m-d")),X.input.type="hidden",void 0!==X.altInput&&(X.altInput.type="hidden");try{X.input.parentNode&&X.input.parentNode.insertBefore(X.mobileInput,X.input.nextSibling)}catch(e){}y(X.mobileInput,"change",function(e){X.setDate(e.target.value,!1,X.mobileFormatStr),z("onChange"),z("onClose")})}();else{var e=t(function(){!X.isOpen||X.config.static||X.config.inline||B()},50);X._debouncedChange=t(E,300),"range"===X.config.mode&&X.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&y(X.daysContainer,"mouseover",function(e){return R(e.target)}),y(window.document.body,"keydown",H),X.config.static||y(X._input,"keydown",H),X.config.inline||X.config.static||y(window,"resize",e),void 0!==window.ontouchstart&&y(window.document.body,"touchstart",L),y(window.document.body,"mousedown",x(L)),y(X._input,"blur",L),!0===X.config.clickOpens&&(y(X._input,"focus",X.open),y(X._input,"mousedown",x(X.open))),void 0!==X.daysContainer&&(X.monthNav.addEventListener("wheel",function(e){return e.preventDefault()}),y(X.monthNav,"wheel",t(function(e){e.preventDefault();var t=X.currentYearElement.parentNode&&X.currentYearElement.parentNode.contains(e.target);if(e.target===X.currentMonthElement||t){var n=function(e){return(e.wheelDelta||-e.deltaY)>=0?1:-1}(e);t?(A(X.currentYear+n),e.target.value=X.currentYear.toString()):X.changeMonth(n,!0,!1)}},10)),y(X.monthNav,"mousedown",x(function(e){var t=X.prevMonthNav.contains(e.target),n=X.nextMonthNav.contains(e.target);t||n?P(t?-1:1):e.target===X.currentYearElement?(e.preventDefault(),X.currentYearElement.select()):"arrowUp"===e.target.className?X.changeYear(X.currentYear+1):"arrowDown"===e.target.className&&X.changeYear(X.currentYear-1)})),y(X.monthNav,["keyup","increment"],function(e){var t=parseInt(e.target.value)+(e.delta||0);4!==t.toString().length&&"Enter"!==e.key||(X.currentYearElement.blur(),/[^\d]/.test(t.toString())||A(t))}),y(X.daysContainer,"mousedown",x(K)),X.config.animate&&(y(X.daysContainer,["webkitAnimationEnd","animationend"],function(e){if(X.daysContainer&&X.daysContainer.childNodes.length>1)switch(e.animationName){case"fpSlideLeft":X.daysContainer.lastChild&&X.daysContainer.lastChild.classList.remove("slideLeftNew"),X.daysContainer.removeChild(X.daysContainer.firstChild),X.days=X.daysContainer.firstChild,N();break;case"fpSlideRight":X.daysContainer.firstChild&&X.daysContainer.firstChild.classList.remove("slideRightNew"),X.daysContainer.removeChild(X.daysContainer.lastChild),X.days=X.daysContainer.firstChild,N()}}),y(X.monthNav,["webkitAnimationEnd","animationend"],function(e){switch(e.animationName){case"fpSlideLeftNew":case"fpSlideRightNew":X.navigationCurrentMonth.classList.remove("slideLeftNew"),X.navigationCurrentMonth.classList.remove("slideRightNew");for(var t=X.navigationCurrentMonth;t.nextSibling&&/curr/.test(t.nextSibling.className);)X.monthNav.removeChild(t.nextSibling);for(;t.previousSibling&&/curr/.test(t.previousSibling.className);)X.monthNav.removeChild(t.previousSibling);X.oldCurMonth=void 0}}))),void 0!==X.timeContainer&&void 0!==X.minuteElement&&void 0!==X.hourElement&&(y(X.timeContainer,["wheel","input","increment"],p),y(X.timeContainer,"mousedown",x(function(e){~e.target.className.indexOf("arrow")&&S(e,e.target.classList.contains("arrowUp")?1:-1)})),y(X.timeContainer,["wheel","increment"],X._debouncedChange),y(X.timeContainer,"input",E),y([X.hourElement,X.minuteElement],["focus","click"],function(e){return e.target.select()}),void 0!==X.secondElement&&y(X.secondElement,"focus",function(){return X.secondElement&&X.secondElement.select()}),void 0!==X.amPM&&y(X.amPM,"mousedown",x(function(e){p(e),E()})))}}(),(X.selectedDates.length||X.config.noCalendar)&&(X.config.enableTime&&M(X.config.noCalendar?X.latestSelectedDateObj||X.config.minDate:void 0),Q(!1)),X.showTimeInput=X.selectedDates.length>0||X.config.noCalendar,void 0!==X.weekWrapper&&void 0!==X.daysContainer&&(X.calendarContainer.style.width=X.daysContainer.offsetWidth+X.weekWrapper.offsetWidth+"px"),X.isMobile||B(),z("onReady")}(),X}(M,s||{}),p.push(M._flatpickr)}catch(e){console.error(e)}}return 1===p.length?p[0]:p}var l=Object.assign||function(e){for(var t,n=1,a=arguments.length;n",noCalendar:!1,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},u={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"]},f=function(e){return("0"+e).slice(-2)},m=function(e){return!0===e?1:0},g=function(e){return e instanceof Array?e:[e]},p=function(){},h={D:p,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*m(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t){var n=parseInt(t);return new Date(e.getFullYear(),0,2+7*(n-1),0,0,0,0)},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:p,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},w:p,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},v={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},D={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[D.w(e,t,n)]},F:function(e,t,n){return c(D.n(e,t,n)-1,!1,t)},G:function(e,t,n){return f(D.h(e,t,n))},H:function(e){return f(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[m(e.getHours()>11)]},M:function(e,t){return c(e.getMonth(),!0,t)},S:function(e){return f(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return f(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return f(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return f(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}};"function"!=typeof Object.assign&&(Object.assign=function(e){for(var t=[],n=1;n Προϋποθέσεις Μπόνους που Χρειάζεται να Αντιλαμβάνεται Οποιοσδήποτε Χρήστης στο Sportuna Casino στην Ελλάδα - Surol
καλύτερο Sportuna Casino μπόνους παραπομπής προώθηση στην Greece

Η λήψη ενός μπόνους σε ένα online καζίνο ενδέχεται να φαίνεται με αυτόματη νίκη, αλλά η πραγματική αξία του βρίσκεται πάντα στους όρους χρήσης που το περιλαμβάνουν sportunakazino.gr. Στο Sportuna Casino, η πλατφόρμα παρέχει μια μεγάλη γκάμα προσφορών εξειδικευμένων για το ελληνικό κοινό, ωστόσο η επιτυχής μετατροπή του μπόνους σε διαθέσιμο υπόλοιπο στηρίζεται από την εξοικείωση ειδικών κανόνων. Πάρα πολλοί παίκτες στην Ελλάδα παρασύρονται με τα νούμερα των προσφορών αλλά αποτυγχάνουν όταν συναντούν με δεσμεύσεις που δεν είχαν δει. Αυτό το άρθρο αναλύει τους επτά βασικούς μηχανισμούς που καθορίζουν κάθε προσφορά, από τις δεσμεύσεις στοιχηματισμού μέχρι τα χρονικά περιθώρια, προσφέροντας σε κάθε χρήστη τα εργαλεία για να αξιολογεί σωστά τις ευκαιρίες πριν βάλει χρήματα.

Μεγαλύτερο Ποντάρισμα κατά τη Διάρκεια Ενεργοποιημένου Μπόνους

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

Ο λόγος ύπαρξης αυτού του φραγμού είναι η πρόληψη της στρατηγικής “υψηλού ρίσκου”, όπου ένας παίκτης θα μπορούσε να δοκιμάσει να μεγαλώσει το μπόνους του με λίγα μεγάλα πονταρίσματα και στη συνέχεια να χαμηλώσει το ρίσκο για να εκπληρώσει το wagering. Αυτή η πρακτική λογίζεται υπέρβαση μπόνους και εντοπίζεται απλά. Για τον τυπικό Έλληνα παίκτη που θέλει να απολαύσει την εμπειρία χωρίς προβλήματα, η λύση είναι ξεκάθαρη: να καθορίσει ένα προσωπικό όριο χαμηλότερο από το μέγιστο του καζίνο και να παρακολουθεί την οθόνη του παιχνιδιού πριν από κάθε γύρο για να βεβαιωθεί ότι η ρύθμιση του πονταρίσματος δεν τροποποιήθηκε κατά λάθος.

Περιορισμοί στις Τρόπους Πληρωμής και την Εισαγωγή χρημάτων

Δεν είναι όλες οι τρόποι κατάθεσης ενδεδειγμένες για τη απόκτηση ενός μπόνους στο Sportuna Casino, και αυτό είναι ένα στοιχείο που προκαλεί μεγάλη σύγχυση στους νέους πελάτες στην Ελλάδα. Ειδικά ψηφιακά πορτοφόλια όπως το Skrill ή το Neteller συχνά αποκλείονται από τις διαφημιστικές ενέργειες, που συνεπάγεται ότι αν ο πελάτης τοποθετήσει μέσω αυτών, το μπόνους δεν θα καταχωρηθεί αυτόματα και ενδέχεται να ακυρωθεί χειροκίνητα. Οι πιστωτικές και χρεωστικές κάρτες (Visa, Mastercard) καθώς και οι τραπεζικές μεταφορές είναι σχεδόν πάντα δεκτές, ενώ η Paysafecard και άλλες προπληρωμένες λύσεις λαμβάνουν συνήθως το πράσινο φως για προνομιακές προσφορές.

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

Όροι Εφαρμογής και Σειρά Αξιοποίησης των Ποσών

Η σειρά με την οποία το λογισμικό του Sportuna Casino χρησιμοποιεί τα ποσά ενός παίκτη είναι προκαθορισμένη και εξαιρετικά σημαντική για τη διαχείριση του ρίσκου. Όταν ένας προφίλ έχει ταυτόχρονα πραγματικά κεφάλαια (κατάθεση) και ενεργό μπόνους, το λογισμικό συνήθως στοιχηματίζει πρώτα από το υπόλοιπο της κατάθεσης και μόνο όταν αυτό εξαντληθεί αρχίζει να χρησιμοποιεί από το υπόλοιπο του μπόνους. Αυτό υποδηλώνει ότι ο χρήστης μπορεί να χάσει ολόκληρη την κατάθεσή του πριν ακόμα ξεκινήσει να ολοκληρώνει το wagering, μια συνθήκη που πολλοί δεν αντιλαμβάνονται μέχρι να δουν το υπόλοιπό τους να μηδενίζεται.

Αυτή η σειρά κατανάλωσης έχει πρακτική συνέπεια στον τρόπο που ο χρήστης αντιμετωπίζει το πρώτο του παιχνίδι μετά την πίστωση του μπόνους. Στα αρχικά γυρίσματα, στην πράξη διακινδυνεύει την πληρωμή του χωρίς να σημειώνει πρόοδο στο wagering, εκτός αν η προσφορά έχει ξεχωριστή διατύπωση που αναφέρει ότι το wagering υπολογίζεται από το πρώτο ευρώ. Επιπλέον, αν ο παίκτης αποφασίσει να ακυρώσει το μπόνους ενώ έχει ήδη χάσει μέρος της κατάθεσης, η ακύρωση θα αφαιρέσει το μπόνους αλλά δεν θα επιστρέψει τα χαμένα χρήματα της κατάθεσης. Ο χρήστης θα πρέπει να εξετάζει αν τον συμφέρει να συνεχίσει με το μπόνους ή να το απενεργοποιήσει άμεσα μέσω της εξυπηρέτησης πελατών, διατηρώντας την ευελιξία να κάνει ανάληψη των κερδών του χωρίς δεσμεύσεις.

Ακύρωση Μπόνους και Μερική Ολοκλήρωση

Η επιλογή για ματαίωση ενός μπόνους στο Sportuna Casino είναι οριστική και πρέπει να λαμβάνεται με απόλυτη κατανόηση των επιπτώσεων. Όταν ο παίκτης αιτείται ακύρωση, το σύστημα διαγράφει ολόκληρο το υπόλοιπο του μπόνους και όλα τα κέρδη που δημιουργήθηκαν από αυτό, έστω κι αν ο τζίρος έχει προοδεύσει σημαντικά. Αυτό υπονοεί ότι αν κάποιος χρήστης έχει ολοκληρώσει το wagering στο 80% αλλά έχει παράγει ένα μεγάλο κέρδος, με την ακύρωση θα απολέσει αυτομάτως αυτό το κέρδος. Είναι ένα εργαλείο που πρέπει να αξιοποιείται αποκλειστικά όταν το υπόλοιπο της κατάθεσης έχει ανέβει και ο παίκτης επιθυμεί να το φυλάξει από την περαιτέρω εμπλοκή στο ρίσκο του μπόνους.

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

Προϋποθέσεις Στοιχηματισμού (Wagering): Ο Μηχανισμός που Καθορίζει τα Πάντα

Οι απαιτήσεις στοιχηματισμού, αναφερόμενες και ως playthrough, αποτελούν ο πολλαπλασιαστής που προσδιορίζει πόσες φορές ένας παίκτης οφείλει να γυρίσει το ποσό του μπόνους πριν καταφέρει να πραγματοποιήσει αίτημα ανάληψης. Στην πράξη, αν κάποιος αποκτήσει μπόνους 50 ευρώ με όρο στοιχηματισμού 35x, αυτό σημαίνει ότι χρειάζεται να πραγματοποιήσει συνολικά πονταρίσματα αξίας 1.750 ευρώ σε επιλέξιμα παιχνίδια. Στο Sportuna Casino, οι τιμές αυτές διαμορφώνονται σε αποδεκτά επίπεδα για την ελληνική αγορά, αλλά ο παίκτης χρειάζεται πάντα να εξετάζει τον ακριβή συντελεστή που αναφέρεται στους όρους κάθε συγκεκριμένης καμπάνιας. Η ουσία εδώ είναι ότι το σύστημα δεν υπολογίζει απλώς το ποντάρισμα, αλλά συνήθως αφαιρεί το υπόλοιπο του μπόνους από τον υπολογισμό μέχρι να ενεργοποιηθεί η διαδικασία.

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

Επίδραση Παιχνιδιών στον Τζίρο

Δεν επηρεάζουν όλα τα παιχνίδια με τον ίδιο τρόπο στην ολοκλήρωση των απαιτήσεων στοιχηματισμού, και αυτή είναι μια από τις πιο σημαντικές λεπτομέρειες που πρέπει να αντιλαμβάνεται ένας παίκτης. Τα φρουτάκια στο Sportuna Casino καλύπτουν συνήθως το 100% του πονταρίσματος, που υποδηλώνει ότι κάθε € που τοποθετείται λογαριάζεται ολόκληρο. Ωστόσο, τα παιχνίδια καζίνο όπως η ρουλέτα ή το μπλακτζάκ συχνά έχουν δραστικά μειωμένη επίδραση, που μπορεί να πέσει στο 10% ή ακόμα και στο 0%, ανάλογα με την έκδοση. Αυτό συμβαίνει καθώς τα παιχνίδια με μικρό πλεονέκτημα του καζίνο δίνουν στον χρήστη ενισχυμένη σχεδιαστική δυνατότητα, μετατρέποντάς τα λιγότερο ενδεδειγμένα για την ολοκλήρωση ενός μπόνους.

ξεκλείδωσε Sportuna Casino μπόνους επαναφόρτισης προσφορά

Παιχνίδια που Εξαιρούνται και Τεχνικές Προδιαγραφές

Στους λεπτομερείς όρους του Sportuna Casino, περιλαμβάνεται μια λίστα με παιχνίδια που αποκλείονται πλήρως από την προσφορά, ανεξαρτήτως κατηγορίας. Αυτό μπορεί να περιλαμβάνει συγκεκριμένα slots με προοδευτικό τζάκποτ ή παιχνίδια live καζίνο όπου ο παίκτης αλληλεπιδρά με πραγματικό ντίλερ. Παράλληλα, συγκεκριμένες τεχνικές παιχνιδιού, όπως η χρήση της λειτουργίας gamble ή η εφαρμογή equal betting patterns για την ελαχιστοποίηση της διακύμανσης, είναι πιθανό να οδηγήσουν σε ακύρωση του μπόνους. Ο παίκτης πρέπει να μελετήσει προσεκτικά την ενότητα των “Περιορισμένων Δραστηριοτήτων Παιχνιδιού” ώστε να μην χάσει άδικα τα κέρδη του από μια ακούσια παραβίαση του κανονισμού.

Εξυπηρέτηση Πελατών και Επίλυση Διαφορών για Μπόνους

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

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

Παιχνίδια που Καλύπτονται και Κατηγορίες με Ποικίλη Βαρύτητα

Η βιβλιοθήκη του Sportuna Casino κατανέμεται σε ζωντανές κατηγορίες που επιδρούν απευθείας τη προσέγγιση αποδέσμευσης ενός μπόνους. Οι κουλοχέρηδες (slots) συνιστούν τον κορμό συνήθως κάθε μπόνους, διότι η συντριπτική πλειοψηφία τους συμμετέχει στο 100%. Παρ’ όλα αυτά, εντός της κατηγορίας των slots εντοπίζονται υποκατηγορίες με διαφορετική διαχείριση: τα κλασικά φρουτάκια με βασικές γραμμές πληρωμής εργάζονται κανονικά, όμως παιχνίδια με γνωρίσματα όπως το “Bonus Buy” (απευθείας αγορά μπόνους γύρου) ενδέχεται να εμφανίζουν μειωμένη απόδοση ή να είναι απολύτως εκτός. Ο χρήστης οφείλει να ελέγχει στην ενότητα των ποσοστών που δημοσιεύεται παράλληλα με τους όρους της προσφοράς.

Τα παιχνίδια τραπεζιού και το live καζίνο αντιμετωπίζονται με περισσότερη επιφυλακτικότητα από τον μηχανισμό του μπόνους. Η ρουλέτα, έστω κι αν συνεισφέρει, το κάνει κατά κανόνα με ποσοστό που δεν υπερβαίνει το 20%, υποχρεώνοντας τον παίκτη να δημιουργεί πενταπλάσιο τζίρο για την ίδια πορεία σε σχέση με τα slots. Το μπλακτζάκ και το μπακαρά παρουσιάζουν ακόμη μικρότερους συντελεστές. Αυτή η διαβάθμιση δεν είναι αυθαίρετη αλλά βασίζεται στο μαθηματικό πλεονέκτημα του καζίνο (house edge) και την δυνατότητα του παίκτη να ελαχιστοποιήσει τη διακύμανση. Για τον παίκτη που θέλει να αυξήσει την ευκαιρία ολοκλήρωσης του μπόνους, η προτίμηση των slots υψηλής διακύμανσης με 100% απόδοση είναι η μαθηματικά ορθότερη διαδρομή, αρκεί να χειριστεί ορθά το υπόλοιπό του.

Αθλητικά Στοιχήματα και Μπόνους Καζίνο

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

Μηχανισμός Μέγιστου Επιτρεπόμενου Οφέλους από Μπόνους

Ένα από τα πιο αποθαρρυντικά στοιχεία για έναν παίχτη που πετυχαίνει μεγάλο σημαντικό πολλαπλασιαστή ενώ παίζει με μπόνους αποτελεί το πλαφόν ανάληψης κερδών (max cashout). Στις διάφορες ενέργειες του Sportuna Casino, οι προϋποθέσεις καθορίζουν κάποιο ανώτατο υπόλοιπο που μπορεί να μετατραπεί σε αληθινό εξαργυρώσιμο κεφάλαιο κατόπιν την ολοκλήρωση του στοιχηματισμού. Λόγου χάρη, κάποιο μπόνους άνευ κατάθεση μπορεί να έχει ανώτατο όριο ανάληψης 100 ευρώ, που υποδηλώνει ότι ακόμη και αν ο χρήστης πετύχει να ανέλθει το κεφάλαιο του μπόνους στα 5.000 ευρώ, μονάχα τα 100 ευρώ θα παραμείνουν στον λογαριασμό του κατόπιν το wagering, και το υπόλοιπο θα αφαιρεθεί.

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

Ακεραιότητα Λογαριασμού, Ταυτοποίηση και η Συσχέτισή τους με τα Προνόμια

Κανένας όρος μπόνους δεν είναι δυνατόν να εκπληρωθεί αν ο λογαριασμός του παίκτη δεν έχει υποβληθεί τη διαδικασία επαλήθευσης ταυτότητας (KYC). Στο Sportuna Casino, η διαδικασία αυτή πραγματοποιείται πριν από την πρώτη ανάληψη, αλλά η συμμόρφωση με τα κριτήρια της αρχίζει από τη στιγμή της εγγραφής. Ο παίκτης πρέπει να δηλώσει αληθή προσωπικά στοιχεία που συμφωνούν με τα επίσημα έγγραφά του, διότι οποιαδήποτε διαφορά μεταξύ του ονόματος στον λογαριασμό και του ονόματος στη μέθοδο πληρωμής θα οδηγήσει σε πάγωμα των κερδών. Αυτό είναι ιδιαίτερα σημαντικό στην Ελλάδα, όπου οι τραπεζικές συναλλαγές συνδυάζονται άμεσα με το ΑΦΜ και τα επίσημα στοιχεία ταυτοπροσωπίας.

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

  • Πραγματοποιήστε την ταυτοποίηση λογαριασμού πριν ζητήσετε μεγάλα μπόνους για να παρακάμψετε καθυστερήσεις στην ανάληψη.
  • Χρησιμοποιήστε αποκλειστικά μεθόδους πληρωμής που είναι δηλωμένες στο όνομά σας και είναι αποδεκτές για μπόνους.
  • Αποφύγετε οποιαδήποτε χρήση VPN ή proxy κατά τη διάρκεια ενεργού μπόνους για να μην τεθούν σε λειτουργία τα φίλτρα ασφαλείας.
  • Διαβάστε τους ειδικούς όρους κάθε προσφοράς στο κάτω μέρος της σελίδας της προώθησης, καθώς προηγούνται των γενικών όρων χρήσης.

Προθεσμίες: Η Πίεση του Ρολογιού στο Μπόνους σας

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

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

SUROL is a non-profit organization that has been in operation since 1971. We reach out to the most marginalized group of people in society.
Get In Touch
Support
No one has ever become poor by giving. Join us today and be a part of our mission.
SUROL is a non-profit organization that has been in operation since 1971. We reach out to the most marginalized group of people in society.
Get In Touch
Support
No one has ever become poor by giving. Join us today and be a part of our mission.
@ Copyright 2025 surol All rights reserved