Plugin Directory

Changeset 3487089


Ignore:
Timestamp:
03/20/2026 09:51:35 AM (8 days ago)
Author:
rocketcomunicazione
Message:

2.4.6

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

Legend:

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

    r3485061 r3487089  
    8383
    8484            if (empty($last_response)) {
    85                 // Nessun check ancora fatto
    8685                $badge_class = 'rc_sm_bg_secondary';
    8786                $status_text = __('In Progress', 'rc-site-manager-optimization');
    8887            } elseif (substr($last_response, 0, 1) === '2') {
    89                 // 2xx = Success
    9088                $badge_class = 'rc_sm_bg_success';
    9189                $status_text = $last_response;
    9290            } elseif (substr($last_response, 0, 1) === '3') {
    93                 // 3xx = Redirect (Warning)
    9491                $badge_class = 'rc_sm_bg_warning';
    9592                $status_text = $last_response;
    9693            } else {
    97                 // 4xx, 5xx, timeout, error = Failed
    9894                $badge_class = 'rc_sm_bg_error';
    9995                $status_text = $last_response;
     
    104100            echo "<td><a href='" . esc_url($url) . "' target='_blank'>" . esc_html($url) . "</a></td>";
    105101            echo "<td>" . esc_html($url_group) . "</td>";
    106             echo "<td>" . ($badge_class ? "<a href='" . esc_url($url) . "' target='_blank'><span class='rc_sm_badge " . esc_attr($badge_class) . "'>" . esc_html($status_text) . "</span></a>" : '') . "</td>";
     102            echo "<td>" . ($badge_class ? "<a href='#' class='rc_sm_modal_agency_url_history' data-id='" . esc_attr($id) . "' data-url='" . esc_attr($url) . "'><span class='rc_sm_badge " . esc_attr($badge_class) . "'>" . esc_html($status_text) . "</span></a>" : '') . "</td>";
    107103            echo '<td>' . wp_kses_post($ps_html) . '</td>';
    108104            echo "<td>" . esc_html($last_check) . "</td>";
     
    138134    global $wpdb;
    139135
    140     // Nonce check
    141136    $nonce = rc_sm_security_ajax_get_param('rc_sm_agency_url_add_nonce');
    142137
     
    152147    }
    153148
    154     // Split by newline and/or spaces, handle %20 as separator
    155149    $normalized = str_replace(['\r', '%20'], ['', ' '], $raw_input);
    156150    $parts      = preg_split('/[\n\s]+/', $normalized);
     
    211205
    212206    $messages = '';
    213     if ($added)              $messages .= '<div class="rc_sm_notice_success">' . sprintf(esc_html(__('%d URL(s) added successfully.', 'rc-site-manager-optimization')), $added) . '</div>';
     207    if ($added)                $messages .= '<div class="rc_sm_notice_success">' . sprintf(esc_html(__('%d URL(s) added successfully.', 'rc-site-manager-optimization')), $added) . '</div>';
    214208    if (!empty($skipped_urls)) $messages .= '<div class="rc_sm_notice_warning">' . esc_html(__('URL already exist:', 'rc-site-manager-optimization')) . $url_list($skipped_urls) . '</div>';
    215209    if (!empty($invalid_urls)) $messages .= '<div class="rc_sm_notice_error">'   . esc_html(__('Invalid URL format:', 'rc-site-manager-optimization')) . $url_list($invalid_urls) . '</div>';
     
    222216    global $wpdb;
    223217
    224     // Security verification
    225218    if (!rc_sm_security_ajax_verify()) {
    226219        return;
     
    262255    global $wpdb;
    263256
    264     // Security verification
    265257    if (!rc_sm_security_ajax_verify()) {
    266258        wp_send_json_error(['msg' => __('Security error.', 'rc-site-manager-optimization')]);
     
    301293    }
    302294
    303     // Genera HTML tabella storico
    304295    ob_start();
    305296    ?>
  • rc-site-manager-optimization/trunk/rc-site-manager-optimization.php

    r3485061 r3487089  
    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.5
     5 * Version: 2.4.6
    66 * Author: Rocket Comunicazione
    77 * Author URI: https://www.rocketcomunicazione.com
     
    1313if (!defined('ABSPATH')) { exit; }
    1414
    15 if ( is_admin() ) {
    16     @ini_set( 'display_errors', 1 );
    17 }
    18 
    19 
    20 define('RC_SM_PLUGIN_VERSION', '2.4.5');
     15
     16define('RC_SM_PLUGIN_VERSION', '2.4.6');
    2117
    2218define( 'RC_SM_SITE_URL', home_url() );
  • rc-site-manager-optimization/trunk/readme.txt

    r3485061 r3487089  
    55Tested up to: 6.9
    66Requires PHP: 8.1
    7 Stable tag: 2.4.5
     7Stable tag: 2.4.6
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    160160== Changelog ==
    161161
     162
     163= 2.4.6 - March 20, 2026 =
     164* Minor bug fixes and improvement
    162165
    163166= 2.4.5 - March 17, 2026 =
     
    313316== Upgrade Notice ==
    314317
     318= 2.4.6 - March 20, 2026 =
     319Minor bug fixes.
     320
    315321= 2.4.5 - March 17, 2026 =
    316322Minor bug fixes.
  • rc-site-manager-optimization/trunk/utility/tab_system_fn.php

    r3476531 r3487089  
    3232        __( 'Upload Max Filesize', 'rc-site-manager-optimization' ) => [ 'value' => rc_sm_system_format_bytes( ini_get( 'upload_max_filesize' ) ),         'source' => "ini_get('upload_max_filesize')" ],
    3333        __( 'Max Input Vars', 'rc-site-manager-optimization' )      => [ 'value' => ini_get( 'max_input_vars' ),                                          'source' => "ini_get('max_input_vars')" ],
     34        __( 'OPcache', 'rc-site-manager-optimization' )              => ( function() {
     35            $enabled = function_exists( 'opcache_get_status' ) && @opcache_get_status( false ) !== false;
     36            $class   = $enabled ? 'rc_sm_color_success' : 'rc_sm_color_error';
     37            $text    = $enabled ? __( 'Yes', 'rc-site-manager-optimization' ) : __( 'No', 'rc-site-manager-optimization' );
     38            return [ 'value' => '<span class="rc_sm_bold ' . $class . '">' . esc_html( $text ) . '</span>', 'source' => 'opcache_get_status()', 'raw' => true ];
     39        } )(),
    3440    ];
    3541}
     
    4248    $rest_ok       = ! is_wp_error( $rest_response ) && wp_remote_retrieve_response_code( $rest_response ) === 200;
    4349    $rest_html = $rest_ok
    44         ? esc_html__( 'Active', 'rc-site-manager-optimization' )
    45         : '<span class="rc_sm_bold rc_sm_color_error">' . esc_html__( 'Not reachable', 'rc-site-manager-optimization' ) . '</span>';
     50        ? esc_html__( 'Yes', 'rc-site-manager-optimization' )
     51        : '<span class="rc_sm_bold rc_sm_color_error">' . esc_html__( 'No', 'rc-site-manager-optimization' ) . '</span>';
    4652
    4753    $discourage      = get_option( 'blog_public' ) == '0';
     
    5157
    5258    return [
    53         __( 'WordPress Version', 'rc-site-manager-optimization' )         => [ 'value' => get_bloginfo( 'version' ),                        'source' => "get_bloginfo('version')" ],
    54         __( 'WP Memory Limit', 'rc-site-manager-optimization' )           => [ 'value' => rc_sm_system_format_bytes( WP_MEMORY_LIMIT ),     'source' => 'WP_MEMORY_LIMIT' ],
     59        __( 'WordPress Version', 'rc-site-manager-optimization' )         => ( function() {
     60            $update_core    = get_site_transient( 'update_core' );
     61            $has_update     = false;
     62            if ( ! empty( $update_core->updates ) ) {
     63                foreach ( $update_core->updates as $update ) {
     64                    if ( isset( $update->response ) && $update->response === 'upgrade' ) {
     65                        $has_update = true;
     66                        break;
     67                    }
     68                }
     69            }
     70            $class = $has_update ? 'rc_sm_color_error' : 'rc_sm_color_success';
     71            return [ 'value' => '<span class="rc_sm_bold ' . $class . '">' . esc_html( get_bloginfo( 'version' ) ) . '</span>', 'source' => "get_bloginfo('version')", 'raw' => true ];
     72        } )(),
     73        __( 'WP Memory Limit', 'rc-site-manager-optimization' )           => ( function() {
     74            $raw   = WP_MEMORY_LIMIT;
     75            $num   = (int) $raw;
     76            $unit  = strtoupper( substr( trim( $raw ), -1 ) );
     77            $mb    = $unit === 'G' ? $num * 1024 : ( $unit === 'K' ? $num / 1024 : $num );
     78            $class = $mb <= 40 ? 'rc_sm_color_error' : 'rc_sm_color_success';
     79            $str   = rc_sm_system_format_bytes( $raw );
     80            return [ 'value' => '<span class="rc_sm_bold ' . $class . '">' . esc_html( $str ) . '</span>', 'source' => 'WP_MEMORY_LIMIT', 'raw' => true ];
     81        } )(),
    5582        __( 'WP Max Memory Limit', 'rc-site-manager-optimization' )       => [ 'value' => rc_sm_system_format_bytes( WP_MAX_MEMORY_LIMIT ), 'source' => 'WP_MAX_MEMORY_LIMIT' ],
    5683        __( 'Multisite', 'rc-site-manager-optimization' )                 => [ 'value' => is_multisite() ? __( 'Yes', 'rc-site-manager-optimization' ) : __( 'No', 'rc-site-manager-optimization' ), 'source' => 'is_multisite()' ],
    57         __( 'Debug Mode', 'rc-site-manager-optimization' )                => [ 'value' => defined( 'WP_DEBUG' ) && WP_DEBUG ? __( 'Enabled', 'rc-site-manager-optimization' ) : __( 'Disabled', 'rc-site-manager-optimization' ), 'source' => 'WP_DEBUG' ],
     84        __( 'Debug Mode', 'rc-site-manager-optimization' )                => ( function() {
     85            $enabled = defined( 'WP_DEBUG' ) && WP_DEBUG;
     86            $text    = $enabled ? __( 'Enabled', 'rc-site-manager-optimization' ) : __( 'Disabled', 'rc-site-manager-optimization' );
     87            if ( $enabled ) {
     88                return [ 'value' => '<span class="rc_sm_bold rc_sm_color_error">' . esc_html( $text ) . '</span>', 'source' => 'WP_DEBUG', 'raw' => true ];
     89            }
     90            return [ 'value' => esc_html( $text ), 'source' => 'WP_DEBUG' ];
     91        } )(),
    5892        __( 'REST API', 'rc-site-manager-optimization' )                  => [ 'value' => $rest_html,       'source' => 'get_rest_url()',           'raw' => true ],
    5993        __( 'Discourage Search Engines', 'rc-site-manager-optimization' ) => [ 'value' => $discourage_html, 'source' => "get_option('blog_public')", 'raw' => true ],
     94        __( 'Timezone', 'rc-site-manager-optimization' )                  => [ 'value' => esc_html( wp_timezone_string() ),                                                           'source' => 'wp_timezone_string()' ],
     95        __( 'Locale', 'rc-site-manager-optimization' )                    => [ 'value' => esc_html( get_locale() ),                                                                   'source' => 'get_locale()' ],
     96        __( 'Site URL', 'rc-site-manager-optimization' )                 => [ 'value' => esc_html( get_option( 'siteurl' ) ), 'source' => "get_option('siteurl')" ],
     97        __( 'Home URL', 'rc-site-manager-optimization' )                  => [ 'value' => esc_html( get_option( 'home' ) ),    'source' => "get_option('home')" ],
     98        __( 'Disable WP Cron', 'rc-site-manager-optimization' )           => ( function() {
     99            $disabled = defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON;
     100            $text     = $disabled ? __( 'Yes', 'rc-site-manager-optimization' ) : __( 'No', 'rc-site-manager-optimization' );
     101            return [ 'value' => esc_html( $text ), 'source' => 'DISABLE_WP_CRON' ];
     102        } )(),
     103        __( 'Active Plugins', 'rc-site-manager-optimization' )            => [ 'value' => esc_html( count( get_option( 'active_plugins', [] ) ) ),                                   'source' => 'get_option(active_plugins)' ],
    60104    ];
    61105}
     
    64108    global $wpdb;
    65109    $db_size = $wpdb->get_var( "SELECT SUM(data_length + index_length) FROM information_schema.tables WHERE table_schema = '" . DB_NAME . "'" );
    66     $db_size_str = $db_size ? rc_sm_system_format_bytes( round( $db_size / 1048576 ) . 'M' ) : 'N/A';
     110    if ( $db_size ) {
     111        $db_size_mb  = round( $db_size / 1048576 );
     112        $db_size_str = rc_sm_system_format_bytes( $db_size_mb . 'M' );
     113        if ( $db_size_mb >= 1024 ) {
     114            $db_size_html = '<span class="rc_sm_bold rc_sm_color_error">' . esc_html( $db_size_str ) . '</span>';
     115        } else {
     116            $db_size_html = esc_html( $db_size_str );
     117        }
     118    } else {
     119        $db_size_html = 'N/A';
     120    }
    67121    return [
    68122        __( 'MySQL Version', 'rc-site-manager-optimization' ) => [ 'value' => $wpdb->db_version(), 'source' => '$wpdb->db_version()' ],
    69123        __( 'Database Name', 'rc-site-manager-optimization' ) => [ 'value' => DB_NAME,              'source' => 'DB_NAME' ],
    70124        __( 'Table Prefix', 'rc-site-manager-optimization' )  => [ 'value' => $wpdb->prefix,        'source' => '$wpdb->prefix' ],
    71         __( 'Database Size', 'rc-site-manager-optimization' ) => [ 'value' => $db_size_str,          'source' => 'information_schema.tables' ],
     125        __( 'Database Size', 'rc-site-manager-optimization' ) => [ 'value' => $db_size_html,         'source' => 'information_schema.tables', 'raw' => true ],
    72126    ];
    73127}
     
    79133        __( 'Hostname', 'rc-site-manager-optimization' )            => [ 'value' => php_uname( 'n' ),                     'source' => "php_uname('n')" ],
    80134        __( 'Current Server Time', 'rc-site-manager-optimization' ) => [ 'value' => gmdate( 'd/m/Y H:i:s' ) . ' UTC',    'source' => 'gmdate()' ],
     135        __( 'SSL', 'rc-site-manager-optimization' )                  => ( function() {
     136            $host = parse_url( home_url(), PHP_URL_HOST );
     137            $ctx  = stream_context_create( [ 'ssl' => [ 'capture_peer_cert' => true, 'verify_peer' => false, 'verify_peer_name' => false ] ] );
     138            $fp   = @stream_socket_client( 'ssl://' . $host . ':443', $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $ctx );
     139            if ( $fp ) {
     140                fclose( $fp );
     141                return [ 'value' => esc_html__( 'Yes', 'rc-site-manager-optimization' ), 'source' => 'stream_socket_client(ssl)' ];
     142            }
     143            return [ 'value' => '<span class="rc_sm_bold rc_sm_color_error">' . esc_html__( 'No', 'rc-site-manager-optimization' ) . '</span>', 'source' => 'stream_socket_client(ssl)', 'raw' => true ];
     144        } )(),
     145        __( 'HTTPS Redirect', 'rc-site-manager-optimization' )      => ( function() {
     146            $http_url  = preg_replace( '#^https://#', 'http://', home_url() );
     147            $response  = wp_remote_get( $http_url, [ 'timeout' => 5, 'redirection' => 0, 'sslverify' => false ] );
     148            $code      = ! is_wp_error( $response ) ? wp_remote_retrieve_response_code( $response ) : 0;
     149            $location  = ! is_wp_error( $response ) ? wp_remote_retrieve_header( $response, 'location' ) : '';
     150            $redirects = in_array( $code, [ 301, 302 ], true ) && strpos( $location, 'https://' ) === 0;
     151            if ( $redirects ) {
     152                return [ 'value' => esc_html__( 'Yes', 'rc-site-manager-optimization' ), 'source' => 'wp_remote_get(http)' ];
     153            }
     154            return [ 'value' => '<span class="rc_sm_bold rc_sm_color_error">' . esc_html__( 'No', 'rc-site-manager-optimization' ) . '</span>', 'source' => 'wp_remote_get(http)', 'raw' => true ];
     155        } )(),
     156        __( 'Object Cache', 'rc-site-manager-optimization' )        => ( function() {
     157            $active = wp_using_ext_object_cache();
     158            $type   = '';
     159            if ( $active ) {
     160                if ( class_exists( 'Redis' ) || class_exists( 'RedisClient' ) || defined( 'WP_REDIS_VERSION' ) ) $type = 'Redis';
     161                elseif ( class_exists( 'Memcached' ) || class_exists( 'Memcache' ) )                             $type = 'Memcached';
     162            }
     163            $text  = $active ? ( $type ?: __( 'Yes', 'rc-site-manager-optimization' ) ) : __( 'No', 'rc-site-manager-optimization' );
     164            $class = $active ? 'rc_sm_color_success' : 'rc_sm_color_error';
     165            return [ 'value' => '<span class="rc_sm_bold ' . $class . '">' . esc_html( $text ) . '</span>', 'source' => 'wp_using_ext_object_cache()', 'raw' => true ];
     166        } )(),
    81167    ];
    82168}
     
    116202    $free  = disk_free_space( ABSPATH );
    117203    $total = disk_total_space( ABSPATH );
     204
     205    if ( $free !== false ) {
     206        $free_gb    = round( $free / 1073741824, 2 );
     207        $free_str   = $free_gb . ' GB';
     208        $free_class = $free_gb < 1 ? 'rc_sm_color_error' : 'rc_sm_color_success';
     209        $free_html  = '<span class="rc_sm_bold ' . $free_class . '">' . esc_html( $free_str ) . '</span>';
     210    } else {
     211        $free_html = 'N/A';
     212    }
     213
    118214    return [
    119         __( 'Free Space', 'rc-site-manager-optimization' )  => [ 'value' => $free  !== false ? round( $free  / 1073741824, 2 ) . ' GB' : 'N/A', 'source' => 'disk_free_space(ABSPATH)' ],
     215        __( 'Free Space', 'rc-site-manager-optimization' )  => [ 'value' => $free_html,                                                         'source' => 'disk_free_space(ABSPATH)',  'raw' => true ],
    120216        __( 'Total Space', 'rc-site-manager-optimization' ) => [ 'value' => $total !== false ? round( $total / 1073741824, 2 ) . ' GB' : 'N/A', 'source' => 'disk_total_space(ABSPATH)' ],
    121217    ];
     
    178274    $cdn_html = $cdn
    179275        ? '<span class="rc_sm_bold rc_sm_color_success">' . esc_html( $cdn ) . '</span>'
    180         : '<span class="rc_sm_bold rc_sm_color_error">None</span>';
     276        : esc_html__( 'No', 'rc-site-manager-optimization' );
    181277
    182278    $server_ip = isset( $_SERVER['SERVER_ADDR'] ) ? sanitize_text_field( $_SERVER['SERVER_ADDR'] ) : 'N/A';
     
    231327    $rows           = [];
    232328    $update_plugins = get_site_transient( 'update_plugins' );
     329    $update_themes  = get_site_transient( 'update_themes' );
    233330    $update_core    = get_site_transient( 'update_core' );
    234331    $today          = current_time( 'timestamp' );
     
    237334        if ( ! $mtime ) return '';
    238335        $days = (int) floor( ( $today - $mtime ) / DAY_IN_SECONDS );
    239         return $days > 30
    240             ? ' <span class="rc_sm_bold rc_sm_color_error">(' . $days . ')</span>'
    241             : ' (' . $days . ')';
     336        return ' (' . $days . ')';
    242337    };
    243338
     
    253348        }
    254349    }
    255     $core_name = 'WordPress ' . get_bloginfo( 'version' );
    256     if ( $core_new_version ) {
    257         $core_name .= ' <span class="rc_sm_bold rc_sm_color_error">' . esc_html( $core_new_version ) . '</span>';
    258     }
     350    $core_name = $core_new_version
     351        ? '<span class="rc_sm_color_error">' . esc_html( 'WordPress ' . get_bloginfo( 'version' ) . ' ' . $core_new_version ) . '</span>'
     352        : esc_html( 'WordPress ' . get_bloginfo( 'version' ) );
    259353    $core_date = $core_mtime ? date_i18n( 'd/m/Y', $core_mtime ) . $days_html( $core_mtime ) : 'N/A';
    260354    $rows[] = [ 'type' => 'Core', 'name' => $core_name, 'date' => $core_date ];
     
    288382        }
    289383
    290         $name_html = esc_html( $name . ' ' . $version );
    291         if ( $new_version ) {
    292             $name_html .= ' <span class="rc_sm_bold rc_sm_color_error">' . esc_html( $new_version ) . '</span>';
    293         }
     384        $name_html = $new_version
     385            ? '<span class="rc_sm_color_error">' . esc_html( $name . ' ' . $version . ' ' . $new_version ) . '</span>'
     386            : esc_html( $name . ' ' . $version );
    294387
    295388        $is_builder = in_array( dirname( $plugin_file ), $builder_exact_slugs );
     
    313406
    314407    foreach ( $themes_to_show as $theme ) {
     408        $stylesheet  = $theme->get_stylesheet();
    315409        $theme_name  = $theme->get( 'Name' ) . ' ' . $theme->get( 'Version' );
    316         $theme_path  = get_theme_root() . '/' . $theme->get_stylesheet() . '/style.css';
     410        $theme_path  = get_theme_root() . '/' . $stylesheet . '/style.css';
    317411        $theme_mtime = @filemtime( $theme_path );
    318412        $theme_date  = $theme_mtime ? date_i18n( 'd/m/Y', $theme_mtime ) . $days_html( $theme_mtime ) : 'N/A';
    319         $rows[] = [ 'type' => 'Theme', 'name' => esc_html( $theme_name ), 'date' => $theme_date ];
     413
     414        $new_version = $update_themes->response[ $stylesheet ]['new_version'] ?? '';
     415        $name_html   = $new_version
     416            ? '<span class="rc_sm_color_error">' . esc_html( $theme_name . ' ' . $new_version ) . '</span>'
     417            : esc_html( $theme_name );
     418
     419        $rows[] = [ 'type' => 'Theme', 'name' => $name_html, 'date' => $theme_date ];
    320420    }
    321421
     
    326426
    327427function rc_sm_system_info_table( array $data ): string {
     428    $marked_labels = [
     429        __( 'PHP Version', 'rc-site-manager-optimization' ),
     430        __( 'WordPress Version', 'rc-site-manager-optimization' ),
     431        __( 'Memory Limit', 'rc-site-manager-optimization' ),
     432        __( 'WP Memory Limit', 'rc-site-manager-optimization' ),
     433        __( 'Debug Mode', 'rc-site-manager-optimization' ),
     434        __( 'Discourage Search Engines', 'rc-site-manager-optimization' ),
     435        __( 'Database Size', 'rc-site-manager-optimization' ),
     436        __( 'CDN', 'rc-site-manager-optimization' ),
     437        __( 'Free Space', 'rc-site-manager-optimization' ),
     438        'php_errorlog',
     439        'debug.log',
     440        __( 'OPcache', 'rc-site-manager-optimization' ),
     441        __( 'Active Plugins', 'rc-site-manager-optimization' ),
     442        __( 'Object Cache', 'rc-site-manager-optimization' ),
     443
     444    ];
    328445    $html = '<table class="widefat striped rc_sm_table_system">';
    329446    foreach ( $data as $label => $row ) {
    330         $is_raw = ! empty( $row['raw'] );
     447        $is_raw    = ! empty( $row['raw'] );
     448        $label_out = in_array( $label, $marked_labels, true )
     449            ? '<mark>' . esc_html( $label ) . '</mark>'
     450            : esc_html( $label );
    331451        $html .= '<tr>';
    332         $html .= '<td class="rc_sm_width_4"><strong>' . esc_html( $label ) . '</strong></td>';
     452        $html .= '<td class="rc_sm_width_4"><strong>' . $label_out . '</strong></td>';
    333453        $html .= '<td class="rc_sm_width_4">' . ( $is_raw ? wp_kses_post( $row['value'] ) : esc_html( $row['value'] ) ) . '</td>';
    334454        $html .= '<td class="rc_sm_width_4"><code>' . esc_html( $row['source'] ) . '</code></td>';
     
    340460
    341461function rc_sm_system_info_table_env( array $rows ): string {
     462    $marked_types = [ 'Core', 'Builder', 'Theme' ];
    342463    $html = '<table class="widefat striped rc_sm_table_system">';
    343464    foreach ( $rows as $row ) {
     465        $type_out = in_array( $row['type'], $marked_types, true )
     466            ? '<mark>' . esc_html( $row['type'] ) . '</mark>'
     467            : esc_html( $row['type'] );
    344468        $html .= '<tr>';
    345         $html .= '<td class="rc_sm_width_4"><strong>' . esc_html( $row['type'] ) . '</strong></td>';
     469        $html .= '<td class="rc_sm_width_4"><strong>' . $type_out . '</strong></td>';
    346470        $html .= '<td class="rc_sm_width_4">' . wp_kses_post( $row['name'] ) . '</td>';
    347471        $html .= '<td class="rc_sm_width_4">' . wp_kses_post( $row['date'] ) . '</td>';
Note: See TracChangeset for help on using the changeset viewer.