Releases: BM1-de/zammad-scheduled-send
Release list
0.1.1 — scheduled send for Zammad
Zammad package for scheduling ticket replies. Tested on Zammad 7.0 (Debian package) and 7.1 (Docker).
Installation
Download zammad_scheduled_send-0.1.1.zpm below, then:
zammad run rake zammad:package:install /path/to/zammad_scheduled_send-0.1.1.zpm
zammad run rake zammad:package:post_install
systemctl restart zammad
The restart is required — without it the running processes never learn the new routes.
On Docker there are three extra requirements, see the README.
Changed
- Installation instructions corrected against a real package installation of
Zammad 7.0.2: the follow-up step iszammad:package:post_install, which runs
the migrations and the asset build together, and a service restart is
required — without it the routes stay unknown and the package does nothing.
The Docker caveats apply to Docker only; a package installation has node and
a single application root.
Added
-
Frontend: a "Send later…" entry in the dropdown next to Update, opening a
dialog with a time picker and a list of pending replies that can be called
back. The attribute bar has no registry, so its render is wrapped at runtime
rather than subclassed — a wrapper survives another package touching the same
class. The editor instance is picked up through Zammad's own
TicketZoomArticleActionregistry. No core file is patched. -
The UI is a CoffeeScript file in Zammad's asset pipeline, like any other
package, with the boot code registered under thePluginsregistry.
Installing on Docker therefore needs an image with node —
.ddev/Dockerfile.zammadshows how. -
A scheduled reply appears in the ticket as an article of its own, built from
Zammad's existing markup:is-internalplus.internal-bordergives the
dashed frame that already marks a note, with "Edit · Cancel" as article
actions and "Scheduled for …" as the subline. Edit pulls the text back into
the editor and drops the scheduled copy. -
German translations for the package's own strings.
-
Scheduling a point in time in the past is rejected on create. An entry whose
time passes while Zammad is down still goes out afterwards rather than
expiring, so the validation only applies when it is created.
Fixed
-
A shared draft was left behind when scheduling from it. Sending immediately
consumes the draft — scheduling now does the same, mirroring
TicketsController#handle_shared_draftincluding the check that the draft
belongs to the ticket. Otherwise the reply existed twice: once scheduled,
once still sitting in the drafts. -
Reject scheduling an email without a recipient. Switching the article type to
email leaves Zammad's To field empty — only the reply action fills it — so the
job created an article that could never be delivered and still marked itself
sent. Now the model refuses it and the editor says why.
Added
- Project scaffold: package metadata, migration, model, job, controller and
routes as a skeleton. - DDEV-based Zammad 7 test stack with Mailpit, plus development scripts.
- Verified end to end on Zammad 7.1.2: a scheduled reply is picked up at its
send_at, materialised as aTicket::Articleand delivered by Zammad's own
mail pipeline.
Fixed
- Package name must
underscore()to thedb/addondirectory name, otherwise
the migration is never found. - Migrations need class-level
self.up/self.down: Zammad calls
ClassName.up, and without them the call vanishes intomethod_missing
while the migration is still recorded as done. Package.installdoes not run migrations —Package.migration_executedoes.