/* 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":140567,"date":"2026-06-11T00:16:39","date_gmt":"2026-06-11T00:16:39","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=140567"},"modified":"2026-06-11T00:16:39","modified_gmt":"2026-06-11T00:16:39","slug":"twin-casino-agradece-a-comunidade-portuguesa-com-a-semana-de-gratidao","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/twin-casino-agradece-a-comunidade-portuguesa-com-a-semana-de-gratidao\/","title":{"rendered":"Twin Casino Agradece \u00e0 Comunidade Portuguesa com a Semana de Gratid\u00e3o"},"content":{"rendered":"
\n

\u00c9 com imensa alegria que comunicamos, da parte da Twin Casino, a nossa Semana de Reconhecimento https:\/\/twinncasino.com\/pt-pt\/<\/a>. Este evento \u00e9 bem mais que uma campanha. \u00c9 a nossa maneira real de dizer muito obrigado \u00e0 comunidade lusitana, cuja dinamismo e credibilidade s\u00e3o a fundamento do nosso labor. Os participantes de Portugal n\u00e3o s\u00e3o meros n\u00fameros; s\u00e3o a raz\u00e3o de estarmos aqui. Por isso, durante sete dias, vamos converter esta reconhecimento em movimento. Preparem-se para uma sele\u00e7\u00e3o \u00fanica de ofertas, campeonatos com pr\u00e9mios de meter \u00e1gua no bico e algumas surpresas pelo meio. Tudo pensado a partir do que valorizamos mais: quem nos prefere.<\/p>\n

O Significado Real da Thank You Week<\/h2>\n

Raz\u00e3o pela qual cri\u00e1mos uma semana s\u00f3 para Portugal? A resposta encontra-se no v\u00ednculo que fomos estabelecendo. Detet\u00e1mos algo especial nos nossos jogadores portugueses: uma fidelidade e um sentido de comunidade que nos inspiram. Vemos pessoas, n\u00e3o dados. Pessoas que preenchem aos nossos jogos, que participam nos torneios com tudo e que compartilham a sua devo\u00e7\u00e3o. Esta semana \u00e9 o nosso papel desse di\u00e1logo. \u00c9 o nosso “obrigado” proclamado abertamente, atrav\u00e9s de a\u00e7\u00f5es que visam melhorar a vossa viv\u00eancia. Desejamos que compreendam que esta rela\u00e7\u00e3o ultrapassa de um dep\u00f3sito ou de um levantamento.<\/p>\n

Numa \u00e1rea que por vezes s\u00f3 foca em captar gente nova, n\u00f3s na Twin Casino temos uma convic\u00e7\u00e3o diferente. Confiamos que cuidar de quem j\u00e1 est\u00e1 connosco \u00e9 o percurso para um servi\u00e7o melhor. A Thank You Week \u00e9 um momento marcante nesse percurso. \u00c9 uma ocasi\u00e3o para festejarmos juntos o que nos une: o apre\u00e7o por um entretenimento de qualidade, a emo\u00e7\u00e3o de um bom jogo num ambiente confi\u00e1vel e a necessidade de sermos recebidos com equidade. Para n\u00f3s, a comunidade n\u00e3o \u00e9 uma palavra bonita. \u00c9 o centro de todas as decis\u00f5es, desde os jogos que acrescentamos at\u00e9 ao design de campanhas como esta.<\/p>\n

A Rea\u00e7\u00e3o \u00e0 Lealdade dos Nossos Jogadores<\/h3>\n

A fidelidade dos nossos membros em Portugal v\u00ea-se em tudo. Percebe-se na frequ\u00eancia com que acessam na plataforma, no feedback que nos fornecem para evoluirmos, no \u00e2nimo com que envolvem. Esta semana \u00e9, acima de tudo, uma rea\u00e7\u00e3o a esse envolvimento. Estud\u00e1mos os vossos h\u00e1bitos, os jogos que escolhem, a forma como interagem. Pretendemos criar uma semana que encante at\u00e9 os membros mais experientes. Valorizar algu\u00e9m de verdade n\u00e3o se faz com um gesto \u00fanico, mas com uma s\u00e9rie de ocasi\u00f5es que mantenham a experi\u00eancia estimulante e recompensadora do primeiro ao s\u00e9timo dia.<\/p>\n

Criando uma Rede no Twin Casino<\/h3>\n

A ideia de comunidade \u00e9 vital para n\u00f3s. N\u00e3o desejamos ser apenas um site onde se joga. Almejamos a ser um local onde os jogadores se estejam em casa, parte de um coletivo. A Thank You Week opera como um acelerador para esse esp\u00edrito. Produz um per\u00edodo de atividade din\u00e2mica, com prop\u00f3sitos comuns nos torneios e provoca\u00e7\u00f5es. \u00c9 nestas ocasi\u00f5es que testemunhamos nascer disputas saud\u00e1veis e um sentimento de grupo verdadeiro nos nossos chats. Desenvolver este contexto \u00e9 uma das nossas maiores pretens\u00f5es, porque sabemos que jogar online assume outra cor quando compartilhado, mesmo que seja atrav\u00e9s de um tela.<\/p>\n

O Que Esperar Durante a Semana de Gratid\u00e3o<\/h2>\n

Organiz\u00e1mos a Thank You Week como uma experi\u00eancia de sete dias, cada um com uma diferente raz\u00e3o para se considerarem especiais. A programa\u00e7\u00e3o foi criada a pensar em todos os estilos de jogador, desde os entusiastas de slots at\u00e9 aos peritos em roleta. Contem com uma mescla equilibrada de b\u00f3nus, torneios com pr\u00eamios em dinheiro real e ofertas de cashback, tudo com termos \u00f3bvios e ben\u00e9ficos. A surpresa e a expectativa s\u00e3o ingredientes importantes, por isso fiquem atentos \u00e0s notifica\u00e7\u00f5es na app e no site oficial da Twin Casino. N\u00e3o queremos que ningu\u00e9m falhe o melhor.<\/p>\n

Para assegurar que cada jogador, indiferentemente do seu estilo, ache algo \u00e0 sua medida, a semana apresentar\u00e1 formatos variados. Haver\u00e1 dias centrados em jogos particulares, com vit\u00f3rias expandidas, e outros com b\u00f3nus de dep\u00f3sito substanciais. A inten\u00e7\u00e3o \u00e9 disponibilizar um leque de experi\u00eancias que mostre a nossa reconhecimento de v\u00e1rias maneiras. A transpar\u00eancia ser\u00e1, como \u00e9 h\u00e1bito, uma prioridade. Todas as regras estar\u00e3o acess\u00edveis e acess\u00edveis, para que se consigam concentrar apenas no que interessa: a divers\u00e3o e a emo\u00e7\u00e3o da disputa.<\/p>\n

Destaques das Promo\u00e7\u00f5es e B\u00f3nus<\/h3>\n

Os detalhes completos estar\u00e3o acess\u00edveis na plataforma durante o evento, mas posso adiantar alguns dos fundamentos da Thank You Week. Os jogadores podem contar com uma s\u00e9rie de ofertas que inclui:<\/p>\n