diff --git a/class/class.al_ext.php b/class/class.al_ext.php index a519431..a0036a7 100644 --- a/class/class.al_ext.php +++ b/class/class.al_ext.php @@ -68,6 +68,9 @@ if ( ! class_exists( 'AL_EXT' ) ) { * @throws Exception */ public function can_logged_in_extend() { + if ( $this->is_exclude_user() ) { + return; + } if ( isset( $_COOKIE[ al_ext_config::AL_EXT_TMP_COOKIE ] ) && is_user_logged_in() ) { $prev_time = new DateTime( date( 'Y-m-d H:i:s', $_COOKIE[ al_ext_config::AL_EXT_TMP_COOKIE ] ) ); $current_time = new DateTime( date( 'Y-m-d H:i:s' ) ); @@ -112,6 +115,20 @@ if ( ! class_exists( 'AL_EXT' ) ) { } } + //自動ログアウト除外ユーザ判定 + private function is_exclude_user(): bool { + if ( ! is_user_logged_in() ) { + return false; + } + $excludes = get_option( '_al_ext' )['exclude_users']; + $current_user_role = wp_get_current_user()->roles[0]; + if ( $excludes[ $current_user_role ] == '1' ) { + return true; + } + + return false; + } + } } diff --git a/class/class.al_ext_setting.php b/class/class.al_ext_setting.php index 29b54b9..d5823e9 100644 --- a/class/class.al_ext_setting.php +++ b/class/class.al_ext_setting.php @@ -33,13 +33,13 @@ if ( ! class_exists( 'AL_EXT_SETTING' ) ) { update_option( '_al_ext', $update_option ); include al_ext_config::AL_EXT_TEMPLATE_DIR . 'success.php'; } - $opt = get_option( '_al_ext' ); $al_ext_type = $this->set_al_ext_parameter( $opt, 'type', al_ext_config::AL_EXT_DEFAULT_LOGOUT_TYPE ); $expire_date = $this->set_al_ext_parameter( $opt, 'expire_date', al_ext_config::AL_EXT_DEFAULT_EXPIRE_DATE ); $force_logout = $this->set_al_ext_parameter( $opt, 'force_logout', al_ext_config::AL_EXT_DEFAULT_EXPIRE_TIME ); $force_logout_url = $this->set_al_ext_parameter( $opt, 'force_logout_url', '' ); $default_logout_url = al_ext_config::get_default_logout_url(); + $exclude_users = $this->create_exclude_user_data(); include al_ext_config::AL_EXT_TEMPLATE_DIR . 'al_ext_form.php'; } @@ -51,6 +51,28 @@ if ( ! class_exists( 'AL_EXT_SETTING' ) ) { } } + private function create_exclude_user_data(): array { + return array( + 'administrator' => '管理者', + 'editor' => '編集者', + 'author' => '投稿者', + 'contributor' => '寄稿者', + 'subscriber' => '購読者', + ); + } + + private function check_exclude_user( $user_role ) { + $opt = get_option( '_al_ext' ); + if ( ! isset( $opt['exclude_users'] ) ) { + return; + } + foreach ( $opt['exclude_users'] as $user => $role ) { + if ( $user_role == $user ) { + return $role; + } + } + } + } } \ No newline at end of file diff --git a/css/al_ext.css b/css/al_ext.css index 0a1acdb..7b8dccb 100644 --- a/css/al_ext.css +++ b/css/al_ext.css @@ -31,4 +31,18 @@ .logout-redirect-url::placeholder { color: #999; +} + +#logout-exclude-users { + margin-top: .5em; +} + +.logout-exclude-user { + margin: .5em 0; +} + +@media only screen and (max-width: 964px) { + .logout-redirect-url { + width: 100%; + } } \ No newline at end of file diff --git a/js/al_ext.js b/js/al_ext.js index 94a6840..876e839 100644 --- a/js/al_ext.js +++ b/js/al_ext.js @@ -7,6 +7,7 @@ jQuery(function ($) { let my_type = $('.logout-type_radio'); let expire_date = $('.expire-date'); let force_logout = $('.force-logout'); + let exclude_user = $('.select_exclude_checkbox') my_type.each(function () { if ($(this).prop('checked') == true) { @@ -15,6 +16,7 @@ jQuery(function ($) { } if ($(this).val() == 1) { force_logout.prop('disabled', true); + exclude_user.prop('disabled', true); } } }); @@ -22,14 +24,20 @@ jQuery(function ($) { my_type.click(function () { if ($(this).val() == 1) { force_logout.prop('disabled', true); + exclude_user.prop('checked', false); + exclude_user.prop('disabled', true); } else { force_logout.prop('disabled', false); + exclude_user.prop('disabled', false); } if ($(this).val() == 2) { expire_date.prop('disabled', true); } else { expire_date.prop('disabled', false); } - }) + }); + + } + }); \ No newline at end of file diff --git a/template/al_ext_form.php b/template/al_ext_form.php index 249820c..eb0cc0a 100644 --- a/template/al_ext_form.php +++ b/template/al_ext_form.php @@ -46,14 +46,18 @@ ログイン状態の保存期間 日 + value="" min="1" max="500"> 日(1〜500日) 自動ログアウト時間 分 + value="" min="1" max="120"> 分(1〜120分) +
+ 自動ログアウト除外ユーザ + +
diff --git a/template/al_ext_user.php b/template/al_ext_user.php new file mode 100644 index 0000000..cf03109 --- /dev/null +++ b/template/al_ext_user.php @@ -0,0 +1,14 @@ + $exclude_user ): ?> +
+ +
+ \ No newline at end of file diff --git a/trait/al_ext_force_trait.php b/trait/al_ext_force_trait.php index 93858d2..4c6ee98 100644 --- a/trait/al_ext_force_trait.php +++ b/trait/al_ext_force_trait.php @@ -15,6 +15,10 @@ if ( ! trait_exists( 'al_ext_force_trait' ) ) { * 自動ログアウトの一時Cookie作成 */ public function set_force_al_ext_cookie() { + //自動ログアウト除外ユーザの判定 + if($this->is_exclude_user()){ + return; + } //ログイン+一時Cookieが存在する場合、一時Cookieを更新する if ( isset( $_COOKIE[ al_ext_config::AL_EXT_TMP_COOKIE ] ) && is_user_logged_in() ) { $this->create_tmp_cookie(); diff --git a/trait/al_ext_trait.php b/trait/al_ext_trait.php index 91128b7..5135555 100644 --- a/trait/al_ext_trait.php +++ b/trait/al_ext_trait.php @@ -13,6 +13,10 @@ if ( ! trait_exists( 'al_ext_trait' ) ) { * 拡張ログアウトの一時Cookie作成 */ public function set_al_ext_cookie() { + //自動ログアウト除外ユーザの判定 + if ( $this->is_exclude_user() ) { + return; + } if ( is_user_logged_in() ) { //rememberme cookieが存在する場合は一時Cookieを作成する if ( isset( $_COOKIE[ al_ext_config::AL_EXT_REMEMBER_COOKIE ] )