Plugin Directory

Changeset 3445036


Ignore:
Timestamp:
01/22/2026 05:07:40 PM (4 weeks ago)
Author:
TraceMyIP
Message:

Version 2.72

  • Verify WordPress 6.9 full compatibility
  • Corrected versioning updates
  • Improved the hits stats charts series and tooltip graphics
  • Improved the hits stats charts highlighting for better visual differention between the series
  • Added new social platform tracking definitions
  • Added new social bookmarking tracking definitions
Location:
tracemyip-visitor-analytics-ip-tracking-control/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/TraceMyIP-Wordpress-Plugin.php

    r3315425 r3445036  
    55    Plugin URI: https://www.tracemyip.org
    66    Description: Website visitor IP address activity tracking, IP analytics, visitor email alerts, IP changes tracker and visitor IP address blocking. UnFiltered post stats dashboard. Tag visitors IPs, count and track post views, schedule email alerts, control and manage pages, links and protect contact forms. GDPR options.
    7     Version: 2.71
     7    Version: 2.72
    88    Author: TraceMyIP.org
    99    Author URI: https://www.TraceMyIP.org
     
    1212    License URI: http://www.gnu.org/licenses/gpl-2.0.html
    1313*/
    14 if (!defined('TMIP_VERSION') )      define('TMIP_VERSION', '2.71');
     14if (!defined('TMIP_VERSION') )      define('TMIP_VERSION', '2.72');
    1515
    1616### SET CONSTANTS ############################################
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/includes/local_stats/admin/ls-dashboard-widget.php

    r3315425 r3445036  
    511511
    512512                <script>
    513                 jQuery(document).ready(function($) {
    514                     $.post(ajaxurl, {
    515                         action: 'tmip_get_daily_stats',
    516                         security: '<?php echo wp_create_nonce("tmip_dashboard_nonce"); ?>',
    517                     }, function(response) {
    518                         if (response.success) {
    519                             var chartMode = '<?php echo get_option('tmip_lc_chart_display_mode', 'separate'); ?>';
    520 
    521                             // Define series with their specific colors
    522                     var selectedSeries = <?php echo json_encode(get_option('tmip_lc_chart_series_display', ['posts', 'pages', 'custom'])); ?>;
    523 
    524                     // Ensure selectedSeries is always an array
    525                     if (!Array.isArray(selectedSeries)) {
    526                         selectedSeries = ['posts', 'pages', 'custom'];
    527                     }
    528 
    529                     var seriesConfig = chartMode === 'combined' ? [
    530                         {
    531                             name: 'Total Hits',
    532                             data: response.data.views,
    533                             color: '#2E93fA'
    534                         }
    535                     ] : [
    536                         {
    537                             name: 'Posts',
    538                             data: response.data.posts_views,
    539                             color: '#008FFB',
    540                             enabled: selectedSeries.includes('posts')
    541                         },
    542                         {
    543                             name: 'Pages',
    544                             data: response.data.pages_views,
    545                             color: '#00E396',
    546                             enabled: selectedSeries.includes('pages')
    547                         },
    548                         {
    549                             name: 'Custom Posts',
    550                             data: response.data.custom_views,
    551                             color: '#FEB019',
    552                             enabled: selectedSeries.includes('custom')
    553                         },
    554                         {
    555                             name: 'Media',
    556                             data: response.data.media_views,
    557                             color: '#FF4560',
    558                             enabled: selectedSeries.includes('media')
    559                         },
    560                         {
    561                             name: 'Other',
    562                             data: response.data.other_views,
    563                             color: '#775DD0',
    564                             enabled: selectedSeries.includes('other')
    565                         },
    566                         {
    567                             name: 'Bot Hits',
    568                             data: response.data.bot_views,
    569                             color: '#546E7A',
    570                             enabled: selectedSeries.includes('bots')
    571                         },
    572                         {
    573                             name: 'Unique Visits',
    574                             data: response.data.unique_visits,
    575                             color: '#26a69a',
    576                             enabled: selectedSeries.includes('unique')
    577                         }
    578                     ].filter(series => {
    579                         // Ensure series is enabled and has valid data
    580                         return series.enabled !== false &&
    581                                Array.isArray(series.data) &&
    582                                series.data.some(value => value !== null && value !== undefined);
    583                     });
    584 
    585 
    586                     var storageMethod = '<?php echo get_option('tmip_lc_storage_method', 'cookies'); ?>';
    587                     if (storageMethod === 'cookieless') {
    588                         // Filter out unique visits series
    589                         seriesConfig = seriesConfig.filter(series => series.name !== 'Unique Visits');
    590                     }
    591 
    592                     var options = {
    593                         chart: {
    594                             type: 'area',
    595                             height: 250,
    596                             animations: {
    597                                 enabled: true,
    598                                 easing: 'easeinout',
    599                                 speed: 800
    600                             },
    601                             toolbar: {
    602                                 show: true
    603                             }
    604                         },
    605                         series: seriesConfig.map(s => ({
    606                             name: s.name,
    607                             data: s.data
    608                         })),
    609                         colors: seriesConfig.map(s => s.color),
    610                         stroke: {
    611                             curve: 'smooth',
    612                             width: 3,
    613                             colors: seriesConfig.map(s => s.color)
    614                         },
    615                         fill: {
    616                             type: 'solid',
    617                             opacity: 0.15
    618                         },
    619                         markers: {
    620                             size: 5,
    621                             radius: 5,
    622                             shape: 'circle',
    623                             colors: seriesConfig.map(s => s.color),
    624                             strokeColors: '#fff',
    625                             strokeWidth: 2,
    626                             hover: {
    627                                 size: 7,
    628                                 sizeOffset: 3
    629                             },
    630                             discrete: []
    631                         },
    632                         dataLabels: {
    633                             enabled: false
    634                         },
    635                         xaxis: {
    636                             categories: response.data.dates,
    637                             type: 'datetime',
    638                             labels: {
    639                                 rotate: -45,
    640                                 rotateAlways: false,
    641                                 format: 'dd MMM',
    642                                 style: {
    643                                     fontSize: '12px'
    644                                 }
    645                             },
    646                             tickAmount: Math.min(response.data.retention_days, 15)
    647                         },
    648                         yaxis: {
    649                             labels: {
    650                                 formatter: function(val) {
    651                                     return Math.floor(val);
    652                                 }
    653                             }
    654                         },
    655                         tooltip: {
     513               
     514                   
     515                   
     516                   
     517
     518jQuery(document).ready(function($) {
     519    $.post(ajaxurl, {
     520        action: 'tmip_get_daily_stats',
     521        security: '<?php echo wp_create_nonce("tmip_dashboard_nonce"); ?>',
     522    }, function(response) {
     523        if (response.success) {
     524            var chartMode = '<?php echo get_option('tmip_lc_chart_display_mode', 'separate'); ?>';
     525
     526            // Define series with their specific colors
     527            var selectedSeries = <?php echo json_encode(get_option('tmip_lc_chart_series_display', ['posts', 'pages', 'custom'])); ?>;
     528
     529            // Ensure selectedSeries is always an array
     530            if (!Array.isArray(selectedSeries)) {
     531                selectedSeries = ['posts', 'pages', 'custom'];
     532            }
     533
     534            var seriesConfig = chartMode === 'combined' ? [
     535                {
     536                    name: 'Total Hits',
     537                    data: response.data.views,
     538                    color: '#2E93fA'
     539                }
     540            ] : [
     541                {
     542                    name: 'Posts',
     543                    data: response.data.posts_views,
     544                    color: '#008FFB',
     545                    enabled: selectedSeries.includes('posts')
     546                },
     547                {
     548                    name: 'Pages',
     549                    data: response.data.pages_views,
     550                    color: '#00E396',
     551                    enabled: selectedSeries.includes('pages')
     552                },
     553                {
     554                    name: 'Custom Posts',
     555                    data: response.data.custom_views,
     556                    color: '#FEB019',
     557                    enabled: selectedSeries.includes('custom')
     558                },
     559                {
     560                    name: 'Media',
     561                    data: response.data.media_views,
     562                    color: '#FF4560',
     563                    enabled: selectedSeries.includes('media')
     564                },
     565                {
     566                    name: 'Other',
     567                    data: response.data.other_views,
     568                    color: '#775DD0',
     569                    enabled: selectedSeries.includes('other')
     570                },
     571                {
     572                    name: 'Bot Hits',
     573                    data: response.data.bot_views,
     574                    color: '#546E7A',
     575                    enabled: selectedSeries.includes('bots')
     576                },
     577                {
     578                    name: 'Unique Visits',
     579                    data: response.data.unique_visits,
     580                    color: '#26a69a',
     581                    enabled: selectedSeries.includes('unique')
     582                }
     583            ].filter(series => {
     584                // Ensure series is enabled and has valid data
     585                return series.enabled !== false &&
     586                       Array.isArray(series.data) &&
     587                       series.data.some(value => value !== null && value !== undefined);
     588            });
     589
     590            var storageMethod = '<?php echo get_option('tmip_lc_storage_method', 'cookies'); ?>';
     591            if (storageMethod === 'cookieless') {
     592                // Filter out unique visits series
     593                seriesConfig = seriesConfig.filter(series => series.name !== 'Unique Visits');
     594            }
     595
     596            // Create a shifted color array for chart elements
     597            // Shift colors backward by one position (last color becomes first)
     598            var chartColors = seriesConfig.map(s => s.color);
     599            var shiftedColors = [chartColors[chartColors.length - 1], ...chartColors.slice(0, -1)];
     600
     601            var options = {
     602                chart: {
     603                    type: 'area',
     604                    height: 250,
     605                    animations: {
     606                        enabled: true,
     607                        easing: 'easeinout',
     608                        speed: 800
     609                    },
     610                    toolbar: {
     611                        show: true
     612                    }
     613                },
     614                series: seriesConfig.map(s => ({
     615                    name: s.name,
     616                    data: s.data
     617                })),
     618                // Use original colors for legend
     619                colors: chartColors,
     620                stroke: {
     621                    curve: 'smooth',
     622                    width: 3
     623                },
     624                fill: {
     625                    type: 'solid',
     626                    opacity: 0.15
     627                },
     628                markers: {
     629                    size: 5,
     630                    radius: 7,
     631                    shape: 'circle',
     632                    strokeColors: '#000',
     633                    strokeWidth: 1,
     634                    hover: {
     635                        size: 7,
     636                        sizeOffset: 3
     637                    }
     638                },
     639                dataLabels: {
     640                    enabled: false
     641                },
     642                states: {
     643                    hover: {
     644                        filter: {
     645                            type: 'none'  // Disable default hover filter
     646                        }
     647                    },
     648                    active: {
     649                        allowMultipleDataPointsSelection: false,
     650                        filter: {
     651                            type: 'none'  // Disable default active filter
     652                        }
     653                    }
     654                },
     655                xaxis: {
     656                    categories: response.data.dates,
     657                    type: 'datetime',
     658                    labels: {
     659                        rotate: -45,
     660                        rotateAlways: false,
     661                        format: 'dd MMM',
     662                        style: {
     663                            fontSize: '12px'
     664                        }
     665                    },
     666                    tickAmount: Math.min(response.data.retention_days, 15)
     667                },
     668                yaxis: {
     669                    labels: {
     670                        formatter: function(val) {
     671                            return Math.floor(val);
     672                        }
     673                    }
     674                },
     675                tooltip: {
    656676                            shared: true,
    657677                            intersect: false,
     
    676696                                    w.globals.seriesNames.map((name, i) => {
    677697                                        if (series[i][dataPointIndex] !== undefined) {
    678                                             return `<div class="tooltip-series" style="color: ${colors[i]}">
    679                                                 <span class="tooltip-marker" style="background: ${colors[i]}"></span>
    680                                                 <span class="series-name">${name}:</span>
    681                                                 <span class="series-value">${Math.floor(series[i][dataPointIndex])} hits</span>
     698                                            return `<div class="tmip-tooltip-series" style="color: ${colors[i]}">
     699                                                <span class="tmip-tooltip-marker" style="background: ${colors[i]}"></span>
     700                                                <span class="tmip-series-name">${name}:</span>
     701                                                <span class="tmip-series-value">${Math.floor(series[i][dataPointIndex])} hits</span>
    682702                                            </div>`;
    683703                                        }
     
    687707                            }
    688708                        },
    689                         legend: {
    690                             position: 'bottom',
    691                             horizontalAlign: 'center',
    692                             onItemClick: {
    693                                 toggleDataSeries: true
    694                             },
    695                             onItemHover: {
    696                                 highlightDataSeries: true
    697                             },
    698                             markers: {
    699                                 width: 8,
    700                                 height: 8,
    701                                 strokeWidth: 0,
    702                                 strokeColor: '#fff',
    703                                 radius: 12,
    704                                 offsetX: 0,
    705                                 offsetY: 0,
    706                                 shape: 'circle',
    707                                 fillColors: seriesConfig.map(s => s.color)
    708                             },
    709                             showForSingleSeries: true
    710                         },
    711                         grid: {
    712                             borderColor: '#f1f1f1',
    713                             padding: {
    714                                 bottom: 15
    715                             }
    716                         }
    717                     };
    718 
    719                     // Update the custom CSS section:
    720                     $('<style>')
    721                         .text(`
    722                             ${seriesConfig.map((s, i) => `
    723                                 .apexcharts-series[rel="${i}"] {
    724                                     stroke: ${s.color} !important;
    725                                 }
    726                                 .apexcharts-series[rel="${i}"] path.apexcharts-line {
    727                                     stroke: ${s.color} !important;
    728                                 }
    729                                 .apexcharts-series[rel="${i}"] path.apexcharts-area {
    730                                     fill: ${s.color} !important;
    731                                 }
    732                                 .apexcharts-legend-series[data\\:collapsedIndex="${i}"] .apexcharts-legend-marker {
    733                                     background-color: ${s.color} !important;
    734                                     border-color: ${s.color} !important;
    735                                 }
    736                                 .apexcharts-series[rel="${i}"] .apexcharts-marker {
    737                                     fill: ${s.color} !important;
    738                                 }
    739                             `).join('\n')}
    740 
    741                             .apexcharts-area {
    742                                 opacity: 0.15 !important;
    743                             }
    744                             .apexcharts-series.apexcharts-active .apexcharts-area {
    745                                 opacity: 0.3 !important;
    746                             }
    747 
    748                             /* Custom tooltip styling */
    749                             .tmip-custom-tooltip {
    750                                 padding: 8px;
    751                                 background: #fff;
    752                                 border-radius: 4px;
    753                                 box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    754                             }
    755                             .tmip-custom-tooltip .tooltip-series {
    756                                 display: flex;
    757                                 align-items: center;
    758                                 margin: 4px 0;
    759                                 font-size: 12px;
    760                             }
    761                             .tmip-custom-tooltip .tooltip-marker {
    762                                 width: 8px;
    763                                 height: 8px;
    764                                 border-radius: 50%;
    765                                 margin-right: 6px;
    766                                 display: inline-block;
    767                             }
    768                             .tmip-custom-tooltip .series-name {
    769                                 margin-right: 6px;
    770                             }
    771                             .tmip-custom-tooltip .series-value {
    772                                 font-weight: 600;
    773                             }
    774 
    775                             /* Ensure markers are circular */
    776                             .apexcharts-marker {
    777                                 border-radius: 50% !important;
    778                             }
    779                         `)
    780                         .appendTo('head');
    781 
    782 
    783 
    784                         var chart = new ApexCharts(document.querySelector("#tmip-daily-chart"), options);
    785                         chart.render();
    786                     }
    787                 });
    788             });
     709                legend: {
     710                    position: 'bottom',
     711                    horizontalAlign: 'center',
     712                    onItemClick: {
     713                        toggleDataSeries: true
     714                    },
     715                    onItemHover: {
     716                        highlightDataSeries: true
     717                    },
     718                    markers: {
     719                        width: 8,
     720                        height: 8,
     721                        strokeWidth: 0,
     722                        strokeColor: '#fff',
     723                        radius: 12,
     724                        offsetX: 0,
     725                        offsetY: 0,
     726                        shape: 'circle',
     727                        fillColors: chartColors
     728                    },
     729                    showForSingleSeries: true
     730                },
     731                grid: {
     732                    borderColor: '#f1f1f1',
     733                    padding: {
     734                        bottom: 15
     735                    }
     736                }
     737            };
     738
     739            // Add CSS to fix the color mismatch and enhance hover effects
     740            $('<style>').text(`
     741                /* Fix the color mismatch by shifting colors backward */
     742                ${seriesConfig.map((s, i) => `
     743                    .apexcharts-series[rel="${i}"] {
     744                        stroke: ${shiftedColors[i]} !important;
     745                    }
     746                    .apexcharts-series[rel="${i}"] path.apexcharts-line {
     747                        stroke: ${shiftedColors[i]} !important;
     748                    }
     749                    .apexcharts-series[rel="${i}"] path.apexcharts-area {
     750                        fill: ${shiftedColors[i]} !important;
     751                    }
     752                    .apexcharts-series[rel="${i}"] .apexcharts-marker {
     753                        fill: ${shiftedColors[i]} !important;
     754                    }
     755                `).join('\n')}
     756
     757                /* Ensure legend markers match the legend colors */
     758                ${seriesConfig.map((s, i) => `
     759                    .apexcharts-legend-series[data\\:collapsedIndex="${i}"] .apexcharts-legend-marker {
     760                        background-color: ${chartColors[i]} !important;
     761                        border-color: ${chartColors[i]} !important;
     762                    }
     763                `).join('\n')}
     764
     765/* Default opacity for all series areas */
     766.apexcharts-area {
     767    opacity: 0.15 !important;
     768    transition: opacity 0.2s ease !important;
     769}
     770
     771/* When hovering over chart, reduce opacity of all series */
     772.apexcharts-canvas:hover .apexcharts-area {
     773    opacity: 0.04 !important;
     774}
     775
     776/* Active series gets higher opacity */
     777.apexcharts-series.apexcharts-active .apexcharts-area {
     778    opacity: 0.75 !important;
     779}
     780
     781/* Non-active series get lower opacity when any series is active */
     782.apexcharts-canvas.apexcharts-series-highlighted .apexcharts-series:not(.apexcharts-active) .apexcharts-area {
     783    opacity: 0.14 !important;
     784}
     785
     786/* Improve hover transitions */
     787.apexcharts-series {
     788    transition: opacity 0.2s ease !important;
     789}
     790
     791/* Force opacity on inactive series */
     792.apexcharts-legend-series:hover + .apexcharts-plot-series .apexcharts-series:not(.apexcharts-active) .apexcharts-area {
     793    opacity: 0.14 !important;
     794}
     795
     796
     797            `).appendTo('head');
     798
     799            var chart = new ApexCharts(document.querySelector("#tmip-daily-chart"), options);
     800            chart.render();
     801        }
     802    });
     803});
     804                   
     805                   
    789806           
    790807                   
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/includes/local_stats/assets/css/ls-css-admin.css

    r3315425 r3445036  
    392392
    393393.tmip-ip-requests {
    394     text-align: right;
     394    text-align: left;
    395395    white-space: nowrap;
    396     margin-right: 20px;
    397     padding-top: 2px;
    398 }
     396    margin-top: -6px;
     397    padding-top: 0;
     398    font-size: 1.1em;
     399    color: #9C0000;
     400    display: flex;
     401    align-items: center;
     402    gap: 5px;
     403}
     404
     405.tmip-ip-value {
     406    position: relative;
     407    font-family: monospace;
     408    font-size: 14px;
     409    color: #333;
     410    white-space: nowrap;
     411    overflow: hidden;
     412    text-overflow: ellipsis;
     413    max-width: 100%;
     414    display: inline-block;
     415    cursor: help;
     416}
     417.tmip-ip-value[data-ip]:hover::after {
     418    content: attr(data-ip);
     419    position: absolute;
     420    top: 100%;
     421    left: 0;
     422    background: #333;
     423    color: #fff;
     424    padding: 5px;
     425    border-radius: 3px;
     426    z-index: 1;
     427    white-space: nowrap;
     428}
     429
     430.tmip-bot-indicator {
     431    display: inline-flex;
     432    align-items: center;
     433    color: #66F;
     434    font-size: 1em;
     435    opacity: 1;
     436    user-select: none;
     437}
     438
     439.tmip-bot-indicator .dashicons {
     440    font-size: 14px;
     441    width: 14px;
     442    height: 14px;
     443    margin-right: 2px;
     444    color: #d63638; /* Bot indicator color */
     445}
     446
     447
    399448
    400449.tmip-ip-last-seen {
     
    469518}
    470519
    471 .tmip-ip-value {
    472     position: relative;
    473     font-family: monospace;
    474     font-size: 13px;
    475     color: #2271b1;
    476     white-space: nowrap;
    477     overflow: hidden;
    478     text-overflow: ellipsis;
    479     max-width: 100%;
    480     display: inline-block;
    481     cursor: help;
    482 }
    483 .tmip-ip-requests {
    484     text-align: left;
    485     white-space: nowrap;
    486     margin-top: 3px;
    487     padding-top: 0;
    488     font-size: 0.9em;
    489     color: #2271b1;
    490     display: flex;
    491     align-items: center;
    492     gap: 5px;
    493 }
    494 
    495 .tmip-ip-value[data-ip]:hover::after {
    496     content: attr(data-ip);
    497     position: absolute;
    498     top: 100%;
    499     left: 0;
    500     background: #333;
    501     color: #fff;
    502     padding: 5px;
    503     border-radius: 3px;
    504     z-index: 1;
    505     white-space: nowrap;
    506 }
    507 
    508 .tmip-bot-indicator {
    509     display: inline-flex;
    510     align-items: center;
    511     color: #66F;
    512     font-size: 1em;
    513     opacity: 1;
    514     user-select: none;
    515 }
    516 
    517 .tmip-bot-indicator .dashicons {
    518     font-size: 14px;
    519     width: 14px;
    520     height: 14px;
    521     margin-right: 2px;
    522     color: #d63638; /* Bot indicator color */
    523 }
    524 
    525520.tmip-active-ips-list li.is-bot {
    526521    background-color: rgba(255, 209, 209, 0.70);
     
    570565}
    571566.apexcharts-series path {
    572     stroke-width: 3px !important;
     567    /*stroke-width: 3px !important;*/
    573568}
    574569.apexcharts-series[seriesName="Posts"] {
    575     stroke: #008FFB !important;
     570    /*stroke: #008FFB !important;*/
    576571}
    577572.apexcharts-series[seriesName="Pages"] {
    578     stroke: #00E396 !important;
     573   /* stroke: #00E396 !important;*/
    579574}
    580575.apexcharts-series[seriesName="Custom Post Types"] {
    581     stroke: #FEB019 !important;
     576    /*stroke: #FEB019 !important;*/
    582577}
    583578.apexcharts-area-series .apexcharts-series-markers-wrap {
     
    585580}
    586581.apexcharts-series .apexcharts-marker {
    587     stroke-width: 2px;
     582    /*stroke-width: 2px;*/
     583    stroke: #666 !important; /* Ensure SVG stroke is also black */
    588584}
    589585.apexcharts-legend-series:not(.apexcharts-inactive-legend) .apexcharts-legend-marker {
     
    635631    margin-left: 10px;
    636632}
     633
     634
     635/*
     636    CHART STYLING
     637*/
     638/* Enhanced tooltip styling */
     639.tmip-custom-tooltip {
     640    padding: 12px;
     641    border-radius: 6px;
     642    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
     643    background: #fff;
     644    border: 1px solid rgba(0, 0, 0, 0.1);
     645    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
     646}
     647
     648.tmip-tooltip-series {
     649    display: flex;
     650    align-items: center;
     651    margin-bottom: 6px;
     652    padding: 3px 0;
     653    margin-bottom: 2px !important;
     654    padding: 1px 0 !important;
     655}
     656
     657.tmip-tooltip-marker {
     658    display: inline-block;
     659    width: 10px;
     660    height: 10px;
     661    border-radius: 50%;
     662    margin-right: 8px;
     663}
     664
     665.tmip-series-name {
     666    font-weight: 600;
     667    margin-right: 6px;
     668}
     669
     670.tmip-series-value {
     671    font-weight: normal;
     672}
    637673.tmip-chart-settings {
    638674    margin-bottom: 20px;
     
    664700    color: #646970;
    665701}
     702
     703
    666704.tmip-columns-main-settings {
    667705    margin-bottom: 15px;
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/includes/local_stats/ls-class.php

    r3309809 r3445036  
    457457   
    458458    private function define_constants() {
    459         define('TMIP_LOCAL_STATS_VERSION', $this->version);
     459        define('TMIP_LOCAL_STATS_VERSION', defined('TMIP_VERSION') ? TMIP_VERSION : LS_STATS_VERSION);
    460460        define('TMIP_LOCAL_STATS_DB_PREFIX', $this->db_prefix);
    461461        define('TMIP_LOCAL_STATS_PATH', plugin_dir_path(__FILE__));
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/includes/local_stats/ls-config.php

    r3315425 r3445036  
    1313defined('ABSPATH') || exit;
    1414
     15// JS debug is enabled in ls-js-admin.js
    1516define('TMIP_UF_DEBUG', false); // Enable debug states in wp-config.php: define( 'WP_DEBUG', true ); and define('WP_DEBUG_LOG', true );
    16 // JS debug is enabled in ls-js-admin.js
    17 
    1817
    1918// Add debug logging function
     
    3231    private static $instance;
    3332   
     33    // Versioning
    3434    const MIN_PHP_VERSION = '7.4.0';
    35    
     35    const LS_STATS_VERSION = '1.0.0'; // 052425122331 Define TMIP_VERSION to override
     36   
    3637    // Database configuration
    3738    const DB_PREFIX = 'tmip_lc_';
  • tracemyip-visitor-analytics-ip-tracking-control/trunk/readme.txt

    r3315425 r3445036  
    33Tags: visitor tracking, ip tracker, visitor stats, website analytics, statistics, stats, trace my ip, post views counter, page views tracker, email alerts, hits counter, ip blocker, visitor analytics
    44Requires at least: 2.0.4
    5 Tested up to: 6.8
     5Tested up to: 6.9
    66Requires PHP: 7.2
    7 Stable tag: 2.71
     7Stable tag: 2.72
    88License: GPLv2 (or later)
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    233233== Changelog ==
    234234
     235= Version 2.72  =
     236- Verify WordPress 6.9 full compatibility
     237- Corrected versioning updates
     238- Improved the hits stats charts series and tooltip graphics
     239- Improved the hits stats charts highlighting for better visual differention between the series
     240- Added new social platform tracking definitions
     241- Added new social bookmarking tracking definitions
     242
    235243= Version 2.71 =
    236244- Improved responsive layout for recent IP section
Note: See TracChangeset for help on using the changeset viewer.