Plugin Directory

Changeset 3763556


Ignore:
Timestamp:
10/24/2026 05:24:11 PM (8 hours ago)
Author:
nxtapps
Message:

Release 1.0.195: optional operational insights and database export compatibility

Location:
fast-backups
Files:
2 added
14 edited
1 copied

Legend:

Unmodified
Added
Removed
  • fast-backups/tags/1.0.195/README.md

    r3759857 r3763556  
    1414## Current Version
    1515
    16 1.0.194
     161.0.195
     17
     18## Operational statistics
     19
     20Fast Backups > Statistics displays local successful-operation counters. Optional daily reporting is off by default and requires explicit administrator consent. The reporting payload is allowlisted; it never includes archive contents, filenames, account emails or destination credentials. Reports can be deleted and expire after 90 inactive days. See https://wpbackup.dev/privacy-insights.html.
    1721
    1822## Google OAuth Redirect URI
  • fast-backups/tags/1.0.195/classes/Database.php

    r3759857 r3763556  
    239239
    240240                        fwrite( $fh, "SET NAMES utf8mb4;\n" );
    241                         fwrite( $fh, "SET SQL_MODE=\"NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION\";\n" );
     241                        // WordPress and common plugins retain legacy zero-date defaults. Strict
     242                        // zero-date modes would make their otherwise valid CREATE TABLE fail.
     243                        fwrite( $fh, "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n" );
    242244                        fwrite( $fh, "SET FOREIGN_KEY_CHECKS=0;\n\n" );
    243245
    … …  
    351353
    352354                        // Apply filters based on options
     355                        $col_sql_str = implode( ', ', array_map( 'fastwpbackups_sql_identifier', $columns ) );
    353356                        $db_options = isset( $options['dbOptions'] ) ? (array) $options['dbOptions'] : array();
    354357
    … …  
    404407
    405408                                foreach ( $rows as $row ) {
     409                                        // Reporting consent and installation credentials must never migrate to another site.
     410                                        if ( $table_name === $wpdb->options && isset( $row['option_name'] ) && in_array( $row['option_name'], array( 'fastwpbackups_reporting', 'fastwpbackups_reporting_last' ), true ) ) { continue; }
    406411                                        if ( ! is_array( $row ) ) {
    407412                                                continue;
  • fast-backups/tags/1.0.195/classes/Export.php

    r3604480 r3763556  
    494494                        // Get backup info
    495495                        $backup_size = filesize( $backup_file );
     496                        Insights::record( 'export', $backup_id );
     497                        Insights::record( 'delivery', $backup_id, 'local' );
    496498
    497499                        wp_send_json_success( array(
    … …  
    13021304                        delete_transient( 'fastwpbackups_export_' . $backup_id );
    13031305
     1306                        Insights::record( 'export', $backup_id, isset( $options['destination'] ) ? $options['destination'] : 'local' );
    13041307                        return array(
    13051308                                'backup_id'   => $backup_id,
  • fast-backups/tags/1.0.195/classes/Import.php

    r3759857 r3763556  
    21592159                        $this->assert_import_not_cancelled( $import_id );
    21602160                        $transaction->commit();
     2161                        Insights::record( ( $import_context['source'] ?? '' ) === 'server_backup' ? 'restore' : 'import', $import_id );
    21612162                        $retained_backup = $this->retain_imported_backup( $import_context, $manifest_data );
    21622163                        $retention_warning = is_wp_error( $retained_backup ) ? $retained_backup->get_error_message() : '';
  • fast-backups/tags/1.0.195/classes/Schedule.php

    r3653226 r3763556  
    16541654         */
    16551655        private function record_result( $destination, $status, $message, $backup_file = '' ) {
     1656                if ( $status === 'success' && $backup_file !== '' ) {
     1657                        Insights::record( 'delivery', $backup_file, $destination );
     1658                }
    16561659                $settings = $this->get_settings();
    16571660                $settings[ $destination ]['last_run']     = time();
  • fast-backups/tags/1.0.195/fast-wp-backups.php

    r3759864 r3763556  
    66 * Author:          NxtLabs
    77 * Author URI:      https://nxtlabs.com
    8  * Version:         1.0.194
     8 * Version:         1.0.195
    99 * Requires PHP:    7.2
    1010 * Requires at least: 5.3
    … …  
    2323 * Define plugin constants
    2424 */
    25 define( 'FASTWPBACKUPS_VERSION', '1.0.194' );
     25define( 'FASTWPBACKUPS_VERSION', '1.0.195' );
    2626// phpcs:ignore PluginCheck.CodeAnalysis.Offloading.OffloadedContent -- This is a Google OAuth client ID, not an offloaded plugin asset.
    2727define( 'FASTWPBACKUPS_GOOGLE_CLIENT_ID', '714894714831-jb3ggd421r63rmfgeu7m125vrkkaeeem.apps.googleusercontent.com' );
    … …  
    6060require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Schedule.php';
    6161require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Admin.php';
     62require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Insights.php';
     63FastWPBackups\Insights::init();
    6264
    6365/**
    … …  
    9193 */
    9294register_deactivation_hook( __FILE__, array( 'FastWPBackups\Core', 'deactivate' ) );
     95register_deactivation_hook( __FILE__, function () { wp_clear_scheduled_hook( FastWPBackups\Insights::CRON ); } );
    9396
    9497/**
    … …  
    122125        delete_option( 'fastwpbackups_google_tokens' );
    123126        delete_option( 'fastwpbackups_google_account' );
     127        delete_option( 'fastwpbackups_reporting' );
     128        delete_option( 'fastwpbackups_reporting_last' );
     129        delete_option( 'fastwpbackups_insights_schema' );
     130        wp_clear_scheduled_hook( 'fastwpbackups_report_insights' );
     131        global $wpdb;
     132        $insights_table = $wpdb->prefix . 'fastwpbackups_events';
     133        $wpdb->query( 'DROP TABLE IF EXISTS ' . fastwpbackups_sql_identifier( $insights_table ) );
    124134        delete_option( 'fastwpbackups_deferred_option_guard' );
    125135        delete_option( 'fastwpbackups_storage_migrated_' . $storage_slug );
  • fast-backups/tags/1.0.195/readme.txt

    r3759864 r3763556  
    55Tested up to: 7.1
    66Requires PHP: 7.2
    7 Stable tag: 1.0.194
     7Stable tag: 1.0.195
    88License: GPL v2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    165165== External Services ==
    166166
     167= Optional operational reporting to WPBackup.dev =
     168
     169Reporting is disabled by default. An administrator can explicitly enable it under Fast Backups > Statistics. Once enabled, a daily HTTPS request to https://wpbackup.dev/admin/report.php sends the site URL, plugin version, available local backup count, successful export/import/restore counts, destination schedule status, successful delivery counts and Google Drive connection status. A random installation identifier and reporting key authenticate updates. No backup contents, filenames, account emails, FTP credentials or Google tokens are sent.
     170
     171Local counters remain available without reporting. Reporting can be stopped at any time; the Statistics page also offers remote deletion. Reports expire after 90 days without an update. Statistics are self-reported and may reset following database restoration. WPBackup.dev uses these optional reports for product operations and usage insights, not advertising.
     172
     173* Service: https://wpbackup.dev/
     174* Reporting privacy: https://wpbackup.dev/privacy-insights.html
     175* Terms: https://wpbackup.dev/terms
     176
    167177Fast Backups can connect to Google Drive when an administrator chooses Google Drive as a backup destination and authorizes a Google account.
    168178
    … …  
    191201== Privacy ==
    192202
    193 Fast Backups does not send site data to an external service when you create, download, restore, or schedule a local backup.
     203Local backup operations do not require external reporting. Optional daily operational reporting is off by default and only runs after explicit administrator consent in Fast Backups > Statistics. See the reporting service disclosure above.
    194204
    195205If you configure an external destination, backup archives can contain the complete WordPress database and files, including personal or confidential information stored by the site. Make sure you are authorized to copy that data and that the destination meets your security, privacy, and retention requirements.
    … …  
    203213
    204214== Changelog ==
     215
     216= 1.0.195 - October 2026 =
     217* Added local successful-operation statistics with idempotent completion counting.
     218* Added optional, off-by-default daily reporting with explicit consent, opt-out and remote deletion.
     219* Excluded reporting identity and consent from exported database archives.
     220* Corrected database dump column lists and compatibility with legacy zero-date defaults.
    205221
    206222= 1.0.194 - October 2026 =
    … …  
    261277== Upgrade Notice ==
    262278
     279= 1.0.195 =
     280
     281Adds local operation statistics and optional, off-by-default reporting with explicit consent and remote deletion. Corrects database dump compatibility. No reporting is enabled automatically.
     282
    263283= 1.0.194 =
    264284
  • fast-backups/trunk/README.md

    r3759857 r3763556  
    1414## Current Version
    1515
    16 1.0.194
     161.0.195
     17
     18## Operational statistics
     19
     20Fast Backups > Statistics displays local successful-operation counters. Optional daily reporting is off by default and requires explicit administrator consent. The reporting payload is allowlisted; it never includes archive contents, filenames, account emails or destination credentials. Reports can be deleted and expire after 90 inactive days. See https://wpbackup.dev/privacy-insights.html.
    1721
    1822## Google OAuth Redirect URI
  • fast-backups/trunk/classes/Database.php

    r3759857 r3763556  
    239239
    240240                        fwrite( $fh, "SET NAMES utf8mb4;\n" );
    241                         fwrite( $fh, "SET SQL_MODE=\"NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION\";\n" );
     241                        // WordPress and common plugins retain legacy zero-date defaults. Strict
     242                        // zero-date modes would make their otherwise valid CREATE TABLE fail.
     243                        fwrite( $fh, "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n" );
    242244                        fwrite( $fh, "SET FOREIGN_KEY_CHECKS=0;\n\n" );
    243245
    … …  
    351353
    352354                        // Apply filters based on options
     355                        $col_sql_str = implode( ', ', array_map( 'fastwpbackups_sql_identifier', $columns ) );
    353356                        $db_options = isset( $options['dbOptions'] ) ? (array) $options['dbOptions'] : array();
    354357
    … …  
    404407
    405408                                foreach ( $rows as $row ) {
     409                                        // Reporting consent and installation credentials must never migrate to another site.
     410                                        if ( $table_name === $wpdb->options && isset( $row['option_name'] ) && in_array( $row['option_name'], array( 'fastwpbackups_reporting', 'fastwpbackups_reporting_last' ), true ) ) { continue; }
    406411                                        if ( ! is_array( $row ) ) {
    407412                                                continue;
  • fast-backups/trunk/classes/Export.php

    r3604480 r3763556  
    494494                        // Get backup info
    495495                        $backup_size = filesize( $backup_file );
     496                        Insights::record( 'export', $backup_id );
     497                        Insights::record( 'delivery', $backup_id, 'local' );
    496498
    497499                        wp_send_json_success( array(
    … …  
    13021304                        delete_transient( 'fastwpbackups_export_' . $backup_id );
    13031305
     1306                        Insights::record( 'export', $backup_id, isset( $options['destination'] ) ? $options['destination'] : 'local' );
    13041307                        return array(
    13051308                                'backup_id'   => $backup_id,
  • fast-backups/trunk/classes/Import.php

    r3759857 r3763556  
    21592159                        $this->assert_import_not_cancelled( $import_id );
    21602160                        $transaction->commit();
     2161                        Insights::record( ( $import_context['source'] ?? '' ) === 'server_backup' ? 'restore' : 'import', $import_id );
    21612162                        $retained_backup = $this->retain_imported_backup( $import_context, $manifest_data );
    21622163                        $retention_warning = is_wp_error( $retained_backup ) ? $retained_backup->get_error_message() : '';
  • fast-backups/trunk/classes/Schedule.php

    r3653226 r3763556  
    16541654         */
    16551655        private function record_result( $destination, $status, $message, $backup_file = '' ) {
     1656                if ( $status === 'success' && $backup_file !== '' ) {
     1657                        Insights::record( 'delivery', $backup_file, $destination );
     1658                }
    16561659                $settings = $this->get_settings();
    16571660                $settings[ $destination ]['last_run']     = time();
  • fast-backups/trunk/fast-wp-backups.php

    r3759864 r3763556  
    66 * Author:          NxtLabs
    77 * Author URI:      https://nxtlabs.com
    8  * Version:         1.0.194
     8 * Version:         1.0.195
    99 * Requires PHP:    7.2
    1010 * Requires at least: 5.3
    … …  
    2323 * Define plugin constants
    2424 */
    25 define( 'FASTWPBACKUPS_VERSION', '1.0.194' );
     25define( 'FASTWPBACKUPS_VERSION', '1.0.195' );
    2626// phpcs:ignore PluginCheck.CodeAnalysis.Offloading.OffloadedContent -- This is a Google OAuth client ID, not an offloaded plugin asset.
    2727define( 'FASTWPBACKUPS_GOOGLE_CLIENT_ID', '714894714831-jb3ggd421r63rmfgeu7m125vrkkaeeem.apps.googleusercontent.com' );
    … …  
    6060require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Schedule.php';
    6161require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Admin.php';
     62require_once FASTWPBACKUPS_PLUGIN_DIR . 'classes/Insights.php';
     63FastWPBackups\Insights::init();
    6264
    6365/**
    … …  
    9193 */
    9294register_deactivation_hook( __FILE__, array( 'FastWPBackups\Core', 'deactivate' ) );
     95register_deactivation_hook( __FILE__, function () { wp_clear_scheduled_hook( FastWPBackups\Insights::CRON ); } );
    9396
    9497/**
    … …  
    122125        delete_option( 'fastwpbackups_google_tokens' );
    123126        delete_option( 'fastwpbackups_google_account' );
     127        delete_option( 'fastwpbackups_reporting' );
     128        delete_option( 'fastwpbackups_reporting_last' );
     129        delete_option( 'fastwpbackups_insights_schema' );
     130        wp_clear_scheduled_hook( 'fastwpbackups_report_insights' );
     131        global $wpdb;
     132        $insights_table = $wpdb->prefix . 'fastwpbackups_events';
     133        $wpdb->query( 'DROP TABLE IF EXISTS ' . fastwpbackups_sql_identifier( $insights_table ) );
    124134        delete_option( 'fastwpbackups_deferred_option_guard' );
    125135        delete_option( 'fastwpbackups_storage_migrated_' . $storage_slug );
  • fast-backups/trunk/readme.txt

    r3759864 r3763556  
    55Tested up to: 7.1
    66Requires PHP: 7.2
    7 Stable tag: 1.0.194
     7Stable tag: 1.0.195
    88License: GPL v2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    165165== External Services ==
    166166
     167= Optional operational reporting to WPBackup.dev =
     168
     169Reporting is disabled by default. An administrator can explicitly enable it under Fast Backups > Statistics. Once enabled, a daily HTTPS request to https://wpbackup.dev/admin/report.php sends the site URL, plugin version, available local backup count, successful export/import/restore counts, destination schedule status, successful delivery counts and Google Drive connection status. A random installation identifier and reporting key authenticate updates. No backup contents, filenames, account emails, FTP credentials or Google tokens are sent.
     170
     171Local counters remain available without reporting. Reporting can be stopped at any time; the Statistics page also offers remote deletion. Reports expire after 90 days without an update. Statistics are self-reported and may reset following database restoration. WPBackup.dev uses these optional reports for product operations and usage insights, not advertising.
     172
     173* Service: https://wpbackup.dev/
     174* Reporting privacy: https://wpbackup.dev/privacy-insights.html
     175* Terms: https://wpbackup.dev/terms
     176
    167177Fast Backups can connect to Google Drive when an administrator chooses Google Drive as a backup destination and authorizes a Google account.
    168178
    … …  
    191201== Privacy ==
    192202
    193 Fast Backups does not send site data to an external service when you create, download, restore, or schedule a local backup.
     203Local backup operations do not require external reporting. Optional daily operational reporting is off by default and only runs after explicit administrator consent in Fast Backups > Statistics. See the reporting service disclosure above.
    194204
    195205If you configure an external destination, backup archives can contain the complete WordPress database and files, including personal or confidential information stored by the site. Make sure you are authorized to copy that data and that the destination meets your security, privacy, and retention requirements.
    … …  
    203213
    204214== Changelog ==
     215
     216= 1.0.195 - October 2026 =
     217* Added local successful-operation statistics with idempotent completion counting.
     218* Added optional, off-by-default daily reporting with explicit consent, opt-out and remote deletion.
     219* Excluded reporting identity and consent from exported database archives.
     220* Corrected database dump column lists and compatibility with legacy zero-date defaults.
    205221
    206222= 1.0.194 - October 2026 =
    … …  
    261277== Upgrade Notice ==
    262278
     279= 1.0.195 =
     280
     281Adds local operation statistics and optional, off-by-default reporting with explicit consent and remote deletion. Corrects database dump compatibility. No reporting is enabled automatically.
     282
    263283= 1.0.194 =
    264284
Note: See TracChangeset for help on using the changeset viewer.