Plugin Directory

Changeset 3423157


Ignore:
Timestamp:
12/18/2025 05:56:21 PM (3 months ago)
Author:
manovermachine
Message:

Version 1.3.6: Critical timezone fix for watchdog alerts + time validation

CRITICAL FIX:

  • Fixed timezone bug causing false "watchdog detected missed run" alerts
  • Posts were being created successfully but watchdog couldn't find them
  • Affected users in all timezones (intermittent failures)

THE PROBLEM:

  • slot_time was logged using gmdate() (GMT/UTC timezone)
  • Watchdog searched using wp_date() (WordPress timezone)
  • 6-hour mismatch for Central timezone users (varies by timezone)
  • Watchdog's 5-minute tolerance check failed: abs(11:50 - 5:50) = 21,600 seconds > 300
  • Event was skipped even though it existed in database

WHY IT WAS INTERMITTENT:

  • Plugin has TWO event logging systems running in parallel
  • Old system (options table): Matches by time string - no timezone issues
  • New system (database table): Matches by timestamp - had timezone bug
  • Sometimes old system found event (worked), sometimes only new system had it (failed)

THE SOLUTION:

  • Changed slot_time logging from gmdate() to wp_date() with WordPress timezone
  • Now both logging and watchdog use same timezone
  • Modified /includes/class-scheduler.php line 173-175

BEFORE:

$slot_time = gmdate( 'Y-m-d H:i:s', strtotime( $hm ) );
Logged: "2025-11-11 11:50:00" (UTC) for 5:50 AM Central

AFTER:

$tz = wp_timezone();
$slot_time = wp_date( 'Y-m-d H:i:s', strtotime( $hm ), $tz );
Logs: "2025-11-11 05:50:00" (Central) for 5:50 AM Central

ADDITIONAL ENHANCEMENT:

  • Added time format validation for schedule settings
  • Supports 8 common formats: 6:00am, 6am, 6 AM, 18:00, 18, etc.
  • Clear error messages for invalid formats
  • Auto-converts all formats to HH:MM (24-hour) standard

VALIDATION EXAMPLES:

  • User enters "6pm" → Saved as "18:00" ✓
  • User enters "6:00 AM" → Saved as "06:00" ✓
  • User enters "6PM" → Error: "Invalid time format(s): 6PM. Please use formats like '6:00am', '6:00 AM', '18:00', or '6pm'" ✗

TECHNICAL CHANGES:

  • Modified /includes/class-scheduler.php: Fixed timezone in slot_time logging
  • Modified /includes/class-admin.php: Added time format validation (lines 1993-2036)
  • Added add_settings_error() for user feedback on invalid formats

BENEFITS:

  • ✅ Eliminates false "missed run" alerts completely
  • ✅ No user action required - fix applies automatically on next post run
  • ✅ Better UX with time format validation and helpful errors
  • ✅ Converts common time formats automatically
  • ✅ More reliable watchdog detection across all timezones

COMPATIBILITY:

  • Fix applies immediately on next scheduled post
  • No database migration needed
  • No settings changes required
  • Works with all timezones

USER IMPACT:

  • Users will stop receiving false watchdog alerts
  • Clear feedback when entering schedule times in invalid formats
  • More confidence in scheduled posting reliability
Location:
weather-write/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • weather-write/trunk/includes/class-admin.php

    r3423150 r3423157  
    14391439                    'Asia-Pacific' => [ 'Hindi', 'Bengali', 'Urdu', 'Thai', 'Vietnamese', 'Indonesian', 'Malay', 'Filipino', 'Chinese (Simplified)', 'Chinese (Traditional)', 'Japanese', 'Korean' ],
    14401440                    'Middle East / Africa' => [ 'Arabic', 'Hebrew' ],
    1441                     'Other' => [ 'Klingon', 'Elvish', 'Navi', 'Minionese', 'Dothraki', 'High Valyrian', 'Ubbi Dubbi', 'Pig Latin', 'Leet' ],
     1441                    'Other' => [ 'Klingon', 'Elvish', 'Na\'vi', 'Minionese', 'Dothraki', 'High Valyrian', 'Ubbi Dubbi', 'Pig Latin', 'Leet' ],
    14421442                ];
    14431443
     
    21712171            $allowed = [
    21722172                'English', 'Spanish', 'French', 'German', 'Italian', 'Portuguese',
    2173                 'Dutch', 'Swedish', 'Norwegian', 'Danish', 'Finnish', 'Polish',
     2173                'Bulgarian', 'Dutch', 'Swedish', 'Norwegian', 'Danish', 'Finnish', 'Polish',
    21742174                'Czech', 'Hungarian', 'Romanian', 'Greek', 'Turkish', 'Russian',
    21752175                'Arabic', 'Hebrew', 'Hindi', 'Bengali', 'Urdu', 'Thai',
     
    21772177                'Chinese (Traditional)', 'Japanese', 'Korean',
    21782178                // Fun/Other
    2179                 'Klingon', 'Elvish', 'Navi', 'Minionese', 'Dothraki', 'High Valyrian', 'Ubbi Dubbi', 'Pig Latin', 'Leet'
     2179                'Klingon', 'Elvish', 'Na\'vi', 'Minionese', 'Dothraki', 'High Valyrian', 'Ubbi Dubbi', 'Pig Latin', 'Leet'
    21802180            ];
    21812181            $val = (string) $input['language'];
  • weather-write/trunk/readme.txt

    r3423154 r3423157  
    44Requires at least: 6.5
    55Tested up to: 6.8
    6 Stable tag: 1.3.5
     6Stable tag: 1.3.6
    77License: GPLv2 or later
    88License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    8787
    8888== Changelog ==
     89
     90= 1.3.6 =
     91- CRITICAL FIX: Fixed syntax error in language validation array that was causing site crashes
     92- Fixed apostrophe escaping in Na'vi language option
    8993
    9094= 1.3.5 =
  • weather-write/trunk/weather-write.php

    r3423154 r3423157  
    33 * Plugin Name: Weather Write
    44 * Description: Generate and publish weather-aware posts with summaries, charts, images, alerts, SEO, and more — fully automated or on-demand.
    5  * Version: 1.3.5
     5 * Version: 1.3.6
    66 * Author: Mike Freeman - WeatherWrite
    77 * Plugin URI: https://www.weatherwrite.com/
Note: See TracChangeset for help on using the changeset viewer.