close

Plugin Directory

Changeset 3472539


Ignore:
Timestamp:
03/02/2026 09:42:09 AM (3 months ago)
Author:
devitemsllc
Message:

Update to version 3.0.6 from GitHub

Location:
ht-mega-for-elementor
Files:
18 edited
1 copied

Legend:

Unmodified
Added
Removed
  • ht-mega-for-elementor/tags/3.0.6/admin/include/class-deactivation.php

    r3233878 r3472539  
    11<?php
    22if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    3 /**
    4  * Add Plugin Deactivation Feedback
    5  *
    6  * Edit:
    7  * - $PROJECT_NAME
    8  * - $PROJECT_VERSION
    9  * - $PROJECT_SLUG
    10  * - $PROJECT_PRO_SLUG
    11  */
     3
    124class HTmega_Plugin_Deactivation_Feedback {
    135
     
    2012    public $PROJECT_PRO_INSTALL;
    2113    public $PROJECT_PRO_VERSION;
    22    // public $DATA_CENTER = 'https://webhook.site/c76bcc06-ad79-4e62-a55b-71118d236a77'; // For testing purpose only
    23     public $DATA_CENTER = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjAwNTY1MDYzZTA0MzM1MjY1NTUzNyI_3D_pc';
     14    public $DATA_CENTER = 'https://exit-feedback.hasthemes.com/w/f6d46a1c-3d29-4079-baa0-8de1cb0dcc01';
     15    public $WEBHOOK_SECRET = '83d687b0cf4e635ac08e9c7ff1468f5fe98228c631d30c438bc49eae1ef69d03';
    2416
    2517    private static $_instance = null;
    26     /**
    27      * Class Instance
    28      */
     18
    2919    public static function instance(){
    3020        if( is_null( self::$_instance ) ){
     
    3323        return self::$_instance;
    3424    }
    35    
     25
    3626    public function __construct() {
    3727        $this->PROJECT_PRO_ACTIVE = $this->is_pro_plugin_active();
     
    4232    }
    4333
    44    
    4534    /**
    4635     * Handle AJAX feedback submission
    4736     */
    4837    public function handle_feedback() {
    49             // Add nonce verification
    5038        if ( !check_ajax_referer('htmega_deactivation_nonce', 'nonce', false) ) {
    5139            wp_send_json_error('Invalid nonce');
    5240            return;
    5341        }
    54        
     42
    5543        if(!current_user_can( 'administrator' )) {
    5644            wp_send_json_error('Permission denied');
    5745            return;
    5846        }
    59         // Sanitize and prepare data
     47
    6048        $reason = sanitize_text_field($_POST['reason']);
    6149        $message = sanitize_textarea_field($_POST['message']);
    6250
    63         // Prepare data for Pabbly
    6451        $data = array_merge(
    6552            [
     
    7057        );
    7158
     59        $body = wp_json_encode( $data );
     60
    7261        $site_url = wp_parse_url( home_url(), PHP_URL_HOST );
    7362        $headers = [
    74             'user-agent' => $this->PROJECT_NAME . '/' . md5 ( $site_url ) . ';',
    75             'Content-Type'     => 'application/json',
     63            'user-agent'   => $this->PROJECT_NAME . '/' . md5( $site_url ) . ';',
     64            'Content-Type' => 'application/json',
    7665        ];
    7766
    78         // Send data to Pabbly
     67        $signature = $this->generate_signature( $body );
     68        if ( ! empty( $signature ) ) {
     69            $headers['X-Webhook-Signature'] = $signature;
     70        }
     71
    7972        $response = wp_remote_post($this->DATA_CENTER, [
    8073            'method'      => 'POST',
     
    8578            'sslverify'   => false,
    8679            'headers'     => $headers,
    87             'body'        => wp_json_encode($data),
     80            'body'        => $body,
    8881            'cookies'     => []
    8982        ]);
    9083
    91         // Check for errors
    9284        if (!is_wp_error($response)) {
    9385            wp_send_json_success('Feedback submitted successfully');
     
    9890
    9991    public function get_data() {
    100         $hash = md5( current_time( 'U', true ) );
    10192
    10293        // Get plugin specific information
     
    111102
    112103        $site_title = get_bloginfo( 'name' );
    113         $site_description = get_bloginfo( 'description' );
    114104        $site_url = wp_parse_url( home_url(), PHP_URL_HOST );
    115105        $admin_email = get_option( 'admin_email' );
     
    136126
    137127        $ip_address = $this->get_ip_address();
    138 
    139         // Get Plugins
    140         $all_plugins = get_plugins();
    141         $active_plugins = get_option('active_plugins');
    142         $plugins_string = '';
    143         foreach($all_plugins as $plugin_path => $plugin) {
    144             $plugins_string .= sprintf(
    145                 "%s (v%s) - %s | ",
    146                 $plugin['Name'],
    147                 $plugin['Version'],
    148                 in_array($plugin_path, $active_plugins) ? 'Active' : 'Inactive'
    149             );
    150         }
    151         $plugins_string = rtrim($plugins_string, ' | ');
    152         // Get Themes
    153         $all_themes = wp_get_themes();
    154         $active_theme = wp_get_theme();
    155         $themes_string = '';
    156         foreach($all_themes as $theme_slug => $theme) {
    157             $themes_string .= sprintf(
    158                 "%s (v%s) - %s | ",
    159                 $theme->get('Name'),
    160                 $theme->get('Version'),
    161                 ($theme_slug === $active_theme->get_stylesheet()) ? 'Active' : 'Inactive'
    162             );
    163         }
    164         $themes_string = rtrim($themes_string, ' | ');
    165 
    166 
     128        $install_time = get_option( 'htmega_elementor_addons_activation_time' );
    167129        $data = [
    168             'hash'    => $hash,
    169             'project' => $project,
     130            'project'            => $project,
    170131            'site_title'         => $site_title,
    171             'site_description'   => $site_description,
    172132            'site_address'       => $site_url,
    173133            'site_url'           => $site_url,
     
    178138            'server_info'        => $this->get_server_info(),
    179139            'wordpress_info'     => $this->get_wordpress_info(),
    180             'users_count'        => $this->get_users_count(),
    181140            'plugins_count'      => $this->get_plugins_count(),
    182141            'ip_address'         => $ip_address,
    183142            'country_name'       => $this->get_country_from_ip( $ip_address ),
    184             'plugin_list'       => $plugins_string,
    185             'theme_list'        => $themes_string,
     143            'plugin_list'        => $this->get_active_plugins(),
     144            'install_time'       => $install_time,
    186145        ];
    187146
     
    198157        $php_version = function_exists ( 'phpversion' ) ? phpversion () : '';
    199158        $mysql_version = method_exists ( $wpdb, 'db_version' ) ? $wpdb->db_version () : '';
    200         $php_max_upload_size = size_format( wp_max_upload_size() );
    201         $php_default_timezone = date_default_timezone_get();
    202         $php_soap = class_exists ( 'SoapClient' ) ? 'yes' : 'no';
    203         $php_fsockopen = function_exists ( 'fsockopen' ) ? 'yes' : 'no';
    204         $php_curl = function_exists ( 'curl_init' ) ? 'yes' : 'no';
    205159
    206160        $server_info = array(
     
    208162            'php_version'          => $php_version,
    209163            'mysql_version'        => $mysql_version,
    210             'php_max_upload_size'  => $php_max_upload_size,
    211             'php_default_timezone' => $php_default_timezone,
    212             'php_soap'             => $php_soap,
    213             'php_fsockopen'        => $php_fsockopen,
    214             'php_curl'             => $php_curl,
    215164        );
    216165
     
    224173        $wordpress_info = [];
    225174
    226         $memory_limit = defined ( 'WP_MEMORY_LIMIT' ) ? WP_MEMORY_LIMIT : '';
    227175        $debug_mode = ( defined ( 'WP_DEBUG' ) && WP_DEBUG ) ? 'yes' : 'no';
    228176        $locale = get_locale();
    229177        $version = get_bloginfo( 'version' );
    230         $multisite = is_multisite () ? 'yes' : 'no';
    231178        $theme_slug = get_stylesheet();
    232179
    233180        $wordpress_info = [
    234             'memory_limit' => $memory_limit,
    235181            'debug_mode'   => $debug_mode,
    236182            'locale'       => $locale,
    237183            'version'      => $version,
    238             'multisite'    => $multisite,
    239184            'theme_slug'   => $theme_slug,
    240185        ];
     
    257202
    258203        return $wordpress_info;
    259     }
    260 
    261     /**
    262      * Get users count.
    263      */
    264     private function get_users_count() {
    265         $users_count = [];
    266 
    267         $users_count_data = count_users();
    268 
    269         $total_users = isset ( $users_count_data['total_users'] ) ? $users_count_data['total_users'] : 0;
    270         $avail_roles = isset ( $users_count_data['avail_roles'] ) ? $users_count_data['avail_roles'] : [];
    271 
    272         $users_count['total'] = $total_users;
    273 
    274         if ( is_array( $avail_roles ) && ! empty( $avail_roles ) ) {
    275             foreach ( $avail_roles as $role => $count ) {
    276                 $users_count[ $role ] = $count;
    277             }
    278         }
    279 
    280         return $users_count;
    281204    }
    282205
     
    317240
    318241    /**
     242     * Get active plugins.
     243     */
     244    private function get_active_plugins() {
     245        $active_plugins = get_option('active_plugins');
     246        $all_plugins = get_plugins();
     247        $active_plugin_string = '';
     248        foreach($all_plugins as $plugin_path => $plugin) {
     249            if ( ! in_array($plugin_path, $active_plugins) ) {
     250                continue;
     251            }
     252            $active_plugin_string .= sprintf(
     253                "%s (v%s) - %s | ",
     254                $plugin['Name'],
     255                $plugin['Version'],
     256                'Active'
     257            );
     258        }
     259        $active_plugin_string = rtrim($active_plugin_string, ' | ');
     260        return $active_plugin_string;
     261    }
     262
     263    /**
    319264     * Get IP Address
    320265     */
     
    337282
    338283    /**
    339      * Get Country Form ID Address
     284     * Get Country From IP Address
    340285     */
    341286    private function get_country_from_ip( $ip_address ) {
    342287        $api_url = 'http://ip-api.com/json/' . $ip_address;
    343    
    344         // Fetch data from the API
     288
    345289        $response = wp_remote_get( $api_url );
    346    
     290
    347291        if ( is_wp_error( $response ) ) {
    348292            return 'Error';
    349293        }
    350    
    351         // Decode the JSON response
     294
    352295        $data = json_decode( wp_remote_retrieve_body($response) );
    353    
     296
    354297        if ($data && $data->status === 'success') {
    355298            return $data->country;
     
    357300            return 'Unknown';
    358301        }
     302    }
     303
     304    /**
     305     * Generate HMAC-SHA256 signature for webhook payload.
     306     */
     307    private function generate_signature( $payload ) {
     308        if ( empty( $this->WEBHOOK_SECRET ) ) {
     309            return '';
     310        }
     311        return 'sha256=' . hash_hmac( 'sha256', $payload, $this->WEBHOOK_SECRET );
    359312    }
    360313
     
    393346            return;
    394347        }
     348
    395349        $this->deactivation_form_html();
    396         $this->deactivation_form_js();
    397         $this->deactivation_form_css();
    398     }
    399 
    400     public function deactivation_form_html() { ?>
    401         <div id="htmega-deactivation-dialog" style="display: none;">
    402             <div class="htmega-deactivation-dialog-content">
    403                 <button type="button" class="htmega-close-dialog" aria-label="Close">&times;</button>
    404                 <h2 class="htmega-deactivation-dialog-title"><?php esc_html_e('Quick Feedback', 'htmega-addons') ?></h2>
    405                 <p class="htmega-deactivation-dialog-desc"><?php esc_html_e('If you have a moment, please let us know why you are deactivating: ', 'htmega-addons'); echo esc_html($this->PROJECT_NAME); ?></p>
    406                 <form id="htmega-deactivation-feedback-form">
    407                     <div class="htmega-feedback-options">
    408                         <label>
    409                             <input type="radio" name="reason" data-id="found_better" value="<?php esc_attr_e('I found a better plugin', 'htmega-addons') ?>">
    410                             <?php esc_html_e('I found a better plugin', 'htmega-addons') ?>
    411                         </label>
    412                         <div id="htmega-found_better-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    413                             <textarea name="found_better_reason" placeholder="<?php esc_attr_e('Please share which plugin.', 'htmega-addons') ?>"></textarea>
    414                         </div>
    415                         <label>
    416                             <input type="radio" name="reason" data-id="stopped_working" value="<?php esc_attr_e('The plugin suddenly stopped working', 'htmega-addons') ?>">
    417                             <?php esc_html_e('The plugin suddenly stopped working', 'htmega-addons') ?>
    418                         </label>
    419                         <div id="htmega-stopped_working-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    420                             <textarea name="stopped_working_reason" placeholder="<?php esc_attr_e('Please share more details.', 'htmega-addons') ?>"></textarea>
    421                         </div>
    422                         <label>
    423                             <input type="radio" name="reason" data-id="found_bug" value="<?php esc_attr_e('I encountered an error or bug', 'htmega-addons') ?>">
    424                             <?php esc_html_e('I encountered an error or bug', 'htmega-addons') ?>
    425                         </label>
    426                         <div id="htmega-found_bug-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    427                             <textarea name="found_bug_reason" placeholder="<?php esc_attr_e('Please describe the error/bug you encountered. This will help us fix it for future users.', 'htmega-addons') ?>"></textarea>
    428                         </div>
    429                         <label>
    430                             <input type="radio" name="reason" data-id="not_working" value="<?php esc_attr_e("I could not get the plugin to work", 'htmega-addons') ?>">
    431                             <?php esc_html_e("I could not get the plugin to work", 'htmega-addons') ?>
    432                         </label>
    433                         <label>
    434                             <input type="radio" name="reason" data-id="" value="<?php esc_attr_e('I no longer need the plugin', 'htmega-addons') ?>">
    435                             <?php esc_html_e('I no longer need the plugin', 'htmega-addons') ?>
    436                         </label>
    437                         <label>
    438                             <input type="radio" name="reason" data-id="" value="<?php esc_attr_e("It's a temporary deactivation", 'htmega-addons') ?>">
    439                             <?php esc_html_e("It's a temporary deactivation", 'htmega-addons') ?>
    440                         </label>
    441                         <label>
    442                             <input type="radio" name="reason" data-id="other" value="<?php esc_attr_e("Other", 'htmega-addons') ?>">
    443                             <?php esc_html_e("Other", 'htmega-addons') ?>
    444                         </label>
    445                         <div id="htmega-other-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    446                             <textarea name="other_reason" placeholder="<?php esc_attr_e("Please share the reason.", 'htmega-addons') ?>"></textarea>
    447                         </div>
    448                     </div>
    449                     <div class="htmega-deactivation-dialog-buttons">
    450                         <button type="submit" class="button button-primary"><?php esc_html_e("Submit & Deactivate", 'htmega-addons') ?></button>
    451                         <a href="#" class="htmega-skip-feedback"><?php esc_html_e("Skip & Deactivate", 'htmega-addons') ?></a>
    452                     </div>
    453                 </form>
     350    }
     351
     352    /**
     353     * Deactivation form html.
     354     */
     355    public function deactivation_form_html() {
     356        $ajaxurl = admin_url('admin-ajax.php');
     357        $nonce = wp_create_nonce('htmega_deactivation_nonce');
     358    ?>
     359
     360<div id="htmega-deactivation-dialog" class="htm-deactivate-overlay" style="display: none;">
     361    <div class="htm-deactivate-modal">
     362        <!-- Header -->
     363        <div class="htm-deactivate-header">
     364            <button type="button" class="htm-close-btn htmega-close-dialog" aria-label="Close">
     365                <svg viewBox="0 0 24 24" fill="none">
     366                    <path d="M18 6L6 18M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"/>
     367                </svg>
     368            </button>
     369            <div class="htm-header-content">
     370                <div class="htm-header-icon">
     371                    <img src="<?php echo esc_url( HTMEGA_ADDONS_PL_URL . 'admin/assets/images/logo.png' ); ?>" alt="<?php esc_attr_e('HT Mega Logo', 'htmega-addons'); ?>">
     372                </div>
     373                <div class="htm-header-text">
     374                    <h3><?php esc_html_e("We're Sorry to See You Go!", 'htmega-addons') ?></h3>
     375                    <p><?php esc_html_e('Your feedback helps us improve HT Mega for everyone.', 'htmega-addons') ?></p>
     376                </div>
    454377            </div>
    455378        </div>
    456     <?php }
    457     public function deactivation_form_js() {
    458         $ajaxurl = admin_url('admin-ajax.php');
    459         $nonce = wp_create_nonce('htmega_deactivation_nonce');
    460         ?>
    461         <script>
    462             jQuery(document).ready(function($) {
    463                 let pluginToDeactivate = '';
    464                
    465                 function closeDialog() {
    466                     $('#htmega-deactivation-dialog').hide();
    467                     pluginToDeactivate = '';
    468                 }
    469                
    470                 $('[data-slug="<?php echo esc_attr($this->PROJECT_SLUG); ?>"] .deactivate a').on('click', function(e) {
    471                     e.preventDefault();
    472                     pluginToDeactivate = $(this).attr('href');
    473                     $('#htmega-deactivation-dialog').show();
     379
     380        <!-- Body -->
     381        <div class="htm-deactivate-body">
     382            <p class="htm-body-title"><?php esc_html_e('Please share why you\'re deactivating HT Mega:', 'htmega-addons') ?></p>
     383
     384            <form id="htmega-deactivation-feedback-form">
     385                <div class="htm-reasons-list">
     386                    <!-- Reason 1: Temporary -->
     387                    <div class="htm-reason-item">
     388                        <input type="radio" name="reason" id="htm_reason_temporary" data-id="" value="<?php esc_attr_e("It's a temporary deactivation", 'htmega-addons') ?>">
     389                        <label for="htm_reason_temporary" class="htm-reason-label">
     390                            <span class="htm-reason-radio"></span>
     391                            <span class="htm-reason-icon">
     392                                <svg viewBox="0 0 24 24">
     393                                    <circle cx="12" cy="12" r="10"/>
     394                                    <polyline points="12 6 12 12 16 14"/>
     395                                </svg>
     396                            </span>
     397                            <span class="htm-reason-text">
     398                                <span><?php esc_html_e("It's a temporary deactivation", 'htmega-addons') ?></span>
     399                            </span>
     400                        </label>
     401                    </div>
     402
     403                    <!-- Reason 2: No longer need -->
     404                    <div class="htm-reason-item">
     405                        <input type="radio" name="reason" id="htm_reason_no_need" data-id="" value="<?php esc_attr_e('I no longer need the plugin', 'htmega-addons') ?>">
     406                        <label for="htm_reason_no_need" class="htm-reason-label">
     407                            <span class="htm-reason-radio"></span>
     408                            <span class="htm-reason-icon">
     409                                <svg viewBox="0 0 24 24">
     410                                    <path d="M18 6L6 18M6 6l12 12"/>
     411                                </svg>
     412                            </span>
     413                            <span class="htm-reason-text">
     414                                <span><?php esc_html_e('I no longer need the plugin', 'htmega-addons') ?></span>
     415                            </span>
     416                        </label>
     417                    </div>
     418
     419                    <!-- Reason 3: Found better -->
     420                    <div class="htm-reason-item">
     421                        <input type="radio" name="reason" id="htm_reason_better" data-id="found_better" value="<?php esc_attr_e('I found a better plugin', 'htmega-addons') ?>">
     422                        <label for="htm_reason_better" class="htm-reason-label">
     423                            <span class="htm-reason-radio"></span>
     424                            <span class="htm-reason-icon">
     425                                <svg viewBox="0 0 24 24">
     426                                    <circle cx="11" cy="11" r="8"/>
     427                                    <path d="M21 21l-4.35-4.35"/>
     428                                </svg>
     429                            </span>
     430                            <span class="htm-reason-text">
     431                                <span><?php esc_html_e('I found a better plugin', 'htmega-addons') ?></span>
     432                            </span>
     433                        </label>
     434                    </div>
     435                    <div id="htmega-found_better-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     436                        <textarea name="found_better_reason" placeholder="<?php esc_attr_e('Which plugin are you switching to? We\'d love to know...', 'htmega-addons') ?>"></textarea>
     437                    </div>
     438
     439                    <!-- Reason 4: Not working -->
     440                    <div class="htm-reason-item">
     441                        <input type="radio" name="reason" id="htm_reason_not_working" data-id="stopped_working" value="<?php esc_attr_e('The plugin suddenly stopped working', 'htmega-addons') ?>">
     442                        <label for="htm_reason_not_working" class="htm-reason-label">
     443                            <span class="htm-reason-radio"></span>
     444                            <span class="htm-reason-icon">
     445                                <svg viewBox="0 0 24 24">
     446                                    <path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/>
     447                                    <line x1="12" y1="9" x2="12" y2="13"/>
     448                                    <line x1="12" y1="17" x2="12.01" y2="17"/>
     449                                </svg>
     450                            </span>
     451                            <span class="htm-reason-text">
     452                                <span><?php esc_html_e('The plugin suddenly stopped working', 'htmega-addons') ?></span>
     453                            </span>
     454                        </label>
     455                    </div>
     456                    <div id="htmega-stopped_working-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     457                        <textarea name="stopped_working_reason" placeholder="<?php esc_attr_e('Please describe the issue you\'re experiencing...', 'htmega-addons') ?>"></textarea>
     458                    </div>
     459
     460                    <!-- Reason 5: Bug -->
     461                    <div class="htm-reason-item">
     462                        <input type="radio" name="reason" id="htm_reason_bug" data-id="found_bug" value="<?php esc_attr_e('I encountered an error or bug', 'htmega-addons') ?>">
     463                        <label for="htm_reason_bug" class="htm-reason-label">
     464                            <span class="htm-reason-radio"></span>
     465                            <span class="htm-reason-icon">
     466                                <svg viewBox="0 0 24 24">
     467                                    <path d="M14.7 6.3a1 1 0 000 1.4l1.6 1.6a1 1 0 001.4 0l3.77-3.77a6 6 0 01-7.94 7.94l-6.91 6.91a2.12 2.12 0 01-3-3l6.91-6.91a6 6 0 017.94-7.94l-3.76 3.76z"/>
     468                                </svg>
     469                            </span>
     470                            <span class="htm-reason-text">
     471                                <span><?php esc_html_e('I encountered an error or bug', 'htmega-addons') ?></span>
     472                            </span>
     473                        </label>
     474                    </div>
     475                    <div id="htmega-found_bug-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     476                        <textarea name="found_bug_reason" placeholder="<?php esc_attr_e('Please describe the error/bug. This will help us fix it...', 'htmega-addons') ?>"></textarea>
     477                    </div>
     478
     479                    <!-- Reason 6: Other -->
     480                    <div class="htm-reason-item">
     481                        <input type="radio" name="reason" id="htm_reason_other" data-id="other" value="<?php esc_attr_e('Other', 'htmega-addons') ?>">
     482                        <label for="htm_reason_other" class="htm-reason-label">
     483                            <span class="htm-reason-radio"></span>
     484                            <span class="htm-reason-icon">
     485                                <svg viewBox="0 0 24 24">
     486                                    <path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
     487                                </svg>
     488                            </span>
     489                            <span class="htm-reason-text">
     490                                <span><?php esc_html_e('Other', 'htmega-addons') ?></span>
     491                            </span>
     492                        </label>
     493                    </div>
     494                    <div id="htmega-other-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     495                        <textarea name="other_reason" placeholder="<?php esc_attr_e('Please share the reason...', 'htmega-addons') ?>"></textarea>
     496                    </div>
     497                </div>
     498
     499                <!-- Footer -->
     500                <div class="htm-deactivate-footer">
     501                    <a href="#" class="htm-btn htm-btn-skip htmega-skip-feedback"><?php esc_html_e('Skip & Deactivate', 'htmega-addons') ?></a>
     502                    <button type="submit" class="htm-btn htm-btn-submit">
     503                        <span><?php esc_html_e('Submit & Deactivate', 'htmega-addons') ?></span>
     504                    </button>
     505                </div>
     506            </form>
     507        </div>
     508    </div>
     509</div>
     510
     511<script>
     512    ;jQuery(document).ready(function($) {
     513        let pluginToDeactivate = '';
     514
     515        function closeDialog() {
     516            $('#htmega-deactivation-dialog').animate({
     517                opacity: 0
     518            }, 'slow', function() {
     519                $(this).css('display', 'none');
     520            });
     521            pluginToDeactivate = '';
     522        }
     523
     524        // Open dialog when deactivate is clicked
     525        $('[data-slug="<?php echo esc_attr($this->PROJECT_SLUG); ?>"] .deactivate a').on('click', function(e) {
     526            e.preventDefault();
     527            pluginToDeactivate = $(this).attr('href');
     528            $('#htmega-deactivation-dialog').css({'display': 'flex', 'opacity': '1'});
     529        });
     530
     531        // Close dialog on X button click
     532        $('.htmega-close-dialog').on('click', closeDialog);
     533
     534        // Close dialog on overlay click
     535        $('#htmega-deactivation-dialog').on('click', function(e) {
     536            if (e.target === this) {
     537                closeDialog();
     538            }
     539        });
     540
     541        // Prevent close when clicking modal content
     542        $('.htm-deactivate-modal').on('click', function(e) {
     543            e.stopPropagation();
     544        });
     545
     546        // Handle radio button change - show/hide textarea
     547        $('input[name="reason"]').on('change', function() {
     548            $('.htmega-deactivation-reason-input').removeClass('active').hide();
     549
     550            const id = $(this).data('id');
     551            if (['other', 'found_better', 'stopped_working', 'found_bug'].includes(id)) {
     552                $(`#htmega-${id}-reason-text`).addClass('active').show();
     553                $(`#htmega-${id}-reason-text textarea`).focus();
     554            }
     555        });
     556
     557        // Handle form submission
     558        $('#htmega-deactivation-feedback-form').on('submit', function(e) {
     559            e.preventDefault();
     560
     561            const $submitButton = $(this).find('button[type="submit"]');
     562            const $buttonText = $submitButton.find('span');
     563            const originalText = $buttonText.text();
     564
     565            $buttonText.text('<?php esc_html_e('Submitting...', 'htmega-addons') ?>');
     566            $submitButton.prop('disabled', true);
     567
     568            const reason = $('input[name="reason"]:checked').val() || 'No reason selected';
     569            const message = $('.htmega-deactivation-reason-input.active textarea').val() || '';
     570
     571            const data = {
     572                action: 'htmega_plugin_deactivation_feedback',
     573                reason: reason,
     574                message: message,
     575                nonce: '<?php echo esc_js($nonce); ?>'
     576            };
     577
     578            $.post('<?php echo esc_url_raw($ajaxurl); ?>', data)
     579                .done(function(response) {
     580                    if (response.success) {
     581                        window.location.href = pluginToDeactivate;
     582                    } else {
     583                        console.error('Feedback submission failed:', response.data);
     584                        $buttonText.text(originalText);
     585                        $submitButton.prop('disabled', false);
     586                    }
     587                })
     588                .fail(function(xhr) {
     589                    console.error('Feedback submission failed:', xhr.responseText);
     590                    $buttonText.text(originalText);
     591                    $submitButton.prop('disabled', false);
    474592                });
    475 
    476                 $('.htmega-close-dialog').on('click', closeDialog);
    477 
    478                 $('#htmega-deactivation-dialog').on('click', function(e) {
    479                     if (e.target === this) {
    480                         closeDialog();
    481                     }
    482                 });
    483                
    484                 $('.htmega-deactivation-dialog-content').on('click', function(e) {
    485                     e.stopPropagation();
    486                 });
    487 
    488                 $('input[name="reason"]').on('change', function() {
    489                     $('.htmega-deactivation-reason-input').removeClass('active').hide();
    490                    
    491                     const id = $(this).data('id');
    492                     if (['other', 'found_better', 'stopped_working', 'found_bug'].includes(id)) {
    493                         $(`#htmega-${id}-reason-text`).addClass('active').show();
    494                     }
    495                 });
    496 
    497                 $('#htmega-deactivation-feedback-form').on('submit', function(e) {
    498                     e.preventDefault();
    499                    
    500                     const $submitButton = $(this).find('button[type="submit"]');
    501                     const originalText = $submitButton.text();
    502                    
    503                     $submitButton.text('Submitting...').prop('disabled', true);
    504 
    505                     const reason = $('input[name="reason"]:checked').val() || 'No reason selected';
    506                     const message = $('.htmega-deactivation-reason-input.active textarea').val() || '';
    507                    
    508                     const data = {
    509                         action: 'htmega_plugin_deactivation_feedback',
    510                         reason: reason,
    511                         message: message,
    512                         nonce: '<?php echo esc_js($nonce); ?>'
    513                     };
    514                     $.post('<?php echo esc_url_raw($ajaxurl); ?>', data)
    515                         .done(function(response) {
    516                             if (response.success) {
    517                                 window.location.href = pluginToDeactivate;
    518                             } else {
    519                                 console.error('Feedback submission failed:', response.data);
    520                                 $submitButton.text(originalText).prop('disabled', false);
    521                             }
    522                         })
    523                         .fail(function(xhr) {
    524                             console.error('Feedback submission failed:', xhr.responseText);
    525                             $submitButton.text(originalText).prop('disabled', false);
    526                         });
    527                 });
    528 
    529                 $('.htmega-skip-feedback').on('click', function(e) {
    530                     e.preventDefault();
    531                     window.location.href = pluginToDeactivate;
    532                 });
    533             });
    534         </script>
    535         <?php
    536     }
    537     public function deactivation_form_css() { ?>
    538         <style>
    539             #htmega-deactivation-dialog {
    540                 position: fixed;
    541                 top: 0;
    542                 left: 0;
    543                 right: 0;
    544                 bottom: 0;
    545                 background: rgba(0, 0, 0, 0.5);
    546                 z-index: 9999;
    547                 display: flex;
    548                 align-items: center;
    549                 justify-content: center;
    550             }
    551 
    552             .htmega-deactivation-dialog-content {
    553                 background: #fff;
    554                 padding: 30px;
    555                 max-width: 500px;
    556                 width: 100%;
    557                 border-radius: 4px;
    558                 box-shadow: 0 2px 30px rgba(0, 0, 0, 0.1);
    559                 position: relative;
    560             }
    561             .htmega-deactivation-dialog-title {
    562                 margin-top: 0;
    563             }
    564 
    565             .htmega-close-dialog {
    566                 position: absolute;
    567                 top: 10px;
    568                 right: 10px;
    569                 width: 24px;
    570                 height: 24px;
    571                 border-radius: 50%;
    572                 background: #f0f0f0;
    573                 border: none;
    574                 cursor: pointer;
    575                 display: flex;
    576                 justify-content: center;
    577                 font-size: 18px;
    578                 line-height: 18px;
    579                 color: #333;
    580                 transition: all 0.2s ease;
    581                 font-weight: 700;
    582             }
    583 
    584             .htmega-close-dialog:hover {
    585                 background: #e0e0e0;
    586                 color: #333;
    587             }
    588 
    589             .htmega-feedback-options {
    590                 margin: 20px 0;
    591             }
    592 
    593             .htmega-feedback-options label {
    594                 display: block;
    595                 margin: 10px 0;
    596             }
    597 
    598 
    599             .htmega-deactivation-reason-input {
    600                 margin-bottom: 15px;
    601             }
    602             .htmega-deactivation-reason-input textarea {
    603                 width: 100%;
    604                 min-height: 60px;
    605                 padding: 6px 8px;
    606                 display: block;
    607             }
    608 
    609             .htmega-deactivation-dialog-buttons {
    610                 margin-top: 20px;
    611                 display: flex;
    612                 align-items: center;
    613                 justify-content: flex-end;
    614             }
    615 
    616             .htmega-skip-feedback {
    617                 margin-left: 10px;
    618                 color: #666;
    619                 text-decoration: none;
    620             }
    621         </style>
     593        });
     594
     595        // Skip feedback and deactivate
     596        $('.htmega-skip-feedback').on('click', function(e) {
     597            e.preventDefault();
     598            window.location.href = pluginToDeactivate;
     599        });
     600    });
     601</script>
     602
     603<style>
     604    /* Overlay */
     605    #htmega-deactivation-dialog.htm-deactivate-overlay {
     606        position: fixed;
     607        top: 0;
     608        left: 0;
     609        width: 100%;
     610        height: 100%;
     611        background: rgba(0, 0, 0, 0.6);
     612        display: flex;
     613        align-items: center;
     614        justify-content: center;
     615        z-index: 999999;
     616        animation: htmFadeIn 0.3s ease;
     617    }
     618
     619    @keyframes htmFadeIn {
     620        from { opacity: 0; }
     621        to { opacity: 1; }
     622    }
     623
     624    @keyframes htmFadeOut {
     625        from { opacity: 1; }
     626        to { opacity: 0; }
     627    }
     628
     629    @keyframes htmSlideUp {
     630        from {
     631            opacity: 0;
     632            transform: translateY(30px) scale(0.95);
     633        }
     634        to {
     635            opacity: 1;
     636            transform: translateY(0) scale(1);
     637        }
     638    }
     639
     640    @keyframes htmSlideDown {
     641        from {
     642            opacity: 1;
     643            transform: translateY(0) scale(1);
     644        }
     645        to {
     646            opacity: 0;
     647            transform: translateY(30px) scale(0.95);
     648        }
     649    }
     650
     651    /* Closing animation classes */
     652    #htmega-deactivation-dialog.htm-deactivate-overlay.htm-closing {
     653        animation: htmFadeOut 0.25s ease forwards;
     654    }
     655
     656    #htmega-deactivation-dialog.htm-closing .htm-deactivate-modal {
     657        animation: htmSlideDown 0.25s ease forwards;
     658    }
     659
     660    /* Modal Container */
     661    .htm-deactivate-modal {
     662        background: #ffffff;
     663        border-radius: 8px;
     664        width: 480px;
     665        max-width: 95%;
     666        overflow: hidden;
     667        box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
     668        animation: htmSlideUp 0.4s ease;
     669    }
     670
     671    /* Header */
     672    .htm-deactivate-header {
     673        background: linear-gradient(135deg, #C02D5E 0%, #D43A6B 50%, #DA4D7A 100%);
     674        padding: 20px 28px;
     675        position: relative;
     676        overflow: hidden;
     677    }
     678
     679    .htm-deactivate-header::before {
     680        content: '';
     681        position: absolute;
     682        top: -50%;
     683        right: -20%;
     684        width: 200px;
     685        height: 200px;
     686        background: rgba(255, 255, 255, 0.1);
     687        border-radius: 50%;
     688    }
     689
     690    .htm-deactivate-header::after {
     691        content: '';
     692        position: absolute;
     693        bottom: -30%;
     694        left: 10%;
     695        width: 120px;
     696        height: 120px;
     697        background: rgba(255, 255, 255, 0.08);
     698        border-radius: 50%;
     699    }
     700
     701    .htm-header-content {
     702        position: relative;
     703        z-index: 1;
     704        display: flex;
     705        align-items: center;
     706        gap: 16px;
     707    }
     708
     709    .htm-header-icon {
     710        width: 40px;
     711        height: 40px;
     712        display: flex;
     713        align-items: center;
     714        justify-content: center;
     715    }
     716
     717    .htm-header-icon img {
     718        width: 100%;
     719        height: 100%;
     720        object-fit: cover;
     721    }
     722
     723    .htm-header-text h3 {
     724        color: #ffffff;
     725        font-size: 16px;
     726        font-weight: 600;
     727        margin: 0 0 2px 0;
     728    }
     729
     730    .htm-header-text p {
     731        color: rgba(255, 255, 255, 0.85);
     732        font-size: 12px;
     733        font-weight: 400;
     734        margin: 0;
     735    }
     736
     737    /* Close Button */
     738    .htm-close-btn {
     739        position: absolute;
     740        top: 16px;
     741        right: 16px;
     742        width: 28px;
     743        height: 28px;
     744        background: rgba(255, 255, 255, 0.15);
     745        border: none;
     746        border-radius: 6px;
     747        cursor: pointer;
     748        display: flex;
     749        align-items: center;
     750        justify-content: center;
     751        transition: all 0.2s ease;
     752        z-index: 2;
     753        padding: 0;
     754    }
     755
     756    .htm-close-btn:hover {
     757        background: rgba(255, 255, 255, 0.25);
     758        transform: rotate(90deg);
     759    }
     760
     761    .htm-close-btn svg {
     762        width: 16px;
     763        height: 16px;
     764        stroke: #ffffff;
     765        stroke-width: 2;
     766    }
     767
     768    /* Body Content */
     769    .htm-body-title {
     770        font-size: 14px;
     771        color: #374151;
     772        font-weight: 500;
     773        margin: 20px 0 0 0;
     774        padding: 0 25px;
     775    }
     776
     777    /* Reason Options */
     778    .htm-reasons-list {
     779        display: flex;
     780        flex-direction: column;
     781        gap: 6px;
     782        padding: 20px 25px;
     783    }
     784
     785    .htm-reason-item {
     786        position: relative;
     787    }
     788
     789    .htm-reason-item input[type="radio"] {
     790        position: absolute;
     791        opacity: 0;
     792        width: 0;
     793        height: 0;
     794    }
     795
     796    .htm-reason-label {
     797        display: flex;
     798        align-items: center;
     799        gap: 12px;
     800        padding: 10px 14px;
     801        background: #ffffff;
     802        border: 1px solid #e5e5e5;
     803        border-radius: 8px;
     804        cursor: pointer;
     805        transition: all 0.25s ease;
     806    }
     807
     808    .htm-reason-label:hover {
     809        border-color: #D43A6B;
     810        background: #FDF2F5;
     811    }
     812
     813    .htm-reason-item input[type="radio"]:checked + .htm-reason-label {
     814        border-color: #D43A6B;
     815        background: #FDF2F5;
     816        box-shadow: 0 2px 8px rgba(212, 58, 107, 0.15);
     817    }
     818
     819    .htm-reason-radio {
     820        width: 14px;
     821        height: 14px;
     822        min-width: 14px;
     823        border: 2px solid #d1d5db;
     824        border-radius: 50%;
     825        display: flex;
     826        align-items: center;
     827        justify-content: center;
     828        transition: all 0.25s ease;
     829    }
     830
     831    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-radio {
     832        border-color: #D43A6B;
     833        background: #D43A6B;
     834    }
     835
     836    .htm-reason-radio::after {
     837        content: '';
     838        width: 6px;
     839        height: 6px;
     840        background: #ffffff;
     841        border-radius: 50%;
     842        transform: scale(0);
     843        transition: transform 0.2s ease;
     844    }
     845
     846    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-radio::after {
     847        transform: scale(1);
     848    }
     849
     850    .htm-reason-icon {
     851        width: 30px;
     852        height: 30px;
     853        min-width: 30px;
     854        background: #FBDFE5;
     855        border-radius: 6px;
     856        display: flex;
     857        align-items: center;
     858        justify-content: center;
     859        transition: all 0.25s ease;
     860    }
     861
     862    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-icon {
     863        background: #D43A6B;
     864    }
     865
     866    .htm-reason-icon svg {
     867        width: 15px;
     868        height: 15px;
     869        stroke: #D43A6B;
     870        stroke-width: 2;
     871        fill: none;
     872        transition: all 0.25s ease;
     873    }
     874
     875    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-icon svg {
     876        stroke: #ffffff;
     877    }
     878
     879    .htm-reason-text {
     880        flex: 1;
     881    }
     882
     883    .htm-reason-text span {
     884        font-size: 13px;
     885        font-weight: 500;
     886        color: #374151;
     887        display: block;
     888        line-height: 1.3;
     889    }
     890
     891    /* Additional Input Field */
     892    .htm-additional-input.htmega-deactivation-reason-input {
     893        margin-top: 6px;
     894        margin-bottom: 6px;
     895        display: none;
     896        animation: htmInputSlideDown 0.3s ease;
     897    }
     898
     899    .htm-additional-input.htmega-deactivation-reason-input.active {
     900        display: block;
     901    }
     902
     903    @keyframes htmInputSlideDown {
     904        from {
     905            opacity: 0;
     906            transform: translateY(-10px);
     907        }
     908        to {
     909            opacity: 1;
     910            transform: translateY(0);
     911        }
     912    }
     913
     914    .htm-additional-input textarea {
     915        width: 100%;
     916        min-height: 70px;
     917        padding: 12px 14px;
     918        border: 1px solid #e5e5e5;
     919        border-radius: 8px;
     920        font-size: 13px;
     921        font-family: inherit;
     922        resize: vertical;
     923        transition: all 0.25s ease;
     924        background: #ffffff;
     925        box-sizing: border-box;
     926    }
     927
     928    .htm-additional-input textarea:focus {
     929        outline: none;
     930        border-color: #D43A6B;
     931        background: #ffffff;
     932        box-shadow: 0 0 0 3px rgba(212, 58, 107, 0.1);
     933    }
     934
     935    .htm-additional-input textarea::placeholder {
     936        color: #94a3b8;
     937    }
     938
     939    /* Footer */
     940    .htm-deactivate-footer {
     941        padding: 16px 28px 20px;
     942        display: flex;
     943        align-items: center;
     944        justify-content: space-between;
     945        gap: 16px;
     946        border-top: 1px solid #e5e5e5;
     947        margin-top: 10px;
     948    }
     949
     950    .htm-btn {
     951        padding: 10px 20px;
     952        border-radius: 6px;
     953        font-size: 13px;
     954        cursor: pointer;
     955        transition: all 0.25s ease;
     956        display: inline-flex;
     957        align-items: center;
     958        gap: 6px;
     959        text-decoration: none;
     960    }
     961
     962    .htm-btn-skip {
     963        background: transparent;
     964        color: #6B7280;
     965        padding: 10px 0;
     966    }
     967
     968    .htm-btn-skip:hover {
     969        color: #D43A6B;
     970    }
     971
     972    .htm-btn-submit {
     973        background: #D43A6B;
     974        border: 1px solid #D43A6B;
     975        color: #ffffff;
     976    }
     977
     978    .htm-btn-submit:hover {
     979        background: #C02D5E;
     980        border-color: #C02D5E;
     981        color: #ffffff;
     982    }
     983
     984    .htm-btn-submit:active {
     985        background: #A82550;
     986    }
     987
     988    .htm-btn-submit:disabled {
     989        opacity: 0.7;
     990        cursor: not-allowed;
     991    }
     992
     993    .htm-btn-submit svg {
     994        width: 14px;
     995        height: 14px;
     996        stroke: currentColor;
     997        stroke-width: 2;
     998        fill: none;
     999    }
     1000
     1001    /* Responsive */
     1002    @media (max-width: 600px) {
     1003        .htm-deactivate-modal {
     1004            margin: 16px;
     1005        }
     1006
     1007        .htm-deactivate-header {
     1008            padding: 16px 20px;
     1009        }
     1010
     1011        .htm-deactivate-body {
     1012            padding: 16px 20px;
     1013        }
     1014
     1015        .htm-deactivate-footer {
     1016            padding: 14px 20px 18px;
     1017            flex-direction: column;
     1018        }
     1019
     1020        .htm-btn {
     1021            width: 100%;
     1022            justify-content: center;
     1023        }
     1024    }
     1025</style>
     1026
    6221027    <?php }
    6231028}
  • ht-mega-for-elementor/tags/3.0.6/admin/include/class.diagnostic-data.php

    r3257530 r3472539  
    8080            $this->project_type = 'wordpress-plugin';
    8181            $this->project_version = HTMEGA_VERSION;
    82             $this->data_center = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjAwNTY1MDYzZTA0MzM1MjY1NTUzNyI_3D_pc';
     82            $this->data_center = 'https://n8n.aslamhasib.com/webhook/484fe1ab-9cdf-4318-8b6f-2b218ac47009';
    8383            $this->privacy_policy = 'https://wphtmega.com/privacy-policy/';
    8484
     
    8686            $this->project_pro_installed = $this->is_pro_plugin_installed();
    8787            $this->project_pro_version = $this->get_pro_version();
     88
     89            if ( get_option( 'htmega_diagnostic_data_agreed' ) === 'yes' || get_option( 'htmega_diagnostic_data_notice' ) === 'no' ) {
     90                return;
     91            }
    8892
    8993            add_action( 'admin_notices', function () {
     
    468472         * Show notices.
    469473         */
     474        /**
     475         * Check if this plugin should show the diagnostic data notice.
     476         * Returns false if already agreed, dismissed, or another HT plugin takes priority.
     477         */
     478        public function should_show_notice() {
     479            if ( get_option( 'htmega_diagnostic_data_agreed' ) === 'yes' || get_option( 'htmega_diagnostic_data_notice' ) === 'no' ) {
     480                return false;
     481            }
     482
     483            $sibling_plugins = array(
     484                'woolentor-addons/woolentor_addons_elementor.php' => array(
     485                    'agreed'  => 'woolentor_diagnostic_data_agreed',
     486                    'notice'  => 'woolentor_diagnostic_data_notice',
     487                ),
     488                'ht-easy-google-analytics/ht-easy-google-analytics.php' => array(
     489                    'agreed'  => 'htga4_diagnostic_data_agreed',
     490                    'notice'  => 'htga4_diagnostic_data_notice',
     491                ),
     492                'ht-contactform/contact-form-widget-elementor.php' => array(
     493                    'agreed'  => 'ht_contactform_diagnostic_data_agreed',
     494                    'notice'  => 'ht_contactform_diagnostic_data_notice',
     495                ),
     496                'hashbar-wp-notification-bar/init.php' => array(
     497                    'agreed'  => 'hashbar_diagnostic_data_agreed',
     498                    'notice'  => 'hashbar_diagnostic_data_notice',
     499                ),
     500                'support-genix-lite/support-genix-lite.php' => array(
     501                    'agreed'  => 'support_genix_lite_diagnostic_data_agreed',
     502                    'notice'  => 'support_genix_lite_diagnostic_data_notice',
     503                ),
     504                'pixelavo/pixelavo.php' => array(
     505                    'agreed'  => 'pixelavo_diagnostic_data_agreed',
     506                    'notice'  => 'pixelavo_diagnostic_data_notice',
     507                ),
     508                'swatchly/swatchly.php' => array(
     509                    'agreed'  => 'swatchly_diagnostic_data_agreed',
     510                    'notice'  => 'swatchly_diagnostic_data_notice',
     511                ),
     512                'extensions-for-cf7/extensions-for-cf7.php' => array(
     513                    'agreed'  => 'ht_cf7extensions_diagnostic_data_agreed',
     514                    'notice'  => 'ht_cf7extensions_diagnostic_data_notice',
     515                ),
     516                'whols/whols.php' => array(
     517                    'agreed'  => 'whols_diagnostic_data_agreed',
     518                    'notice'  => 'whols_diagnostic_data_notice',
     519                ),
     520                'wp-plugin-manager/plugin-main.php' => array(
     521                    'agreed'  => 'htpm_diagnostic_data_agreed',
     522                    'notice'  => 'htpm_diagnostic_data_notice',
     523                ),
     524                'just-tables/just-tables.php' => array(
     525                    'agreed'  => 'justtables_diagnostic_data_agreed',
     526                    'notice'  => 'justtables_diagnostic_data_notice',
     527                ),
     528                'really-simple-google-tag-manager/really-simple-google-tag-manager.php' => array(
     529                    'agreed'  => 'simple_googletag_diagnostic_data_agreed',
     530                    'notice'  => 'simple_googletag_diagnostic_data_notice',
     531                ),
     532                'insert-headers-and-footers-script/init.php' => array(
     533                    'agreed'  => 'ihafs_diagnostic_data_agreed',
     534                    'notice'  => 'ihafs_diagnostic_data_notice',
     535                ),
     536            );
     537
     538            foreach ( $sibling_plugins as $plugin_slug => $options ) {
     539                if ( get_option( $options['agreed'] ) === 'yes' ) {
     540                    update_option( 'htmega_diagnostic_data_agreed', 'yes' );
     541                    update_option( 'htmega_diagnostic_data_notice', 'no' );
     542                    return false;
     543                }
     544            }
     545
     546            // Ensure only one HT plugin shows the diagnostic notice per request.
     547            global $ht_diagnostic_notice_owner;
     548            if ( isset( $ht_diagnostic_notice_owner ) && $ht_diagnostic_notice_owner !== 'htmega' ) {
     549                return false;
     550            }
     551            $ht_diagnostic_notice_owner = 'htmega';
     552
     553            return true;
     554        }
     555
    470556        private function show_notices() {
     557            if ( ! $this->should_show_notice() ) {
     558                return;
     559            }
     560
    471561            if ( 'no' === $this->is_capable_user() ) {
    472562                return;
     
    490580            $ajax_nonce = wp_create_nonce( "htmega-diagonstic-data-ajax-request" );
    491581
    492             $message_l1 = sprintf(/* translators: 1: Project Name, 2: Opening strong tag, 3: Closing strong tag, 4: Privacy Policy link */ esc_html__( 'At %2$s%1$s%3$s, we prioritize continuous improvement and compatibility. To achieve this, we gather non-sensitive diagnostic information and details about plugin usage. This includes your site\'s URL, the versions of WordPress and PHP you\'re using, and a list of your installed plugins and themes. We also require your email address to provide you with exclusive discount coupons and updates. This data collection is crucial for ensuring that %2$s%1$s%3$s remains up-to-date and compatible with the most widely-used plugins and themes. Rest assured, your privacy is our priority - no spam, guaranteed. %4$sPrivacy Policy%5$s', 'htmega-addons' ), esc_html( $this->project_name ), '<strong>', '</strong>', '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>', '<h4 class="htmega-diagnostic-data-title">', '</h4>' );
    493             $message_l2 = sprintf( esc_html__( 'Server information (Web server, PHP version, MySQL version), WordPress information, site name, site URL, number of plugins, number of users, your name, and email address. You can rest assured that no sensitive data will be collected or tracked. %1$sLearn more%2$s.', 'htmega-addons' ), '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>' );
     582            $message_l2 = sprintf( esc_html__( 'Server information (Web server, PHP version, MySQL version), WordPress information, site name, site URL, number of plugins, number of users, your name, and email address. You can rest assured that no sensitive data will be collected or tracked. %1$sPrivacy Policy%2$s', 'htmega-addons' ), '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>' );
    494583
    495584            $button_text_1 = esc_html__( 'Count Me In', 'htmega-addons' );
     
    499588            $button_link_2 = add_query_arg( array( 'htmega-diagnostic-data-agreed' => 0 ) );
    500589            ?>
    501             <div class="htmega-diagnostic-data-style"><style>.htmega-diagnostic-data-notice,.woocommerce-embed-page .htmega-diagnostic-data-notice{padding-top:.75em;padding-bottom:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons,.htmega-diagnostic-data-notice .htmega-diagnostic-data-list,.htmega-diagnostic-data-notice .htmega-diagnostic-data-message{padding:.25em 2px;margin:0;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-list{display:none;color:#646970;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons{padding-top:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons .button{margin-right:5px;box-shadow:none;}.htmega-diagnostic-data-loading{position:relative;}.htmega-diagnostic-data-loading::before{position:absolute;content:"";width:100%;height:100%;top:0;left:0;background-color:rgba(255,255,255,.5);z-index:999;}.htmega-diagnostic-data-disagree{border-width:0px !important;background-color: transparent!important; padding: 0!important;}h4.htmega-diagnostic-data-title {margin: 0 0 10px 0;font-size: 1.04em;font-weight: 600;}</style></div>
    502             <div class="htmega-diagnostic-data-notice notice notice-success">
    503             <h4 class="htmega-diagnostic-data-title"><?php echo sprintf( esc_html__('🌟 Enhance Your %1$s Experience as a Valued Contributor!','htmega-addons'), esc_html( $this->project_name )); ?></h4>
    504                 <p class="htmega-diagnostic-data-message"><?php echo wp_kses_post( $message_l1 ); ?></p>
     590            <div class="htmega-diagnostic-data-style"><style>.htmega-diagnostic-data-notice,.woocommerce-embed-page .htmega-diagnostic-data-notice{padding-top:.75em;padding-bottom:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons,.htmega-diagnostic-data-notice .htmega-diagnostic-data-list,.htmega-diagnostic-data-notice .htmega-diagnostic-data-message{padding:.25em 2px;margin:0;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-list{display:none;color:#646970;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons{padding-top:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons .button{margin-right:5px;box-shadow:none;}.htmega-diagnostic-data-loading{position:relative;}.htmega-diagnostic-data-loading::before{position:absolute;content:"";width:100%;height:100%;top:0;left:0;background-color:rgba(255,255,255,.5);z-index:999;}.htmega-diagnostic-data-disagree{border-width:0px !important;background-color: transparent!important; padding: 0!important;}.htmega-diagnostic-data-list-toogle{cursor:pointer;color:#2271b1;text-decoration:none;}</style></div>
     591            <div class="htmega-diagnostic-data-notice notice notice-info">
     592                <p class="htmega-diagnostic-data-message"><?php echo wp_kses_post( sprintf( esc_html__( 'Want to help make %2$s%1$s%3$s even more awesome? Allow %1$s to collect diagnostic data and usage information. (%4$swhat we collect%5$s)', 'htmega-addons' ), esc_html( $this->project_name ), '<strong>', '</strong>', '<a href="#" class="htmega-diagnostic-data-list-toogle">', '</a>' ) ); ?></p>
    505593                <p class="htmega-diagnostic-data-list"><?php echo wp_kses_post( $message_l2 ); ?></p>
    506594                <p class="htmega-diagnostic-data-buttons">
  • ht-mega-for-elementor/tags/3.0.6/admin/include/class.newsletter-data.php

    r3048999 r3472539  
    164164         */
    165165        private function send_request( $data = array() ) {
    166             $data_center = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjIwNTY5MDYzMzA0MzA1MjY4NTUzMCI_3D_pc';
     166            $data_center = 'https://n8n.aslamhasib.com/webhook/cf511335-3a57-4e3e-a8f5-055164f2b5bf';
    167167            $headers = array( 'Content-Type' => 'application/json', 'Accept' => 'application/json' );
    168168            $body = wp_json_encode( $data );
  • ht-mega-for-elementor/tags/3.0.6/admin/include/template-library.php

    r3425025 r3472539  
    99    const CACHE_FILE = 'htmega_template_info.json';
    1010    const CACHE_META_FILE = 'htmega_template_meta.json';
    11     const CACHE_EXPIRY = 604800; // WEEK_IN_SECONDS
     11    const CACHE_EXPIRY = 2592000; // 30 days in seconds
    1212    public static $buylink = null;
    1313
  • ht-mega-for-elementor/tags/3.0.6/htmega_addons_elementor.php

    r3446395 r3472539  
    11<?php
    22/**
    3  * Plugin Name: HT Mega – Absolute Addons for Elementor.
    4  * Description: The HTMega is a elementor addons package for Elementor page builder plugin for WordPress.
     3 * Plugin Name: HT Mega Addons for Elementor - Elementor Widgets & Template Builder
     4 * Description: Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page Builder, Slider, Gallery, Post Grid, AI Writer & more.
    55 * Plugin URI:  https://wphtmega.com/
    66 * Author:      HasThemes
    77 * Author URI:  https://hasthemes.com/
    8  * Version:     3.0.5
     8 * Version:     3.0.6
    99 * License:     GPL2
    1010 * License URI:  https://www.gnu.org/licenses/gpl-2.0.html
    1111 * Text Domain: htmega-addons
    1212 * Domain Path: /languages
    13  * Elementor tested up to: 3.34.2
    14  * Elementor Pro tested up to: 3.34.1
     13 * Elementor tested up to: 3.35.5
     14 * Elementor Pro tested up to: 3.35.1
    1515*/
    1616
    1717if( ! defined( 'ABSPATH' ) ) exit(); // Exit if accessed directly
    18 define( 'HTMEGA_VERSION', '3.0.5' );
     18define( 'HTMEGA_VERSION', '3.0.6' );
    1919define( 'HTMEGA_ADDONS_PL_ROOT', __FILE__ );
    2020define( 'HTMEGA_ADDONS_PL_URL', plugins_url( '/', HTMEGA_ADDONS_PL_ROOT ) );
  • ht-mega-for-elementor/tags/3.0.6/includes/class.assests-cache.php

    r3177630 r3472539  
    77    class HTMega_Elementor_Assests_Cache {
    88
    9         const UPLOADS_DIR = 'htmega/';
     9        const UPLOADS_DIR = 'htmega-addons/';
    1010        const CSS_DIR = 'css/';
    1111        const FILE_PREFIX = 'htmega-';
     
    3737            $this->upload_file_url = trailingslashit( $upload_dir['baseurl'] );
    3838            $this->upload_file_url = ( is_ssl() ? str_replace( 'http://', 'https://', $this->upload_file_url ) : $this->upload_file_url );
     39
     40            // One-time migration: remove old 'htmega' cache directory
     41            if ( ! get_option( 'htmega_cache_dir_migrated' ) ) {
     42                $old_dir = $this->upload_file_path . 'htmega';
     43                if ( is_dir( $old_dir ) ) {
     44                    $this->file_system->delete( $old_dir, true );
     45                }
     46                update_option( 'htmega_cache_dir_migrated', true, true );
     47            }
    3948        }
    4049
  • ht-mega-for-elementor/tags/3.0.6/includes/class.assests.php

    r3277495 r3472539  
    442442                    'allTypes'  => esc_html__( 'All Types', 'htmega-addons' ),
    443443                    'upgradeToPro'  => esc_html__( 'Upgrade To PRO', 'htmega-addons' ),
    444                     'previewAll'  => esc_html__( 'Preview All', 'htmega-addons' ),
     444                    'previewAll'  => esc_html__( 'All Pages', 'htmega-addons' ),
    445445                    'backToHomepages'  => esc_html__( 'Back to Homepages', 'htmega-addons' ),
    446446                    'allPages'  => esc_html__( 'All Pages', 'htmega-addons' ),
  • ht-mega-for-elementor/tags/3.0.6/languages/htmega-addons.pot

    r3446395 r3472539  
    22msgid ""
    33msgstr ""
    4 "Project-Id-Version: HT Mega – Absolute Addons for Elementor.\n"
     4"Project-Id-Version: HT Mega Addons for Elementor - Elementor Widgets & "
     5"Template Builder\n"
    56"Report-Msgid-Bugs-To: \n"
    6 "POT-Creation-Date: 2026-01-22 05:42+0000\n"
     7"POT-Creation-Date: 2026-03-02 08:50+0000\n"
    78"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    89"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1415"Content-Transfer-Encoding: 8bit\n"
    1516"X-Generator: Loco https://localise.biz/\n"
    16 "X-Loco-Version: 2.8.0; wp-6.9; php-8.2.26\n"
     17"X-Loco-Version: 2.8.2; wp-6.9.1; php-8.2.26\n"
    1718"X-Domain: htmega-addons"
    1819
     
    701702msgstr ""
    702703
    703 #: includes/class.assests.php:437 admin/include/template-library.php:681
    704 #: admin/include/template-library.php:778
     704#: includes/class.assests.php:437 admin/include/template-library.php:679
     705#: admin/include/template-library.php:776
    705706#: includes/recommended-plugins/class.recommended-plugins.php:247
    706707msgid "Activate"
     
    711712msgstr ""
    712713
    713 #: includes/class.assests.php:436 admin/include/template-library.php:689
    714 #: admin/include/template-library.php:789
     714#: includes/class.assests.php:436 admin/include/template-library.php:687
     715#: admin/include/template-library.php:787
    715716#: includes/recommended-plugins/class.recommended-plugins.php:128
    716717#: includes/recommended-plugins/class.recommended-plugins.php:258
     
    11281129msgstr ""
    11291130
    1130 #: includes/class.assests.php:446
     1131#: includes/class.assests.php:444 includes/class.assests.php:446
    11311132msgid "All Pages"
    11321133msgstr ""
     
    13141315#: extensions/ht-builder/widgets/bl_post_archive.php:226
    13151316msgid "Ascending"
    1316 msgstr ""
    1317 
    1318 #. 1: Project Name, 2: Opening strong tag, 3: Closing strong tag, 4: Privacy Policy link
    1319 #: admin/include/class.diagnostic-data.php:492
    1320 #, php-format
    1321 msgid ""
    1322 "At %2$s%1$s%3$s, we prioritize continuous improvement and compatibility. To "
    1323 "achieve this, we gather non-sensitive diagnostic information and details "
    1324 "about plugin usage. This includes your site's URL, the versions of WordPress "
    1325 "and PHP you're using, and a list of your installed plugins and themes. We "
    1326 "also require your email address to provide you with exclusive discount "
    1327 "coupons and updates. This data collection is crucial for ensuring that "
    1328 "%2$s%1$s%3$s remains up-to-date and compatible with the most widely-used "
    1329 "plugins and themes. Rest assured, your privacy is our priority - no spam, "
    1330 "guaranteed. %4$sPrivacy Policy%5$s"
    13311317msgstr ""
    13321318
     
    33423328msgstr ""
    33433329
    3344 #: includes/class.assests.php:431 admin/include/template-library.php:797
     3330#: includes/class.assests.php:431 admin/include/template-library.php:795
    33453331#: includes/recommended-plugins/class.recommended-plugins.php:124
    33463332#: includes/recommended-plugins/class.recommended-plugins.php:235
     
    45854571msgstr ""
    45864572
    4587 #: admin/include/class.diagnostic-data.php:495
     4573#: admin/include/class.diagnostic-data.php:584
    45884574msgid "Count Me In"
    45894575msgstr ""
     
    52115197msgstr ""
    52125198
    5213 #: admin/include/template-library.php:601
     5199#: admin/include/template-library.php:599
    52145200msgid "Edit Page"
    52155201msgstr ""
    52165202
    52175203#: includes/class.assests.php:440 admin/include/class.theme-builder.php:95
    5218 #: admin/include/template-library.php:601
     5204#: admin/include/template-library.php:599
    52195205msgid "Edit Template"
    52205206msgstr ""
     
    53215307#: includes/class.htmega.php:396
    53225308msgid "Elementor Activate Now"
     5309msgstr ""
     5310
     5311#. Description of the plugin
     5312msgid ""
     5313"Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page "
     5314"Builder, Slider, Gallery, Post Grid, AI Writer & more."
    53235315msgstr ""
    53245316
     
    68236815msgstr ""
    68246816
     6817#. Name of the plugin
     6818msgid "HT Mega Addons for Elementor - Elementor Widgets & Template Builder"
     6819msgstr ""
     6820
    68256821#: includes/class.post-duplicator.php:44
    68266822msgid "HT Mega Duplicator"
     
    68316827msgstr ""
    68326828
     6829#: admin/include/class-deactivation.php:371
    68336830#: admin/include/settings-panel/includes/templates/dashboard-general.php:15
    68346831msgid "HT Mega Logo"
     
    68416838#: admin/include/class.theme-builder.php:91
    68426839msgid "HT Mega Templates"
    6843 msgstr ""
    6844 
    6845 #. Name of the plugin
    6846 msgid "HT Mega – Absolute Addons for Elementor."
    68476840msgstr ""
    68486841
     
    69706963msgstr ""
    69716964
    6972 #: admin/include/class-deactivation.php:430
     6965#: admin/include/class-deactivation.php:462
     6966#: admin/include/class-deactivation.php:471
     6967msgid "I encountered an error or bug"
     6968msgstr ""
     6969
     6970#: admin/include/class-deactivation.php:421
    69736971#: admin/include/class-deactivation.php:431
    6974 msgid "I could not get the plugin to work"
    6975 msgstr ""
    6976 
    6977 #: admin/include/class-deactivation.php:423
    6978 #: admin/include/class-deactivation.php:424
    6979 msgid "I encountered an error or bug"
    6980 msgstr ""
    6981 
    6982 #: admin/include/class-deactivation.php:409
    6983 #: admin/include/class-deactivation.php:410
    69846972msgid "I found a better plugin"
    69856973msgstr ""
    69866974
    6987 #: admin/include/class-deactivation.php:434
    6988 #: admin/include/class-deactivation.php:435
     6975#: admin/include/class-deactivation.php:405
     6976#: admin/include/class-deactivation.php:414
    69896977msgid "I no longer need the plugin"
    69906978msgstr ""
     
    72357223msgstr ""
    72367224
    7237 #: admin/include/class-deactivation.php:405
    7238 msgid "If you have a moment, please let us know why you are deactivating: "
    7239 msgstr ""
    7240 
    72417225#: extensions/scroll-to-top/class.scroll-to-top.php:330
    72427226#: extensions/scroll-to-top/class.scroll-to-top.php:355
     
    76477631msgstr ""
    76487632
    7649 #: admin/include/template-library.php:685
    7650 #: admin/include/template-library.php:784
     7633#: admin/include/template-library.php:683
     7634#: admin/include/template-library.php:782
    76517635#: includes/recommended-plugins/class.recommended-plugins.php:253
    76527636msgid "Install Now"
     
    77987782msgstr ""
    77997783
    7800 #: admin/include/class-deactivation.php:438
    7801 #: admin/include/class-deactivation.php:439
     7784#: admin/include/class-deactivation.php:388
     7785#: admin/include/class-deactivation.php:398
    78027786msgid "It's a temporary deactivation"
    78037787msgstr ""
     
    95819565msgstr ""
    95829566
    9583 #: admin/include/template-library.php:206
     9567#: admin/include/template-library.php:204
    95849568msgid "No data found"
    95859569msgstr ""
     
    96299613msgstr ""
    96309614
    9631 #: admin/include/class.diagnostic-data.php:498
     9615#: admin/include/class.diagnostic-data.php:587
    96329616msgid "No, Thanks"
    96339617msgstr ""
     
    1014610130msgstr ""
    1014710131
    10148 #: admin/include/class-deactivation.php:442
    10149 #: admin/include/class-deactivation.php:443
     10132#: admin/include/class-deactivation.php:481
     10133#: admin/include/class-deactivation.php:490
    1015010134msgid "Other"
    1015110135msgstr ""
     
    1068510669msgstr ""
    1068610670
    10687 #: admin/include/class-deactivation.php:427
    10688 msgid ""
    10689 "Please describe the error/bug you encountered. This will help us fix it for "
    10690 "future users."
     10671#: admin/include/class-deactivation.php:476
     10672msgid "Please describe the error/bug. This will help us fix it..."
     10673msgstr ""
     10674
     10675#: admin/include/class-deactivation.php:457
     10676msgid "Please describe the issue you're experiencing..."
    1069110677msgstr ""
    1069210678
     
    1074110727msgstr ""
    1074210728
    10743 #: admin/include/class-deactivation.php:420
    10744 msgid "Please share more details."
    10745 msgstr ""
    10746 
    10747 #: admin/include/class-deactivation.php:446
    10748 msgid "Please share the reason."
    10749 msgstr ""
    10750 
    10751 #: admin/include/class-deactivation.php:413
    10752 msgid "Please share which plugin."
    10753 msgstr ""
    10754 
    10755 #: admin/include/template-library.php:208
     10729#: admin/include/class-deactivation.php:495
     10730msgid "Please share the reason..."
     10731msgstr ""
     10732
     10733#: admin/include/class-deactivation.php:382
     10734msgid "Please share why you're deactivating HT Mega:"
     10735msgstr ""
     10736
     10737#: admin/include/template-library.php:206
    1075610738msgid "Please wait a few moments, this may be the causes of server issues."
    1075710739msgstr ""
     
    1076110743msgstr ""
    1076210744
    10763 #: admin/include/template-library.php:733
     10745#: admin/include/template-library.php:731
    1076410746msgid "Plugin file not found"
    1076510747msgstr ""
    1076610748
    10767 #: admin/include/template-library.php:721
     10749#: admin/include/template-library.php:719
    1076810750msgid "Plugin location not provided"
    1076910751msgstr ""
     
    1077310755msgstr ""
    1077410756
    10775 #: admin/include/template-library.php:753
     10757#: admin/include/template-library.php:751
    1077610758#: includes/recommended-plugins/class.recommended-plugins.php:420
    1077710759msgid "Plugin Successfully Activated"
     
    1099510977msgstr ""
    1099610978
    10997 #: includes/class.assests.php:444
    10998 msgid "Preview All"
    10999 msgstr ""
    11000 
    1100110979#: includes/class.assests.php:375 includes/widgets/htmega_data_table.php:708
    1100210980msgid "Previous"
     
    1121111189#: includes/widgets/htmega_quforms.php:1094
    1121211190msgid "QUforms"
    11213 msgstr ""
    11214 
    11215 #: admin/include/class-deactivation.php:404
    11216 msgid "Quick Feedback"
    1121711191msgstr ""
    1121811192
     
    1206512039msgstr ""
    1206612040
    12067 #: admin/include/class.diagnostic-data.php:493
     12041#: admin/include/class.diagnostic-data.php:582
    1206812042#, php-format
    1206912043msgid ""
     
    1207112045"information, site name, site URL, number of plugins, number of users, your "
    1207212046"name, and email address. You can rest assured that no sensitive data will be "
    12073 "collected or tracked. %1$sLearn more%2$s."
     12047"collected or tracked. %1$sPrivacy Policy%2$s"
    1207412048msgstr ""
    1207512049
     
    1249512469msgstr ""
    1249612470
    12497 #: admin/include/class-deactivation.php:451
     12471#: admin/include/class-deactivation.php:501
    1249812472msgid "Skip & Deactivate"
    1249912473msgstr ""
     
    1268512659msgstr ""
    1268612660
    12687 #: admin/include/template-library.php:821
     12661#: admin/include/template-library.php:819
    1268812662msgid "Sorry, you are not allowed to install themes on this site."
    1268912663msgstr ""
     
    1311413088msgstr ""
    1311513089
    13116 #: admin/include/class-deactivation.php:450
     13090#: admin/include/class-deactivation.php:503
    1311713091msgid "Submit & Deactivate"
    1311813092msgstr ""
     
    1312313097#: extensions/ht-builder/widgets/bl_post_comments.php:216
    1312413098msgid "Submit Button"
     13099msgstr ""
     13100
     13101#: admin/include/class-deactivation.php:565
     13102msgid "Submitting..."
    1312513103msgstr ""
    1312613104
     
    1346213440msgstr ""
    1346313441
    13464 #: admin/include/template-library.php:108
     13442#: admin/include/template-library.php:106
    1346513443msgid "Template server is temporarily unavailable. Please try again later."
    1346613444msgstr ""
    1346713445
    13468 #: admin/include/template-library.php:99
     13446#: admin/include/template-library.php:97
    1346913447msgid ""
    1347013448"Template server is temporarily unavailable. Showing cached data. Server will "
     
    1348713465msgstr ""
    1348813466
    13489 #: admin/include/template-library.php:180
    13490 #: admin/include/template-library.php:181
     13467#: admin/include/template-library.php:178
     13468#: admin/include/template-library.php:179
    1349113469#: admin/include/settings-panel/includes/templates/dashboard-general.php:47
    1349213470msgid "Templates Library"
     
    1364413622
    1364513623#. 1: Project Name, 2: Opening strong tag, 3: Closing strong tag
    13646 #: admin/include/class.diagnostic-data.php:519
     13624#: admin/include/class.diagnostic-data.php:607
    1364713625#, php-format
    1364813626msgid "Thank you very much for supporting %2$s%1$s%3$s."
     
    1366113639msgstr ""
    1366213640
    13663 #. Description of the plugin
    13664 msgid ""
    13665 "The HTMega is a elementor addons package for Elementor page builder plugin "
    13666 "for WordPress."
    13667 msgstr ""
    13668 
    13669 #: admin/include/class-deactivation.php:416
    13670 #: admin/include/class-deactivation.php:417
     13641#: admin/include/class-deactivation.php:441
     13642#: admin/include/class-deactivation.php:452
    1367113643msgid "The plugin suddenly stopped working"
    1367213644msgstr ""
     
    1369813670msgstr ""
    1369913671
    13700 #: admin/include/template-library.php:832
     13672#: admin/include/template-library.php:830
    1370113673msgid "Theme Activated"
    1370213674msgstr ""
     
    1446114433msgstr ""
    1446214434
    14463 #: admin/include/template-library.php:144
     14435#: admin/include/template-library.php:142
    1446414436msgid "Unable to load templates at this time. Please try again later."
    1446514437msgstr ""
     
    1476014732#: includes/widgets/htmega_audio_player.php:417
    1476114733msgid "Volume Slider Layout"
     14734msgstr ""
     14735
     14736#: admin/include/class.diagnostic-data.php:592
     14737#, php-format
     14738msgid ""
     14739"Want to help make %2$s%1$s%3$s even more awesome? Allow %1$s to collect "
     14740"diagnostic data and usage information. (%4$swhat we collect%5$s)"
    1476214741msgstr ""
    1476314742
     
    1480214781msgstr ""
    1480314782
     14783#: admin/include/class-deactivation.php:374
     14784msgid "We're Sorry to See You Go!"
     14785msgstr ""
     14786
    1480414787#: includes/widgets/htmega_weather.php:13
    1480514788#: includes/widgets/htmega_weather.php:41
     
    1485414837#: includes/class.assests.php:798
    1485514838msgid "WhatsApp Chat"
     14839msgstr ""
     14840
     14841#: admin/include/class-deactivation.php:436
     14842msgid "Which plugin are you switching to? We'd love to know..."
    1485614843msgstr ""
    1485714844
     
    1506515052msgstr ""
    1506615053
    15067 #: admin/include/template-library.php:80
     15054#: admin/include/template-library.php:78
    1506815055msgid ""
    1506915056"You can refresh templates once every 24 hours. Next refresh available in %d "
     
    1508715074msgstr ""
    1508815075
    15089 #: admin/include/template-library.php:709
     15076#: admin/include/template-library.php:707
    1509015077msgid "You do not have permission to install plugins"
    1509115078msgstr ""
     
    1511615103msgstr ""
    1511715104
     15105#: admin/include/class-deactivation.php:375
     15106msgid "Your feedback helps us improve HT Mega for everyone."
     15107msgstr ""
     15108
    1511815109#: includes/class.assests.php:422
    1511915110msgid "Your template has been imported and is ready to use"
     
    1515815149msgstr ""
    1515915150
    15160 #: admin/include/class.diagnostic-data.php:503
    15161 #, php-format
    15162 msgid "🌟 Enhance Your %1$s Experience as a Valued Contributor!"
    15163 msgstr ""
    15164 
    1516515151#: admin/include/settings-panel/includes/classes/Admin/Menu.php:247
    1516615152msgid "💡 All Features. More Flexibility. Build Better, Faster, and Smarter."
  • ht-mega-for-elementor/tags/3.0.6/readme.txt

    r3446395 r3472539  
    1 === HT Mega - Absolute Addons For Elementor ===
     1=== HT Mega Addons for Elementor - Elementor Widgets & Template Builder ===
    22Contributors: hasthemes, htplugins, devitemsllc, tarekht, zenaulislam, aslamhasib, madhusudandev
    3 Tags: elementor, elementor addons, elementor widgets, page builder, elementor templates, mega menu, addons for elementor, post grid, elements, header footer builder
     3Tags: elementor addons, mega menu, page builder, elementor widgets, elementor templates
    44Requires at least: 5.0
    55Tested up to: 6.9
    6 Stable tag: 3.0.5
     6Stable tag: 3.0.6
    77License: GPLv2 or later
    88License URI: https://www.gnu.org/licenses/gpl-2.0.html
    99
    10 Elementor addons package for WordPress with Elementor widgets, blocks, pre-designed templates, Theme builder, mega menu, header footer, single post, archive builder, AI content writer, carousel, slider, form, gallery, testimonial, portfolio, WooCommerce widgets, forms, tables, and so on. It empowers you to build a professional website in WordPress, one of the most popular WordPress page builders.
     10Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page Builder, Slider, Gallery, Post Grid, AI Writer & more.
    1111
    1212== Description ==
     
    238238== Changelog ==
    239239
     240= Version 3.0.6 - Date: 2026-03-02 =
     241* Updated: Template library "Preview All" button text changed to "All Pages".
     242* Updated: Template library cache expiry.
     243* Updated: Consolidated asset cache and template cache into single 'htmega-addons' directory.
     244* Fixed: A few minor issues.
     245* Tested: Compatibility with the latest version of Elementor.
     246
    240247= Version 3.0.5 - Date: 2026-01-25 =
    241248* Added: Team Wrapper Hover Box Shadow option for the Team Member widget.
     
    441448* Tested: Compatibility with the latest version of Elementor.
    442449
    443 = Version 2.7.9 - Date: 2025-01-15 =
    444 * Improved: Admin settings panel performance.
    445 * Fixed: A few minor issues.
    446 * Tested: Compatibility with the latest version of Elementor.
    447 
    448 = Version 2.7.8 - Date: 2025-01-09 =
    449 * Improved: Admin settings panel layout.
    450 * Fixed: A few minor issues.
    451 * Tested: Compatibility with the latest version of Elementor.
    452 
    453 = Version 2.7.7 - Date: 2024-12-18 =
    454 * Fixed: Mega Menu settings not updating issue.
    455 * Fixed: WPML compatibility issue in Tabs widget.
    456 * Fixed: A few minor issues.
    457 * Tested: Compatibility with the latest version of Elementor.
    458 
    459450
    460451
  • ht-mega-for-elementor/trunk/admin/include/class-deactivation.php

    r3233878 r3472539  
    11<?php
    22if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    3 /**
    4  * Add Plugin Deactivation Feedback
    5  *
    6  * Edit:
    7  * - $PROJECT_NAME
    8  * - $PROJECT_VERSION
    9  * - $PROJECT_SLUG
    10  * - $PROJECT_PRO_SLUG
    11  */
     3
    124class HTmega_Plugin_Deactivation_Feedback {
    135
     
    2012    public $PROJECT_PRO_INSTALL;
    2113    public $PROJECT_PRO_VERSION;
    22    // public $DATA_CENTER = 'https://webhook.site/c76bcc06-ad79-4e62-a55b-71118d236a77'; // For testing purpose only
    23     public $DATA_CENTER = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjAwNTY1MDYzZTA0MzM1MjY1NTUzNyI_3D_pc';
     14    public $DATA_CENTER = 'https://exit-feedback.hasthemes.com/w/f6d46a1c-3d29-4079-baa0-8de1cb0dcc01';
     15    public $WEBHOOK_SECRET = '83d687b0cf4e635ac08e9c7ff1468f5fe98228c631d30c438bc49eae1ef69d03';
    2416
    2517    private static $_instance = null;
    26     /**
    27      * Class Instance
    28      */
     18
    2919    public static function instance(){
    3020        if( is_null( self::$_instance ) ){
     
    3323        return self::$_instance;
    3424    }
    35    
     25
    3626    public function __construct() {
    3727        $this->PROJECT_PRO_ACTIVE = $this->is_pro_plugin_active();
     
    4232    }
    4333
    44    
    4534    /**
    4635     * Handle AJAX feedback submission
    4736     */
    4837    public function handle_feedback() {
    49             // Add nonce verification
    5038        if ( !check_ajax_referer('htmega_deactivation_nonce', 'nonce', false) ) {
    5139            wp_send_json_error('Invalid nonce');
    5240            return;
    5341        }
    54        
     42
    5543        if(!current_user_can( 'administrator' )) {
    5644            wp_send_json_error('Permission denied');
    5745            return;
    5846        }
    59         // Sanitize and prepare data
     47
    6048        $reason = sanitize_text_field($_POST['reason']);
    6149        $message = sanitize_textarea_field($_POST['message']);
    6250
    63         // Prepare data for Pabbly
    6451        $data = array_merge(
    6552            [
     
    7057        );
    7158
     59        $body = wp_json_encode( $data );
     60
    7261        $site_url = wp_parse_url( home_url(), PHP_URL_HOST );
    7362        $headers = [
    74             'user-agent' => $this->PROJECT_NAME . '/' . md5 ( $site_url ) . ';',
    75             'Content-Type'     => 'application/json',
     63            'user-agent'   => $this->PROJECT_NAME . '/' . md5( $site_url ) . ';',
     64            'Content-Type' => 'application/json',
    7665        ];
    7766
    78         // Send data to Pabbly
     67        $signature = $this->generate_signature( $body );
     68        if ( ! empty( $signature ) ) {
     69            $headers['X-Webhook-Signature'] = $signature;
     70        }
     71
    7972        $response = wp_remote_post($this->DATA_CENTER, [
    8073            'method'      => 'POST',
     
    8578            'sslverify'   => false,
    8679            'headers'     => $headers,
    87             'body'        => wp_json_encode($data),
     80            'body'        => $body,
    8881            'cookies'     => []
    8982        ]);
    9083
    91         // Check for errors
    9284        if (!is_wp_error($response)) {
    9385            wp_send_json_success('Feedback submitted successfully');
     
    9890
    9991    public function get_data() {
    100         $hash = md5( current_time( 'U', true ) );
    10192
    10293        // Get plugin specific information
     
    111102
    112103        $site_title = get_bloginfo( 'name' );
    113         $site_description = get_bloginfo( 'description' );
    114104        $site_url = wp_parse_url( home_url(), PHP_URL_HOST );
    115105        $admin_email = get_option( 'admin_email' );
     
    136126
    137127        $ip_address = $this->get_ip_address();
    138 
    139         // Get Plugins
    140         $all_plugins = get_plugins();
    141         $active_plugins = get_option('active_plugins');
    142         $plugins_string = '';
    143         foreach($all_plugins as $plugin_path => $plugin) {
    144             $plugins_string .= sprintf(
    145                 "%s (v%s) - %s | ",
    146                 $plugin['Name'],
    147                 $plugin['Version'],
    148                 in_array($plugin_path, $active_plugins) ? 'Active' : 'Inactive'
    149             );
    150         }
    151         $plugins_string = rtrim($plugins_string, ' | ');
    152         // Get Themes
    153         $all_themes = wp_get_themes();
    154         $active_theme = wp_get_theme();
    155         $themes_string = '';
    156         foreach($all_themes as $theme_slug => $theme) {
    157             $themes_string .= sprintf(
    158                 "%s (v%s) - %s | ",
    159                 $theme->get('Name'),
    160                 $theme->get('Version'),
    161                 ($theme_slug === $active_theme->get_stylesheet()) ? 'Active' : 'Inactive'
    162             );
    163         }
    164         $themes_string = rtrim($themes_string, ' | ');
    165 
    166 
     128        $install_time = get_option( 'htmega_elementor_addons_activation_time' );
    167129        $data = [
    168             'hash'    => $hash,
    169             'project' => $project,
     130            'project'            => $project,
    170131            'site_title'         => $site_title,
    171             'site_description'   => $site_description,
    172132            'site_address'       => $site_url,
    173133            'site_url'           => $site_url,
     
    178138            'server_info'        => $this->get_server_info(),
    179139            'wordpress_info'     => $this->get_wordpress_info(),
    180             'users_count'        => $this->get_users_count(),
    181140            'plugins_count'      => $this->get_plugins_count(),
    182141            'ip_address'         => $ip_address,
    183142            'country_name'       => $this->get_country_from_ip( $ip_address ),
    184             'plugin_list'       => $plugins_string,
    185             'theme_list'        => $themes_string,
     143            'plugin_list'        => $this->get_active_plugins(),
     144            'install_time'       => $install_time,
    186145        ];
    187146
     
    198157        $php_version = function_exists ( 'phpversion' ) ? phpversion () : '';
    199158        $mysql_version = method_exists ( $wpdb, 'db_version' ) ? $wpdb->db_version () : '';
    200         $php_max_upload_size = size_format( wp_max_upload_size() );
    201         $php_default_timezone = date_default_timezone_get();
    202         $php_soap = class_exists ( 'SoapClient' ) ? 'yes' : 'no';
    203         $php_fsockopen = function_exists ( 'fsockopen' ) ? 'yes' : 'no';
    204         $php_curl = function_exists ( 'curl_init' ) ? 'yes' : 'no';
    205159
    206160        $server_info = array(
     
    208162            'php_version'          => $php_version,
    209163            'mysql_version'        => $mysql_version,
    210             'php_max_upload_size'  => $php_max_upload_size,
    211             'php_default_timezone' => $php_default_timezone,
    212             'php_soap'             => $php_soap,
    213             'php_fsockopen'        => $php_fsockopen,
    214             'php_curl'             => $php_curl,
    215164        );
    216165
     
    224173        $wordpress_info = [];
    225174
    226         $memory_limit = defined ( 'WP_MEMORY_LIMIT' ) ? WP_MEMORY_LIMIT : '';
    227175        $debug_mode = ( defined ( 'WP_DEBUG' ) && WP_DEBUG ) ? 'yes' : 'no';
    228176        $locale = get_locale();
    229177        $version = get_bloginfo( 'version' );
    230         $multisite = is_multisite () ? 'yes' : 'no';
    231178        $theme_slug = get_stylesheet();
    232179
    233180        $wordpress_info = [
    234             'memory_limit' => $memory_limit,
    235181            'debug_mode'   => $debug_mode,
    236182            'locale'       => $locale,
    237183            'version'      => $version,
    238             'multisite'    => $multisite,
    239184            'theme_slug'   => $theme_slug,
    240185        ];
     
    257202
    258203        return $wordpress_info;
    259     }
    260 
    261     /**
    262      * Get users count.
    263      */
    264     private function get_users_count() {
    265         $users_count = [];
    266 
    267         $users_count_data = count_users();
    268 
    269         $total_users = isset ( $users_count_data['total_users'] ) ? $users_count_data['total_users'] : 0;
    270         $avail_roles = isset ( $users_count_data['avail_roles'] ) ? $users_count_data['avail_roles'] : [];
    271 
    272         $users_count['total'] = $total_users;
    273 
    274         if ( is_array( $avail_roles ) && ! empty( $avail_roles ) ) {
    275             foreach ( $avail_roles as $role => $count ) {
    276                 $users_count[ $role ] = $count;
    277             }
    278         }
    279 
    280         return $users_count;
    281204    }
    282205
     
    317240
    318241    /**
     242     * Get active plugins.
     243     */
     244    private function get_active_plugins() {
     245        $active_plugins = get_option('active_plugins');
     246        $all_plugins = get_plugins();
     247        $active_plugin_string = '';
     248        foreach($all_plugins as $plugin_path => $plugin) {
     249            if ( ! in_array($plugin_path, $active_plugins) ) {
     250                continue;
     251            }
     252            $active_plugin_string .= sprintf(
     253                "%s (v%s) - %s | ",
     254                $plugin['Name'],
     255                $plugin['Version'],
     256                'Active'
     257            );
     258        }
     259        $active_plugin_string = rtrim($active_plugin_string, ' | ');
     260        return $active_plugin_string;
     261    }
     262
     263    /**
    319264     * Get IP Address
    320265     */
     
    337282
    338283    /**
    339      * Get Country Form ID Address
     284     * Get Country From IP Address
    340285     */
    341286    private function get_country_from_ip( $ip_address ) {
    342287        $api_url = 'http://ip-api.com/json/' . $ip_address;
    343    
    344         // Fetch data from the API
     288
    345289        $response = wp_remote_get( $api_url );
    346    
     290
    347291        if ( is_wp_error( $response ) ) {
    348292            return 'Error';
    349293        }
    350    
    351         // Decode the JSON response
     294
    352295        $data = json_decode( wp_remote_retrieve_body($response) );
    353    
     296
    354297        if ($data && $data->status === 'success') {
    355298            return $data->country;
     
    357300            return 'Unknown';
    358301        }
     302    }
     303
     304    /**
     305     * Generate HMAC-SHA256 signature for webhook payload.
     306     */
     307    private function generate_signature( $payload ) {
     308        if ( empty( $this->WEBHOOK_SECRET ) ) {
     309            return '';
     310        }
     311        return 'sha256=' . hash_hmac( 'sha256', $payload, $this->WEBHOOK_SECRET );
    359312    }
    360313
     
    393346            return;
    394347        }
     348
    395349        $this->deactivation_form_html();
    396         $this->deactivation_form_js();
    397         $this->deactivation_form_css();
    398     }
    399 
    400     public function deactivation_form_html() { ?>
    401         <div id="htmega-deactivation-dialog" style="display: none;">
    402             <div class="htmega-deactivation-dialog-content">
    403                 <button type="button" class="htmega-close-dialog" aria-label="Close">&times;</button>
    404                 <h2 class="htmega-deactivation-dialog-title"><?php esc_html_e('Quick Feedback', 'htmega-addons') ?></h2>
    405                 <p class="htmega-deactivation-dialog-desc"><?php esc_html_e('If you have a moment, please let us know why you are deactivating: ', 'htmega-addons'); echo esc_html($this->PROJECT_NAME); ?></p>
    406                 <form id="htmega-deactivation-feedback-form">
    407                     <div class="htmega-feedback-options">
    408                         <label>
    409                             <input type="radio" name="reason" data-id="found_better" value="<?php esc_attr_e('I found a better plugin', 'htmega-addons') ?>">
    410                             <?php esc_html_e('I found a better plugin', 'htmega-addons') ?>
    411                         </label>
    412                         <div id="htmega-found_better-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    413                             <textarea name="found_better_reason" placeholder="<?php esc_attr_e('Please share which plugin.', 'htmega-addons') ?>"></textarea>
    414                         </div>
    415                         <label>
    416                             <input type="radio" name="reason" data-id="stopped_working" value="<?php esc_attr_e('The plugin suddenly stopped working', 'htmega-addons') ?>">
    417                             <?php esc_html_e('The plugin suddenly stopped working', 'htmega-addons') ?>
    418                         </label>
    419                         <div id="htmega-stopped_working-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    420                             <textarea name="stopped_working_reason" placeholder="<?php esc_attr_e('Please share more details.', 'htmega-addons') ?>"></textarea>
    421                         </div>
    422                         <label>
    423                             <input type="radio" name="reason" data-id="found_bug" value="<?php esc_attr_e('I encountered an error or bug', 'htmega-addons') ?>">
    424                             <?php esc_html_e('I encountered an error or bug', 'htmega-addons') ?>
    425                         </label>
    426                         <div id="htmega-found_bug-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    427                             <textarea name="found_bug_reason" placeholder="<?php esc_attr_e('Please describe the error/bug you encountered. This will help us fix it for future users.', 'htmega-addons') ?>"></textarea>
    428                         </div>
    429                         <label>
    430                             <input type="radio" name="reason" data-id="not_working" value="<?php esc_attr_e("I could not get the plugin to work", 'htmega-addons') ?>">
    431                             <?php esc_html_e("I could not get the plugin to work", 'htmega-addons') ?>
    432                         </label>
    433                         <label>
    434                             <input type="radio" name="reason" data-id="" value="<?php esc_attr_e('I no longer need the plugin', 'htmega-addons') ?>">
    435                             <?php esc_html_e('I no longer need the plugin', 'htmega-addons') ?>
    436                         </label>
    437                         <label>
    438                             <input type="radio" name="reason" data-id="" value="<?php esc_attr_e("It's a temporary deactivation", 'htmega-addons') ?>">
    439                             <?php esc_html_e("It's a temporary deactivation", 'htmega-addons') ?>
    440                         </label>
    441                         <label>
    442                             <input type="radio" name="reason" data-id="other" value="<?php esc_attr_e("Other", 'htmega-addons') ?>">
    443                             <?php esc_html_e("Other", 'htmega-addons') ?>
    444                         </label>
    445                         <div id="htmega-other-reason-text" class="htmega-deactivation-reason-input" style="display: none;">
    446                             <textarea name="other_reason" placeholder="<?php esc_attr_e("Please share the reason.", 'htmega-addons') ?>"></textarea>
    447                         </div>
    448                     </div>
    449                     <div class="htmega-deactivation-dialog-buttons">
    450                         <button type="submit" class="button button-primary"><?php esc_html_e("Submit & Deactivate", 'htmega-addons') ?></button>
    451                         <a href="#" class="htmega-skip-feedback"><?php esc_html_e("Skip & Deactivate", 'htmega-addons') ?></a>
    452                     </div>
    453                 </form>
     350    }
     351
     352    /**
     353     * Deactivation form html.
     354     */
     355    public function deactivation_form_html() {
     356        $ajaxurl = admin_url('admin-ajax.php');
     357        $nonce = wp_create_nonce('htmega_deactivation_nonce');
     358    ?>
     359
     360<div id="htmega-deactivation-dialog" class="htm-deactivate-overlay" style="display: none;">
     361    <div class="htm-deactivate-modal">
     362        <!-- Header -->
     363        <div class="htm-deactivate-header">
     364            <button type="button" class="htm-close-btn htmega-close-dialog" aria-label="Close">
     365                <svg viewBox="0 0 24 24" fill="none">
     366                    <path d="M18 6L6 18M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"/>
     367                </svg>
     368            </button>
     369            <div class="htm-header-content">
     370                <div class="htm-header-icon">
     371                    <img src="<?php echo esc_url( HTMEGA_ADDONS_PL_URL . 'admin/assets/images/logo.png' ); ?>" alt="<?php esc_attr_e('HT Mega Logo', 'htmega-addons'); ?>">
     372                </div>
     373                <div class="htm-header-text">
     374                    <h3><?php esc_html_e("We're Sorry to See You Go!", 'htmega-addons') ?></h3>
     375                    <p><?php esc_html_e('Your feedback helps us improve HT Mega for everyone.', 'htmega-addons') ?></p>
     376                </div>
    454377            </div>
    455378        </div>
    456     <?php }
    457     public function deactivation_form_js() {
    458         $ajaxurl = admin_url('admin-ajax.php');
    459         $nonce = wp_create_nonce('htmega_deactivation_nonce');
    460         ?>
    461         <script>
    462             jQuery(document).ready(function($) {
    463                 let pluginToDeactivate = '';
    464                
    465                 function closeDialog() {
    466                     $('#htmega-deactivation-dialog').hide();
    467                     pluginToDeactivate = '';
    468                 }
    469                
    470                 $('[data-slug="<?php echo esc_attr($this->PROJECT_SLUG); ?>"] .deactivate a').on('click', function(e) {
    471                     e.preventDefault();
    472                     pluginToDeactivate = $(this).attr('href');
    473                     $('#htmega-deactivation-dialog').show();
     379
     380        <!-- Body -->
     381        <div class="htm-deactivate-body">
     382            <p class="htm-body-title"><?php esc_html_e('Please share why you\'re deactivating HT Mega:', 'htmega-addons') ?></p>
     383
     384            <form id="htmega-deactivation-feedback-form">
     385                <div class="htm-reasons-list">
     386                    <!-- Reason 1: Temporary -->
     387                    <div class="htm-reason-item">
     388                        <input type="radio" name="reason" id="htm_reason_temporary" data-id="" value="<?php esc_attr_e("It's a temporary deactivation", 'htmega-addons') ?>">
     389                        <label for="htm_reason_temporary" class="htm-reason-label">
     390                            <span class="htm-reason-radio"></span>
     391                            <span class="htm-reason-icon">
     392                                <svg viewBox="0 0 24 24">
     393                                    <circle cx="12" cy="12" r="10"/>
     394                                    <polyline points="12 6 12 12 16 14"/>
     395                                </svg>
     396                            </span>
     397                            <span class="htm-reason-text">
     398                                <span><?php esc_html_e("It's a temporary deactivation", 'htmega-addons') ?></span>
     399                            </span>
     400                        </label>
     401                    </div>
     402
     403                    <!-- Reason 2: No longer need -->
     404                    <div class="htm-reason-item">
     405                        <input type="radio" name="reason" id="htm_reason_no_need" data-id="" value="<?php esc_attr_e('I no longer need the plugin', 'htmega-addons') ?>">
     406                        <label for="htm_reason_no_need" class="htm-reason-label">
     407                            <span class="htm-reason-radio"></span>
     408                            <span class="htm-reason-icon">
     409                                <svg viewBox="0 0 24 24">
     410                                    <path d="M18 6L6 18M6 6l12 12"/>
     411                                </svg>
     412                            </span>
     413                            <span class="htm-reason-text">
     414                                <span><?php esc_html_e('I no longer need the plugin', 'htmega-addons') ?></span>
     415                            </span>
     416                        </label>
     417                    </div>
     418
     419                    <!-- Reason 3: Found better -->
     420                    <div class="htm-reason-item">
     421                        <input type="radio" name="reason" id="htm_reason_better" data-id="found_better" value="<?php esc_attr_e('I found a better plugin', 'htmega-addons') ?>">
     422                        <label for="htm_reason_better" class="htm-reason-label">
     423                            <span class="htm-reason-radio"></span>
     424                            <span class="htm-reason-icon">
     425                                <svg viewBox="0 0 24 24">
     426                                    <circle cx="11" cy="11" r="8"/>
     427                                    <path d="M21 21l-4.35-4.35"/>
     428                                </svg>
     429                            </span>
     430                            <span class="htm-reason-text">
     431                                <span><?php esc_html_e('I found a better plugin', 'htmega-addons') ?></span>
     432                            </span>
     433                        </label>
     434                    </div>
     435                    <div id="htmega-found_better-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     436                        <textarea name="found_better_reason" placeholder="<?php esc_attr_e('Which plugin are you switching to? We\'d love to know...', 'htmega-addons') ?>"></textarea>
     437                    </div>
     438
     439                    <!-- Reason 4: Not working -->
     440                    <div class="htm-reason-item">
     441                        <input type="radio" name="reason" id="htm_reason_not_working" data-id="stopped_working" value="<?php esc_attr_e('The plugin suddenly stopped working', 'htmega-addons') ?>">
     442                        <label for="htm_reason_not_working" class="htm-reason-label">
     443                            <span class="htm-reason-radio"></span>
     444                            <span class="htm-reason-icon">
     445                                <svg viewBox="0 0 24 24">
     446                                    <path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/>
     447                                    <line x1="12" y1="9" x2="12" y2="13"/>
     448                                    <line x1="12" y1="17" x2="12.01" y2="17"/>
     449                                </svg>
     450                            </span>
     451                            <span class="htm-reason-text">
     452                                <span><?php esc_html_e('The plugin suddenly stopped working', 'htmega-addons') ?></span>
     453                            </span>
     454                        </label>
     455                    </div>
     456                    <div id="htmega-stopped_working-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     457                        <textarea name="stopped_working_reason" placeholder="<?php esc_attr_e('Please describe the issue you\'re experiencing...', 'htmega-addons') ?>"></textarea>
     458                    </div>
     459
     460                    <!-- Reason 5: Bug -->
     461                    <div class="htm-reason-item">
     462                        <input type="radio" name="reason" id="htm_reason_bug" data-id="found_bug" value="<?php esc_attr_e('I encountered an error or bug', 'htmega-addons') ?>">
     463                        <label for="htm_reason_bug" class="htm-reason-label">
     464                            <span class="htm-reason-radio"></span>
     465                            <span class="htm-reason-icon">
     466                                <svg viewBox="0 0 24 24">
     467                                    <path d="M14.7 6.3a1 1 0 000 1.4l1.6 1.6a1 1 0 001.4 0l3.77-3.77a6 6 0 01-7.94 7.94l-6.91 6.91a2.12 2.12 0 01-3-3l6.91-6.91a6 6 0 017.94-7.94l-3.76 3.76z"/>
     468                                </svg>
     469                            </span>
     470                            <span class="htm-reason-text">
     471                                <span><?php esc_html_e('I encountered an error or bug', 'htmega-addons') ?></span>
     472                            </span>
     473                        </label>
     474                    </div>
     475                    <div id="htmega-found_bug-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     476                        <textarea name="found_bug_reason" placeholder="<?php esc_attr_e('Please describe the error/bug. This will help us fix it...', 'htmega-addons') ?>"></textarea>
     477                    </div>
     478
     479                    <!-- Reason 6: Other -->
     480                    <div class="htm-reason-item">
     481                        <input type="radio" name="reason" id="htm_reason_other" data-id="other" value="<?php esc_attr_e('Other', 'htmega-addons') ?>">
     482                        <label for="htm_reason_other" class="htm-reason-label">
     483                            <span class="htm-reason-radio"></span>
     484                            <span class="htm-reason-icon">
     485                                <svg viewBox="0 0 24 24">
     486                                    <path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
     487                                </svg>
     488                            </span>
     489                            <span class="htm-reason-text">
     490                                <span><?php esc_html_e('Other', 'htmega-addons') ?></span>
     491                            </span>
     492                        </label>
     493                    </div>
     494                    <div id="htmega-other-reason-text" class="htm-additional-input htmega-deactivation-reason-input">
     495                        <textarea name="other_reason" placeholder="<?php esc_attr_e('Please share the reason...', 'htmega-addons') ?>"></textarea>
     496                    </div>
     497                </div>
     498
     499                <!-- Footer -->
     500                <div class="htm-deactivate-footer">
     501                    <a href="#" class="htm-btn htm-btn-skip htmega-skip-feedback"><?php esc_html_e('Skip & Deactivate', 'htmega-addons') ?></a>
     502                    <button type="submit" class="htm-btn htm-btn-submit">
     503                        <span><?php esc_html_e('Submit & Deactivate', 'htmega-addons') ?></span>
     504                    </button>
     505                </div>
     506            </form>
     507        </div>
     508    </div>
     509</div>
     510
     511<script>
     512    ;jQuery(document).ready(function($) {
     513        let pluginToDeactivate = '';
     514
     515        function closeDialog() {
     516            $('#htmega-deactivation-dialog').animate({
     517                opacity: 0
     518            }, 'slow', function() {
     519                $(this).css('display', 'none');
     520            });
     521            pluginToDeactivate = '';
     522        }
     523
     524        // Open dialog when deactivate is clicked
     525        $('[data-slug="<?php echo esc_attr($this->PROJECT_SLUG); ?>"] .deactivate a').on('click', function(e) {
     526            e.preventDefault();
     527            pluginToDeactivate = $(this).attr('href');
     528            $('#htmega-deactivation-dialog').css({'display': 'flex', 'opacity': '1'});
     529        });
     530
     531        // Close dialog on X button click
     532        $('.htmega-close-dialog').on('click', closeDialog);
     533
     534        // Close dialog on overlay click
     535        $('#htmega-deactivation-dialog').on('click', function(e) {
     536            if (e.target === this) {
     537                closeDialog();
     538            }
     539        });
     540
     541        // Prevent close when clicking modal content
     542        $('.htm-deactivate-modal').on('click', function(e) {
     543            e.stopPropagation();
     544        });
     545
     546        // Handle radio button change - show/hide textarea
     547        $('input[name="reason"]').on('change', function() {
     548            $('.htmega-deactivation-reason-input').removeClass('active').hide();
     549
     550            const id = $(this).data('id');
     551            if (['other', 'found_better', 'stopped_working', 'found_bug'].includes(id)) {
     552                $(`#htmega-${id}-reason-text`).addClass('active').show();
     553                $(`#htmega-${id}-reason-text textarea`).focus();
     554            }
     555        });
     556
     557        // Handle form submission
     558        $('#htmega-deactivation-feedback-form').on('submit', function(e) {
     559            e.preventDefault();
     560
     561            const $submitButton = $(this).find('button[type="submit"]');
     562            const $buttonText = $submitButton.find('span');
     563            const originalText = $buttonText.text();
     564
     565            $buttonText.text('<?php esc_html_e('Submitting...', 'htmega-addons') ?>');
     566            $submitButton.prop('disabled', true);
     567
     568            const reason = $('input[name="reason"]:checked').val() || 'No reason selected';
     569            const message = $('.htmega-deactivation-reason-input.active textarea').val() || '';
     570
     571            const data = {
     572                action: 'htmega_plugin_deactivation_feedback',
     573                reason: reason,
     574                message: message,
     575                nonce: '<?php echo esc_js($nonce); ?>'
     576            };
     577
     578            $.post('<?php echo esc_url_raw($ajaxurl); ?>', data)
     579                .done(function(response) {
     580                    if (response.success) {
     581                        window.location.href = pluginToDeactivate;
     582                    } else {
     583                        console.error('Feedback submission failed:', response.data);
     584                        $buttonText.text(originalText);
     585                        $submitButton.prop('disabled', false);
     586                    }
     587                })
     588                .fail(function(xhr) {
     589                    console.error('Feedback submission failed:', xhr.responseText);
     590                    $buttonText.text(originalText);
     591                    $submitButton.prop('disabled', false);
    474592                });
    475 
    476                 $('.htmega-close-dialog').on('click', closeDialog);
    477 
    478                 $('#htmega-deactivation-dialog').on('click', function(e) {
    479                     if (e.target === this) {
    480                         closeDialog();
    481                     }
    482                 });
    483                
    484                 $('.htmega-deactivation-dialog-content').on('click', function(e) {
    485                     e.stopPropagation();
    486                 });
    487 
    488                 $('input[name="reason"]').on('change', function() {
    489                     $('.htmega-deactivation-reason-input').removeClass('active').hide();
    490                    
    491                     const id = $(this).data('id');
    492                     if (['other', 'found_better', 'stopped_working', 'found_bug'].includes(id)) {
    493                         $(`#htmega-${id}-reason-text`).addClass('active').show();
    494                     }
    495                 });
    496 
    497                 $('#htmega-deactivation-feedback-form').on('submit', function(e) {
    498                     e.preventDefault();
    499                    
    500                     const $submitButton = $(this).find('button[type="submit"]');
    501                     const originalText = $submitButton.text();
    502                    
    503                     $submitButton.text('Submitting...').prop('disabled', true);
    504 
    505                     const reason = $('input[name="reason"]:checked').val() || 'No reason selected';
    506                     const message = $('.htmega-deactivation-reason-input.active textarea').val() || '';
    507                    
    508                     const data = {
    509                         action: 'htmega_plugin_deactivation_feedback',
    510                         reason: reason,
    511                         message: message,
    512                         nonce: '<?php echo esc_js($nonce); ?>'
    513                     };
    514                     $.post('<?php echo esc_url_raw($ajaxurl); ?>', data)
    515                         .done(function(response) {
    516                             if (response.success) {
    517                                 window.location.href = pluginToDeactivate;
    518                             } else {
    519                                 console.error('Feedback submission failed:', response.data);
    520                                 $submitButton.text(originalText).prop('disabled', false);
    521                             }
    522                         })
    523                         .fail(function(xhr) {
    524                             console.error('Feedback submission failed:', xhr.responseText);
    525                             $submitButton.text(originalText).prop('disabled', false);
    526                         });
    527                 });
    528 
    529                 $('.htmega-skip-feedback').on('click', function(e) {
    530                     e.preventDefault();
    531                     window.location.href = pluginToDeactivate;
    532                 });
    533             });
    534         </script>
    535         <?php
    536     }
    537     public function deactivation_form_css() { ?>
    538         <style>
    539             #htmega-deactivation-dialog {
    540                 position: fixed;
    541                 top: 0;
    542                 left: 0;
    543                 right: 0;
    544                 bottom: 0;
    545                 background: rgba(0, 0, 0, 0.5);
    546                 z-index: 9999;
    547                 display: flex;
    548                 align-items: center;
    549                 justify-content: center;
    550             }
    551 
    552             .htmega-deactivation-dialog-content {
    553                 background: #fff;
    554                 padding: 30px;
    555                 max-width: 500px;
    556                 width: 100%;
    557                 border-radius: 4px;
    558                 box-shadow: 0 2px 30px rgba(0, 0, 0, 0.1);
    559                 position: relative;
    560             }
    561             .htmega-deactivation-dialog-title {
    562                 margin-top: 0;
    563             }
    564 
    565             .htmega-close-dialog {
    566                 position: absolute;
    567                 top: 10px;
    568                 right: 10px;
    569                 width: 24px;
    570                 height: 24px;
    571                 border-radius: 50%;
    572                 background: #f0f0f0;
    573                 border: none;
    574                 cursor: pointer;
    575                 display: flex;
    576                 justify-content: center;
    577                 font-size: 18px;
    578                 line-height: 18px;
    579                 color: #333;
    580                 transition: all 0.2s ease;
    581                 font-weight: 700;
    582             }
    583 
    584             .htmega-close-dialog:hover {
    585                 background: #e0e0e0;
    586                 color: #333;
    587             }
    588 
    589             .htmega-feedback-options {
    590                 margin: 20px 0;
    591             }
    592 
    593             .htmega-feedback-options label {
    594                 display: block;
    595                 margin: 10px 0;
    596             }
    597 
    598 
    599             .htmega-deactivation-reason-input {
    600                 margin-bottom: 15px;
    601             }
    602             .htmega-deactivation-reason-input textarea {
    603                 width: 100%;
    604                 min-height: 60px;
    605                 padding: 6px 8px;
    606                 display: block;
    607             }
    608 
    609             .htmega-deactivation-dialog-buttons {
    610                 margin-top: 20px;
    611                 display: flex;
    612                 align-items: center;
    613                 justify-content: flex-end;
    614             }
    615 
    616             .htmega-skip-feedback {
    617                 margin-left: 10px;
    618                 color: #666;
    619                 text-decoration: none;
    620             }
    621         </style>
     593        });
     594
     595        // Skip feedback and deactivate
     596        $('.htmega-skip-feedback').on('click', function(e) {
     597            e.preventDefault();
     598            window.location.href = pluginToDeactivate;
     599        });
     600    });
     601</script>
     602
     603<style>
     604    /* Overlay */
     605    #htmega-deactivation-dialog.htm-deactivate-overlay {
     606        position: fixed;
     607        top: 0;
     608        left: 0;
     609        width: 100%;
     610        height: 100%;
     611        background: rgba(0, 0, 0, 0.6);
     612        display: flex;
     613        align-items: center;
     614        justify-content: center;
     615        z-index: 999999;
     616        animation: htmFadeIn 0.3s ease;
     617    }
     618
     619    @keyframes htmFadeIn {
     620        from { opacity: 0; }
     621        to { opacity: 1; }
     622    }
     623
     624    @keyframes htmFadeOut {
     625        from { opacity: 1; }
     626        to { opacity: 0; }
     627    }
     628
     629    @keyframes htmSlideUp {
     630        from {
     631            opacity: 0;
     632            transform: translateY(30px) scale(0.95);
     633        }
     634        to {
     635            opacity: 1;
     636            transform: translateY(0) scale(1);
     637        }
     638    }
     639
     640    @keyframes htmSlideDown {
     641        from {
     642            opacity: 1;
     643            transform: translateY(0) scale(1);
     644        }
     645        to {
     646            opacity: 0;
     647            transform: translateY(30px) scale(0.95);
     648        }
     649    }
     650
     651    /* Closing animation classes */
     652    #htmega-deactivation-dialog.htm-deactivate-overlay.htm-closing {
     653        animation: htmFadeOut 0.25s ease forwards;
     654    }
     655
     656    #htmega-deactivation-dialog.htm-closing .htm-deactivate-modal {
     657        animation: htmSlideDown 0.25s ease forwards;
     658    }
     659
     660    /* Modal Container */
     661    .htm-deactivate-modal {
     662        background: #ffffff;
     663        border-radius: 8px;
     664        width: 480px;
     665        max-width: 95%;
     666        overflow: hidden;
     667        box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
     668        animation: htmSlideUp 0.4s ease;
     669    }
     670
     671    /* Header */
     672    .htm-deactivate-header {
     673        background: linear-gradient(135deg, #C02D5E 0%, #D43A6B 50%, #DA4D7A 100%);
     674        padding: 20px 28px;
     675        position: relative;
     676        overflow: hidden;
     677    }
     678
     679    .htm-deactivate-header::before {
     680        content: '';
     681        position: absolute;
     682        top: -50%;
     683        right: -20%;
     684        width: 200px;
     685        height: 200px;
     686        background: rgba(255, 255, 255, 0.1);
     687        border-radius: 50%;
     688    }
     689
     690    .htm-deactivate-header::after {
     691        content: '';
     692        position: absolute;
     693        bottom: -30%;
     694        left: 10%;
     695        width: 120px;
     696        height: 120px;
     697        background: rgba(255, 255, 255, 0.08);
     698        border-radius: 50%;
     699    }
     700
     701    .htm-header-content {
     702        position: relative;
     703        z-index: 1;
     704        display: flex;
     705        align-items: center;
     706        gap: 16px;
     707    }
     708
     709    .htm-header-icon {
     710        width: 40px;
     711        height: 40px;
     712        display: flex;
     713        align-items: center;
     714        justify-content: center;
     715    }
     716
     717    .htm-header-icon img {
     718        width: 100%;
     719        height: 100%;
     720        object-fit: cover;
     721    }
     722
     723    .htm-header-text h3 {
     724        color: #ffffff;
     725        font-size: 16px;
     726        font-weight: 600;
     727        margin: 0 0 2px 0;
     728    }
     729
     730    .htm-header-text p {
     731        color: rgba(255, 255, 255, 0.85);
     732        font-size: 12px;
     733        font-weight: 400;
     734        margin: 0;
     735    }
     736
     737    /* Close Button */
     738    .htm-close-btn {
     739        position: absolute;
     740        top: 16px;
     741        right: 16px;
     742        width: 28px;
     743        height: 28px;
     744        background: rgba(255, 255, 255, 0.15);
     745        border: none;
     746        border-radius: 6px;
     747        cursor: pointer;
     748        display: flex;
     749        align-items: center;
     750        justify-content: center;
     751        transition: all 0.2s ease;
     752        z-index: 2;
     753        padding: 0;
     754    }
     755
     756    .htm-close-btn:hover {
     757        background: rgba(255, 255, 255, 0.25);
     758        transform: rotate(90deg);
     759    }
     760
     761    .htm-close-btn svg {
     762        width: 16px;
     763        height: 16px;
     764        stroke: #ffffff;
     765        stroke-width: 2;
     766    }
     767
     768    /* Body Content */
     769    .htm-body-title {
     770        font-size: 14px;
     771        color: #374151;
     772        font-weight: 500;
     773        margin: 20px 0 0 0;
     774        padding: 0 25px;
     775    }
     776
     777    /* Reason Options */
     778    .htm-reasons-list {
     779        display: flex;
     780        flex-direction: column;
     781        gap: 6px;
     782        padding: 20px 25px;
     783    }
     784
     785    .htm-reason-item {
     786        position: relative;
     787    }
     788
     789    .htm-reason-item input[type="radio"] {
     790        position: absolute;
     791        opacity: 0;
     792        width: 0;
     793        height: 0;
     794    }
     795
     796    .htm-reason-label {
     797        display: flex;
     798        align-items: center;
     799        gap: 12px;
     800        padding: 10px 14px;
     801        background: #ffffff;
     802        border: 1px solid #e5e5e5;
     803        border-radius: 8px;
     804        cursor: pointer;
     805        transition: all 0.25s ease;
     806    }
     807
     808    .htm-reason-label:hover {
     809        border-color: #D43A6B;
     810        background: #FDF2F5;
     811    }
     812
     813    .htm-reason-item input[type="radio"]:checked + .htm-reason-label {
     814        border-color: #D43A6B;
     815        background: #FDF2F5;
     816        box-shadow: 0 2px 8px rgba(212, 58, 107, 0.15);
     817    }
     818
     819    .htm-reason-radio {
     820        width: 14px;
     821        height: 14px;
     822        min-width: 14px;
     823        border: 2px solid #d1d5db;
     824        border-radius: 50%;
     825        display: flex;
     826        align-items: center;
     827        justify-content: center;
     828        transition: all 0.25s ease;
     829    }
     830
     831    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-radio {
     832        border-color: #D43A6B;
     833        background: #D43A6B;
     834    }
     835
     836    .htm-reason-radio::after {
     837        content: '';
     838        width: 6px;
     839        height: 6px;
     840        background: #ffffff;
     841        border-radius: 50%;
     842        transform: scale(0);
     843        transition: transform 0.2s ease;
     844    }
     845
     846    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-radio::after {
     847        transform: scale(1);
     848    }
     849
     850    .htm-reason-icon {
     851        width: 30px;
     852        height: 30px;
     853        min-width: 30px;
     854        background: #FBDFE5;
     855        border-radius: 6px;
     856        display: flex;
     857        align-items: center;
     858        justify-content: center;
     859        transition: all 0.25s ease;
     860    }
     861
     862    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-icon {
     863        background: #D43A6B;
     864    }
     865
     866    .htm-reason-icon svg {
     867        width: 15px;
     868        height: 15px;
     869        stroke: #D43A6B;
     870        stroke-width: 2;
     871        fill: none;
     872        transition: all 0.25s ease;
     873    }
     874
     875    .htm-reason-item input[type="radio"]:checked + .htm-reason-label .htm-reason-icon svg {
     876        stroke: #ffffff;
     877    }
     878
     879    .htm-reason-text {
     880        flex: 1;
     881    }
     882
     883    .htm-reason-text span {
     884        font-size: 13px;
     885        font-weight: 500;
     886        color: #374151;
     887        display: block;
     888        line-height: 1.3;
     889    }
     890
     891    /* Additional Input Field */
     892    .htm-additional-input.htmega-deactivation-reason-input {
     893        margin-top: 6px;
     894        margin-bottom: 6px;
     895        display: none;
     896        animation: htmInputSlideDown 0.3s ease;
     897    }
     898
     899    .htm-additional-input.htmega-deactivation-reason-input.active {
     900        display: block;
     901    }
     902
     903    @keyframes htmInputSlideDown {
     904        from {
     905            opacity: 0;
     906            transform: translateY(-10px);
     907        }
     908        to {
     909            opacity: 1;
     910            transform: translateY(0);
     911        }
     912    }
     913
     914    .htm-additional-input textarea {
     915        width: 100%;
     916        min-height: 70px;
     917        padding: 12px 14px;
     918        border: 1px solid #e5e5e5;
     919        border-radius: 8px;
     920        font-size: 13px;
     921        font-family: inherit;
     922        resize: vertical;
     923        transition: all 0.25s ease;
     924        background: #ffffff;
     925        box-sizing: border-box;
     926    }
     927
     928    .htm-additional-input textarea:focus {
     929        outline: none;
     930        border-color: #D43A6B;
     931        background: #ffffff;
     932        box-shadow: 0 0 0 3px rgba(212, 58, 107, 0.1);
     933    }
     934
     935    .htm-additional-input textarea::placeholder {
     936        color: #94a3b8;
     937    }
     938
     939    /* Footer */
     940    .htm-deactivate-footer {
     941        padding: 16px 28px 20px;
     942        display: flex;
     943        align-items: center;
     944        justify-content: space-between;
     945        gap: 16px;
     946        border-top: 1px solid #e5e5e5;
     947        margin-top: 10px;
     948    }
     949
     950    .htm-btn {
     951        padding: 10px 20px;
     952        border-radius: 6px;
     953        font-size: 13px;
     954        cursor: pointer;
     955        transition: all 0.25s ease;
     956        display: inline-flex;
     957        align-items: center;
     958        gap: 6px;
     959        text-decoration: none;
     960    }
     961
     962    .htm-btn-skip {
     963        background: transparent;
     964        color: #6B7280;
     965        padding: 10px 0;
     966    }
     967
     968    .htm-btn-skip:hover {
     969        color: #D43A6B;
     970    }
     971
     972    .htm-btn-submit {
     973        background: #D43A6B;
     974        border: 1px solid #D43A6B;
     975        color: #ffffff;
     976    }
     977
     978    .htm-btn-submit:hover {
     979        background: #C02D5E;
     980        border-color: #C02D5E;
     981        color: #ffffff;
     982    }
     983
     984    .htm-btn-submit:active {
     985        background: #A82550;
     986    }
     987
     988    .htm-btn-submit:disabled {
     989        opacity: 0.7;
     990        cursor: not-allowed;
     991    }
     992
     993    .htm-btn-submit svg {
     994        width: 14px;
     995        height: 14px;
     996        stroke: currentColor;
     997        stroke-width: 2;
     998        fill: none;
     999    }
     1000
     1001    /* Responsive */
     1002    @media (max-width: 600px) {
     1003        .htm-deactivate-modal {
     1004            margin: 16px;
     1005        }
     1006
     1007        .htm-deactivate-header {
     1008            padding: 16px 20px;
     1009        }
     1010
     1011        .htm-deactivate-body {
     1012            padding: 16px 20px;
     1013        }
     1014
     1015        .htm-deactivate-footer {
     1016            padding: 14px 20px 18px;
     1017            flex-direction: column;
     1018        }
     1019
     1020        .htm-btn {
     1021            width: 100%;
     1022            justify-content: center;
     1023        }
     1024    }
     1025</style>
     1026
    6221027    <?php }
    6231028}
  • ht-mega-for-elementor/trunk/admin/include/class.diagnostic-data.php

    r3257530 r3472539  
    8080            $this->project_type = 'wordpress-plugin';
    8181            $this->project_version = HTMEGA_VERSION;
    82             $this->data_center = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjAwNTY1MDYzZTA0MzM1MjY1NTUzNyI_3D_pc';
     82            $this->data_center = 'https://n8n.aslamhasib.com/webhook/484fe1ab-9cdf-4318-8b6f-2b218ac47009';
    8383            $this->privacy_policy = 'https://wphtmega.com/privacy-policy/';
    8484
     
    8686            $this->project_pro_installed = $this->is_pro_plugin_installed();
    8787            $this->project_pro_version = $this->get_pro_version();
     88
     89            if ( get_option( 'htmega_diagnostic_data_agreed' ) === 'yes' || get_option( 'htmega_diagnostic_data_notice' ) === 'no' ) {
     90                return;
     91            }
    8892
    8993            add_action( 'admin_notices', function () {
     
    468472         * Show notices.
    469473         */
     474        /**
     475         * Check if this plugin should show the diagnostic data notice.
     476         * Returns false if already agreed, dismissed, or another HT plugin takes priority.
     477         */
     478        public function should_show_notice() {
     479            if ( get_option( 'htmega_diagnostic_data_agreed' ) === 'yes' || get_option( 'htmega_diagnostic_data_notice' ) === 'no' ) {
     480                return false;
     481            }
     482
     483            $sibling_plugins = array(
     484                'woolentor-addons/woolentor_addons_elementor.php' => array(
     485                    'agreed'  => 'woolentor_diagnostic_data_agreed',
     486                    'notice'  => 'woolentor_diagnostic_data_notice',
     487                ),
     488                'ht-easy-google-analytics/ht-easy-google-analytics.php' => array(
     489                    'agreed'  => 'htga4_diagnostic_data_agreed',
     490                    'notice'  => 'htga4_diagnostic_data_notice',
     491                ),
     492                'ht-contactform/contact-form-widget-elementor.php' => array(
     493                    'agreed'  => 'ht_contactform_diagnostic_data_agreed',
     494                    'notice'  => 'ht_contactform_diagnostic_data_notice',
     495                ),
     496                'hashbar-wp-notification-bar/init.php' => array(
     497                    'agreed'  => 'hashbar_diagnostic_data_agreed',
     498                    'notice'  => 'hashbar_diagnostic_data_notice',
     499                ),
     500                'support-genix-lite/support-genix-lite.php' => array(
     501                    'agreed'  => 'support_genix_lite_diagnostic_data_agreed',
     502                    'notice'  => 'support_genix_lite_diagnostic_data_notice',
     503                ),
     504                'pixelavo/pixelavo.php' => array(
     505                    'agreed'  => 'pixelavo_diagnostic_data_agreed',
     506                    'notice'  => 'pixelavo_diagnostic_data_notice',
     507                ),
     508                'swatchly/swatchly.php' => array(
     509                    'agreed'  => 'swatchly_diagnostic_data_agreed',
     510                    'notice'  => 'swatchly_diagnostic_data_notice',
     511                ),
     512                'extensions-for-cf7/extensions-for-cf7.php' => array(
     513                    'agreed'  => 'ht_cf7extensions_diagnostic_data_agreed',
     514                    'notice'  => 'ht_cf7extensions_diagnostic_data_notice',
     515                ),
     516                'whols/whols.php' => array(
     517                    'agreed'  => 'whols_diagnostic_data_agreed',
     518                    'notice'  => 'whols_diagnostic_data_notice',
     519                ),
     520                'wp-plugin-manager/plugin-main.php' => array(
     521                    'agreed'  => 'htpm_diagnostic_data_agreed',
     522                    'notice'  => 'htpm_diagnostic_data_notice',
     523                ),
     524                'just-tables/just-tables.php' => array(
     525                    'agreed'  => 'justtables_diagnostic_data_agreed',
     526                    'notice'  => 'justtables_diagnostic_data_notice',
     527                ),
     528                'really-simple-google-tag-manager/really-simple-google-tag-manager.php' => array(
     529                    'agreed'  => 'simple_googletag_diagnostic_data_agreed',
     530                    'notice'  => 'simple_googletag_diagnostic_data_notice',
     531                ),
     532                'insert-headers-and-footers-script/init.php' => array(
     533                    'agreed'  => 'ihafs_diagnostic_data_agreed',
     534                    'notice'  => 'ihafs_diagnostic_data_notice',
     535                ),
     536            );
     537
     538            foreach ( $sibling_plugins as $plugin_slug => $options ) {
     539                if ( get_option( $options['agreed'] ) === 'yes' ) {
     540                    update_option( 'htmega_diagnostic_data_agreed', 'yes' );
     541                    update_option( 'htmega_diagnostic_data_notice', 'no' );
     542                    return false;
     543                }
     544            }
     545
     546            // Ensure only one HT plugin shows the diagnostic notice per request.
     547            global $ht_diagnostic_notice_owner;
     548            if ( isset( $ht_diagnostic_notice_owner ) && $ht_diagnostic_notice_owner !== 'htmega' ) {
     549                return false;
     550            }
     551            $ht_diagnostic_notice_owner = 'htmega';
     552
     553            return true;
     554        }
     555
    470556        private function show_notices() {
     557            if ( ! $this->should_show_notice() ) {
     558                return;
     559            }
     560
    471561            if ( 'no' === $this->is_capable_user() ) {
    472562                return;
     
    490580            $ajax_nonce = wp_create_nonce( "htmega-diagonstic-data-ajax-request" );
    491581
    492             $message_l1 = sprintf(/* translators: 1: Project Name, 2: Opening strong tag, 3: Closing strong tag, 4: Privacy Policy link */ esc_html__( 'At %2$s%1$s%3$s, we prioritize continuous improvement and compatibility. To achieve this, we gather non-sensitive diagnostic information and details about plugin usage. This includes your site\'s URL, the versions of WordPress and PHP you\'re using, and a list of your installed plugins and themes. We also require your email address to provide you with exclusive discount coupons and updates. This data collection is crucial for ensuring that %2$s%1$s%3$s remains up-to-date and compatible with the most widely-used plugins and themes. Rest assured, your privacy is our priority - no spam, guaranteed. %4$sPrivacy Policy%5$s', 'htmega-addons' ), esc_html( $this->project_name ), '<strong>', '</strong>', '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>', '<h4 class="htmega-diagnostic-data-title">', '</h4>' );
    493             $message_l2 = sprintf( esc_html__( 'Server information (Web server, PHP version, MySQL version), WordPress information, site name, site URL, number of plugins, number of users, your name, and email address. You can rest assured that no sensitive data will be collected or tracked. %1$sLearn more%2$s.', 'htmega-addons' ), '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>' );
     582            $message_l2 = sprintf( esc_html__( 'Server information (Web server, PHP version, MySQL version), WordPress information, site name, site URL, number of plugins, number of users, your name, and email address. You can rest assured that no sensitive data will be collected or tracked. %1$sPrivacy Policy%2$s', 'htmega-addons' ), '<a target="_blank" href="' . esc_url( $this->privacy_policy ) . '">', '</a>' );
    494583
    495584            $button_text_1 = esc_html__( 'Count Me In', 'htmega-addons' );
     
    499588            $button_link_2 = add_query_arg( array( 'htmega-diagnostic-data-agreed' => 0 ) );
    500589            ?>
    501             <div class="htmega-diagnostic-data-style"><style>.htmega-diagnostic-data-notice,.woocommerce-embed-page .htmega-diagnostic-data-notice{padding-top:.75em;padding-bottom:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons,.htmega-diagnostic-data-notice .htmega-diagnostic-data-list,.htmega-diagnostic-data-notice .htmega-diagnostic-data-message{padding:.25em 2px;margin:0;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-list{display:none;color:#646970;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons{padding-top:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons .button{margin-right:5px;box-shadow:none;}.htmega-diagnostic-data-loading{position:relative;}.htmega-diagnostic-data-loading::before{position:absolute;content:"";width:100%;height:100%;top:0;left:0;background-color:rgba(255,255,255,.5);z-index:999;}.htmega-diagnostic-data-disagree{border-width:0px !important;background-color: transparent!important; padding: 0!important;}h4.htmega-diagnostic-data-title {margin: 0 0 10px 0;font-size: 1.04em;font-weight: 600;}</style></div>
    502             <div class="htmega-diagnostic-data-notice notice notice-success">
    503             <h4 class="htmega-diagnostic-data-title"><?php echo sprintf( esc_html__('🌟 Enhance Your %1$s Experience as a Valued Contributor!','htmega-addons'), esc_html( $this->project_name )); ?></h4>
    504                 <p class="htmega-diagnostic-data-message"><?php echo wp_kses_post( $message_l1 ); ?></p>
     590            <div class="htmega-diagnostic-data-style"><style>.htmega-diagnostic-data-notice,.woocommerce-embed-page .htmega-diagnostic-data-notice{padding-top:.75em;padding-bottom:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons,.htmega-diagnostic-data-notice .htmega-diagnostic-data-list,.htmega-diagnostic-data-notice .htmega-diagnostic-data-message{padding:.25em 2px;margin:0;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-list{display:none;color:#646970;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons{padding-top:.75em;}.htmega-diagnostic-data-notice .htmega-diagnostic-data-buttons .button{margin-right:5px;box-shadow:none;}.htmega-diagnostic-data-loading{position:relative;}.htmega-diagnostic-data-loading::before{position:absolute;content:"";width:100%;height:100%;top:0;left:0;background-color:rgba(255,255,255,.5);z-index:999;}.htmega-diagnostic-data-disagree{border-width:0px !important;background-color: transparent!important; padding: 0!important;}.htmega-diagnostic-data-list-toogle{cursor:pointer;color:#2271b1;text-decoration:none;}</style></div>
     591            <div class="htmega-diagnostic-data-notice notice notice-info">
     592                <p class="htmega-diagnostic-data-message"><?php echo wp_kses_post( sprintf( esc_html__( 'Want to help make %2$s%1$s%3$s even more awesome? Allow %1$s to collect diagnostic data and usage information. (%4$swhat we collect%5$s)', 'htmega-addons' ), esc_html( $this->project_name ), '<strong>', '</strong>', '<a href="#" class="htmega-diagnostic-data-list-toogle">', '</a>' ) ); ?></p>
    505593                <p class="htmega-diagnostic-data-list"><?php echo wp_kses_post( $message_l2 ); ?></p>
    506594                <p class="htmega-diagnostic-data-buttons">
  • ht-mega-for-elementor/trunk/admin/include/class.newsletter-data.php

    r3048999 r3472539  
    164164         */
    165165        private function send_request( $data = array() ) {
    166             $data_center = 'https://connect.pabbly.com/workflow/sendwebhookdata/IjU3NjIwNTY5MDYzMzA0MzA1MjY4NTUzMCI_3D_pc';
     166            $data_center = 'https://n8n.aslamhasib.com/webhook/cf511335-3a57-4e3e-a8f5-055164f2b5bf';
    167167            $headers = array( 'Content-Type' => 'application/json', 'Accept' => 'application/json' );
    168168            $body = wp_json_encode( $data );
  • ht-mega-for-elementor/trunk/admin/include/template-library.php

    r3425025 r3472539  
    99    const CACHE_FILE = 'htmega_template_info.json';
    1010    const CACHE_META_FILE = 'htmega_template_meta.json';
    11     const CACHE_EXPIRY = 604800; // WEEK_IN_SECONDS
     11    const CACHE_EXPIRY = 2592000; // 30 days in seconds
    1212    public static $buylink = null;
    1313
  • ht-mega-for-elementor/trunk/htmega_addons_elementor.php

    r3446395 r3472539  
    11<?php
    22/**
    3  * Plugin Name: HT Mega – Absolute Addons for Elementor.
    4  * Description: The HTMega is a elementor addons package for Elementor page builder plugin for WordPress.
     3 * Plugin Name: HT Mega Addons for Elementor - Elementor Widgets & Template Builder
     4 * Description: Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page Builder, Slider, Gallery, Post Grid, AI Writer & more.
    55 * Plugin URI:  https://wphtmega.com/
    66 * Author:      HasThemes
    77 * Author URI:  https://hasthemes.com/
    8  * Version:     3.0.5
     8 * Version:     3.0.6
    99 * License:     GPL2
    1010 * License URI:  https://www.gnu.org/licenses/gpl-2.0.html
    1111 * Text Domain: htmega-addons
    1212 * Domain Path: /languages
    13  * Elementor tested up to: 3.34.2
    14  * Elementor Pro tested up to: 3.34.1
     13 * Elementor tested up to: 3.35.5
     14 * Elementor Pro tested up to: 3.35.1
    1515*/
    1616
    1717if( ! defined( 'ABSPATH' ) ) exit(); // Exit if accessed directly
    18 define( 'HTMEGA_VERSION', '3.0.5' );
     18define( 'HTMEGA_VERSION', '3.0.6' );
    1919define( 'HTMEGA_ADDONS_PL_ROOT', __FILE__ );
    2020define( 'HTMEGA_ADDONS_PL_URL', plugins_url( '/', HTMEGA_ADDONS_PL_ROOT ) );
  • ht-mega-for-elementor/trunk/includes/class.assests-cache.php

    r3177630 r3472539  
    77    class HTMega_Elementor_Assests_Cache {
    88
    9         const UPLOADS_DIR = 'htmega/';
     9        const UPLOADS_DIR = 'htmega-addons/';
    1010        const CSS_DIR = 'css/';
    1111        const FILE_PREFIX = 'htmega-';
     
    3737            $this->upload_file_url = trailingslashit( $upload_dir['baseurl'] );
    3838            $this->upload_file_url = ( is_ssl() ? str_replace( 'http://', 'https://', $this->upload_file_url ) : $this->upload_file_url );
     39
     40            // One-time migration: remove old 'htmega' cache directory
     41            if ( ! get_option( 'htmega_cache_dir_migrated' ) ) {
     42                $old_dir = $this->upload_file_path . 'htmega';
     43                if ( is_dir( $old_dir ) ) {
     44                    $this->file_system->delete( $old_dir, true );
     45                }
     46                update_option( 'htmega_cache_dir_migrated', true, true );
     47            }
    3948        }
    4049
  • ht-mega-for-elementor/trunk/includes/class.assests.php

    r3277495 r3472539  
    442442                    'allTypes'  => esc_html__( 'All Types', 'htmega-addons' ),
    443443                    'upgradeToPro'  => esc_html__( 'Upgrade To PRO', 'htmega-addons' ),
    444                     'previewAll'  => esc_html__( 'Preview All', 'htmega-addons' ),
     444                    'previewAll'  => esc_html__( 'All Pages', 'htmega-addons' ),
    445445                    'backToHomepages'  => esc_html__( 'Back to Homepages', 'htmega-addons' ),
    446446                    'allPages'  => esc_html__( 'All Pages', 'htmega-addons' ),
  • ht-mega-for-elementor/trunk/languages/htmega-addons.pot

    r3446395 r3472539  
    22msgid ""
    33msgstr ""
    4 "Project-Id-Version: HT Mega – Absolute Addons for Elementor.\n"
     4"Project-Id-Version: HT Mega Addons for Elementor - Elementor Widgets & "
     5"Template Builder\n"
    56"Report-Msgid-Bugs-To: \n"
    6 "POT-Creation-Date: 2026-01-22 05:42+0000\n"
     7"POT-Creation-Date: 2026-03-02 08:50+0000\n"
    78"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    89"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1415"Content-Transfer-Encoding: 8bit\n"
    1516"X-Generator: Loco https://localise.biz/\n"
    16 "X-Loco-Version: 2.8.0; wp-6.9; php-8.2.26\n"
     17"X-Loco-Version: 2.8.2; wp-6.9.1; php-8.2.26\n"
    1718"X-Domain: htmega-addons"
    1819
     
    701702msgstr ""
    702703
    703 #: includes/class.assests.php:437 admin/include/template-library.php:681
    704 #: admin/include/template-library.php:778
     704#: includes/class.assests.php:437 admin/include/template-library.php:679
     705#: admin/include/template-library.php:776
    705706#: includes/recommended-plugins/class.recommended-plugins.php:247
    706707msgid "Activate"
     
    711712msgstr ""
    712713
    713 #: includes/class.assests.php:436 admin/include/template-library.php:689
    714 #: admin/include/template-library.php:789
     714#: includes/class.assests.php:436 admin/include/template-library.php:687
     715#: admin/include/template-library.php:787
    715716#: includes/recommended-plugins/class.recommended-plugins.php:128
    716717#: includes/recommended-plugins/class.recommended-plugins.php:258
     
    11281129msgstr ""
    11291130
    1130 #: includes/class.assests.php:446
     1131#: includes/class.assests.php:444 includes/class.assests.php:446
    11311132msgid "All Pages"
    11321133msgstr ""
     
    13141315#: extensions/ht-builder/widgets/bl_post_archive.php:226
    13151316msgid "Ascending"
    1316 msgstr ""
    1317 
    1318 #. 1: Project Name, 2: Opening strong tag, 3: Closing strong tag, 4: Privacy Policy link
    1319 #: admin/include/class.diagnostic-data.php:492
    1320 #, php-format
    1321 msgid ""
    1322 "At %2$s%1$s%3$s, we prioritize continuous improvement and compatibility. To "
    1323 "achieve this, we gather non-sensitive diagnostic information and details "
    1324 "about plugin usage. This includes your site's URL, the versions of WordPress "
    1325 "and PHP you're using, and a list of your installed plugins and themes. We "
    1326 "also require your email address to provide you with exclusive discount "
    1327 "coupons and updates. This data collection is crucial for ensuring that "
    1328 "%2$s%1$s%3$s remains up-to-date and compatible with the most widely-used "
    1329 "plugins and themes. Rest assured, your privacy is our priority - no spam, "
    1330 "guaranteed. %4$sPrivacy Policy%5$s"
    13311317msgstr ""
    13321318
     
    33423328msgstr ""
    33433329
    3344 #: includes/class.assests.php:431 admin/include/template-library.php:797
     3330#: includes/class.assests.php:431 admin/include/template-library.php:795
    33453331#: includes/recommended-plugins/class.recommended-plugins.php:124
    33463332#: includes/recommended-plugins/class.recommended-plugins.php:235
     
    45854571msgstr ""
    45864572
    4587 #: admin/include/class.diagnostic-data.php:495
     4573#: admin/include/class.diagnostic-data.php:584
    45884574msgid "Count Me In"
    45894575msgstr ""
     
    52115197msgstr ""
    52125198
    5213 #: admin/include/template-library.php:601
     5199#: admin/include/template-library.php:599
    52145200msgid "Edit Page"
    52155201msgstr ""
    52165202
    52175203#: includes/class.assests.php:440 admin/include/class.theme-builder.php:95
    5218 #: admin/include/template-library.php:601
     5204#: admin/include/template-library.php:599
    52195205msgid "Edit Template"
    52205206msgstr ""
     
    53215307#: includes/class.htmega.php:396
    53225308msgid "Elementor Activate Now"
     5309msgstr ""
     5310
     5311#. Description of the plugin
     5312msgid ""
     5313"Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page "
     5314"Builder, Slider, Gallery, Post Grid, AI Writer & more."
    53235315msgstr ""
    53245316
     
    68236815msgstr ""
    68246816
     6817#. Name of the plugin
     6818msgid "HT Mega Addons for Elementor - Elementor Widgets & Template Builder"
     6819msgstr ""
     6820
    68256821#: includes/class.post-duplicator.php:44
    68266822msgid "HT Mega Duplicator"
     
    68316827msgstr ""
    68326828
     6829#: admin/include/class-deactivation.php:371
    68336830#: admin/include/settings-panel/includes/templates/dashboard-general.php:15
    68346831msgid "HT Mega Logo"
     
    68416838#: admin/include/class.theme-builder.php:91
    68426839msgid "HT Mega Templates"
    6843 msgstr ""
    6844 
    6845 #. Name of the plugin
    6846 msgid "HT Mega – Absolute Addons for Elementor."
    68476840msgstr ""
    68486841
     
    69706963msgstr ""
    69716964
    6972 #: admin/include/class-deactivation.php:430
     6965#: admin/include/class-deactivation.php:462
     6966#: admin/include/class-deactivation.php:471
     6967msgid "I encountered an error or bug"
     6968msgstr ""
     6969
     6970#: admin/include/class-deactivation.php:421
    69736971#: admin/include/class-deactivation.php:431
    6974 msgid "I could not get the plugin to work"
    6975 msgstr ""
    6976 
    6977 #: admin/include/class-deactivation.php:423
    6978 #: admin/include/class-deactivation.php:424
    6979 msgid "I encountered an error or bug"
    6980 msgstr ""
    6981 
    6982 #: admin/include/class-deactivation.php:409
    6983 #: admin/include/class-deactivation.php:410
    69846972msgid "I found a better plugin"
    69856973msgstr ""
    69866974
    6987 #: admin/include/class-deactivation.php:434
    6988 #: admin/include/class-deactivation.php:435
     6975#: admin/include/class-deactivation.php:405
     6976#: admin/include/class-deactivation.php:414
    69896977msgid "I no longer need the plugin"
    69906978msgstr ""
     
    72357223msgstr ""
    72367224
    7237 #: admin/include/class-deactivation.php:405
    7238 msgid "If you have a moment, please let us know why you are deactivating: "
    7239 msgstr ""
    7240 
    72417225#: extensions/scroll-to-top/class.scroll-to-top.php:330
    72427226#: extensions/scroll-to-top/class.scroll-to-top.php:355
     
    76477631msgstr ""
    76487632
    7649 #: admin/include/template-library.php:685
    7650 #: admin/include/template-library.php:784
     7633#: admin/include/template-library.php:683
     7634#: admin/include/template-library.php:782
    76517635#: includes/recommended-plugins/class.recommended-plugins.php:253
    76527636msgid "Install Now"
     
    77987782msgstr ""
    77997783
    7800 #: admin/include/class-deactivation.php:438
    7801 #: admin/include/class-deactivation.php:439
     7784#: admin/include/class-deactivation.php:388
     7785#: admin/include/class-deactivation.php:398
    78027786msgid "It's a temporary deactivation"
    78037787msgstr ""
     
    95819565msgstr ""
    95829566
    9583 #: admin/include/template-library.php:206
     9567#: admin/include/template-library.php:204
    95849568msgid "No data found"
    95859569msgstr ""
     
    96299613msgstr ""
    96309614
    9631 #: admin/include/class.diagnostic-data.php:498
     9615#: admin/include/class.diagnostic-data.php:587
    96329616msgid "No, Thanks"
    96339617msgstr ""
     
    1014610130msgstr ""
    1014710131
    10148 #: admin/include/class-deactivation.php:442
    10149 #: admin/include/class-deactivation.php:443
     10132#: admin/include/class-deactivation.php:481
     10133#: admin/include/class-deactivation.php:490
    1015010134msgid "Other"
    1015110135msgstr ""
     
    1068510669msgstr ""
    1068610670
    10687 #: admin/include/class-deactivation.php:427
    10688 msgid ""
    10689 "Please describe the error/bug you encountered. This will help us fix it for "
    10690 "future users."
     10671#: admin/include/class-deactivation.php:476
     10672msgid "Please describe the error/bug. This will help us fix it..."
     10673msgstr ""
     10674
     10675#: admin/include/class-deactivation.php:457
     10676msgid "Please describe the issue you're experiencing..."
    1069110677msgstr ""
    1069210678
     
    1074110727msgstr ""
    1074210728
    10743 #: admin/include/class-deactivation.php:420
    10744 msgid "Please share more details."
    10745 msgstr ""
    10746 
    10747 #: admin/include/class-deactivation.php:446
    10748 msgid "Please share the reason."
    10749 msgstr ""
    10750 
    10751 #: admin/include/class-deactivation.php:413
    10752 msgid "Please share which plugin."
    10753 msgstr ""
    10754 
    10755 #: admin/include/template-library.php:208
     10729#: admin/include/class-deactivation.php:495
     10730msgid "Please share the reason..."
     10731msgstr ""
     10732
     10733#: admin/include/class-deactivation.php:382
     10734msgid "Please share why you're deactivating HT Mega:"
     10735msgstr ""
     10736
     10737#: admin/include/template-library.php:206
    1075610738msgid "Please wait a few moments, this may be the causes of server issues."
    1075710739msgstr ""
     
    1076110743msgstr ""
    1076210744
    10763 #: admin/include/template-library.php:733
     10745#: admin/include/template-library.php:731
    1076410746msgid "Plugin file not found"
    1076510747msgstr ""
    1076610748
    10767 #: admin/include/template-library.php:721
     10749#: admin/include/template-library.php:719
    1076810750msgid "Plugin location not provided"
    1076910751msgstr ""
     
    1077310755msgstr ""
    1077410756
    10775 #: admin/include/template-library.php:753
     10757#: admin/include/template-library.php:751
    1077610758#: includes/recommended-plugins/class.recommended-plugins.php:420
    1077710759msgid "Plugin Successfully Activated"
     
    1099510977msgstr ""
    1099610978
    10997 #: includes/class.assests.php:444
    10998 msgid "Preview All"
    10999 msgstr ""
    11000 
    1100110979#: includes/class.assests.php:375 includes/widgets/htmega_data_table.php:708
    1100210980msgid "Previous"
     
    1121111189#: includes/widgets/htmega_quforms.php:1094
    1121211190msgid "QUforms"
    11213 msgstr ""
    11214 
    11215 #: admin/include/class-deactivation.php:404
    11216 msgid "Quick Feedback"
    1121711191msgstr ""
    1121811192
     
    1206512039msgstr ""
    1206612040
    12067 #: admin/include/class.diagnostic-data.php:493
     12041#: admin/include/class.diagnostic-data.php:582
    1206812042#, php-format
    1206912043msgid ""
     
    1207112045"information, site name, site URL, number of plugins, number of users, your "
    1207212046"name, and email address. You can rest assured that no sensitive data will be "
    12073 "collected or tracked. %1$sLearn more%2$s."
     12047"collected or tracked. %1$sPrivacy Policy%2$s"
    1207412048msgstr ""
    1207512049
     
    1249512469msgstr ""
    1249612470
    12497 #: admin/include/class-deactivation.php:451
     12471#: admin/include/class-deactivation.php:501
    1249812472msgid "Skip & Deactivate"
    1249912473msgstr ""
     
    1268512659msgstr ""
    1268612660
    12687 #: admin/include/template-library.php:821
     12661#: admin/include/template-library.php:819
    1268812662msgid "Sorry, you are not allowed to install themes on this site."
    1268912663msgstr ""
     
    1311413088msgstr ""
    1311513089
    13116 #: admin/include/class-deactivation.php:450
     13090#: admin/include/class-deactivation.php:503
    1311713091msgid "Submit & Deactivate"
    1311813092msgstr ""
     
    1312313097#: extensions/ht-builder/widgets/bl_post_comments.php:216
    1312413098msgid "Submit Button"
     13099msgstr ""
     13100
     13101#: admin/include/class-deactivation.php:565
     13102msgid "Submitting..."
    1312513103msgstr ""
    1312613104
     
    1346213440msgstr ""
    1346313441
    13464 #: admin/include/template-library.php:108
     13442#: admin/include/template-library.php:106
    1346513443msgid "Template server is temporarily unavailable. Please try again later."
    1346613444msgstr ""
    1346713445
    13468 #: admin/include/template-library.php:99
     13446#: admin/include/template-library.php:97
    1346913447msgid ""
    1347013448"Template server is temporarily unavailable. Showing cached data. Server will "
     
    1348713465msgstr ""
    1348813466
    13489 #: admin/include/template-library.php:180
    13490 #: admin/include/template-library.php:181
     13467#: admin/include/template-library.php:178
     13468#: admin/include/template-library.php:179
    1349113469#: admin/include/settings-panel/includes/templates/dashboard-general.php:47
    1349213470msgid "Templates Library"
     
    1364413622
    1364513623#. 1: Project Name, 2: Opening strong tag, 3: Closing strong tag
    13646 #: admin/include/class.diagnostic-data.php:519
     13624#: admin/include/class.diagnostic-data.php:607
    1364713625#, php-format
    1364813626msgid "Thank you very much for supporting %2$s%1$s%3$s."
     
    1366113639msgstr ""
    1366213640
    13663 #. Description of the plugin
    13664 msgid ""
    13665 "The HTMega is a elementor addons package for Elementor page builder plugin "
    13666 "for WordPress."
    13667 msgstr ""
    13668 
    13669 #: admin/include/class-deactivation.php:416
    13670 #: admin/include/class-deactivation.php:417
     13641#: admin/include/class-deactivation.php:441
     13642#: admin/include/class-deactivation.php:452
    1367113643msgid "The plugin suddenly stopped working"
    1367213644msgstr ""
     
    1369813670msgstr ""
    1369913671
    13700 #: admin/include/template-library.php:832
     13672#: admin/include/template-library.php:830
    1370113673msgid "Theme Activated"
    1370213674msgstr ""
     
    1446114433msgstr ""
    1446214434
    14463 #: admin/include/template-library.php:144
     14435#: admin/include/template-library.php:142
    1446414436msgid "Unable to load templates at this time. Please try again later."
    1446514437msgstr ""
     
    1476014732#: includes/widgets/htmega_audio_player.php:417
    1476114733msgid "Volume Slider Layout"
     14734msgstr ""
     14735
     14736#: admin/include/class.diagnostic-data.php:592
     14737#, php-format
     14738msgid ""
     14739"Want to help make %2$s%1$s%3$s even more awesome? Allow %1$s to collect "
     14740"diagnostic data and usage information. (%4$swhat we collect%5$s)"
    1476214741msgstr ""
    1476314742
     
    1480214781msgstr ""
    1480314782
     14783#: admin/include/class-deactivation.php:374
     14784msgid "We're Sorry to See You Go!"
     14785msgstr ""
     14786
    1480414787#: includes/widgets/htmega_weather.php:13
    1480514788#: includes/widgets/htmega_weather.php:41
     
    1485414837#: includes/class.assests.php:798
    1485514838msgid "WhatsApp Chat"
     14839msgstr ""
     14840
     14841#: admin/include/class-deactivation.php:436
     14842msgid "Which plugin are you switching to? We'd love to know..."
    1485614843msgstr ""
    1485714844
     
    1506515052msgstr ""
    1506615053
    15067 #: admin/include/template-library.php:80
     15054#: admin/include/template-library.php:78
    1506815055msgid ""
    1506915056"You can refresh templates once every 24 hours. Next refresh available in %d "
     
    1508715074msgstr ""
    1508815075
    15089 #: admin/include/template-library.php:709
     15076#: admin/include/template-library.php:707
    1509015077msgid "You do not have permission to install plugins"
    1509115078msgstr ""
     
    1511615103msgstr ""
    1511715104
     15105#: admin/include/class-deactivation.php:375
     15106msgid "Your feedback helps us improve HT Mega for everyone."
     15107msgstr ""
     15108
    1511815109#: includes/class.assests.php:422
    1511915110msgid "Your template has been imported and is ready to use"
     
    1515815149msgstr ""
    1515915150
    15160 #: admin/include/class.diagnostic-data.php:503
    15161 #, php-format
    15162 msgid "🌟 Enhance Your %1$s Experience as a Valued Contributor!"
    15163 msgstr ""
    15164 
    1516515151#: admin/include/settings-panel/includes/classes/Admin/Menu.php:247
    1516615152msgid "💡 All Features. More Flexibility. Build Better, Faster, and Smarter."
  • ht-mega-for-elementor/trunk/readme.txt

    r3446395 r3472539  
    1 === HT Mega - Absolute Addons For Elementor ===
     1=== HT Mega Addons for Elementor - Elementor Widgets & Template Builder ===
    22Contributors: hasthemes, htplugins, devitemsllc, tarekht, zenaulislam, aslamhasib, madhusudandev
    3 Tags: elementor, elementor addons, elementor widgets, page builder, elementor templates, mega menu, addons for elementor, post grid, elements, header footer builder
     3Tags: elementor addons, mega menu, page builder, elementor widgets, elementor templates
    44Requires at least: 5.0
    55Tested up to: 6.9
    6 Stable tag: 3.0.5
     6Stable tag: 3.0.6
    77License: GPLv2 or later
    88License URI: https://www.gnu.org/licenses/gpl-2.0.html
    99
    10 Elementor addons package for WordPress with Elementor widgets, blocks, pre-designed templates, Theme builder, mega menu, header footer, single post, archive builder, AI content writer, carousel, slider, form, gallery, testimonial, portfolio, WooCommerce widgets, forms, tables, and so on. It empowers you to build a professional website in WordPress, one of the most popular WordPress page builders.
     10Elementor addon offering 135+ widgets — Mega Menu, Ready Templates, Page Builder, Slider, Gallery, Post Grid, AI Writer & more.
    1111
    1212== Description ==
     
    238238== Changelog ==
    239239
     240= Version 3.0.6 - Date: 2026-03-02 =
     241* Updated: Template library "Preview All" button text changed to "All Pages".
     242* Updated: Template library cache expiry.
     243* Updated: Consolidated asset cache and template cache into single 'htmega-addons' directory.
     244* Fixed: A few minor issues.
     245* Tested: Compatibility with the latest version of Elementor.
     246
    240247= Version 3.0.5 - Date: 2026-01-25 =
    241248* Added: Team Wrapper Hover Box Shadow option for the Team Member widget.
     
    441448* Tested: Compatibility with the latest version of Elementor.
    442449
    443 = Version 2.7.9 - Date: 2025-01-15 =
    444 * Improved: Admin settings panel performance.
    445 * Fixed: A few minor issues.
    446 * Tested: Compatibility with the latest version of Elementor.
    447 
    448 = Version 2.7.8 - Date: 2025-01-09 =
    449 * Improved: Admin settings panel layout.
    450 * Fixed: A few minor issues.
    451 * Tested: Compatibility with the latest version of Elementor.
    452 
    453 = Version 2.7.7 - Date: 2024-12-18 =
    454 * Fixed: Mega Menu settings not updating issue.
    455 * Fixed: WPML compatibility issue in Tabs widget.
    456 * Fixed: A few minor issues.
    457 * Tested: Compatibility with the latest version of Elementor.
    458 
    459450
    460451
Note: See TracChangeset for help on using the changeset viewer.