Link FreeScout conversations: related, duplicates, blocks, follows, copied.
  • PHP 78.1%
  • Blade 11.2%
  • JavaScript 3.9%
  • Shell 2.6%
  • CSS 2.2%
  • Other 2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
JD 0d7e0b0c6b
All checks were successful
ci / battery (push) Successful in 25s
CI: manual "Run workflow" button
2026-10-15 01:12:49 +08:00
.forgejo/workflows CI: manual "Run workflow" button 2026-10-15 01:12:49 +08:00
doc Release process: annotated tags, which --follow-tags pushes 2026-10-15 00:02:18 +08:00
img JdneerRelations: guides and screenshots follow the sidebar layout and the hover explanations 2026-10-11 14:51:00 +08:00
module release: 1.0.0 2026-10-15 00:01:55 +08:00
scripts Standalone repository: own check, zip and version scripts, CI and release workflows, release process 2026-10-14 20:22:45 +08:00
tests JdneerRelations: linked conversations move to the sidebar; settings page with fixed widths, bigger grid and explanations on hover 2026-10-11 14:51:00 +08:00
.gitignore Standalone repository: own check, zip and version scripts, CI and release workflows, release process 2026-10-14 20:22:45 +08:00
build.sh JdneerRelations: module scaffold, unit-test harness, podman lint in the battery 2026-10-11 11:52:44 +08:00
CHANGELOG.md release: 1.0.0 2026-10-15 00:01:55 +08:00
LICENSE Standalone repository: own check, zip and version scripts, CI and release workflows, release process 2026-10-14 20:22:45 +08:00
README.md Standalone repository: own check, zip and version scripts, CI and release workflows, release process 2026-10-14 20:22:45 +08:00
TODO.md JdneerRelations: record the small issues found in review in TODO 2026-10-13 21:30:07 +08:00

JDNEER Conversation Relations

Link FreeScout conversations to each other: related to, duplicates, blocked by, follows and copied from. A blocked conversation can't be closed while its blocker is still open, and closing an original closes its duplicates. If one FreeScout serves several customers, you decide which mailboxes may link, and agents only ever see the details of conversations they are allowed to open.

A conversation with its linked conversations in the sidebar

Guides

Guide For What's in it
Guide for agents Everyone who answers conversations The kinds of link, adding and removing links, hidden conversations 🔒, closing blocked conversations, duplicates, automatic links, list badges and search
Guide for admins Admins Every setting and what agents notice, setting up several customers with link groups, the grid, hidden conversations, blocked-conversation choices, removing the module
How it works Whoever maintains FreeScout or this module What is stored where, every check, how it hooks into FreeScout, timeline entries, tests

In short

Kind Seen from the other conversation What it does
related to related to Nothing extra.
duplicates duplicated by Closing the original closes its open duplicates.
blocked by blocks Can't be closed while the blocker is open.
follows precedes Shows "waiting" while the earlier one is open. No dates.
copied from copied to Set automatically by Clone Conversation and New Conversation from a message.

Out of the box, only conversations in the same mailbox can be linked. Change that under Manage → Settings → Relations (see the guide for admins).

Requirements

FreeScout 1.8.245 or later. No other module is needed.

Install

  1. Download JdneerRelations-<version>.zip and SHA256SUMS from the repository's Releases page, and check the download: sha256sum -c --ignore-missing SHA256SUMS.

  2. Unpack it into the Modules directory of your FreeScout installation (the directory that contains artisan). The zip holds a single JdneerRelations/ folder:

    cd /path/to/freescout
    unzip /path/to/JdneerRelations-<version>.zip -d Modules/
    
  3. Give the folder to the user your web server runs as (often www-data, nginx or apache):

    chown -R www-data:www-data Modules/JdneerRelations
    
  4. In FreeScout, open Manage → Modules and click Activate on JDNEER Conversation Relations. Activation creates the module's three tables.

  5. Review Manage → Settings → Relations. Out of the box only conversations in the same mailbox can be linked.

Update

Unpack the new zip next to the old folder and swap them, then let FreeScout pick up the new version:

cd /path/to/freescout
rm -rf /tmp/jdneerrelations-new /tmp/jdneerrelations-old
unzip /path/to/JdneerRelations-<new version>.zip -d /tmp/jdneerrelations-new
mv Modules/JdneerRelations /tmp/jdneerrelations-old && mv /tmp/jdneerrelations-new/JdneerRelations Modules/
chown -R www-data:www-data Modules/JdneerRelations
sudo -u www-data php artisan freescout:module-install jdneerrelations   # migrations, public link, cache

Uninstall

Deactivate keeps all links, groups and settings; activating again brings them back. While the module is inactive, its timeline entries show as empty lines, because FreeScout has no text for them.

To remove everything, use Manage → Settings → Relations → Remove all module data first (type REMOVE to confirm). It deletes the module's tables, settings, mailbox overrides and timeline entries, then deactivates the module. Delete on the module card then removes the files.

Development

  • build.sh runs the plain checks (the computer's PHP, or a podman PHP 8.4 container); the repository's scripts/check.sh runs it too.
  • tests/in-app/, tests/e2e/smoke.py and the test data in tests/seed/ are described under How it works → Testing.
  • img/ holds the screenshots used in the guides.
  • Work for later is listed in TODO.md.
  • Releases follow doc/RELEASE-PROCESS.md.