Releases: noerd-dev/communication
Release list
v0.4.11
Added
- Laravel Boost guideline (
resources/boost/guidelines/core.blade.php),AGENTS.md+CLAUDE.mdand a guideline render test, so AI agents in every host project get the module rules throughphp artisan boost:update.
Full Changelog: v0.4.10...v0.4.11
v0.4.10
v0.4.9
v0.4.8
v0.4.7
Replaces the singleton SMTP settings page with per-tenant sender accounts.
- New
MailSendermodel (communication_mail_senders): a tenant can keep any number of sender accounts, exactly one flagged as default, each with its own from/reply-to address and SMTP credentials (password stored encrypted). - List and detail components plus YAML configs under
/mail-senders; the old/communication-settingsand/marketing-settingsroutes redirect there. - Existing custom SMTP settings are migrated into a default sender per tenant, after which the SMTP and
reply_emailcolumns are dropped fromcommunication_settings. CommunicationSettingresolves the from and reply-to address from the tenant's default sender;TenantSmtpResolverandCommunicatorbuild the tenant mailer from the sender account. An account without SMTP credentials still carries from/reply and relays through the platform mailer.reply_emailwas never a reply-to — its only readers treated it as the tenant's notification address, which now lives in the liefertool module.
v0.4.1
v0.4.0 — generic contact link
Breaking
Communicator::send() no longer takes a customer: argument, and communications.customer_id is gone. The module now depends on no domain implementation — it never names a customer, party or member.
The two record links
A communication references two records polymorphically, independently of each other:
| Columns | Relation | Meaning |
|---|---|---|
model_type / model_id |
model() |
the source record the mail was generated from |
contact_type / contact_id |
contact() |
the record the mail concerns |
app(Communicator::class)->send(
mailable: new OrderConfirmationMail($order),
to: $order->email,
contact: $order->party, // was: customer: $order->customer
model: $order,
);contact: accepts any Eloquent model (the previous int form is gone — a bare id carries no type). It defaults to to: when that is itself a model, and the tenant is still derived from the contact's tenant_id when no tenantSettings are supplied.
Upgrading
Consumers that passed customer: rename it to contact:. Nothing else changes.
Existing installations get contact_type/contact_id from a purely additive migration — no data is moved or dropped by this module. Migrating legacy customer_id values is left to the modules that wrote them, because only they know which record an id refers to. noerd/liefertool and noerd/booking-members ship those migrations; the drop of the legacy column stands down while any unmigrated row remains.
Also in this release
- The migration set is consolidated from 10 files to 5: a fresh install now gets the final schema directly, with no conversion step.
noerd/customeris no longer a dependency.