Plugin Directory

Changeset 3487675


Ignore:
Timestamp:
03/21/2026 09:14:43 AM (7 days ago)
Author:
rocketcomunicazione
Message:

2.4.8

Location:
rc-site-manager-optimization/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • rc-site-manager-optimization/trunk/agency/check_url/check_url_function.php

    r3487089 r3487675  
    7474            $url_group = esc_html($row->url_group);
    7575            $last_response = $row->last_response;
    76             $last_check = $row->last_check ? esc_html(date_i18n('d/m/Y H:i', strtotime($row->last_check))) : '';
     76            $last_check = '';
     77            if ($row->last_check) {
     78                $dt_lc      = new DateTime($row->last_check, wp_timezone());
     79                $last_check = esc_html(date_i18n('d/m/Y H:i', $dt_lc->getTimestamp()));
     80            }
    7781
    7882            $ps_html = rc_sm_pagespeed_performance_html($url);
     
    310314                $history_id = $total - $index;
    311315                $response = esc_html($entry['response']);
    312                 $date = esc_html(date_i18n('d/m/Y H:i:s', strtotime($entry['date'])));
     316                $dt_entry = new DateTime($entry['date'], wp_timezone());
     317                $date = esc_html(date_i18n('d/m/Y H:i:s', $dt_entry->getTimestamp()));
    313318               
    314319                $badge_class = 'rc_sm_bg_secondary';
  • rc-site-manager-optimization/trunk/crons/pagespeed.php

    r3487409 r3487675  
    5555
    5656        } else {
    57             // Già verificato → processa solo se:
    58             // 1. Sono passate le 06:00 di oggi
    59             // 2. L'ultimo check è precedente alle 06:00 di oggi
    60             $last_check_dt = new DateTime($record->last_check, $timezone);
    61             if ($now >= $daily_threshold && $last_check_dt < $daily_threshold) {
     57            $last_check_dt  = new DateTime($record->last_check, $timezone);
     58            $last_check_ts  = $last_check_dt->getTimestamp();
     59            $now_ts         = $now->getTimestamp();
     60
     61            // Processa se:
     62            // 1. Ultimo check > 24 ore fa (URL nuovo o aggiunto dopo le 06:00)
     63            // 2. OPPURE: sono passate le 06:00 di oggi e l'ultimo check è precedente alle 06:00 di oggi (reset giornaliero)
     64            $older_than_24h       = ($now_ts - $last_check_ts) > 24 * HOUR_IN_SECONDS;
     65            $daily_reset          = ($now >= $daily_threshold && $last_check_dt < $daily_threshold);
     66
     67            if ($older_than_24h || $daily_reset) {
    6268                $records[] = $record;
    6369            }
     
    195201
    196202function rc_sm_pagespeed_log($message, $log_file) {
    197     $timestamp = date('Y-m-d H:i:s');
     203    $timestamp = current_time('mysql');
    198204    $entry     = "[{$timestamp}] {$message}\n";
    199205    file_put_contents($log_file, $entry, FILE_APPEND);
  • rc-site-manager-optimization/trunk/includes/functions/pagespeed.php

    r3485061 r3487675  
    8080    if (empty($history)) return '';
    8181
    82     $last = end($history);
     82    // Ordina per data DESC e prendi il più recente
     83    usort($history, function($a, $b) {
     84        $da = isset($a['date']) ? strtotime($a['date']) : 0;
     85        $db = isset($b['date']) ? strtotime($b['date']) : 0;
     86        return $db - $da;
     87    });
     88    $last = $history[0];
     89
     90    // Valido solo se entro 24 ore (confronto in timezone WP)
     91    if (!empty($last['date'])) {
     92        $dt         = new DateTime($last['date'], wp_timezone());
     93        $entry_time = $dt->getTimestamp();
     94        if ((current_time('timestamp') - $entry_time) > 24 * HOUR_IN_SECONDS) return '';
     95    }
    8396
    8497    if (isset($last['error'])) {
     
    8699    }
    87100
    88     // Mostra solo un device se specificato (0 = desktop, 1 = mobile)
    89101    if ($device === '1' || $device === 1) {
    90102        if (!isset($last['mobile']['performance'])) return '';
  • rc-site-manager-optimization/trunk/rc-site-manager-optimization.php

    r3487409 r3487675  
    33 * Plugin Name: RC Site Manager & Optimization
    44 * Description: All-in-one Wordpress manager: control WooCommerce, SEO, caching, media, and multilingual tools from one dashboard.
    5  * Version: 2.4.7
     5 * Version: 2.4.8
    66 * Author: Rocket Comunicazione
    77 * Author URI: https://www.rocketcomunicazione.com
     
    1414
    1515
    16 define('RC_SM_PLUGIN_VERSION', '2.4.7');
     16define('RC_SM_PLUGIN_VERSION', '2.4.8');
    1717
    1818define( 'RC_SM_SITE_URL', home_url() );
  • rc-site-manager-optimization/trunk/readme.txt

    r3487409 r3487675  
    55Tested up to: 6.9
    66Requires PHP: 8.1
    7 Stable tag: 2.4.7
     7Stable tag: 2.4.8
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    160160== Changelog ==
    161161
     162
     163= 2.4.8 - March 21, 2026 =
     164* Minor bug fixes and improvement
    162165
    163166= 2.4.7 - March 20, 2026 =
     
    319322== Upgrade Notice ==
    320323
     324= 2.4.8 - March 21, 2026 =
     325Minor bug fixes.
     326
    321327= 2.4.7 - March 20, 2026 =
    322328Minor bug fixes.
  • rc-site-manager-optimization/trunk/settings/settings_function.php

    r3487409 r3487675  
    182182// Hook AJAX per verifica licenza premium
    183183add_action('wp_ajax_rc_sm_premium_verify_licence', function () {
    184    
    185     // Security verification
     184
    186185    if (!rc_sm_security_ajax_verify()) {
    187186        return;
    188187    }
    189    
    190     $slug = rc_sm_security_ajax_get_param('slug', '');
     188
     189    $slug        = rc_sm_security_ajax_get_param('slug', '');
    191190    $licence_key = rc_sm_security_ajax_get_param('licence_key', '');
    192    
    193     if (empty($slug) || empty($licence_key)) {
     191
     192    if (empty($slug)) {
    194193        wp_send_json_error(array('message' => __('Missing required parameters.', 'rc-site-manager-optimization')));
    195194        return;
    196195    }
    197    
     196
     197    // Chiave vuota → elimina licenza dal DB
     198    if (empty($licence_key)) {
     199        $saved_licences = rc_sm_tb_settings_get_value('premium_licences');
     200        if (!empty($saved_licences)) {
     201            unset($saved_licences[$slug]);
     202            rc_sm_premium_licence_save($saved_licences);
     203        }
     204        wp_send_json_success(array(
     205            'message'    => __('Licence removed.', 'rc-site-manager-optimization'),
     206            'valid'      => false,
     207            'expires_at' => ''
     208        ));
     209        wp_die();
     210    }
     211
    198212    $result = rc_sm_premium_licence_verify($slug, $licence_key);
    199    
     213
    200214    if ($result['valid']) {
    201215        wp_send_json_success(array(
    202             'message' => $result['message'],
    203             'valid' => true,
     216            'message'    => $result['message'],
     217            'valid'      => true,
    204218            'expires_at' => $result['expires_at']
    205219        ));
     
    207221        wp_send_json_error(array('message' => $result['message']));
    208222    }
    209    
     223
    210224    wp_die();
    211225});
     
    220234    $api_key = rc_sm_security_ajax_get_param('api_key', '');
    221235
    222     if (empty($slug) || empty($api_key)) {
     236    if (empty($slug)) {
    223237        wp_send_json_error(array('message' => __('Missing required parameters.', 'rc-site-manager-optimization')));
    224238        return;
     239    }
     240
     241    // Chiave vuota → elimina API key dal DB
     242    if (empty($api_key)) {
     243        rc_sm_api_key_delete($slug);
     244        wp_send_json_success(array('message' => __('API Key removed.', 'rc-site-manager-optimization')));
     245        wp_die();
    225246    }
    226247
  • rc-site-manager-optimization/trunk/settings/settings_script.js

    r3487409 r3487675  
    149149            }
    150150
     151            // Campo vuoto o con valore: invia sempre al server
    151152            var licenceKey = $input.val().trim();
    152             if (!licenceKey) {
    153                 $item.find('.rc_sm_licence_message')
    154                     .html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_error">Please enter a licence key.</div></div>').show();
    155                 resetBtn();
    156                 return;
    157             }
    158 
    159153            verifyLicence(slug, licenceKey, $item, resetBtn, false);
    160154        });
     
    213207                }
    214208            }).done(function (response) {
    215                 if (response && response.success) {
     209                if (response && response.success && response.data.valid !== false) {
    216210                    $status.html('<span class="rc_sm_color_success"><span class="dashicons dashicons-marker" style="line-height:inherit;"></span> Active</span>');
    217211                    if (!silent) {
     
    220214                    }
    221215                } else {
    222                     var errMsg = (response && response.data && response.data.message) ? response.data.message : 'Invalid licence key.';
     216                    var msg = (response && response.data && response.data.message) ? response.data.message : 'Licence removed.';
    223217                    $status.html('<span class="rc_sm_color_error"><span class="dashicons dashicons-marker" style="line-height:inherit;"></span> Not activated</span>');
    224218                    if (!silent) {
    225                         $message.html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_error">' + errMsg + '</div></div>').show();
    226                         rc_sm_js_notice_fly_show(errMsg, 'error');
     219                        $message.html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_error">' + msg + '</div></div>').show();
     220                        rc_sm_js_notice_fly_show(msg, 'error');
    227221                    }
    228222                }
     
    285279            }
    286280
     281            // Campo vuoto o con valore: invia sempre al server
    287282            var key = $input.val().trim();
    288             if (!key) {
    289                 $item.find('.rc_sm_api_key_message')
    290                     .html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_error">Please enter an API key.</div></div>').show();
    291                 resetBtn();
    292                 return;
    293             }
    294 
    295283            verifyApiKey(slug, key, $item, resetBtn, false);
    296284        });
     
    350338            }).done(function (response) {
    351339                if (response && response.success) {
     340                    var msg = (response.data && response.data.message) ? response.data.message : 'API Key valid and active.';
    352341                    $status.html('<span class="rc_sm_color_success"><span class="dashicons dashicons-marker" style="line-height:inherit;"></span> Active</span>');
    353342                    if (!silent) {
    354                         $message.html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_success">' + (response.data.message || 'API Key valid and active.') + '</div></div>').show();
    355                         rc_sm_js_notice_fly_show(response.data.message || 'API Key activated successfully.', 'success');
     343                        $message.html('<div class="rc_sm_notice" style="margin-bottom:30px;"><div class="rc_sm_notice_success">' + msg + '</div></div>').show();
     344                        rc_sm_js_notice_fly_show(msg, 'success');
    356345                    }
    357346                } else {
  • rc-site-manager-optimization/trunk/settings/tab_premium_fn.php

    r3487409 r3487675  
    4949        $html .= '<div class="rc_sm_bs_col_6 rc_sm_bs_col_align">';
    5050        $html .= '<div class="rc_sm_licence_status" style="margin-top:0;">';
    51         $html .= '<span class="rc_sm_color_warning"><span class="dashicons dashicons-update" style="line-height:inherit;"></span> ' . esc_html__( 'Checking', 'rc-site-manager-optimization' ) . '...</span>';
     51        if ( $has_key === '1' ) {
     52            $html .= '<span class="rc_sm_color_warning"><span class="dashicons dashicons-update" style="line-height:inherit;"></span> ' . esc_html__( 'Checking', 'rc-site-manager-optimization' ) . '...</span>';
     53        } else {
     54            $html .= '<span class="rc_sm_color_error"><span class="dashicons dashicons-marker" style="line-height:inherit;"></span> ' . esc_html__( 'Not activated', 'rc-site-manager-optimization' ) . '</span>';
     55        }
    5256        $html .= '</div>';
    5357        $html .= '</div>';
     
    103107        $html .= '<div class="rc_sm_bs_col_6 rc_sm_bs_col_align">';
    104108        $html .= '<div class="rc_sm_api_key_status" style="margin-top:0;">';
    105         $html .= '<span class="rc_sm_color_warning"><span class="dashicons dashicons-update" style="line-height:inherit;"></span> ' . esc_html__( 'Checking', 'rc-site-manager-optimization' ) . '...</span>';
     109        if ( $has_key === '1' ) {
     110            $html .= '<span class="rc_sm_color_warning"><span class="dashicons dashicons-update" style="line-height:inherit;"></span> ' . esc_html__( 'Checking', 'rc-site-manager-optimization' ) . '...</span>';
     111        } else {
     112            $html .= '<span class="rc_sm_color_error"><span class="dashicons dashicons-marker" style="line-height:inherit;"></span> ' . esc_html__( 'Not activated', 'rc-site-manager-optimization' ) . '</span>';
     113        }
    106114        $html .= '</div>';
    107115        $html .= '</div>';
Note: See TracChangeset for help on using the changeset viewer.