| Server IP : 43.141.49.119 / Your IP : 113.219.202.141 Web Server : Apache System : Linux VM-8-5-opencloudos 6.6.34-9.oc9.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 19 19:35:45 CST 2024 x86_64 User : www ( 1000) PHP Version : 8.1.27 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/wwwroot/www.ucppt.com/wp-content/plugins/wpcom-member-pro/includes/ |
Upload File : |
<?php
namespace WPCOM\Member;
defined( 'ABSPATH' ) || exit;
class Follow{
function __construct(){
add_action( 'wpcom_profile_after_description', array($this, 'add_btn') );
add_action( 'wpcom_follow_item_action', array($this, 'add_btn') );
add_action( 'wpcom_user_card_action', array($this, 'add_btn') );
add_action( 'wp_ajax_wpcom_follow', array($this, 'follow_action') );
add_action( 'wp_ajax_nopriv_wpcom_follow', array($this, 'follow_action') );
add_action( 'wp_ajax_wpcom_check_follow', array($this, 'check_follow') );
add_action( 'wp_ajax_wpcom_user_follows', array($this, 'load_follows') );
add_action( 'wp_ajax_nopriv_wpcom_user_follows', array($this, 'load_follows') );
add_action( 'wp_ajax_wpcom_user_followers', array($this, 'load_followers') );
add_action( 'wp_ajax_nopriv_wpcom_user_followers', array($this, 'load_followers') );
add_action( 'wpcom_profile_tabs_follows', array($this, 'follows_tab') );
add_action( 'wpcom_follow_user', array($this, 'update_count'), 10, 2 );
add_action( 'wpcom_unfollow_user', array($this, 'update_count'), 10, 2 );
add_filter( 'wpcom_follow_btn_html', array($this, 'follow_btn_html'), 5 );
add_filter( 'wpcom_followed_btn_html', array($this, 'followed_btn_html'), 5 );
add_filter( 'wpmx_localize_script', array($this, 'localize_script') );
add_filter( 'wpcom_profile_tabs', array($this, 'profile_tab') );
add_filter( 'wpcom_followers_count', array($this, 'get_followers_count'), 5, 2);
}
function follow_action(){
$res = array('result' => 0, 'msg' => __('Followed!', WPCMP_TD));
$user_id = get_current_user_id();
$follow = isset($_REQUEST['follow']) ? $_REQUEST['follow'] : 0;
if($user_id){
if($user_id==$follow){
$res['result'] = -3;
$res['msg'] = __('You can’t follow yourself!', WPCMP_TD);
}else if($this->is_followed($follow, $user_id) && $this->unfollow($follow, $user_id)){
$res['result'] = 1; // 取消关注成功
$res['msg'] = __('Unfollow successfully!', WPCMP_TD);
} else if(!$this->follow($follow, $user_id)){
$res['result'] = -2;
$res['msg'] = __('Follow failed, please try again later!', WPCMP_TD);
}
}else{
$res['result'] = -1;
$res['msg'] = _x('Please login first', 'follow', WPCMP_TD);;
}
wp_send_json($res);
}
function check_follow(){
$ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : array();
$user_id = get_current_user_id();
$res = new \stdClass;
if($user_id && $ids && is_array($ids)){
foreach ($ids as $id) {
$res->{$id} = $this->is_followed($id, $user_id);
}
}
wp_send_json($res);
}
function load_follows(){
global $wpcom_member;
$user_id = isset($_REQUEST['user']) ? $_REQUEST['user'] : 0;
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 2;
$follows = $this->get_follows($user_id, 10, $page);
if($follows && is_array($follows)){
foreach ($follows as $follow) echo $wpcom_member->load_template('follow', array('follow' => $follow));
}else{
echo 0;
}
exit;
}
function load_followers(){
global $wpcom_member, $wpdb;
$user_id = isset($_REQUEST['user']) ? $_REQUEST['user'] : 0;
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
$follows = $this->get_followers($user_id, 10, $page);
if($follows && is_array($follows)){
if($page==1) {
$table = _get_meta_table( 'user' );
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
$count = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM $table WHERE meta_key = %s AND meta_value = %s", $option_name, $user_id ));
header('Next-page: '.($count>10?'1':'0'));
}
foreach ($follows as $follow) echo $wpcom_member->load_template('follow', array('follow' => $follow));
}else{
echo 0;
}
exit;
}
function follow($followed, $user=''){
global $wpdb;
$user = $user ? $user : get_current_user_id();
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
if($user && $followed && is_numeric($user) && is_numeric($followed) && !$this->is_followed($followed, $user)){
$res = add_user_meta($user, $option_name, $followed);
if($res){
do_action('wpcom_follow_user', $user, $followed);
}
return $res;
}
return false;
}
function unfollow($followed, $user=''){
global $wpdb;
$user = $user ? $user : get_current_user_id();
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
if($user && $followed && is_numeric($user) && is_numeric($followed) && $this->is_followed($followed, $user)){
$res = delete_user_meta( $user, $option_name, $followed );
if($res){
do_action('wpcom_unfollow_user', $user, $followed);
}
return $res;
}
return false;
}
function update_count($user, $followed){
global $wpdb;
$table = _get_meta_table('user');
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT( * ) FROM $table WHERE meta_key = %s AND meta_value = %d", $option_name, $followed));
if(is_wp_error($count)){
$filter = current_filter();
$count = get_user_meta($followed, $wpdb->get_blog_prefix() . 'followers_count', true);
$count = $count ? $count : 0;
if($filter==='wpcom_follow_user'){
$count += 1;
}else if($count>0){
$count -= 1;
}
}
update_user_option($followed, 'followers_count', $count);
return $count;
}
function is_followed($followed, $user=''){
global $wpdb;
$user = $user ? $user : get_current_user_id();
if($user && $followed && is_numeric($user) && is_numeric($followed)) {
$table = _get_meta_table('user');
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
if ($wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE meta_key = %s AND user_id = %d AND meta_value = %d", $option_name, $user, $followed))) {
return true;
}
}
return false;
}
function get_follows($user, $number=-1, $paged=1){
global $wpdb;
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
$ids = get_user_meta($user, $option_name);
if($ids) {
if($number>0){
$ids = array_slice(array_reverse($ids), $number*($paged-1), $number);
}
if($ids){
$users = get_users(array('include' => $ids, 'orderby' => 'include'));
if(!is_wp_error($users)) return $users;
}
}
return false;
}
function get_followers($user, $number=-1, $paged=1){
global $wpdb;
$table = _get_meta_table( 'user' );
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
$limit = '';
if($number>0) $limit = $wpdb->prepare('LIMIT %d, %d', $number * ($paged - 1), $number);
$meta_list = $wpdb->get_results( $wpdb->prepare("SELECT user_id FROM $table WHERE meta_key = %s AND meta_value = %s ORDER BY umeta_id DESC $limit", $option_name, $user) );
$ids = array();
if($meta_list){
foreach ($meta_list as $meta){
if($meta->user_id && !in_array($meta->user_id, $ids)) $ids[] = $meta->user_id;
}
}
if($ids) {
$users = get_users(array('include' => $ids, 'orderby' => 'include'));
if(!is_wp_error($users)) return $users;
}
return false;
}
function get_followers_count($count){
if($count==='') $count = 0;
return $count;
}
function profile_tab($tabs){
$tabs += array(
27 => array(
'slug' => 'follows',
'title' => __( 'Follows', WPCMP_TD )
)
);
return $tabs;
}
function follows_tab(){
global $wpcom_member, $wpdb;
$profile = isset($GLOBALS['profile']) ? $GLOBALS['profile'] : null;
if($profile && isset($profile->ID)){
$option_name = $wpdb->get_blog_prefix() . '_wpcom_follow';
$ids = get_user_meta($profile->ID, $option_name);
$number = 10;
$atts = array(
'user_id' => $profile->ID,
'total' => is_array($ids) ? count($ids) : 0,
'number' => $number,
'follows' => $this->get_follows($profile->ID, $number)
);
echo $wpcom_member->load_template('follows', $atts);
}
}
function follow_btn_html($btn){
$btn = wpmx_icon('add', false) . __('Follow', WPCMP_TD);
return $btn;
}
function followed_btn_html($btn){
$btn = __('Followed', WPCMP_TD);
return $btn;
}
function add_btn($user){
$is_followed = $this->is_followed($user);
if($is_followed){
$html = apply_filters('wpcom_followed_btn_html', '');
}else{
$html = apply_filters('wpcom_follow_btn_html', '');
}
echo '<button type="button" class="wpcom-btn btn-xs btn-follow j-follow'.($is_followed?' followed':' btn-primary').'" data-user="'.$user.'">' . $html . '</button>';
}
function localize_script($scripts){
$scripts['follow_btn'] = apply_filters('wpcom_follow_btn_html', '');
$scripts['followed_btn'] = apply_filters('wpcom_followed_btn_html', '');
return $scripts;
}
}