/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":154136,"date":"2026-06-15T03:09:57","date_gmt":"2026-06-15T03:09:57","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=154136"},"modified":"2026-06-15T03:09:57","modified_gmt":"2026-06-15T03:09:57","slug":"casino-festival-play","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/casino-festival-play\/","title":{"rendered":"Mon Avis avec les Mesures de S\u00e9curit\u00e9 du Compte Joueur Festival Play Casino au Canada"},"content":{"rendered":"
\n\"Festival<\/p>\n

Du point de vue d’un joueur, la s\u00e9curit\u00e9 d’un casino en ligne n’est pas un d\u00e9tail, c’est la base de tout. Sans elle, l’exp\u00e9rience n’a tout simplement pas lieu. C’est avec cette attente en t\u00eate que nous avons examin\u00e9 les protections de compte chez Festival Play Casino. Nous souhaitions voir ce qui se cachait derri\u00e8re les slogans et appr\u00e9hender comment ces mesures op\u00e9raient au quotidien. Notre examen couvre tout, de la cr\u00e9ation du compte aux retraits d’argent, en passant par chaque connexion. Ce retour repose sur une utilisation r\u00e9elle de la plateforme. Nous l’avons r\u00e9dig\u00e9e pour les joueurs qui, comme nous, veulent savoir o\u00f9 ils placent leur argent et leurs donn\u00e9es personnelles.<\/p>\n

Pr\u00e9sentation de l’Approche S\u00e9curitaire de Festival Play Casino<\/h2>\n

Sur la page d’accueil de Festival Play Casino, on per\u00e7oit que la s\u00e9curit\u00e9 constitue des fondations, et pas la d\u00e9coration. La plateforme semble construite autour de ce principe, combinant des technologies solides \u00e0 des r\u00e8gles de fonctionnement strictes. Ce n’est pas un module qu’on met en marche ou d\u00e9sactive, il est pr\u00e9sent partout, sans pour autant rendre la navigation lourde ou d\u00e9sagr\u00e9able. Cette notion de pr\u00e9venir les probl\u00e8mes au lieu d’y r\u00e9agir nous a paru int\u00e9ressante. Nous avons donc voulu v\u00e9rifier si cette premi\u00e8re impression se v\u00e9rifiait lors d’une utilisation prolong\u00e9e, en testant chaque \u00e9tape du parcours.<\/p>\n

\"Festival<\/p>\n

Le Processus d’Inscription et de V\u00e9rification d’Identit\u00e9 (KYC)<\/h2>\n

Le processus d\u00e9marre \u00e0 l’inscription. Festival Play Casino Festival Play<\/a> met en \u0153uvre un processus de v\u00e9rification d’identit\u00e9, le fameux KYC, avec une pr\u00e9cision notable. C’est une exigence l\u00e9gale, mais c’est surtout une protection essentielle contre la fraude. Il nous a fallu fournir une pi\u00e8ce d’identit\u00e9 officielle et un justificatif de domicile r\u00e9cent. Le t\u00e9l\u00e9chargement se fait de mani\u00e8re s\u00e9curis\u00e9e et le traitement a \u00e9t\u00e9 assez rapide dans notre cas. M\u00eame si cette formalit\u00e9 peut agacer, elle est finalement rassurante. Elle garantit que chaque joueur sur le site est bien qui il pr\u00e9tend \u00eatre, ce qui cr\u00e9e un environnement plus sain pour tout le monde. La s\u00e9v\u00e9rit\u00e9 de ce premier filtre en dit long sur les priorit\u00e9s de l’op\u00e9rateur.<\/p>\n

Justificatifs N\u00e9cessaires et D\u00e9lais de Traitement<\/h3>\n

La liste des documents exig\u00e9s par Festival Play est nette, sans surprise. Ils veulent une pi\u00e8ce d’identit\u00e9 avec photo, un justificatif de domicile, et parfois une preuve pour le moyen de paiement utilis\u00e9. Pour nous, la validation a pris moins d’une journ\u00e9e. L’\u00e9quipe charg\u00e9e de la v\u00e9rification est vigilante ; le moindre doute sur un document entra\u00eene une demande de clarification via un message s\u00e9curis\u00e9. Cette vigilance au moment de l’inscription est fondamentale. Elle \u00e9tablit les bases d’une relation de confiance entre le joueur et la plateforme.<\/p>\n

L’Importance du KYC pour la Protection des Joueurs<\/h3>\n

Le processus KYC ne sert pas seulement Festival Play \u00e0 se mettre en r\u00e8gle. Il prot\u00e8ge directement les joueurs. Il stoppe quelqu’un qui voudrait ouvrir un compte \u00e0 votre nom. Il garantit aussi les transactions, en s’assurant que l’argent ne sera retir\u00e9 que par le vrai propri\u00e9taire du compte. Enfin, il participe \u00e0 la lutte contre le blanchiment, ce qui maintient la plateforme propre pour tous. Nous voyons cela comme une protection mutuelle, requise et positive.<\/p>\n

