self::get_developer_access_link(), 'btn_text' => self::$enableDevAccessBtnText, 'btn_desc' => self::$enableDevAccessBtnDesc ) ); } public static function revoke_developer_access() { check_ajax_referer( 'stm_action_developer_access', 'security' ); if ( !current_user_can( 'manage_options' ) ) { wp_send_json( array( 'error' => 'No access', 'code' => 401 ) ); } if ( delete_transient( 'stm_developer_access_token' ) ) { wp_send_json( array( 'btn_text' => self::$genDevAccessBtnText, 'btn_desc' => self::$genDevAccessBtnDesc ) ); } wp_send_json( array( 'error' => '403 Forbidden', 'code' => 403 ) ); } public static function get_developer_access() { return get_transient( 'stm_developer_access_token' ); } public static function get_developer_access_link() { if ( !current_user_can( 'manage_options' ) || !self::get_developer_access() ) { return; } $admins = get_users( array( 'fields' => 'role', 'role' => 'administrator' ) ); $link = add_query_arg( array( 'dev_access_token' => self::get_developer_access(), 'dev_access_id' => $admins[0] ), admin_url() ); return $link; } public static function check_dev_access_query() { if ( isset( $_GET['dev_access_token'] ) && isset( $_GET['dev_access_id'] ) ) { $token = sanitize_text_field( $_GET['dev_access_token'] ); $accessId = abs( $_GET['dev_access_id'] ); self::signin_developer_access( $token, $accessId ); } } public static function signin_developer_access( $token, $accessId ) { if ( self::get_developer_access() === $token ) { if ( $user = get_user_by( 'id', $accessId ) ) { wp_clear_auth_cookie(); wp_set_current_user( $user->ID ); wp_set_auth_cookie( $user->ID ); if ( is_user_logged_in() ) { wp_safe_redirect( admin_url() ); exit; } else { die; } } } } }