2. Capability comparison
| Capability | Custom Analyzer Builder | Coded Fact Contract Plugin |
|---|---|---|
| Multiple database tables in one analyzer definition | No — exactly one table per definition | Yes — any number of tables/queries |
| Multiple columns/fields as separate path sources in one definition | No — exactly one Image Path Column per definition | Yes — read as many fields as needed |
| Multiple keys from the same JSON column | No — one JSON key per definition | Yes — walk the whole JSON structure |
Extracting image references embedded in rich-text/HTML body content (<img src="/...">, inline CSS url(...), etc.) |
Not possible at any number of definitions — the column/JSON-key value must already be the path | Yes — DOM/regex scanning is ordinary PHP |
| Declaring "Reserved" folders (Inventory Hints contract) | No — Builder-generated analyzers never emit this contract | Yes — onMediaaudittoolCollectInventoryHints() |
| Declaring cache locations for the Clear Image Caches tool | No — same limitation | Yes — onMediaaudittoolCollectCacheLocations() |
| One unified owner record aggregating several source fields (e.g. one row per Article, however many image fields it has) | No — each definition is its own analyzer/owner_type, so N definitions against the same table produce N separate rows per record |
Yes — one fact record per owner, with metadata.source_field distinguishing origin |
| Custom business logic (conditional gating, computed URLs, cross-table lookups) | No — fixed field-mapping logic only | Yes — arbitrary PHP |
| Setup time / skill required | Minutes, no PHP knowledge | Requires PHP + Joomla plugin conventions |
| Produces a real, exportable Joomla plugin | Yes — via "Export as Plugin" | Is one already |
What "Export as Plugin" actually gives you
Every Custom Analyzer definition can be exported to a real, installable plugin package (plg_mat_<yourkey>) — its own manifest, its own script.php, its own language files. Critically, the exported plugin is a faithful, working reproduction of exactly what the Builder itself does: same single table, same single path column, same single JSON key, wired into a proper onMediaaudittoolCollectReferences() method. It is not a stripped-down demo — it is a legitimate, functioning starting point that already satisfies the Fact Contract.
That makes it a genuinely useful bridge, not just a novelty: build the analyzer in the UI until you hit one of its limits, export it, and hand the resulting file to a developer (or your future self) to extend — add a second table, add the missing JSON key, add HTML scanning, add a Reserved-folders declaration — starting from working code instead of a blank file.