um_init(); if( wpforo_setting( 'um', 'forum_tab' ) ) { add_filter( 'um_profile_tabs', [ $this, 'um_tabs' ], 999 ); add_filter( 'um_user_profile_tabs', [ $this, 'um_user_tabs' ], 999 ); add_action( 'um_profile_content_foro_default', [ $this, 'um_default_tab_content' ] ); add_action( 'um_profile_content_foro_topics', [ $this, 'um_user_topics' ] ); add_action( 'um_profile_content_foro_replies', [ $this, 'um_user_replies' ] ); add_action( 'um_profile_content_foro_favorites', [ $this, 'um_user_favorites' ] ); add_action( 'um_profile_content_foro_subscriptions', [ $this, 'um_user_subscriptions' ] ); } if( wpforo_setting( 'profiles', 'profile' ) === 'um' ) { add_filter( 'wpforo_member_profile_url', [ $this, 'um_profile_url' ], 10, 3 ); } if( wpforo_setting( 'um', 'notification' ) && class_exists( 'UM_Notifications_API' ) ) { add_filter( 'um_notifications_core_log_types', [ $this, 'um_notification_types' ], 500, 1 ); add_filter( 'um_notifications_get_icon', [ $this, 'um_notification_icon' ], 10, 2 ); add_action( 'wpforo_after_add_post', [ $this, 'um_add_notification' ], 10, 2 ); add_action( 'wpforo_post_status_update', [ $this, 'um_notification_on_post_status_change' ], 10, 2 ); } } function um_init() { $options = get_option( 'um_options' ); if( wpfkey( $options, 'profile_tab_foro' ) || wpfkey( $options, 'log_wpforo_user_reply' ) ) { if( ! empty( $options ) ) { //Set default options for Tab Settings $tab_options = [ 'profile_tab_foro' => 1, 'profile_tab_foro_privacy' => 0 ]; foreach( $tab_options as $key => $value ) { if( ! isset( $options[ $key ] ) ) $options[ $key ] = $value; } //Set default options for Notification Settings $notification_options = []; $notification_options['wpforo_user_reply'] = [ 'title' => __( 'User leaves a reply to wpForo topic', 'wpforo' ), 'template' => '{member} has replied to a topic you started on the forum.', 'account_desc' => __( 'When a member replies to one of my forum topics', 'wpforo' ), ]; $notification_options['wpforo_user_reply_to_reply'] = [ 'title' => __( 'User replied to wpForo post', 'wpforo' ), 'template' => '{member} has replied to your post on the forum.', 'account_desc' => __( 'When a member replies to one of my post in forum topics', 'wpforo' ), ]; foreach( $notification_options as $type => $note ) { if( ! isset( $options[ 'log_' . $type ] ) ) $options[ 'log_' . $type ] = 1; if( ! isset( $options[ 'log_' . $type . '_template' ] ) ) $options[ 'log_' . $type . '_template' ] = $note['template']; } update_option( 'um_options', $options ); } } } function um_tabs( $tabs ) { $user_id = um_user( 'ID' ); if( $user_id ) { $member = wpforo_member( $user_id ); $topics = $member['topics']; $posts = $member['posts']; $likes = (int) wpfval( $member, 'reactions_in', 'up' ); $subscriptions = 0; $args = [ 'userid' => $user_id ]; if( WPF()->sbscrb ){ $subs = WPF()->sbscrb->get_subscribes( $args ); if( ! empty( $subs ) ) $subscriptions = count( $subs ); } $tabs['foro'] = [ 'name' => wpforo_phrase( 'Forums', false ), 'icon' => 'um-faicon-comments', 'subnav' => [ 'topics' => wpforo_phrase( 'Topics Started', false ) . '' . intval( $topics ) . '', 'replies' => wpforo_phrase( 'Replies Created', false ) . '' . intval( $posts ) . '', 'favorites' => wpforo_phrase( 'Liked Posts', false ) . '' . intval( $likes ) . '', 'subscriptions' => wpforo_phrase( 'Subscriptions', false ) . '' . intval( $subscriptions ) . '', ], 'subnav_default' => 'topics', ]; if( ! WPF()->sbscrb ) unset( $tabs['foro']['subnav']['subscriptions'] ); } return $tabs; } function um_user_tabs( $tabs ) { if( wpfval( $tabs, 'foro', 'subnav_default' ) && wpfval( $tabs, 'foro', 'subnav', $tabs['foro']['subnav_default'] ) ) { $i = 0; if( isset( $tabs['foro']['subnav'] ) ) { foreach( $tabs['foro']['subnav'] as $id => $data ) { $i ++; if( $i == 1 ) { $tabs['foro']['subnav_default'] = $id; } } } } return $tabs; } function um_default_tab_content( $args ) { $this->um_user_topics( $args ); } function um_user_topics( $args ) { $user_id = um_user( 'ID' ); if( isset( $_GET['wpfpaged'] ) && intval( $_GET['wpfpaged'] ) ) $paged = intval( $_GET['wpfpaged'] ); $paged = ( isset( $paged ) && $paged ) ? $paged : 1; $args = [ 'offset' => ( $paged - 1 ) * WPF()->current_object['items_per_page'], 'row_count' => WPF()->current_object['items_per_page'], 'userid' => $user_id, 'orderby' => 'modified', 'check_private' => true, ]; $activities = WPF()->topic->get_topics( $args, $items_count ); ?>

topic->members( $topic['topicid'], 3 ); ?>
tpl->pagenavi( $paged, $items_count, null, false ); ?>
( $paged - 1 ) * WPF()->current_object['items_per_page'], 'row_count' => WPF()->current_object['items_per_page'], 'userid' => $user_id, 'orderby' => '`created` DESC', 'check_private' => true, ]; $activities = WPF()->post->get_posts( $args, $items_count ); ?>

tpl->pagenavi( $paged, $items_count, null, false ); ?>
$user_id, 'offset' => ( $paged - 1 ) * WPF()->current_object['items_per_page'], 'row_count' => WPF()->current_object['items_per_page'], 'var' => 'postid', ]; $activities = WPF()->post->get_liked_posts( $args, $items_count ); ?>

tpl->pagenavi( $paged, $items_count, null, false ); ?>
sbscrb ) return; $user_id = um_user( 'ID' ); if( isset( $_GET['wpfpaged'] ) && intval( $_GET['wpfpaged'] ) ) $paged = intval( $_GET['wpfpaged'] ); $paged = ( isset( $paged ) && $paged ) ? $paged : 1; $args = [ 'offset' => ( $paged - 1 ) * WPF()->current_object['items_per_page'], 'row_count' => WPF()->current_object['items_per_page'], 'userid' => $user_id, 'order' => 'DESC', ]; $activities = WPF()->sbscrb->get_subscribes( $args, $items_count ); ?>

