2015-09-16 11:35:23 -04:00
< ? php
/**
2015-09-22 10:35:25 -04:00
* Administration API : WP_Internal_Pointers class
2015-09-16 11:35:23 -04:00
*
* @ package WordPress
* @ subpackage Administration
* @ since 4.4 . 0
*/
2015-09-22 10:35:25 -04:00
/**
* Core class used to implement an internal admin pointers API .
*
* @ since 3.3 . 0
*/
2015-09-16 11:35:23 -04:00
final class WP_Internal_Pointers {
/**
* Initializes the new feature pointers .
*
* @ since 3.3 . 0
*
* All pointers can be disabled using the following :
* remove_action ( 'admin_enqueue_scripts' , array ( 'WP_Internal_Pointers' , 'enqueue_scripts' ) );
*
* Individual pointers ( e . g . wp390_widgets ) can be disabled using the following :
* remove_action ( 'admin_print_footer_scripts' , array ( 'WP_Internal_Pointers' , 'pointer_wp390_widgets' ) );
*
* @ static
*
* @ param string $hook_suffix The current admin page .
*/
public static function enqueue_scripts ( $hook_suffix ) {
/*
* Register feature pointers
*
* Format :
* array (
* hook_suffix => pointer callback
* )
*
* Example :
* array (
* 'themes.php' => 'wp390_widgets'
* )
*/
$registered_pointers = array (
2018-05-03 15:52:26 -04:00
'index.php' => 'wp496_privacy' ,
2015-09-16 11:35:23 -04:00
);
// Check if screen related pointer is registered
if ( empty ( $registered_pointers [ $hook_suffix ] ) )
return ;
$pointers = ( array ) $registered_pointers [ $hook_suffix ];
/*
* Specify required capabilities for feature pointers
*
* Format :
* array (
* pointer callback => Array of required capabilities
* )
*
* Example :
* array (
* 'wp390_widgets' => array ( 'edit_theme_options' )
* )
*/
$caps_required = array (
2018-05-03 15:52:26 -04:00
'wp496_privacy' => array (
'manage_privacy_options' ,
'export_others_personal_data' ,
'erase_others_personal_data' ,
),
2015-09-16 11:35:23 -04:00
);
// Get dismissed pointers
$dismissed = explode ( ',' , ( string ) get_user_meta ( get_current_user_id (), 'dismissed_wp_pointers' , true ) );
$got_pointers = false ;
foreach ( array_diff ( $pointers , $dismissed ) as $pointer ) {
if ( isset ( $caps_required [ $pointer ] ) ) {
foreach ( $caps_required [ $pointer ] as $cap ) {
if ( ! current_user_can ( $cap ) )
continue 2 ;
}
}
// Bind pointer print function
add_action ( 'admin_print_footer_scripts' , array ( 'WP_Internal_Pointers' , 'pointer_' . $pointer ) );
$got_pointers = true ;
}
if ( ! $got_pointers )
return ;
// Add pointers script and style to queue
wp_enqueue_style ( 'wp-pointer' );
wp_enqueue_script ( 'wp-pointer' );
}
/**
* Print the pointer JavaScript data .
*
* @ since 3.3 . 0
*
* @ static
*
* @ param string $pointer_id The pointer ID .
* @ param string $selector The HTML elements , on which the pointer should be attached .
* @ param array $args Arguments to be passed to the pointer JS ( see wp - pointer . js ) .
*/
private static function print_js ( $pointer_id , $selector , $args ) {
if ( empty ( $pointer_id ) || empty ( $selector ) || empty ( $args ) || empty ( $args [ 'content' ] ) )
return ;
?>
< script type = " text/javascript " >
( function ( $ ){
var options = < ? php echo wp_json_encode ( $args ); ?> , setup;
if ( ! options )
return ;
options = $ . extend ( options , {
close : function () {
$ . post ( ajaxurl , {
pointer : '<?php echo $pointer_id; ?>' ,
action : 'dismiss-wp-pointer'
});
}
});
setup = function () {
$ ( '<?php echo $selector; ?>' ) . first () . pointer ( options ) . pointer ( 'open' );
};
if ( options . position && options . position . defer_loading )
$ ( window ) . bind ( 'load.wp-pointers' , setup );
else
$ ( document ) . ready ( setup );
})( jQuery );
</ script >
< ? php
}
public static function pointer_wp330_toolbar () {}
public static function pointer_wp330_media_uploader () {}
public static function pointer_wp330_saving_widgets () {}
public static function pointer_wp340_customize_current_theme_link () {}
public static function pointer_wp340_choose_image_from_library () {}
public static function pointer_wp350_media () {}
public static function pointer_wp360_revisions () {}
public static function pointer_wp360_locks () {}
public static function pointer_wp390_widgets () {}
public static function pointer_wp410_dfw () {}
2018-05-03 15:52:26 -04:00
/**
* Display a pointer for the new privacy tools .
*
* @ since 4.9 . 6
*/
public static function pointer_wp496_privacy () {
2018-05-10 11:54:25 -04:00
$content = '<h3>' . __ ( 'Personal Data and Privacy' ) . '</h3>' ;
2018-05-03 15:52:26 -04:00
$content .= '<h4>' . __ ( 'Personal Data Export and Erasure' ) . '</h4>' ;
$content .= '<p>' . __ ( 'New <strong>Tools</strong> have been added to help you with personal data export and erasure requests.' ) . '</p>' ;
2018-05-10 11:54:25 -04:00
$content .= '<h4>' . __ ( 'Privacy Policy' ) . '</h4>' ;
$content .= '<p>' . __ ( 'Create or select your site’s privacy policy page under <strong>Settings > Privacy</strong> to keep your users informed and aware.' ) . '</p>' ;
2018-05-03 15:52:26 -04:00
if ( is_rtl () ) {
$position = array (
'edge' => 'right' ,
2018-05-14 10:00:26 -04:00
'align' => 'bottom' ,
2018-05-03 15:52:26 -04:00
);
} else {
$position = array (
'edge' => 'left' ,
2018-05-14 10:00:26 -04:00
'align' => 'bottom' ,
2018-05-03 15:52:26 -04:00
);
}
$js_args = array (
'content' => $content ,
'position' => $position ,
2018-05-14 10:00:26 -04:00
'pointerClass' => 'wp-pointer arrow-bottom' ,
'pointerWidth' => 420 ,
2018-05-03 15:52:26 -04:00
);
self :: print_js ( 'wp496_privacy' , '#menu-tools' , $js_args );
}
2015-09-16 11:35:23 -04:00
/**
* Prevents new users from seeing existing 'new feature' pointers .
*
* @ since 3.3 . 0
*
* @ static
*
* @ param int $user_id User ID .
*/
public static function dismiss_pointers_for_new_users ( $user_id ) {
add_user_meta ( $user_id , 'dismissed_wp_pointers' , '' );
}
}