module.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace Elementor\Modules\Gutenberg;
  3. use Elementor\Core\Base\Module as BaseModule;
  4. use Elementor\Plugin;
  5. use Elementor\User;
  6. use Elementor\Utils;
  7. if ( ! defined( 'ABSPATH' ) ) {
  8. exit; // Exit if accessed directly.
  9. }
  10. class Module extends BaseModule {
  11. protected $is_gutenberg_editor_active = false;
  12. public function get_name() {
  13. return 'gutenberg';
  14. }
  15. public static function is_active() {
  16. return function_exists( 'the_gutenberg_project' );
  17. }
  18. public function register_elementor_rest_field() {
  19. register_rest_field( get_post_types( '', 'names' ),
  20. 'gutenberg_elementor_mode', [
  21. 'update_callback' => function( $request_value, $object ) {
  22. if ( ! User::is_current_user_can_edit( $object->ID ) ) {
  23. return false;
  24. }
  25. Plugin::$instance->db->set_is_elementor_page( $object->ID, false );
  26. return true;
  27. },
  28. ]
  29. );
  30. }
  31. public function enqueue_assets() {
  32. $post_id = get_the_ID();
  33. if ( ! User::is_current_user_can_edit( $post_id ) ) {
  34. return;
  35. }
  36. $this->is_gutenberg_editor_active = true;
  37. $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
  38. wp_enqueue_script( 'elementor-gutenberg', ELEMENTOR_ASSETS_URL . 'js/gutenberg' . $suffix . '.js', [ 'jquery' ], ELEMENTOR_VERSION, true );
  39. $elementor_settings = [
  40. 'isElementorMode' => Plugin::$instance->db->is_built_with_elementor( $post_id ),
  41. 'editLink' => Utils::get_edit_link( $post_id ),
  42. ];
  43. wp_localize_script( 'elementor-gutenberg', 'ElementorGutenbergSettings', $elementor_settings );
  44. }
  45. public function print_admin_js_template() {
  46. if ( ! $this->is_gutenberg_editor_active ) {
  47. return;
  48. }
  49. ?>
  50. <script id="elementor-gutenberg-button-switch-mode" type="text/html">
  51. <div id="elementor-switch-mode">
  52. <button id="elementor-switch-mode-button" type="button" class="button button-primary button-large">
  53. <span class="elementor-switch-mode-on"><?php echo __( '&#8592; Back to WordPress Editor', 'elementor' ); ?></span>
  54. <span class="elementor-switch-mode-off">
  55. <i class="eicon-elementor-square" aria-hidden="true"></i>
  56. <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
  57. </span>
  58. </button>
  59. </div>
  60. </script>
  61. <script id="elementor-gutenberg-panel" type="text/html">
  62. <div id="elementor-editor"><a id="elementor-go-to-edit-page-link" href="#">
  63. <div id="elementor-editor-button" class="button button-primary button-hero">
  64. <i class="eicon-elementor-square" aria-hidden="true"></i>
  65. <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
  66. </div>
  67. <div class="elementor-loader-wrapper">
  68. <div class="elementor-loader">
  69. <div class="elementor-loader-boxes">
  70. <div class="elementor-loader-box"></div>
  71. <div class="elementor-loader-box"></div>
  72. <div class="elementor-loader-box"></div>
  73. <div class="elementor-loader-box"></div>
  74. </div>
  75. </div>
  76. <div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
  77. </div>
  78. </a></div>
  79. </script>
  80. <?php
  81. }
  82. public function __construct() {
  83. add_action( 'rest_api_init', [ $this, 'register_elementor_rest_field' ] );
  84. add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_assets' ] );
  85. add_action( 'admin_footer', [ $this, 'print_admin_js_template' ] );
  86. }
  87. }