balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

feedback.php (6079B)


      1 <?php
      2 namespace Elementor\Core\Admin;
      3 
      4 use Elementor\Api;
      5 use Elementor\Core\Base\Module;
      6 use Elementor\Plugin;
      7 use Elementor\Tracker;
      8 
      9 if ( ! defined( 'ABSPATH' ) ) {
     10 	exit; // Exit if accessed directly.
     11 }
     12 
     13 class Feedback extends Module {
     14 
     15 	/**
     16 	 * @since 2.2.0
     17 	 * @access public
     18 	 */
     19 	public function __construct() {
     20 		add_action( 'current_screen', function () {
     21 			if ( ! $this->is_plugins_screen() ) {
     22 				return;
     23 			}
     24 
     25 			add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_feedback_dialog_scripts' ] );
     26 		} );
     27 
     28 		// Ajax.
     29 		add_action( 'wp_ajax_elementor_deactivate_feedback', [ $this, 'ajax_elementor_deactivate_feedback' ] );
     30 	}
     31 
     32 	/**
     33 	 * Get module name.
     34 	 *
     35 	 * Retrieve the module name.
     36 	 *
     37 	 * @since  1.7.0
     38 	 * @access public
     39 	 *
     40 	 * @return string Module name.
     41 	 */
     42 	public function get_name() {
     43 		return 'feedback';
     44 	}
     45 
     46 	/**
     47 	 * Enqueue feedback dialog scripts.
     48 	 *
     49 	 * Registers the feedback dialog scripts and enqueues them.
     50 	 *
     51 	 * @since 1.0.0
     52 	 * @access public
     53 	 */
     54 	public function enqueue_feedback_dialog_scripts() {
     55 		add_action( 'admin_footer', [ $this, 'print_deactivate_feedback_dialog' ] );
     56 
     57 		$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
     58 
     59 		wp_register_script(
     60 			'elementor-admin-feedback',
     61 			ELEMENTOR_ASSETS_URL . 'js/admin-feedback' . $suffix . '.js',
     62 			[
     63 				'elementor-common',
     64 			],
     65 			ELEMENTOR_VERSION,
     66 			true
     67 		);
     68 
     69 		wp_enqueue_script( 'elementor-admin-feedback' );
     70 	}
     71 
     72 	/**
     73 	 * @since 2.3.0
     74 	 * @deprecated 3.1.0
     75 	 */
     76 	public function localize_feedback_dialog_settings() {
     77 		Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' );
     78 
     79 		return [];
     80 	}
     81 
     82 
     83 	/**
     84 	 * Print deactivate feedback dialog.
     85 	 *
     86 	 * Display a dialog box to ask the user why he deactivated Elementor.
     87 	 *
     88 	 * Fired by `admin_footer` filter.
     89 	 *
     90 	 * @since 1.0.0
     91 	 * @access public
     92 	 */
     93 	public function print_deactivate_feedback_dialog() {
     94 		$deactivate_reasons = [
     95 			'no_longer_needed' => [
     96 				'title' => esc_html__( 'I no longer need the plugin', 'elementor' ),
     97 				'input_placeholder' => '',
     98 			],
     99 			'found_a_better_plugin' => [
    100 				'title' => esc_html__( 'I found a better plugin', 'elementor' ),
    101 				'input_placeholder' => esc_html__( 'Please share which plugin', 'elementor' ),
    102 			],
    103 			'couldnt_get_the_plugin_to_work' => [
    104 				'title' => esc_html__( 'I couldn\'t get the plugin to work', 'elementor' ),
    105 				'input_placeholder' => '',
    106 			],
    107 			'temporary_deactivation' => [
    108 				'title' => esc_html__( 'It\'s a temporary deactivation', 'elementor' ),
    109 				'input_placeholder' => '',
    110 			],
    111 			'elementor_pro' => [
    112 				'title' => esc_html__( 'I have Elementor Pro', 'elementor' ),
    113 				'input_placeholder' => '',
    114 				'alert' => esc_html__( 'Wait! Don\'t deactivate Elementor. You have to activate both Elementor and Elementor Pro in order for the plugin to work.', 'elementor' ),
    115 			],
    116 			'other' => [
    117 				'title' => esc_html__( 'Other', 'elementor' ),
    118 				'input_placeholder' => esc_html__( 'Please share the reason', 'elementor' ),
    119 			],
    120 		];
    121 
    122 		?>
    123 		<div id="elementor-deactivate-feedback-dialog-wrapper">
    124 			<div id="elementor-deactivate-feedback-dialog-header">
    125 				<i class="eicon-elementor-square" aria-hidden="true"></i>
    126 				<span id="elementor-deactivate-feedback-dialog-header-title"><?php echo esc_html__( 'Quick Feedback', 'elementor' ); ?></span>
    127 			</div>
    128 			<form id="elementor-deactivate-feedback-dialog-form" method="post">
    129 				<?php
    130 				wp_nonce_field( '_elementor_deactivate_feedback_nonce' );
    131 				?>
    132 				<input type="hidden" name="action" value="elementor_deactivate_feedback" />
    133 
    134 				<div id="elementor-deactivate-feedback-dialog-form-caption"><?php echo esc_html__( 'If you have a moment, please share why you are deactivating Elementor:', 'elementor' ); ?></div>
    135 				<div id="elementor-deactivate-feedback-dialog-form-body">
    136 					<?php foreach ( $deactivate_reasons as $reason_key => $reason ) : ?>
    137 						<div class="elementor-deactivate-feedback-dialog-input-wrapper">
    138 							<input id="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-input" type="radio" name="reason_key" value="<?php echo esc_attr( $reason_key ); ?>" />
    139 							<label for="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-label"><?php echo esc_html( $reason['title'] ); ?></label>
    140 							<?php if ( ! empty( $reason['input_placeholder'] ) ) : ?>
    141 								<input class="elementor-feedback-text" type="text" name="reason_<?php echo esc_attr( $reason_key ); ?>" placeholder="<?php echo esc_attr( $reason['input_placeholder'] ); ?>" />
    142 							<?php endif; ?>
    143 							<?php if ( ! empty( $reason['alert'] ) ) : ?>
    144 								<div class="elementor-feedback-text"><?php echo esc_html( $reason['alert'] ); ?></div>
    145 							<?php endif; ?>
    146 						</div>
    147 					<?php endforeach; ?>
    148 				</div>
    149 			</form>
    150 		</div>
    151 		<?php
    152 	}
    153 
    154 	/**
    155 	 * Ajax elementor deactivate feedback.
    156 	 *
    157 	 * Send the user feedback when Elementor is deactivated.
    158 	 *
    159 	 * Fired by `wp_ajax_elementor_deactivate_feedback` action.
    160 	 *
    161 	 * @since 1.0.0
    162 	 * @access public
    163 	 */
    164 	public function ajax_elementor_deactivate_feedback() {
    165 		if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], '_elementor_deactivate_feedback_nonce' ) ) {
    166 			wp_send_json_error();
    167 		}
    168 
    169 		$reason_text = '';
    170 		$reason_key = '';
    171 
    172 		if ( ! empty( $_POST['reason_key'] ) ) {
    173 			$reason_key = $_POST['reason_key'];
    174 		}
    175 
    176 		if ( ! empty( $_POST[ "reason_{$reason_key}" ] ) ) {
    177 			$reason_text = $_POST[ "reason_{$reason_key}" ];
    178 		}
    179 
    180 		Api::send_feedback( $reason_key, $reason_text );
    181 
    182 		wp_send_json_success();
    183 	}
    184 
    185 	/**
    186 	 * @since 2.3.0
    187 	 * @access protected
    188 	 */
    189 	protected function get_init_settings() {
    190 		if ( ! $this->is_plugins_screen() ) {
    191 			return [];
    192 		}
    193 
    194 		return [ 'is_tracker_opted_in' => Tracker::is_allow_track() ];
    195 	}
    196 
    197 	/**
    198 	 * @since 2.3.0
    199 	 * @access private
    200 	 */
    201 	private function is_plugins_screen() {
    202 		return in_array( get_current_screen()->id, [ 'plugins', 'plugins-network' ] );
    203 	}
    204 }