Expose the custom many-to-many CTag "Tags" relation as a linkMultiple
field (cTags) so it can be added to the list-view Search Filters, and
build the full Tags setup on Lead from scratch in parity with the others.
Opportunity / Contact / Account (relation already existed):
- add fields.cTags (linkMultiple) to entityDefs
- add cTags to the Search-Filters layout (Opportunity appended, preserving
cAccount1; Contact/Account get a full filters.json incl. cTags)
Lead (built from scratch):
- create Lead<->CTag many-to-many relation via EntityManager (relationName
cLeadTag, join table c_lead_tag); link normalized to cTags to mirror the
other three (API auto-prefix had produced cCTags)
- add cTags field, de_DE/en_US labels, clientDefs panel polish (create:false,
unlink-only row actions), bottomPanelsDetail entry, and filters.json
- CTag side: links.interessenten label de "Interessenten" / en "Leads"
Verified via API/DB: cTags linkMultiple present on all four scopes; Lead
link/CTag.interessenten resolve; Any of / All of / None of filters execute
and return correct results end-to-end; existing data intact.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Provisioning now restores all GUI customizations on reset+reprovision:
- create_pod_espocrm.sh: deploy the version-controlled espocrm-custom/ tree
(CTag entity, layouts, i18n, clientDefs, custom views, custom CSS) into the
pod, then chown www-data and rebuild. Replaces the earlier inline CSS-only
step. Adds a live-phase cache rebuild so customizations and the client
cacheTimestamp are refreshed on every run.
- espocrm-custom/: snapshot of custom/ and client/custom/ (source of truth).
- snapshot_espocrm_custom.sh: refresh the snapshot from a running pod.
- readme.md: usage, first-time host setup, image-update and reset workflows.
- Include the task/instruction notes and plan.md for reference.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>