wpforo_phrase( 'All ' . $activity['type'], false ) ]; $item_url = '#'; } if( empty( $item ) ) continue; ?>
tpl->pagenavi( $paged, $items_count, null, false ); ?>
um_profile_permalink( $member['userid'] ); if( isset( $user_domain ) ) { $user_domain = $user_domain ?: get_author_posts_url( $member['userid'] ); $user_domain = strtok( $user_domain, '?' ); $tabs = wpforo_setting( 'um', 'forum_tab' ); if( $user_domain && $tabs ) { switch( $template ) { case 'account': $url = $user_domain . '?profiletab=main&um_action=edit'; break; case 'activity': $url = $user_domain . '?profiletab=foro'; break; case 'subscriptions': $url = $user_domain . '?profiletab=foro&subnav=subscriptions'; break; case 'profile': $url = $user_domain; break; } } else { $url = $user_domain; } } } if( isset( $user_domain ) ) { return apply_filters( 'wpforo_um_member_profile_url', $url, $member, $template ); } else { return $url; } } function um_profile_permalink( $user_id ) { if( ! $user_id ) return false; $permalink_base = UM()->options()->get( 'permalink_base' ); $slug = get_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", true ); if( empty( $slug ) ) { if( $permalink_base != 'user_login' ) { $slug = get_user_meta( $user_id, "um_user_profile_url_slug_user_login", true ); } if( empty( $slug ) ) { return false; } } $um = get_option( 'um_options' ); $page_id = ( wpfval( $um, 'core_user' ) ) ? $um['core_user'] : ''; $profile_url = get_permalink( $page_id ); $profile_url = apply_filters( 'um_localize_permalink_filter', $profile_url, $page_id ); if( get_option( 'permalink_structure' ) ) { $profile_url = trailingslashit( untrailingslashit( $profile_url ) ); $profile_url = $profile_url . strtolower( (string) $slug ) . '/'; } else { $profile_url = add_query_arg( 'um_user', strtolower( (string) $slug ), $profile_url ); } return ! empty( $profile_url ) ? $profile_url : ''; } function um_notification_types( $array ) { $array['wpforo_user_reply'] = [ 'title' => __( 'User leaves a reply to wpForo topic', 'wpforo' ), 'template' => __( '{member} has replied to a topic you started on the forum.', 'wpforo' ), 'account_desc' => __( 'When a member replies to one of my forum topics', 'wpforo' ), ]; $array['wpforo_user_reply_to_reply'] = [ 'title' => __( 'User replied to wpForo post', 'wpforo' ), 'template' => __( '{member} has replied to your post on the forum.', 'wpforo' ), 'account_desc' => __( 'When a member replies to one of my post in forum topics', 'wpforo' ), ]; return $array; } function um_notification_icon( $output, $type ) { if( $type == 'wpforo_user_reply' ) { $output = ''; } if( $type == 'wpforo_user_reply_to_reply' ) { $output = ''; } return $output; } function um_add_notification( $post = [], $topic = [] ) { //Get reply data if( ! wpfval( $post, 'postid' ) ) return; if( ! wpfval( $topic, 'topicid' ) ) return; //Don't notify if a new reply is unapproved if( wpfval( $post, 'status' ) ) return false; if( wpfval( $post, 'is_first_post' ) ) return false; //Get author information $author_id = $post['userid']; $topic_author_id = $topic['userid']; $reply_to_item_author_id = 0; um_fetch_user( $author_id ); // Hierarchical replies if( wpfval( $post, 'parentid' ) ) { $reply_to_item_author_id = wpforo_post( $post['parentid'], 'userid' ); } // Notify the topic author if not the current reply author if( $author_id != $topic_author_id ) { $vars['photo'] = um_get_avatar_url( get_avatar( $author_id, 40 ) ); $vars['member'] = um_user( 'display_name' ); $vars['notification_uri'] = esc_url_raw( $post['posturl'] ); UM()->Notifications_API()->api()->store_notification( $topic_author_id, 'wpforo_user_reply', $vars ); } // Notify the immediate reply author if not the current reply author if( $reply_to_item_author_id && wpfval( $post, 'parentid' ) && $author_id != $reply_to_item_author_id && $topic_author_id != $reply_to_item_author_id ) { $vars['photo'] = um_get_avatar_url( get_avatar( $author_id, 40 ) ); $vars['member'] = um_user( 'display_name' ); $vars['notification_uri'] = esc_url_raw( $post['posturl'] ); UM()->Notifications_API()->api()->store_notification( $reply_to_item_author_id, 'wpforo_user_reply_to_reply', $vars ); } } function um_notification_on_post_status_change( $post, $status = 0 ) { if( ! $post || ! wpforo_setting( 'um', 'notification' ) ) return; $post['status'] = $status = intval($status); $post['posturl'] = WPF()->post->get_url( $post['postid'] ); if( ($topic = WPF()->topic->get_topic( wpfval( $post, 'topicid' ) )) && ! $status ){ $this->um_add_notification( $post, $topic ); } } function um_frontend_enqueue() { if( is_rtl() ) { wp_register_style( 'wpforo-um-rtl', WPF()->tpl->template_url . '/integration/ultimate-member/style-rtl.css', false, WPFORO_VERSION ); wp_enqueue_style( 'wpforo-um-rtl' ); } else { wp_register_style( 'wpforo-um', WPF()->tpl->template_url . '/integration/ultimate-member/style.css', false, WPFORO_VERSION ); wp_enqueue_style( 'wpforo-um' ); } if( ! is_wpforo_page() ) { wp_enqueue_style( 'dashicons' ); } } } new UltimateMember();