class-fl-builder-admin-pointers.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. * Class that handles showing admin pointers.
  4. *
  5. * @since 1.10.3
  6. */
  7. final class FLBuilderAdminPointers {
  8. /**
  9. * @since 1.10.3
  10. * @var array $pointers
  11. */
  12. static private $pointers = array();
  13. /**
  14. * Initialize.
  15. *
  16. * @since 1.10.3
  17. * @return void
  18. */
  19. static public function init() {
  20. add_action( 'admin_enqueue_scripts', __CLASS__ . '::enqueue_scripts' );
  21. }
  22. /**
  23. * Register a pointer.
  24. *
  25. * @since 1.10.3
  26. * @param array $pointer
  27. * @return void
  28. */
  29. static public function register_pointer( $pointer ) {
  30. self::$pointers[] = $pointer;
  31. }
  32. /**
  33. * Enqueue scripts for showing pointers.
  34. *
  35. * @since 1.10.3
  36. * @return void
  37. */
  38. static public function enqueue_scripts() {
  39. $pointers = array();
  40. foreach ( self::$pointers as $pointer ) {
  41. if ( ! current_user_can( $pointer['cap'] ) || self::is_dismissed( $pointer['id'] ) ) {
  42. continue;
  43. }
  44. $pointers[] = $pointer;
  45. }
  46. if ( empty( $pointers ) ) {
  47. return;
  48. }
  49. wp_enqueue_style( 'wp-pointer' );
  50. wp_enqueue_script( 'wp-pointer' );
  51. wp_enqueue_script(
  52. 'fl-builder-admin-pointers',
  53. FL_BUILDER_URL . '/js/fl-builder-admin-pointers.js',
  54. array( 'jquery', 'wp-pointer' ),
  55. FL_BUILDER_VERSION,
  56. true
  57. );
  58. wp_localize_script( 'fl-builder-admin-pointers', 'FLBuilderAdminPointersConfig', array(
  59. 'pointers' => $pointers,
  60. 'ajaxurl' => admin_url( 'admin-ajax.php' ),
  61. ) );
  62. }
  63. /**
  64. * Check if a pointer has been dismissed by the current user.
  65. *
  66. * @since 1.10.3
  67. * @param string $pointer_id
  68. * @return bool
  69. */
  70. static private function is_dismissed( $pointer_id ) {
  71. $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
  72. return in_array( $pointer_id, $dismissed );
  73. }
  74. }
  75. FLBuilderAdminPointers::init();