Le Chiffrement des Donn\u00e9es et la Protection des Transactions<\/h2>\n

La s\u00e9curit\u00e9 en ligne se base sur le codage. Festival Play Casino emploie un protocole SSL 256 bits, qui est la r\u00e9f\u00e9rence du secteur. Concr\u00e8tement, toutes les informations transmises entre votre ordinateur et leurs serveurs \u2013 votre nom d’utilisateur, vos donn\u00e9es, vos informations bancaires \u2013 se muent en un galimatias incompr\u00e9hensible pour quiconque surprendrait la communication. Nous avons contr\u00f4l\u00e9 la pr\u00e9sence du cadenas vert dans la barre d’adresse et la conformit\u00e9 du certificat. Cette d\u00e9fense est discr\u00e8te, mais elle agit en continu. Elle cr\u00e9e un tunnel prot\u00e9g\u00e9 pour chaque action, qu’il s’agisse de miser un dollar ou de d\u00e9poser quelques centaines.<\/p>\n

La Gestion des Mots de Passe et la V\u00e9rification \u00e0 Deux Facteurs (2FA)<\/h2>\n

Un bon mot de passe est votre premi\u00e8re protection. Festival Play vous pousse \u00e0 en cr\u00e9er un solide et rejette les combinaisons trop simples. Mais actuellement, un mot de passe, m\u00eame tr\u00e8s bon, ne suffit plus. C’est l\u00e0 que l’authentification \u00e0 deux facteurs devient indispensable. Nous l’avons configur\u00e9e, et nous vous recommandons de faire pareil. Une fois configur\u00e9e, la connexion requiert non seulement votre mot de passe, mais aussi un code sp\u00e9cifique produit par une application comme Google Authenticator, ou transmis par SMS. Ce petit obstacle additionnel rend votre compte bien plus r\u00e9sistant. M\u00eame si quelqu’un d\u00e9robait vos identifiants, il ne pourrait pas d’acc\u00e9der. La solution mis \u00e0 disposition par Festival Play est simple \u00e0 mettre en place et marche tr\u00e8s bien.<\/p>\n

Les Garanties de S\u00e9curit\u00e9 pour les D\u00e9p\u00f4ts et les Retraits<\/h2>\n

La s\u00e9curit\u00e9 financi\u00e8re est \u00e9videmment fondamentale. Festival Play propose diff\u00e9rents moyens de paiement, chacune offrant ses propres s\u00e9curit\u00e9s. Que vous optiez par Interac, PayPal, MuchBetter ou une carte de cr\u00e9dit, des mesures strictes s’appliquent. Pour les cartes, le syst\u00e8me 3-D Secure apporte une validation par votre banque. Pour les retraits, la r\u00e8gle est claire : l’argent doit \u00eatre redirig\u00e9 vers le mode de versement initial, ou un moyen similaire que vous avez valid\u00e9e. Cela bloque les d\u00e9tournements. Nous avons aussi appr\u00e9ci\u00e9 la nettet\u00e9 des limites de transaction et les v\u00e9rifications automatiques qui surveillent les activit\u00e9s anormales. Cela donne \u00e0 la fois de la libert\u00e9 et de la qui\u00e9tude.<\/p>\n

Contr\u00f4les Automatiques et Signalements de Transaction<\/h3>\n

Festival Play dispose d’un syst\u00e8me de surveillance des transactions en temps r\u00e9el. Il recherche des comportements suspects, comme des d\u00e9p\u00f4ts tent\u00e9s depuis plusieurs pays diff\u00e9rents en tr\u00e8s peu de temps. Si quelque chose lui semble anormal, une alerte est lanc\u00e9e et l’op\u00e9ration peut \u00eatre suspendue le temps d’une v\u00e9rification. Nous avons test\u00e9 cela en changeant brusquement nos habitudes, et le syst\u00e8me a r\u00e9agi de fa\u00e7on pertinente, sans nous bloquer inutilement. Ces alertes, souvent accompagn\u00e9es d’un email, vous permettent de r\u00e9agir tr\u00e8s vite si jamais une activit\u00e9 douteuse survient sur votre compte.<\/p>\n

Les R\u00e9glages de Confidentialit\u00e9 et de Gestion du Compte<\/h2>\n

Outre les protections automatiques, Festival Play vous fournit des outils pour intervenir vous-m\u00eame. Sur les param\u00e8tres du compte, vous pouvez g\u00e9rer votre confidentialit\u00e9, voir l’historique de vos connexions (avec l’adresse IP et le lieu), et \u00e9tablir des limites de dur\u00e9e de session. La possibilit\u00e9 de verrouiller manuellement votre compte pour un temps donn\u00e9 est particuli\u00e8rement utile. Supposez que vous perdiez votre t\u00e9l\u00e9phone, ou que vous d\u00e9siriez simplement faire une pause en vous garantissant que personne ne puisse se connecter. Ces outils vous rendent le contr\u00f4le. Vous adaptez la s\u00e9curit\u00e9 \u00e0 votre propre niveau de confort.<\/p>\n