WordPress.org

Make WordPress Core

Ticket #23295: 23295-2.patch

File 23295-2.patch, 8.7 KB (added by azaozz, 5 years ago)
  • wp-admin/css/wp-admin.css

     
    283283body.login {
    284284        background: #fbfbfb;
    285285        min-width: 0;
     286        height: auto;
    286287}
    287288
    288289iframe,
     
    66646665
    66656666#login {
    66666667        width: 320px;
    6667         padding: 114px 0 0;
     6668        padding: 114px 0 5%;
    66686669        margin: auto;
    66696670}
    66706671
     
    67296730        width: auto;
    67306731}
    67316732
     6733.interim-login #login {
     6734        padding: 8% 0;
     6735}
    67326736
     6737
    67336738/* ms */
    67346739/* Dashboard: MS Specific Data */
    67356740#dashboard_right_now p.musub {
  • wp-includes/class-wp-auth-check.php

     
     1<?php
     2/**
     3 * Test the user's current authorization state
     4 *
     5 * @package WordPress
     6 * @since 3.6.0
     7 */
     8class WP_Auth_Check {
     9
     10        /**
     11         * Holds the singleton instance of this object
     12         */
     13        private static $_instance = null;
     14
     15        /**
     16         * Private constructor because we're a singleton
     17         */
     18        private function __construct() {}
     19
     20        /**
     21         * Initialize the singleton
     22         */
     23        public static function get_instance() {
     24                $this_class = get_called_class(); // gets the right class when this is extended
     25                if ( ! ( self::$_instance instanceof $this_class ) ) {
     26                        self::$_instance = new $this_class;
     27                        self::$_instance->_init();
     28                }
     29
     30                return self::$_instance;
     31        }
     32
     33        /**
     34         * Object init, sets up hooks. Not done in the constructor so that the
     35         * _init() method may be extended without breaking the singleton.
     36         */
     37        protected function _init() {
     38                if ( is_admin() ) {
     39                        add_action( 'admin_footer', array( $this, 'enqueue_scripts' ) );
     40                        add_action( 'admin_print_footer_scripts', array( $this, 'footer_js' ) );
     41                } elseif ( is_user_logged_in() ) {
     42                        add_action( 'wp_footer', array( $this, 'enqueue_scripts' ) );
     43                        add_action( 'wp_print_footer_scripts', array( $this, 'footer_js' ) );
     44                }
     45
     46                add_filter( 'heartbeat_received', array( $this, 'test_login' ), 10, 2 );
     47                add_filter( 'heartbeat_nopriv_received', array( $this, 'nopriv_login' ), 10, 2 );
     48        }
     49
     50        public function test_login( $response, $data ) {
     51                if ( array_key_exists('wp-auth-check', $data) && ( ! isset( $_COOKIE[LOGGED_IN_COOKIE] ) || ! wp_validate_auth_cookie() || ! empty( $GLOBALS['login_grace_period'] ) ) )
     52                        $response['wp-auth-check-html'] = $this->show_notice();
     53
     54                return $response;
     55        }
     56
     57        public function nopriv_login( $response, $data ) {
     58                if ( array_key_exists('wp-auth-check', $data) )
     59                        $response['wp-auth-check-html'] = $this->show_notice();
     60
     61                return $response;
     62        }
     63       
     64        public function footer_js() {
     65                ?>
     66                <script>
     67                (function($){
     68                        $( document ).on( 'heartbeat-tick.wp-auth-check', function( e, data ) {
     69                                var element = $('#wp-auth-check-notice-wrap');
     70
     71                                if ( data['wp-auth-check-html'] && ! element.length ) {
     72                                        $('body').append( data['wp-auth-check-html'] );
     73                                } else if ( !data['wp-auth-check-html'] && element.length ) {
     74                                        if ( $('#wp-auth-check-notice').length )
     75                                                element.remove();
     76                                }
     77                        }).on( 'heartbeat-send.wp-auth-check', function( e, data ) {
     78                                data['wp-auth-check'] = 1;
     79                        });
     80                }(jQuery));
     81                </script>
     82                <?php
     83        }
     84
     85        /**
     86         * Enqueue scripts
     87         */
     88        public function enqueue_scripts() {
     89                // This will also enqueue jQuery
     90                wp_enqueue_script( 'heartbeat' );
     91        }
     92
     93        /**
     94         * Adds a div for displaying the login notice
     95         */
     96        public function show_notice() {
     97                $warning = !empty( $GLOBALS['login_grace_period'] ) ? __( 'Your login will expire soon, please log in again.' ) : __( 'Oops! Looks like you are not logged in.' );
     98               
     99                // Inline CSS because it keeps the notice container portable.
     100                return '
     101                        <div id="wp-auth-check-notice-wrap">
     102                        <style type="text/css" scoped>
     103                                #wp-auth-check-notice,
     104                                #wp-auth-check-form {
     105                                        background-color: rgba(0, 0, 0, 0.7);
     106                                        color: #FFFFFF;
     107                                        font-size: 1.5em;
     108                                        text-align: center;
     109                                        position: fixed;
     110                                        margin: 0;
     111                                        padding: 3%;
     112                                        -webkit-border-radius: 10px;
     113                                        border-radius: 10px;
     114                                        z-index: 1000000000;
     115                                        text-align: center;
     116                                }
     117                                #wp-auth-check-notice {
     118                                        top: 25%;
     119                                        left: 25%;
     120                                        width: 50%;
     121                                }
     122                                #wp-auth-check-form {
     123                                        display: none;
     124                                        top: 7%;
     125                                        left: 7%;
     126                                        width: 80%;
     127                                        height: 75%;
     128                                        padding: 3% 3% 6%;
     129                                }
     130                                #wp-auth-check-form iframe {
     131                                        width: 100%;
     132                                        height: 100%;
     133                                        border-radius: 3px;
     134                                }
     135                        </style>
     136                        <div id="wp-auth-check-inner">
     137                                <div id="wp-auth-check-notice">
     138                                        <p>' . $warning . '</p>
     139                                        <p><a href="#" class="button wp-auth-check-open">' . __( 'Log in' ) . '</a></p>
     140                                        <p>' . __( 'You will not leave this screen.' ) . '</p>
     141                                </div>
     142                                <div id="wp-auth-check-form">
     143                                        <iframe src="' . esc_url( add_query_arg( array( 'interim-login' => 1 ), wp_login_url() ) ) . '"></iframe>
     144                                        <p><a href="#" class="button wp-auth-check-close">' . __( 'Close' ) . '</a></p>
     145                                </div>
     146                        </div>
     147                        <script type="text/javascript">
     148                        (function($){
     149                                var notice = $("#wp-auth-check-notice"), form = $("#wp-auth-check-form"), buttons;
     150
     151                                notice.find("a.wp-auth-check-open").on("click", function(e){
     152                                        notice.fadeOut(200, function(){ $(this).remove(); });
     153                                        form.show().fadeIn(250);
     154                                });
     155
     156                                form.find("a.wp-auth-check-close").on("click", function(e){
     157                                        form.fadeOut(200, function(){ $("#wp-auth-check-notice-wrap").remove(); });
     158                                });
     159
     160                                if ( ! $("#wp-auth-check-notice-wrap").length )
     161                                        $("body").append( data["wp-auth-check-html"] );
     162                        }(jQuery));
     163                        </script>
     164                        </div>
     165                ';
     166        }
     167}
     168
  • wp-includes/class-wp-auth-check.php

  • wp-includes/default-filters.php

    Property changes on: wp-includes/class-wp-auth-check.php
    ___________________________________________________________________
    Added: svn:eol-style
    ## -0,0 +1 ##
    +native
    \ No newline at end of property
     
    294294// Default settings for heartbeat
    295295add_filter( 'heartbeat_settings', 'wp_heartbeat_settings' );
    296296
     297// Set the default screens where we check if the user is logged out
     298add_action( 'admin_init', 'wp_auth_check_load' );
     299
    297300unset($filter, $action);
  • wp-includes/functions.php

     
    38833883 */
    38843884function wp_checkdate( $month, $day, $year, $source_date ) {
    38853885        return apply_filters( 'wp_checkdate', checkdate( $month, $day, $year ), $source_date );
    3886 }
    3887  No newline at end of file
     3886}
     3887
     3888/**
     3889 * Load the auth check, for monitoring whether the user is still logged in
     3890 *
     3891 * @since 3.6.0
     3892 *
     3893 * @return void
     3894 */
     3895function wp_auth_check_load() {
     3896        if ( ! class_exists('WP_Auth_Check') ) {
     3897                require( ABSPATH . WPINC . '/class-wp-auth-check.php' );
     3898                WP_Auth_Check::get_instance();
     3899        }
     3900}
  • wp-login.php

     
    8282        $login_header_url   = apply_filters( 'login_headerurl',   $login_header_url   );
    8383        $login_header_title = apply_filters( 'login_headertitle', $login_header_title );
    8484
    85         // Don't allow interim logins to navigate away from the page.
    86         if ( $interim_login )
    87                 $login_header_url = '#';
    88 
    8985        $classes = array( 'login-action-' . $action, 'wp-core-ui' );
    9086        if ( wp_is_mobile() )
    9187                $classes[] = 'mobile';
    9288        if ( is_rtl() )
    9389                $classes[] = 'rtl';
     90        if ( $interim_login ) {
     91                // Don't allow interim logins to navigate away from the page.
     92                $login_header_url = '#';
     93                $classes[] = 'interim-login';
     94        }
     95
    9496        $classes = apply_filters( 'login_body_class', $classes, $action );
     97       
    9598        ?>
    9699        </head>
    97100        <body class="login <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
     
    613616                if ( $interim_login ) {
    614617                        $message = '<p class="message">' . __('You have logged in successfully.') . '</p>';
    615618                        login_header( '', $message ); ?>
    616 
    617                         <?php if ( ! $customize_login ) : ?>
    618                         <script type="text/javascript">setTimeout( function(){window.close()}, 8000);</script>
    619                         <p class="alignright">
    620                         <input type="button" class="button-primary" value="<?php esc_attr_e('Close'); ?>" onclick="window.close()" /></p>
    621                         <?php endif; ?>
    622619                        </div>
    623620                        <?php do_action( 'login_footer' ); ?>
    624621                        <?php if ( $customize_login ) : ?>