AddSearch Crawl – Changelog

Overview · Documentation · License

1.2.2 · October 28, 2026

No code changes.

Changed

  • License terms. LICENSE gains a License Term & Renewal section (each license includes a year of updates and renews yearly; an expired license never disables the add-on), and Support, Updates & Warranty says a current license gives access to the updates released during its term. The same terms as the website's license page and the other Multimediality add-ons.
  • Changelog format. CHANGELOG.md groups every release under Added, Changed, Removed, Fixed and Security, with Upgrading notes where a release needs a step; the release notes themselves are unchanged.

1.2.1 · October 28, 2026

Changed

  • New add-on icon.
  • Manual: the Upgrading section says to run the add-on's Update as soon as the files are in place and what happens until it has run; the "add-on needs its update run" notice has its own Troubleshooting line; a License section; links to the online manual, changelog and MCP Server For EE. No code changes.

1.2.0 · October 25, 2026

Release-review release: the settings page, the crawl decision, URL resolution, key storage and the installer were each re-read against ExpressionEngine 7.5 and PHP 8.4, and brought in line with Multimediality's other add-ons. No database migration is required beyond the add-on's own Update.

Added

  • addon.setup.php declares requires (PHP 8.1, EE 7.2.0), a docs_url, and a namespace the version is read from at runtime (Addon::version()), so the version lives in one file.

Changed

  • Yes/No radios are ExpressionEngine 7 toggles. All channels, Crawl on publish, Crawl on update and Developer log use the control panel's own toggle switch; the channel list appears only when All channels is off.
  • Save checks credentials but does not depend on AddSearch being up. Credentials AddSearch rejects (HTTP 401/403) are refused with the reason; an unreachable API saves the settings with a warning. Test connection says in a sentence what happened, including an expired control-panel session.
  • Channels under Multi-Site Manager are named by site, since the settings are shared by every site.
  • URLs come from the site's page map. Instead of walking exp_structure by hand, the resolver reads exp_sites.site_pages, the table Structure and the Pages module maintain: Structure pages, Structure listing entries and Pages entries resolve to the URI their templates use. Structure's "add trailing slash" setting is honoured. The fallback stays Channel URL + url_title, now with {base_url} / {site_url} replaced. The hook runs after the entry's tab data is saved and at priority 100, so Structure's own URI write precedes it.
  • The installer builds on ExpressionEngine's Installer service (module row, hook rows from one list in Addon::HOOKS, idempotent on update); the two 1.0 hook names are removed on update; api_key is widened to TEXT; the install refuses to proceed without the curl and openssl extensions.
  • PHP 8.4 clean: typed properties, explicit nullable parameters, no curl_close(), declare(strict_types=1) in the namespaced classes.
  • The customer manual is addsearch_crawl/README.md (rendered by the Add-on Manager; copied to the zip root); the repo-root README is developer-facing. Store copy, the hosted docs page, the license stub and the release punch list live in docs/. The build script matches the sibling add-ons (archiver 8, version sync, fail-fast on missing files). scripts/test_addon_cli.php is the CLI harness (94 checks).

Removed

  • The duplicated extension-settings form, credential check and crypto code in ext.addsearch_crawl.php (dead since the module control panel took over) are gone; the extension file holds the hooks only.

Fixed

  • Every string moved to the language file, which is now named as ExpressionEngine loads it (addsearch_crawl_lang.php; the previous lang.addsearch_crawl.php was never read).
  • "Publish" means "became public". Earlier releases inferred publish vs. update by comparing the entry's edit date with its entry date, so a new entry with a backdated entry date was treated as an update and an existing entry switched from Closed to Open counted as an update too. The add-on now records whether the save is an insert and what the status was before it (before_channel_entry_insert / before_channel_entry_update), and classifies: a new Open entry or a status change to Open is a publish; a save of an already Open entry is an update; anything not Open is never crawled.
  • A crawl request waits at most fifteen seconds (ten to connect) instead of thirty, and every failure path is caught: an entry save cannot fail because of AddSearch.
  • Logging is a Developer Log model write with a unique hash per event (under MySQL strict mode the previous logger could fail silently), gated once per save instead of per line; settings are read once per request instead of once per log line.

Security

  • The API key is a masked password field. The stored key is shown as its last four characters and never sent to the browser again; a blank box keeps it. A key that can no longer be decrypted (the site's encryption_key changed) is reported as such and asked for again instead of silently reading as empty.
  • The API key is encrypted with ExpressionEngine's own Encrypt service (random IV, keyed from the site's encryption_key) under a v2: prefix. 1.1.0's fixed-IV payloads (v1:) and 1.0.x plaintext are still read, and the add-on's Update re-encrypts them once.

1.1.0

Changed

  • Modernized the addon for ExpressionEngine 7 (namespace, setup metadata, and compatibility updates)

1.0.0

Added

  • Initial release
  • Automatic crawl triggering on entry publish/update (via after_channel_entry_save)
  • Configurable channel selection (all channels or specific channels)
  • Structure-aware URL resolution (prefers Structure tree using structure_url_title, falls back to channel_url + url_title)
  • Enhanced logging with contextual details (entry ID, resolved URL, explicit skip reasons); success logs include AddSearch response (message, docId) when available
  • Secure API authentication (Basic Auth; username = Site Key, password = API Key)
  • Control panel interface with Test Connection and server-side credential validation
  • Crawl API integration with https://api.addsearch.com/v1/crawler using required payload (action, indexPublicKey, url)