diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-admin/includes/class-wp-internal-pointers.php | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-admin/includes/class-wp-internal-pointers.php')
-rw-r--r-- | wp-admin/includes/class-wp-internal-pointers.php | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/wp-admin/includes/class-wp-internal-pointers.php b/wp-admin/includes/class-wp-internal-pointers.php new file mode 100644 index 0000000..6d7ebe9 --- /dev/null +++ b/wp-admin/includes/class-wp-internal-pointers.php @@ -0,0 +1,175 @@ +<?php +/** + * Administration API: WP_Internal_Pointers class + * + * @package WordPress + * @subpackage Administration + * @since 4.4.0 + */ + +/** + * Core class used to implement an internal admin pointers API. + * + * @since 3.3.0 + */ +#[AllowDynamicProperties] +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: + * + * function yourprefix_remove_pointers() { + * remove_action( + * 'admin_print_footer_scripts', + * array( 'WP_Internal_Pointers', 'pointer_wp390_widgets' ) + * ); + * } + * add_action( 'admin_enqueue_scripts', 'yourprefix_remove_pointers', 11 ); + * + * @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( + // None currently. + ); + + // 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( + // None currently. + ); + + // 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' ); + } + + /** + * Prints the pointer JavaScript data. + * + * @since 3.3.0 + * + * @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 + $( function() { + 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() {} + public static function pointer_wp496_privacy() {} + + /** + * Prevents new users from seeing existing 'new feature' pointers. + * + * @since 3.3.0 + * + * @param int $user_id User ID. + */ + public static function dismiss_pointers_for_new_users( $user_id ) { + add_user_meta( $user_id, 'dismissed_wp_pointers', '' ); + } +} |