/* 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":152682,"date":"2026-06-15T00:27:00","date_gmt":"2026-06-15T00:27:00","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=152682"},"modified":"2026-06-15T00:27:00","modified_gmt":"2026-06-15T00:27:00","slug":"system-oceniania-w-czasie-rzeczywistym-euro-casino-daje-polsce-glosowac-na-gry","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/system-oceniania-w-czasie-rzeczywistym-euro-casino-daje-polsce-glosowac-na-gry\/","title":{"rendered":"System oceniania w czasie rzeczywistym: Euro Casino daje Polsce g\u0142osowa\u0107 na gry"},"content":{"rendered":"
Rynek hazardu online w Polsce nieustannie si\u0119 ewoluuje, ale rzeczywiste innowacje zdarzaj\u0105 si\u0119 sporadycznie. Tym razem Euro Casino przedstawia co\u015b, co faktycznie przyznaje graczom prawdziwy g\u0142os. Ich nowy system ocen na \u017cywo zamienia standardowe przegl\u0105danie gier w aktywny, kolektywny proces. Platforma liczy setki tytu\u0142\u00f3w, ale teraz wzywa polskich graczy do grupowego decydowania, kt\u00f3re z nich s\u0105 najlepsze. W praktyce ka\u017cda ka\u017cda sesja i rozgrywka stanowi cz\u0119\u015bci\u0105 obszerniejszej, wsp\u00f3lnej oceny. Takie podej\u015bcie upowszechnia ca\u0142e do\u015bwiadczenie, sprawiaj\u0105c je bardziej przejrzystym i dopasowanym do miejscowych gust\u00f3w. Sprawd\u017amy, jak ten system dzia\u0142a, co uzyskuj\u0105 na nim gracze i dlaczego to wa\u017cny krok dla bran\u017cy.<\/p>\n
Jakie korzy\u015bci ma <\/p>\n
Ca\u0142y proces g\u0142osowania przygotowano tak, by by\u0142 \u0142atwy i nie utrudnia\u0142 w rozgrywce. Po wej\u015bciu do Euro Casino i uruchomieniu gry, system po pewnym czasie pokazuje nieinwazyjne zapytanie o ocen\u0119. Mo\u017ce si\u0119 to ukaza\u0107 po kilku minutach lub przy opuszczaniu gry. Zwykle wygl\u0105da to jak pi\u0119ciogwiazdkowa skala lub proste pytanie o satysfakcj\u0119. Tak to wygl\u0105da krok po kroku:<\/p>\n
Ten uk\u0142ad to nie tylko udogodnienie. To prawdziwy system poprawiania poziomu i zabezpieczenia. Kiedy wielu graczy wystawia tej samej grze s\u0142abe oceny, u kasyna to jasny symptom ostrzegawczy. Przyczyna bywa odmienny: usterka systemowy, niezrozumia\u0142e warunki bonusowe lub zwyczajnie brak zainteresowaniem na lokalnym terenie. Euro Casino, dostaj\u0105c podobn\u0105 bie\u017c\u0105c\u0105 dane, potrafi post\u0119powa\u0107 b\u0142yskawicznie. Potrafi skontaktowa\u0107 si\u0119 z producentem tytu\u0142u w sprawie korekty, czasowo j\u0105 usun\u0105\u0107 lub umie\u015bci\u0107 odpowiednie notatk\u0119. W przypadku u\u017cytkownika oznacza to, \u017ce serwis nieustannie si\u0119 udoskonala i ulepsza. Szansa, \u017ce natkniesz si\u0119 na wadliwy produkt, znacznie zmniejsza si\u0119. To samoregulacja oparta na grupowej opinii.<\/p>\n
Patrz\u0105c na rankingi w Euro Casino, mo\u017cliwe jest wychwyci\u0107 interesuj\u0105ce trendy w preferencjach polskich graczy. Polacy zwykle doskonale oceniaj\u0105 gry, kt\u00f3re \u0142\u0105cz\u0105 w sobie kilka sk\u0142adnik\u00f3w: atrakcyjny motyw wizualny (cz\u0119sto powi\u0105zany z kultur\u0105 lub histori\u0105), jasne zasady oraz bogaty wyb\u00f3r stawek zak\u0142ad\u00f3w. Do niezmiennych lider\u00f3w rankingu nale\u017c\u0105 zwykle:<\/p>\n
Te preferencje wskazuj\u0105, \u017ce polscy gracze s\u0105 wymagaj\u0105cy. Liczy si\u0119 dla nich standard i prawdziwo\u015b\u0107 do\u015bwiadczenia.<\/p>\n
Dane zbierane przez system ocen to nie tylko klasyfikacja na dzi\u015b. To ca\u0142a bogactwo wiedzy o upodobaniach graczy. Z czasem mog\u0105 one wykorzystane do zaawansowanej personalizacji. Algorytmy Euro Casino, analizuj\u0105c, kt\u00f3re gry chwalisz, b\u0119d\u0105 mog\u0142y celniej sugerowa\u0107 ci nowe tytu\u0142y. Szansa, \u017ce ci si\u0119 zainteresuj\u0105, b\u0119dzie znacznie wy\u017csze. Do\u015bwiadczenie ka\u017cdego klienta stanie si\u0119 bardziej spersonalizowane. Co wi\u0119cej, zebrane dane przys\u0142u\u017c\u0105 si\u0119 te\u017c samym producentom gier. B\u0119d\u0105 mogli tworzy\u0107 nowe tytu\u0142y specjalnie z my\u015bl\u0105 o polskim rynku, bior\u0105c pod uwag\u0119 lokalne gusta i oczekiwania. System ocen to pierwszy etap w stron\u0119 platformy, kt\u00f3ra nie tylko s\u0142ucha, ale i inteligentnie dostosowuje si\u0119 na potrzeby graczy.<\/p>\n
Przy ka\u017cdym uk\u0142adzie ocen pojawia si\u0119 s\u0142uszne kwestia o swoj\u0105 wiarygodno\u015b\u0107. Euro Casino funkcjonuje jako posiadaj\u0105cy licencj\u0119 operator na polskim rynku, podlega wi\u0119c \u015bci\u015ble przestrzeganym przepisom o prawo\u015bci. By zagwarantowa\u0107 wiarygodno\u015b\u0107 g\u0142os\u00f3w, serwis stosuje okre\u015blone mechanizmy ochronne. Przede wszystkim ocenia\u0107 mog\u0105 tylko zweryfikowani u\u017cytkownicy, kt\u00f3rzy faktycznie grali w dan\u0105 gr\u0119. To ogranicza mo\u017cliwo\u015b\u0107 seryjnego fa\u0142szowania ocen za pomoc\u0105 sztucznych kont. Dodatkowo, programy analizuj\u0105 wzorce g\u0142osowania, by wykry\u0107 nietypowe aktywno\u015bci. Gracz te\u017c powinien patrze\u0107 nie tylko na przeci\u0119tn\u0105 ocen\u0119. Kluczowa jest wielko\u015b\u0107 oddanych g\u0142os\u00f3w i dodatkowe komentarze. Prawdziwy, szeroki konsensus spo\u0142eczno\u015bci to zazwyczaj najlepszy wska\u017anik poziomu gry.<\/p>\n