'Online members.' ] ); $this->init_local_vars(); add_action( 'wp_ajax_wpforo_load_ajax_widget_OnlineMembers', [ $this, 'load_ajax_widget' ] ); add_action( 'wp_ajax_nopriv_wpforo_load_ajax_widget_OnlineMembers', [ $this, 'load_ajax_widget' ] ); } private function init_local_vars() { $this->default_instance = [ 'title' => __( 'Online Members', 'wpforo' ), 'count' => 15, 'display_avatar' => true, 'groupids' => WPF()->usergroup->get_visible_usergroup_ids(), 'refresh_interval' => 0, ]; } public function get_widget( $instance ) { $online_members = WPF()->member->get_online_members( $instance['count'], $instance['groupids'] ); ob_start(); if( ! empty( $online_members ) ) { echo ''; } else { echo '

 ' . wpforo_phrase( 'No online members at the moment', false ) . '

'; } return ob_get_clean(); } public function load_ajax_widget() { $_POST = wp_unslash( $_POST ); $instance = json_decode( (string) wpfval( $_POST, 'instance' ), true ); // SECURITY: Sanitize instance parameters if( is_array( $instance ) ) { // Intersect groupids with visible usergroups to prevent hidden group enumeration if( isset( $instance['groupids'] ) ) { $visible_groupids = WPF()->usergroup->get_visible_usergroup_ids(); $instance['groupids'] = array_values( array_intersect( array_map( 'intval', (array) $instance['groupids'] ), $visible_groupids ) ); } // Cap count to prevent resource exhaustion if( isset( $instance['count'] ) ) { $instance['count'] = min( 50, max( 1, intval( $instance['count'] ) ) ); } } wp_send_json_success( ['html' => $this->get_widget( $instance )] ); } public function widget( $args, $instance ) { $instance = wpforo_parse_args( $instance, $this->default_instance ); $data = [ 'boardid' => 0, 'action' => 'wpforo_load_ajax_widget_OnlineMembers', 'instance' => $instance, ]; if( WPF()->board->get_current( 'boardid' ) !== 0 ) $data['referer'] = home_url(); $html = $this->get_widget( $data['instance'] ); $json = wp_json_encode( $data ); wp_enqueue_script( 'wpforo-widgets-js' ); echo $args['before_widget'] . '
'; if( $instance['title'] ) echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title']; echo '
' . $html . '
' . $args['after_widget']; } public function form( $instance ) { $instance = wpforo_parse_args( $instance, $this->default_instance ); $title = (string) $instance['title']; $count = (int) $instance['count']; $display_avatar = (bool) $instance['display_avatar']; $groupids = array_filter( wpforo_parse_args( ( wpforo_is_json( $instance['groupids'] ) ? json_decode( $instance['groupids'], true ) : $instance['groupids'] ) ) ); $refresh_interval = (int) $instance['refresh_interval']; ?>

 

 

: type="radio" name="get_field_name( 'display_avatar' ) ); ?>"> type="radio" name="get_field_name( 'display_avatar' ) ); ?>">

 

default_instance ); $instance = []; $instance['title'] = strip_tags( (string) $new_instance['title'] ); $instance['count'] = (int) $new_instance['count']; $instance['display_avatar'] = (bool) (int) $new_instance['display_avatar']; $instance['groupids'] = array_filter( wpforo_parse_args( $new_instance['groupids'] ) ); $instance['refresh_interval'] = (int) $new_instance['refresh_interval']; return $instance; } }