View difference between Paste ID: CagwpVNH and J5CyKrZV
SHOW: | | - or go back to the newest paste.
1
<?php
2
/*
3
Plugin Name: Change The Role
4
Plugin URI: https://ja.forums.wordpress.org/topic/141608
5
Version: 0.1a.20141031
6
Author: mizube
7
Author URI: https://ja.forums.wordpress.org/profile/419438
8
Text Domain: change-the-role
9
Domain Path: /languages/
10
Description: Enables users to change the user role in some roles.
11
*/
12
13-
add_action( 'plugins_loaded', array( 'EnableRoleChange', '__boot' ) );
13+
add_action( 'plugins_loaded', array( 'ChangeTheRole', '__boot' ) );
14-
register_deactivation_hook( __FILE__, array( 'EnableRoleChange', 'deactivated' ) );
14+
register_deactivation_hook( __FILE__, array( 'ChangeTheRole', 'deactivated' ) );
15
16-
class EnableRoleChange {
16+
class ChangeTheRole {
17
18
	public $textdomain = 'change-the-role';
19
20
	public static function __boot() {
21
		$class = __CLASS__;
22
		new $class();
23
	}
24
25
	public function __construct() {
26
		load_plugin_textdomain( $this->textdomain, false, basename( dirname( __FILE__ ) ) . '/languages/' );
27
28
		add_action( 'personal_options_update', array( $this, 'action_personal_options_update' ) );
29
		add_action( 'personal_options', array( $this, 'action_personal_options' ) );
30
		add_action( 'admin_init', array( $this, 'action_admin_init' ) );
31
	}
32
33
	public function action_personal_options_update( $user_id ) {
34
		if ( !$user_id || !isset( $_POST['erc_role'] ) || !current_user_can( 'edit_user', $user_id ) )
35
			return;
36
37
		$erc_roles = get_option( 'erc_changeable_roles', array() );
38
		$erc_role  = sanitize_text_field( $_POST['erc_role'] );
39
40
		if ( !in_array( $erc_role, $erc_roles ) )
41
			return;
42
43
		$user_roles = get_userdata( $user_id )->roles;
44
		$has_roles  = false;
45
46
		foreach ( $user_roles as $user_role ) {
47
			if ( in_array( $user_role, $erc_roles ) ) {
48
				$has_roles = true;
49
				break;
50
			}
51
		}
52
53
		if ( !$has_roles ) return;
54
55
		$wp_user = new WP_User( $user_id );
56
		$wp_user->set_role( $erc_role );
57
		unset( $wp_user );
58
	}
59
60
	public function action_personal_options( $profileuser ) {
61
		global $wp_roles;
62
63
		$role_names = $wp_roles->get_names();
64
		$erc_roles  = get_option( 'erc_changeable_roles', array() );
65
		$has_roles  = false;
66
67
		foreach ( $profileuser->roles as $user_role ) {
68
			if ( in_array( $user_role, $erc_roles ) ) {
69
				$has_roles = true;
70
				break;
71
			}
72
		}
73
74
		if ( !empty( $erc_roles ) && $has_roles && !current_user_can( 'edit_users' ) ) {
75
			echo '<table class="form-table"><tr><th scope="row"><label for="erc_role">' . __( 'Role' ) . '</label></th><td>';
76
			echo '<select name="erc_role" id="erc_role">';
77
			foreach ( $erc_roles as $role ) {
78
				echo '<option value="' . $role . '"'
79
					. selected( in_array( $role, $profileuser->roles ), true, false ) . '>'
80
					. translate_user_role( $role_names[$role] ) . '</option>';
81
			}
82
			echo '</select>';
83
			echo '</td></tr></table>';
84
		}
85
	}
86
87
	public function action_admin_init() {
88
		add_settings_field(
89
			'erc_changeable_roles',
90
			__( 'Changeable Roles', $this->textdomain ),
91
			array( $this, 'callback_render_roles_list' ),
92
			'general',
93
			'default'
94
		);
95
		register_setting( 'general', 'erc_changeable_roles' );
96
	}
97
98
	public function callback_render_roles_list() {
99
		global $wp_roles;
100
		$roles  = $wp_roles->get_names();
101
		$option = get_option( 'erc_changeable_roles', array() );
102
		echo '<ul>';
103
		foreach ( $roles as $role => $label ) {
104
			if( isset( $wp_roles->roles[$role]['capabilities']['manage_options'] ) ) continue;
105
			echo '<li><label><input type="checkbox" name="erc_changeable_roles[]" value="' . $role . '" '
106
				. checked( in_array( $role, $option ), true, false ) . ' /> '
107
				. translate_user_role( $label ) . '</label></li>';
108
		}
109
		echo '</ul>';
110
	}
111
112-
	public function deactivated() {
112+
	public static function deactivated() {
113
		delete_option( 'erc_changeable_roles' );
114
	}
115
}