Skip to content

Releases: BM1-de/zammad-scheduled-send

0.1.1 — scheduled send for Zammad

Choose a tag to compare

@bm1-phillip bm1-phillip released this 07 Aug 06:33

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 is zammad: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
    TicketZoomArticleAction registry. 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 the Plugins registry.
    Installing on Docker therefore needs an image with node —
    .ddev/Dockerfile.zammad shows how.

  • A scheduled reply appears in the ticket as an article of its own, built from
    Zammad's existing markup: is-internal plus .internal-border gives 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_draft including 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 a Ticket::Article and delivered by Zammad's own
    mail pipeline.

Fixed

  • Package name must underscore() to the db/addon directory 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 into method_missing
    while the migration is still recorded as done.
  • Package.install does not run migrations — Package.migration_execute does.