'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'] . '' . $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'];
?>
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;
}
}