ui-vc-pointers.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. if ( ! defined( 'ABSPATH' ) ) {
  3. die( '-1' );
  4. }
  5. global $vc_default_pointers, $vc_pointers;
  6. $vc_default_pointers = (array) apply_filters( 'vc_pointers_list', array(
  7. 'vc_grid_item',
  8. 'vc_pointers_backend_editor',
  9. 'vc_pointers_frontend_editor',
  10. ) );
  11. if ( is_admin() ) {
  12. add_action( 'admin_enqueue_scripts', 'vc_pointer_load', 1000 );
  13. }
  14. function vc_pointer_load() {
  15. global $vc_pointers;
  16. // Don't run on WP < 3.3
  17. if ( get_bloginfo( 'version' ) < '3.3' ) {
  18. return;
  19. }
  20. $screen = get_current_screen();
  21. $screen_id = $screen->id;
  22. // Get pointers for this screen
  23. $pointers = apply_filters( 'vc-ui-pointers', array() );
  24. $pointers = apply_filters( 'vc_ui-pointers-' . $screen_id, $pointers );
  25. if ( ! $pointers || ! is_array( $pointers ) ) {
  26. return;
  27. }
  28. // Get dismissed pointers
  29. $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
  30. $vc_pointers = array( 'pointers' => array() );
  31. // Check pointers and remove dismissed ones.
  32. foreach ( $pointers as $pointer_id => $pointer ) {
  33. // Sanity check
  34. if ( in_array( $pointer_id, $dismissed, true ) || empty( $pointer ) || empty( $pointer_id ) || empty( $pointer['name'] ) ) {
  35. continue;
  36. }
  37. $pointer['pointer_id'] = $pointer_id;
  38. // Add the pointer to $valid_pointers array
  39. $vc_pointers['pointers'][] = $pointer;
  40. }
  41. // No valid pointers? Stop here.
  42. if ( empty( $vc_pointers['pointers'] ) ) {
  43. return;
  44. }
  45. wp_enqueue_style( 'wp-pointer' );
  46. wp_enqueue_script( 'wp-pointer' );
  47. // messages
  48. $vc_pointers['texts'] = array(
  49. 'finish' => esc_html__( 'Finish', 'js_composer' ),
  50. 'next' => esc_html__( 'Next', 'js_composer' ),
  51. 'prev' => esc_html__( 'Prev', 'js_composer' ),
  52. );
  53. // Add pointer options to script.
  54. wp_localize_script( 'wp-pointer', 'vcPointer', $vc_pointers );
  55. }
  56. /**
  57. * Remove Vc pointers keys to show Tour markers again.
  58. * @sine 4.5
  59. */
  60. function vc_pointer_reset() {
  61. global $vc_default_pointers;
  62. vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'manage_options' )->validateDie()->part( 'settings' )->can( 'vc-general-tab' )->validateDie();
  63. $pointers = (array) apply_filters( 'vc_pointers_list', $vc_default_pointers );
  64. $prev_meta_value = get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
  65. $dismissed = explode( ',', (string) $prev_meta_value );
  66. if ( count( $dismissed ) > 0 && count( $pointers ) ) {
  67. $meta_value = implode( ',', array_diff( $dismissed, $pointers ) );
  68. update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $meta_value, $prev_meta_value );
  69. }
  70. wp_send_json( array( 'success' => true ) );
  71. }
  72. /**
  73. * Reset tour guid
  74. * @return bool
  75. */
  76. function vc_pointers_is_dismissed() {
  77. global $vc_default_pointers;
  78. $pointers = (array) apply_filters( 'vc_pointers_list', $vc_default_pointers );
  79. $prev_meta_value = get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
  80. $dismissed = explode( ',', (string) $prev_meta_value );
  81. return count( array_diff( $dismissed, $pointers ) ) < count( $dismissed );
  82. }
  83. add_action( 'wp_ajax_vc_pointer_reset', 'vc_pointer_reset' );