summaryrefslogtreecommitdiffstats
path: root/wp-admin/includes/class-wp-internal-pointers.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-admin/includes/class-wp-internal-pointers.php
parentInitial commit. (diff)
downloadwordpress-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.php175
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', '' );
+ }
+}