Files
root b6df4dbb92 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>
2026-04-29 15:32:23 +00:00

1 line
2.3 KiB
JavaScript
Executable File

var WPForms=window.WPForms||{};WPForms.Admin=WPForms.Admin||{},WPForms.Admin.Builder=WPForms.Admin.Builder||{},WPForms.Admin.Builder.FieldMap=WPForms.Admin.Builder.FieldMap||((e,s)=>{let p={},l={init(){s(l.ready)},ready(){l.setup(),l.events()},setup(){p.$builder=s("#wpforms-builder")},events(){p.$builder.on("input",".wpforms-field-map-table .key-source",function(){var e=s(this).val(),l=s(this).parent().parent().find(".key-destination"),i=l.data("name");e&&l.attr("name",i.replace("{source}",e.replace(/[^0-9a-zA-Z_-]/gi,"")))}),p.$builder.on("click",".wpforms-field-map-table .remove",function(e){e.preventDefault(),l.fieldMapTableDeleteRow(e,s(this))}),p.$builder.on("click",".wpforms-field-map-table .add",function(e){e.preventDefault(),l.fieldMapTableAddRow(e,s(this))}),s(e).on("wpformsFieldUpdate",l.fieldMapSelect)},fieldMapTableDeleteRow(e,l){var l=s(l),i=l.closest("tr"),l=l.closest("table"),t=i.closest(".wpforms-builder-settings-block");"1"<l.find("tr").length&&(i.remove(),p.$builder.trigger("wpformsFieldMapTableDeletedRow",[t]))},fieldMapTableAddRow(e,l){var l=s(l).closest("tr"),i=l.closest(".wpforms-builder-settings-block"),l=l.clone().insertAfter(l);l.find("input").val(""),l.find("select :selected").prop("selected",!1),l.find(".key-destination").attr("name",""),p.$builder.trigger("wpformsFieldMapTableAddedRow",[i,l])},fieldMapSelect(){WPFormsUtils.triggerEvent(p.$builder,"wpformsBeforeFieldMapSelectUpdate").isDefaultPrevented()||s(".wpforms-field-map-select").each(function(){var e=s(this);let l=e.data("field-map-placeholder"),i=(void 0!==l&&l||(l=wpforms_builder.select_field),e.data("field-map-allowed"));if(void 0!==i&&i){i=i.split(" "),i=!(0<=s.inArray("all-fields",i))&&i;var t,d=Boolean(e.data("field-map-allow-repeated-fields")),a=e.val(),r=wpf.getFields(i,!0,d);if(e.empty(),e.append(s("<option>",{value:"",text:l})),r&&!s.isEmptyObject(r))for(var o in r)r[o]?.id&&(o=r[o],t=wpf.sanitizeHTML(o?.label?.toString().trim()||wpforms_builder.field+" #"+o.id),e.append(s("<option>",{value:o.id,text:t})));d=e.data("custom-value-support");"boolean"==typeof d&&d&&e.append(s("<option>",{value:"custom_value",text:wpforms_builder.add_custom_value_label,class:"wpforms-field-map-option-custom-value"})),a&&e.val(a),p.$builder.trigger("wpformsFieldSelectMapped",[e])}})}};return l})(document,(window,jQuery)),WPForms.Admin.Builder.FieldMap.init();