- Add new `attribs` field to the DB.
- New `Attributes` JSON text input in the campaign editor UI.
- Introduces the new `{{ Campaign.Attribs.$key}}` syntax in campaign body.
Closes#2059
- Add a new vacuum setting option on the UI in Admin -> Settings -> Maintenance.
- Also refactor frontend (lock-and-wait-for-restart) login on settings into
the global vue instance so that it can be reused across contexts.
Settings.vue and Maintenance.vue both now use it to wait for the backend
to restart.
- Like subscribers, select one-or more or 'all' items and delete them
on the lists and campaigns UIs.
- New `DELETE /api/lists` and `DELETE /api/campaigns` endpoints that
take one or more `id` params or a single `query` param.
This patch adds a new `status` field (active, archived) to the lists table and
an 'Archived?' toggle on the UI that allows a list to be marked as archived.
This hides the lists from the lists page, campaigns list selection, list roles,
and public forms. A new "View archived lists" link on the lists UI allows
viewing the list of archived lists.
This is useful to hide/declutter lists by archiving historical, temporary lists
etc. This is largely a UX value addition.
Closes#2613.
Prior to this patch, when a new campaign was created, the `to send` count of
subscribers was counted from the subscriptions and added to the campaign to be
displayed on the frontend. However, this had several issues:
- On large databases, the count can be extremely slow, slowing down campaign
creation.
- The count was purely cosmetic. When a campaign starts, it's recounted (for real)
anyway.
- The count was also inaccurate. Changing the list on a campaign, or changes to
the subscribers in a list never updated the count on the campaign, rendering
it wholly incorrect sometimes.
Closes#2431.