WordPress.org

Make WordPress Core

Ticket #18693: 18693-2.patch

File 18693-2.patch, 5.2 KB (added by WraithKenny, 7 years ago)

Pointers API

  • wp-admin/includes/template.php

     
    16301630}
    16311631
    16321632/**
    1633  * Initializes the new feature pointers.
     1633 * Special function for managing WP one off pointer registrations.
    16341634 *
     1635 * @since 3.3-aortic-dissection
     1636 *
     1637 * It's likely better to call wp_register_pointer() in somewhere in upgrade.php
     1638 * So that this function isn't necassary. Up for discussion
     1639 */
     1640function wp_core_pointers() {
     1641        $pointer = 'wp330-admin-bar';
     1642       
     1643        $done = (array) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
     1644       
     1645        if ( ! in_array( $pointer, $done ) && apply_filters( 'show_wp_pointer_admin_bar', true ) ) {
     1646                wp_register_pointer( $pointer, '_wp_pointer_print_admin_bar' );
     1647                $done[] = $pointer;
     1648                update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $done );
     1649               
     1650        }
     1651}
     1652add_action( 'admin_enqueue_scripts', 'wp_core_pointers' );
     1653
     1654/**
     1655 * Register a pointer.
     1656 *
    16351657 * @since 3.3.0
    16361658 *
    1637  * Pointer user settings:
    1638  *    p0 - Admin bar pointer, added 3.3.
     1659 * Should only be called where the code is executed once, for example, on upgrade, install, or on user-action.
     1660 *
    16391661 */
     1662function wp_register_pointer( $pointer, $callback, $hook_suffix = 'all', $args = array() ) {
     1663        $queued = (array) get_user_meta( get_current_user_id(), 'queued_wp_pointers', true );
     1664        $queued[ $hook_suffix ][ $pointer ] = array_merge( array( 'callback' => $callback ), $args );
     1665        update_user_meta( get_current_user_id(), 'queued_wp_pointers', $queued );
     1666}
     1667
     1668/**
     1669 * Initializes the new feature pointers.
     1670 *
     1671 * @since 3.3.0
     1672 */
    16401673function wp_pointer_enqueue( $hook_suffix ) {
    1641         $enqueue = false;
    1642 
    1643         $admin_bar = get_user_setting( 'p0', 0 );
    1644         if ( ! $admin_bar && apply_filters( 'show_wp_pointer_admin_bar', true ) ) {
    1645                 $enqueue = true;
    1646                 add_action( 'admin_print_footer_scripts', '_wp_pointer_print_admin_bar' );
     1674        $queued = (array) get_user_meta( get_current_user_id(), 'queued_wp_pointers', true );
     1675       
     1676        if ( empty( $queued[ 'all' ] ) && empty( $queued[ $hook_suffix] ) ) return;
     1677       
     1678        if ( ! empty( $queued[ 'all' ] ) ) {
     1679                foreach( $queued[ 'all' ] as $pointer ) {
     1680                        add_action( 'admin_print_footer_scripts', $pointer[ 'callback' ] );
     1681                }
    16471682        }
    1648 
    1649         if ( $enqueue ) {
    1650                 wp_enqueue_style( 'wp-pointer' );
    1651                 wp_enqueue_script( 'wp-pointer' );
    1652                 wp_enqueue_script( 'utils' );
     1683        if ( ! empty( $queued[ $hook_suffix] ) ) {
     1684                foreach( $queued[ $hook_suffix] as $pointer ) {
     1685                        add_action( 'admin_print_footer_scripts', $pointer[ 'callback' ] );
     1686                }
    16531687        }
     1688        wp_enqueue_style( 'wp-pointer' );
     1689        wp_enqueue_script( 'wp-pointer' );
     1690        wp_enqueue_script( 'utils' );
    16541691}
    16551692add_action( 'admin_enqueue_scripts', 'wp_pointer_enqueue' );
    16561693
     1694/**
     1695 * Prints admin_bar pointer.
     1696 *
     1697 * @since 3.3.0
     1698 */
    16571699function _wp_pointer_print_admin_bar() {
    1658         $pointer_content  = '<h3>' . ('The admin bar has been updated in WordPress 3.3.') . '</h3>';
    1659         $pointer_content .= '<p>' . sprintf( ('Have some feedback? Visit this <a href="%s">ticket</a>.'), 'http://core.trac.wordpress.org/ticket/18197' ) . '</p>';
    1660         $pointer_content .= '<p>' . sprintf( ('P.S. You are looking at a new admin pointer. Chime in <a href="%s">here</a>.'), 'http://core.trac.wordpress.org/ticket/18693' ) . '</p>';
     1700        $pointer_content  = '<h3>' . __('The admin bar has been updated in WordPress 3.3.') . '</h3>';
     1701        $pointer_content .= '<p>' . sprintf( __('Have some feedback? Visit this <a href="%s">ticket</a>.'), 'http://core.trac.wordpress.org/ticket/18197' ) . '</p>';
     1702        $pointer_content .= '<p>' . sprintf( __('P.S. You are looking at a new admin pointer. Chime in <a href="%s">here</a>.'), 'http://core.trac.wordpress.org/ticket/18693' ) . '</p>';
    16611703
    1662 ?>
    1663 <script type="text/javascript">
    1664 //<![CDATA[
    1665 jQuery(document).ready( function($) {
    1666         $('#wpadminbar').pointer({
    1667                 content: '<?php echo $pointer_content; ?>',
    1668                 position: {
    1669                         my: 'left top',
    1670                         at: 'center bottom',
    1671                         offset: '-25 0'
    1672                 },
     1704?> 
     1705<script type="text/javascript"> 
     1706//<![CDATA[ 
     1707jQuery(document).ready( function($) { 
     1708        $('#wpadminbar').pointer({ 
     1709                content: '<?php echo $pointer_content; ?>', 
     1710                position: { 
     1711                        my: 'left top', 
     1712                        at: 'center bottom', 
     1713                        offset: '-25 0' 
     1714                }, 
    16731715                close: function() {
    1674                         setUserSetting( 'p0', '1' );
    1675                 }
    1676         }).pointer('open');
    1677 });
    1678 //]]>
    1679 </script>
    1680 <?php
     1716                        $.post( ajaxurl, {
     1717                                pointer: 'wp330-admin-bar',
     1718                //              _ajax_nonce: $('#_ajax_nonce').val(),
     1719                                action: 'dismiss-wp-pointer'
     1720                        });
     1721                }
     1722        }).pointer('open');
     1723});
     1724//]]>
     1725</script>
     1726<?php
    16811727}
     1728
     1729/**
     1730 * Removes a pointer via AJAX.
     1731 *
     1732 * @since 3.3.0
     1733 */
     1734function dismiss_wp_pointer() {
     1735        $pointer = sanitize_key( $_POST[ 'pointer' ] );
     1736       
     1737        $hook_suffix = ( isset( $_POST[ 'page' ] ) ) ? sanitize_key( $_POST[ 'page' ] ): 'all';
     1738       
     1739        //      check_ajax_referer( 'dismiss-pointer_' . $pointer );
     1740         
     1741        $queued = (array) get_user_meta( get_current_user_id(), 'queued_wp_pointers', true );
     1742        if ( empty( $queued[ $hook_suffix ][ $pointer ] ) )
     1743                die( '0' );
     1744       
     1745        unset( $queued[ $hook_suffix ][ $pointer ] );
     1746
     1747        update_user_meta( get_current_user_id(), 'queued_wp_pointers', $queued );
     1748       
     1749        die( '1' );
     1750        break;
     1751}
     1752add_action( 'wp_ajax_dismiss-wp-pointer', 'dismiss_wp_pointer' );
     1753
     1754?>