| Server IP : 43.141.49.107 / Your IP : 113.219.202.44 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 User_Groups {
function __construct(){
add_action( 'init', array( $this, 'register_user_groups' ) );
add_action( 'admin_init', array( $this, 'set_default_user_groups' ) );
add_action( 'admin_init', array( $this, 'change_users_group' ) );
add_action( '_admin_menu', array( $this, 'user_groups_menu' ) );
add_action( 'manage_user-groups_custom_column', array( $this, 'user_groups_column_count' ), 10, 3 );
add_action( 'show_user_profile', array( $this, 'edit_user_groups' ) );
add_action( 'edit_user_profile', array( $this, 'edit_user_groups' ) );
add_action( 'personal_options_update', array( $this, 'save_user_groups_terms' ) );
add_action( 'edit_user_profile_update', array( $this, 'save_user_groups_terms' ) );
add_action( 'manage_users_custom_column', array( $this, 'manage_users_custom_column' ), 10, 3 );
add_action( 'restrict_manage_users', array( $this, 'restrict_manage_users' ) );
add_filter( 'wpcom_tax_metas', array( $this, 'user_groups_metas' ) );
add_filter( 'wpcom-member-pro_tax_metas', array( $this, 'user_groups_metas' ) );
add_filter( 'parent_file', array( $this, 'user_groups_parent_file' ) );
add_filter( 'manage_edit-user-groups_columns', array( $this, 'user_groups_column' ) );
add_filter( 'manage_users_columns', array( $this, 'manage_users_columns' ) );
add_filter( 'pre_get_users', array( $this, 'filter_users_by_groups' ) );
add_filter( 'wpcom_user_display_name', array( $this, 'display_name' ), 10, 3);
}
function register_user_groups(){
$labels = array(
'name' => __('Groups', WPCMP_TD),
'singular_name' => __('User Group', WPCMP_TD),
'search_items' => __('Search Groups', WPCMP_TD),
'all_items' => __('All Groups', WPCMP_TD),
'edit_item' => __('Edit Group', WPCMP_TD),
'update_item' => __('Update Group', WPCMP_TD),
'add_new_item' => __('Add Group', WPCMP_TD),
'not_found' => __('No Group', WPCMP_TD),
'menu_name' => __('Groups', WPCMP_TD),
);
$args = array(
'public' => false,
'hierarchical' => false,
'labels' => $labels,
'show_ui' => true,
'show_in_rest' => current_user_can('publish_posts'),
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'user-groups'),
'capabilities' => array(
'manage_terms' => 'edit_users',
'edit_terms' => 'edit_users',
'delete_terms' => 'edit_users',
'assign_terms' => 'edit_users',
),
'update_count_callback' => array( $this, 'user_group_update_count_callback' )
);
register_taxonomy('user-groups', 'user', $args);
}
function user_groups_menu(){
global $submenu;
add_submenu_page('users.php', __('Groups', WPCMP_TD), __('Groups', WPCMP_TD), 'manage_options', 'edit-tags.php?taxonomy=user-groups', '');
$find_page = 'users.php';
$find_sub = __('Groups', WPCMP_TD);
foreach ($submenu as $page => $items):
if ($page == $find_page):
foreach ($items as $id => $meta):
if ($meta[0] == $find_sub):
$submenu[$find_page][11] = $meta;
unset ($submenu[$find_page][$id]);
ksort($submenu[$find_page]);
endif;
endforeach;
endif;
endforeach;
}
function user_groups_metas($metas){
if (current_filter() === 'wpcom-member-pro_tax_metas' && function_exists('wpcom_setup')) return $metas;
if (!isset($metas['user-groups'])) $metas['user-groups'] = array();
$_roles = wp_roles();
$roles = $_roles->role_names;
if(!empty($roles)){
foreach ($roles as $name => $role) {
$roles[$name] = translate_user_role($role);
}
}
$group_metas = array(
array(
'name' => 'sys_role',
'title' => '系统角色',
'desc' => '选择当前用户角色在wordpress系统中的角色',
'type' => 'select',
'options' => $roles
),
array(
'name' => 'wpadmin',
'title' => '后台访问权限',
'desc' => '是否可以访问网站wp-admin后台',
'type' => 'toggle'
),
array(
'name' => 'adminbar',
'title' => '前端工具栏',
'desc' => '是否显示前端页面顶部管理工具栏',
'type' => 'toggle'
)
);
$metas['user-groups'] = array_merge($metas['user-groups'], $group_metas);
return $metas;
}
function user_groups_parent_file($parent_file = ''){
global $pagenow;
if (!empty($_GET['taxonomy']) && ($_GET['taxonomy'] == 'user-groups') && ($pagenow == 'edit-tags.php' || $pagenow == 'term.php')) {
$parent_file = 'users.php';
}
return $parent_file;
}
function user_group_update_count_callback($terms, $taxonomy){
global $wpdb;
foreach ((array)$terms as $term) {
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term));
do_action('edit_term_taxonomy', $term, $taxonomy);
$wpdb->update($wpdb->term_taxonomy, compact('count'), array('term_taxonomy_id' => $term));
do_action('edited_term_taxonomy', $term, $taxonomy);
}
}
function user_groups_column($columns){
unset($columns['posts']);
unset($columns['description']);
$columns['users'] = __('Users', WPCMP_TD);
return $columns;
}
function user_groups_column_count($display, $column, $term_id){
if ('users' === $column) {
$term = get_term($term_id, 'user-groups');
echo $term->count;
}
}
function edit_user_groups($user){
$tax = get_taxonomy('user-groups');
/* Make sure the user can assign terms of the profession taxonomy before proceeding. */
if (!current_user_can($tax->cap->assign_terms))
return;
/* Get the terms of the 'profession' taxonomy. */
$terms = get_terms(array('taxonomy' => 'user-groups', 'hide_empty' => false)); ?>
<h3><?php _e('Groups', WPCMP_TD); ?></h3>
<table class="form-table">
<tr>
<th><label for="user-groups"><?php _e('Select Group', WPCMP_TD); ?></label></th>
<td>
<select name="user-groups">
<option value=""><?php _e('Select Group', WPCMP_TD); ?></option>
<?php
if (!empty($terms)) {
foreach ($terms as $term) { ?>
<option value="<?php echo esc_attr($term->slug); ?>" <?php echo(is_object_in_term($user->ID, 'user-groups', $term) ? 'selected' : '') ?>><?php echo $term->name; ?></option>
<?php }
} ?>
</select>
</td>
</tr>
</table>
<?php }
function save_user_groups_terms($user_id){
$tax = get_taxonomy('user-groups');
if (!current_user_can('edit_user', $user_id) && current_user_can($tax->cap->assign_terms))
return false;
if (isset($_POST['user-groups'])) {
wp_set_object_terms($user_id, array(sanitize_text_field($_POST['user-groups'])), 'user-groups', false);
clean_object_term_cache($user_id, 'user-groups');
}
}
function manage_users_columns($columns){
$new_columns = array();
foreach ($columns as $role => $name) {
if ($role == 'role') {
$new_columns[$role] = $name;
$new_columns['group'] = __('Group', WPCMP_TD);
} else {
$new_columns[$role] = $name;
}
}
return $new_columns;
}
function manage_users_custom_column($value, $column_name, $user_id){
if ($column_name == 'group') {
$group = wpcom_get_user_group($user_id);
if ( $group ) return $group->name;
}
return $value;
}
function restrict_manage_users($which){
$change = $which == 'bottom' ? 'change_group2' : 'change_group';
$change_btn = $which == 'bottom' ? 'change_btn2' : 'change_btn';
$change_group = isset($_REQUEST['change_btn']) ? (isset($_REQUEST['change_group']) ? $_REQUEST['change_group'] : '') : (isset($_REQUEST['change_group2']) ? $_REQUEST['change_group2'] : '');
$filter = $which == 'bottom' ? 'filter_group2' : 'filter_group';
$filter_btn = $which == 'bottom' ? 'filter_btn2' : 'filter_btn';
$filter_group = isset($_REQUEST['filter_btn']) ? (isset($_REQUEST['filter_group']) ? $_REQUEST['filter_group'] : '') : (isset($_REQUEST['filter_group2']) ? $_REQUEST['filter_group2'] : '');
$groups = get_terms(array(
'taxonomy' => 'user-groups',
'hide_empty' => false,
));
?>
<div style="display: inline-block;margin-left: 10px;">
<label class="screen-reader-text" for="<?php echo $change; ?>">分组变更</label>
<select name="<?php echo $change; ?>" id="<?php echo $change; ?>">
<option value="">将分组变更为...</option>
<?php
foreach ($groups as $group) { ?>
<option value="<?php echo esc_attr($group->slug); ?>" <?php selected($group->slug, $change_group); ?>><?php echo $group->name; ?></option>
<?php } ?>
</select>
<input name="<?php echo $change_btn; ?>" class="button" value="<?php _e('Change'); ?>" type="submit"/>
</div>
<div style="display: inline-block">
<label class="screen-reader-text" for="<?php echo $filter; ?>"><?php _e('User Groups', WPCMP_TD); ?></label>
<select name="<?php echo $filter; ?>" id="<?php echo $filter; ?>">
<option value="">筛选用户分组</option>
<?php
foreach ($groups as $group) { ?>
<option value="<?php echo esc_attr($group->slug); ?>" <?php selected($group->slug, $filter_group); ?>><?php echo $group->name; ?></option>
<?php } ?>
</select>
<input name="<?php echo $filter_btn; ?>" class="button" value="<?php _e('Filter'); ?>" type="submit"/>
</div>
<div style="display: inline-block;margin-left: 10px;">
<input name="update-default-groups" class="button button-primary" value="更新无分组用户" type="submit"/>
</div>
<?php
}
function filter_users_by_groups($query){
global $pagenow;
if (is_admin() && 'users.php' == $pagenow && (isset($_REQUEST['filter_btn']) || isset($_REQUEST['filter_btn2']))) {
$filter_group = isset($_REQUEST['filter_btn']) ? $_REQUEST['filter_group'] : $_REQUEST['filter_group2'];
$group = get_term_by('slug', $filter_group, 'user-groups');
$users = get_objects_in_term($group->term_id, 'user-groups');
$query->set('include', $users);
}
}
function change_users_group(){
global $pagenow;
if ( is_admin() && 'users.php' == $pagenow && (isset($_REQUEST['change_btn']) || isset($_REQUEST['change_btn2'])) ) {
$change_group = isset($_REQUEST['change_btn']) ? $_REQUEST['change_group'] : $_REQUEST['change_group2'];
$uids = isset($_REQUEST['users']) ? $_REQUEST['users'] : '';
if( $change_group && $uids ){
foreach ( $uids as $id ){
wp_set_object_terms( $id, array( $change_group ), 'user-groups', false );
}
}
}
}
function set_default_user_groups(){
global $pagenow, $options;
if( current_user_can( 'edit_users' ) && 'users.php' == $pagenow && isset($_REQUEST['update-default-groups']) && $_REQUEST['update-default-groups'] != '') {
$default_group = isset($options['member_group']) && $options['member_group'] ? $options['member_group'] : '';
if( !$default_group ) return false;
$users = get_users( array('number' => -1) );
foreach ( $users as $user ) {
$group = wp_get_object_terms( $user->ID, 'user-groups' );
if ( is_wp_error($group) || !isset($group[0]) ) {
wp_set_object_terms( $user->ID, array( (int)$default_group ), 'user-groups', false );
clean_object_term_cache( $user->ID, 'user-groups' );
}
}
}
}
function display_name($name, $user_id, $type=''){
if($type=='full'){
$group = wpcom_get_user_group($user_id);
if ( $group ) $name .= '<span class="user-group">'.$group->name.'</span>';
}
return $name;
}
}