First Class TrackActive plugin release
First Class Track Change Log
V1.0-B01m - 2026-09-01 - The Orders screen now treats Show only Unshipped orders as a true fulfillment filter: live eBay cancellations are persisted and omitted immediately instead of remaining visible until a later report refresh. - Persisted eBay/FJ cancellation states are excluded directly by the unshipped SQL query. - Adds an authenticated server-to-server FJ/WooCommerce status client so FCT no longer assumes that the FJ WordPress database is local or reachable on the same host. - FCT Settings now includes the FJ Status Endpoint and FJ Status API Token; the default endpoint points to fahmah.com and the token is copied from Fahmah Website Mods -> WooCommerce -> FCT Status API. - Visible FJ source order IDs are batch-checked through the remote endpoint and rendered as FJ CONFIRMED: SHIPPED / UNSHIPPED / CANCELLED or FJ STATUS UNAVAILABLE. - Remote FJ shipped timestamps reconcile stale local shipped_on_date values without replacing an existing richer label/tracking status; remote cancellations persist as FJ: Cancelled. - A live FJ/eBay shipped or cancelled result is removed immediately from the Unshipped-only view on the same repaint, not merely on the next query. - Existing eBay Trading API live-state checks, FCT IMb authority, label workflow, and Platform Listings imports are preserved. V1.0-B01l - 2026-08-26 - Repaired stale ....Processing messages after successful bulk shipping-label generation on the eBay Order Database screen. - Shipping-label row targets are now carried through the AJAX/PDF completion flow as plain eBay order numbers instead of serialized jQuery objects. - Server-generated completion JavaScript resolves each visible row through .print-shipping-label-message[data-order-number], then replaces Processing with the final print result. - The multi-label-position dialog, cancellation, direct PDF path, and error path all use the same stable row-target helper. - Legacy selector arrays remain supported for non-order-table label callers. - Preserves B01k Check All and B01j live eBay shipping-status behavior. V1.0-B01k - 2026-08-26 - Repaired the eBay Order Database master Check All checkbox. - Order-row checkbox names are DOM-safe hashed identifiers, so bulk selection now uses the stable data-testid=order-checkbox attribute instead of the obsolete grid-table-bulk-checkbox_order name prefix. - Bulk Print Checked Shipping Label(s) now uses the same stable order-checkbox selector. - Individual order checkbox changes synchronize the master checkbox, including indeterminate state for partial selections. - Disabled/cancelled order checkboxes remain excluded from bulk selection. V1.0-B01j - 2026-08-26 - Treats a locally-unshipped eBay order as provisional when it is displayed in the FCT Orders screen. - Collects visible locally-unshipped eBay order IDs and refreshes them through batched Trading API GetOrders calls. - Caches each eBay shipping result for five minutes and failed checks briefly to prevent repeated API hammering during AJAX repaints. - Displays eBay CONFIRMED: SHIPPED / UNSHIPPED / CANCELLED, plus the last check time, in the Shipped On column. - When eBay confirms shipment, reconciles an empty local shipped_on_date while preserving richer FCT order_shipping_status values such as Shipping Label Printed. - Does not copy eBay tracking into the FCT tracking_number field, protecting FCT IMb authority. - Repairs getOrdersMoney() so the stored order_shipping_status is no longer replaced by a hard-coded zero. V1.0-B01i - 2026-08-26 - Added authenticated read-only Platform Listings label-status endpoint. - Reuses the existing FCT Platform Import API token and User ID. - Resolves FJ/eBay source orders to the authoritative FCT shipment and reports label_pending or label_generated. - label_generated returns IMb, order_shipping_label_printed UTC timestamp, FCT shipment number, combined source-order IDs, and tracking-report URL. - Added legacy direct-eBay lookup fallback for pre-map orders. - Blocks false status reporting when shipment rows contain inconsistent tracking numbers. V1.0-B01h - 2026-08-26 - Enforces the $25 FCT First-Class ceiling against the entire physical shipment when a same-destination import would extend an existing open combined shipment. - Rejects a new import transaction before rows are written when the resulting combined shipment total would exceed $25.00. - Print-time Platform Listings safety guard now rechecks the authoritative aggregate FCT order total, protecting B01f-era staged orders and combined shipments. - Retains B01g address, country, ZIP, and shipping-service guards. V1.0-B01g - 2026-08-26 - Harden Platform Listings -> FCT import eligibility before any order row is created. - Reject incomplete domestic fulfillment addresses, missing state, invalid IMb ZIP routing, unsupported countries, and Ground Advantage/Priority/Express services. - Enforce the $25 FCT First-Class ceiling on imported source orders. - Preserve FJ buyer identity separately from ship-to recipient identity. - Canonicalize supported U.S. country aliases for imported destination grouping. - Add a print-time safety guard for Platform Listings API imports so unsafe B01f-era staged orders cannot create a new IMb. - Carry ship-to country into the label-generation destination data. V1.0-B01f - 2026-08-25 - Eliminated global PHP symbol collisions with Platform Listings, including search_orders, helper functions, eBay compatibility wrappers, MakeFont functions, and TTFParser. V1.0-B01e - Fixed fatal "Cannot declare class FPDF" when another WordPress/WooCommerce plugin has already loaded a global FPDF class. - Renamed FCT bundled FPDF base class to FCT_FPDF. - Renamed shipping-label PDF subclass to FCT_Label_PDF and packing-slip subclass to FCT_Packing_PDF. - Isolated the bundled FCT font-path override from the global FPDF_FONTPATH constant. - No changes to the B01d Platform Listings API/import or shipment-combining behavior. V1.0-B01d - Added an authenticated REST batch-import endpoint for Platform Listings Tool. - Imports FJ and eBay source orders into the normal FCT managed-order table so they use the existing label/IMb workflow. - Groups orders into one shipment only when normalized recipient name and shipping address match; recipient name is part of the grouping key. - Uppercases imported ship-to label data and normalizes harmless address formatting for grouping. - Preserves platform + source order ID in a dedicated import-mapping table so retries are idempotent and do not duplicate an order. - Reuses an existing same-destination shipment only while it is still unshipped and has no tracking; shipped/tracked history is never merged into a new shipment. - Combined shipments use one comma-separated FCT Order ID list and one label/IMb; the order list wraps on the printed label. - Expanded FCT order/IMb order-ID fields for combined identifiers. - FCT Settings now exposes the REST endpoint, FCT User ID, and a per-user API token for Platform Listings. - The normal orders screen now includes API-imported FJ and mixed-platform orders rather than filtering to eBay only. V1.0-B01c - Fixes manual/FJ address-form label generation when an external WooCommerce Order-ID is entered. - An Order-ID on the manual address form is now treated as an external shipment reference unless a real matching FCT order row exists. - Prevents external FJ order IDs from entering the eBay per-order lock/snapshot/compare-and-set path that caused "Could not reload the locked order state" failures. - Preserves all B01 tracking-safety behavior for actual FCT-managed eBay orders, including named locks, locked-state validation, and atomic tracking writes. - External/manual shipments still store their Order-ID, destination, buyer email, reference, generated IMb, label-print time, and outbound tracking event in the normal FCT IMb master/event records. V1.0-B01b - Restores the Tracking screen default order to newest label-print date first. - Uses date_label_printed descending with record_id descending as the deterministic tie-breaker. - Applies the same ordering to normal pagination, search results, and tracking-profile master records. - Keeps date_last_used available for latest-USPS-activity data without allowing scans to reshuffle the default tracking list. V1.0-B01a - Fixes activation failure when historical and new IMb tables use different utf8mb4 collations. - Aligns the allocation-lock table to the historical IMb master collation when possible. - Uses binary-safe IMb coverage joins so collation differences cannot break verification. - Converts migration exceptions into a controlled activation error with trace-log details instead of an uncaught PHP fatal. V1.0-B01 - Rebuilt new IMb generation around an atomic database allocation-lock table with unique Mailer-ID/serial and full-IMb constraints. - Seeded the allocation-lock table from historical tracking records without deleting duplicate history; schema upgrades now fail closed unless the lock table, unique indexes, and historical coverage verify successfully. - Replaced check-then-insert allocation with finite insert-and-retry handling for duplicate-key collisions, explicit pool exhaustion, strict database-return checking, and cleanup on every failed reservation. - Added strict validation for Mailer ID, serial pool, ZIP routing length, complete IMb digit strings, BCMath/converter availability, and the required 65-bar F/A/D/T result. - Removed the invalid 42-bar fallback and corrected the GD barcode canvas width. - Added checked Imagick/GD writes, readable/nonempty file verification, UUID filenames, temporary-file output, and atomic rename for both barcode images and PDFs. - Added authoritative server-side order reclassification, per-order named locks, row-consistency checks, and atomic compare-and-set tracking writes so concurrent jobs cannot stomp an order's tracking number. - Kept standard/bulk printing unable to replace existing tracking; only the explicit single-order Reship New Shipping Label path may assign replacement tracking. - Delayed tracking, label metadata, credit deduction, and outbound-event finalization until the PDF is verified, with compensating rollback of tracking, metadata, IMb reservations, locks, and files after failures. - Serialized label-credit deductions per WordPress user and rechecked the locked balance before recording a charge. - Hardened IMb event storage and order-status updates so failed inserts, missing profiles, invalid email data, stale events, and mismatched order tracking stop or log safely. - Routed anomalous behavior to firstclasstrack.log with order ID, WordPress user ID/login, buyer username, and buyer first/last name whenever those values are available. - Production and staging installations using the same USPS Mailer ID must still use separate serial pools or a shared allocation database; one site cannot enforce uniqueness inside another site's independent database. V1.0-A32h - Added a consistent First Class Track version banner at the top of every plugin-presented front-end screen. - Added the same version banner to all First Class Track WordPress admin screens, including settings, credentials, eBay API credentials/callback, and trace-log viewer pages. - Reused the existing clickable version badge so the cumulative change log remains available directly from every screen. - Centralized screen detection through the plugin's active shortcode and admin-page registries instead of duplicating version markup in each renderer. - Removed the older home-page-only duplicate version badge. V1.0-A32g - Rebuilt eBay bulk shipping-label classification so the server reloads tracking and shipped status from the order database instead of trusting parallel browser arrays. - Fixed the mixed tracked/untracked bulk-selection bug that could slide tracking numbers onto unrelated orders. - Shipped orders with no tracking number are now skipped during ordinary Print Checked Shipping Label(s) processing. - Orders that already have tracking require confirmation and can only reprint their existing IMb; ordinary print actions cannot replace tracking. - Reship New Shipping Label is now an explicit single-order operation and the only workflow permitted to generate and save replacement tracking. - Added a second database-state validation immediately before PDF/IMb generation to block stale requests and tracking overwrites. - Disabled/cancelled order checkboxes are excluded from Check All and bulk printing. - Added trace entries for safety skips and every authorized new/reship tracking write. - Kept the print button disabled through the final PDF/IMb AJAX request, not merely the preparation request. V1.0-A32f - Replaced First Class Track's dependency on wp-content/debug.log with the dedicated wp-content/firstclasstrack.log trace file. - Routed all explicit plugin trace/error writes through a locked First Class Track trace writer. - Redirected PHP runtime/system logging after plugin initialization to the same firstclasstrack.log file. - Kept the existing viewer behavior and truncation controls, but changed its file path and visible filename to firstclasstrack.log. V1.0-A32e - Disabled the clicked Print Checked Shipping Label(s) button as soon as label processing starts. - Added a per-button in-progress guard so double-clicks and repeated clicks cannot launch overlapping label requests from the same button. - The button now displays Printing... and is restored after either AJAX success or failure. - Applied the protection to both the eBay orders table and spreadsheet-upload order table workflows. - Cache-busted the edited eBay orders JavaScript with the plugin version. V1.0-A32d - Tracking dashboard/admin view now tags short IMBs as (Zip5 Only) and ZIP+4 IMBs as (Zip5+4) for logged-in admins. - IMB label tagging is display-only and does not alter IMB generation, saved data, or USPS processing. - No-scan batch report now shows total pieces per batch day. - Days where every shipped piece remains unscanned are highlighted as Entire Batch Unscanned. - Partial no-scan days stay visible as Partial No-Scan Batch. V1.0-A32b - Fixed the no-scan batch report so Chester, NH label-origin events and synthetic Outbound Order events do not count as USPS scans. V1.0-A32a - Tightened the no-scan batch report to count only shipped orders with a real shipped_on_date. - Kept the report admin-only for logged-in administrators on the Tracking page. V1.0-A32 - Corrected the package version label to V1.0-A32. - Version consistency pass: activation now records the live plugin version constant instead of a stale hard-coded build label. - Preserved the admin-only Tracking page batch no-scan report. V1.0-A31m - Added a tracking report button for batch days with shipped pieces that never received a USPS scan. - Grouped the report by batch day and piece count. V1.0-A31l - Removed masking from the formatted GetUser view and raw GetUser dump. - Kept the formatted GetUser report in a tighter 2-column layout. - Reduced whitespace and tightened line spacing in the formatted GetUser admin report. V1.0-A31g - Expanded the eBay GetUser formatted admin snapshot so it walks the returned XML tree and displays substantially all non-empty fields in structured sections. - Preserved the raw GetUser diagnostic dump and XML trail in the modal so formatted and raw views stay available side by side. - Synchronized the First Class Track version labels for this rebuild so the packaged plugin naming matches the release. V1.0-A31f - GetUser formatted output now reflects the real XML payload with substantially more parsed account data. - Added richer structured sections for seller, address, feature, limits, and subscription data in the eBay admin snapshot modal. - Fixed the formatted snapshot summary mapping so the eye-candy view shows real values instead of half-empty cards.
Label Count Available: 25
Processing ...