Snapshot: MLS sync fixes, image refresh, plugin/theme updates

MLS plugin fixes from this session:
- Fix silent insert failures: location column NOT NULL was rejecting wpdb->insert calls,
  causing ~18k new properties since Dec 2025 to be lost. Inserts now build raw SQL
  with ST_PointFromText so the spatial column is populated atomically.
- Auto-refresh expired media URLs in MLS_Media_Handler::fetch_and_cache(), guarded by
  a property-level GET_LOCK so concurrent fetches share one API refresh.
- Normalize WP_Error to null in mls_get_property_image() so callers can rely on the
  documented string|null contract.
- Support comma-separated property_type filters in MLS_Query and MLS_Cluster so the
  homepage "View All Commercial" link (?property_type=Commercial+Sale,Land,Farm)
  actually filters correctly.
- Incremental sync now looks back 10 minutes past the latest modification timestamp
  as a safety margin against missed records.
- Smart sync exits silently (info-level, not warning) when a full sync is in progress.

Operational:
- New cron: weekly full sync Sundays at 3 AM (/usr/local/bin/mls-full-sync).
- New cron: hourly 2GB cap on mls-thumbnails/ and cache/transformed-images/
  (/usr/local/bin/mls-image-cache-cap).
- Logrotate config for wp-content/debug.log (2-day retention, daily rotation,
  delaycompress).

Repo policy:
- CLAUDE.md updated with explicit "commit everything except build artifacts" policy.
- .gitignore: untrack runtime image caches and debug.log rotations.

Other modifications in this snapshot are pre-existing in-flight theme/plugin/db_content_updates work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-04-29 15:32:23 +00:00
parent 57b752f54e
commit b6df4dbb92
5385 changed files with 838580 additions and 2416 deletions
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="181" height="60"><defs><style>.cls-1{fill:#ccc;fill-rule:evenodd}</style></defs><path id="Rounded_Rectangle_1" data-name="Rounded Rectangle 1" class="cls-1" d="M47.12 46.08h34.3a4.28 4.28 0 1 1 0 8.56h-34.3a4.28 4.28 0 1 1 0-8.56z"/><path id="Rounded_Rectangle_1-2" data-name="Rounded Rectangle 1" class="cls-1" d="M25.7 26.78h55.7a4.28 4.28 0 0 1 4.3 4.28v.02a4.28 4.28 0 0 1-4.3 4.28H25.7a4.28 4.28 0 0 1-4.28-4.28v-.02a4.28 4.28 0 0 1 4.29-4.28z"/><path id="Rounded_Rectangle_1-3" data-name="Rounded Rectangle 1" class="cls-1" d="M4.28 6.42h77.13a4.28 4.28 0 0 1 4.28 4.28v.02A4.28 4.28 0 0 1 81.41 15H4.28A4.28 4.28 0 0 1 0 10.72v-.02a4.28 4.28 0 0 1 4.28-4.28z"/><path id="_" data-name="" d="M178.88 57.78a6.91 6.91 0 0 1-5.19 2.2h-68.95a6.9 6.9 0 0 1-5.19-2.2 7.32 7.32 0 0 1-2.11-5.26v-44a7.33 7.33 0 0 1 2.11-5.27 6.91 6.91 0 0 1 5.19-2.2h68.95a6.92 6.92 0 0 1 5.19 2.2 7.34 7.34 0 0 1 2.11 5.27v44a7.33 7.33 0 0 1-2.11 5.26zm-8.84-49.45L139.31 33 108.58 8.33q-2.7-2.3-4.8-.39a2.67 2.67 0 0 0-.77 2.2 3.33 3.33 0 0 0 .96 1.82l19.98 18.37-19.21 19.9a1.74 1.74 0 0 0-.2 2.48 1.4 1.4 0 0 0 1.26.58 2.53 2.53 0 0 0 1.44-.39l21.5-18.17 10.57 9.37 10.37-9.38L171.2 52.9a2.54 2.54 0 0 0 1.44.38 1.96 1.96 0 0 0 1.44-.57q.96-1.15-.38-2.49l-19.21-19.9 19.97-18.36a4.02 4.02 0 0 0 1.06-1.82 2.27 2.27 0 0 0-.87-2.2q-1.92-1.9-4.6.39z" fill="#819eaf" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB