Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: Drupal Website Security 12.0.2 Minor update available for module websecurity (12.0.2). Release: DonorPerfect 1.0.20 Minor update available for module donorperfect (1.0.20). Release: Bootstrap Cloud 7.1.5 Minor update available for theme bootstrap_cloud (7.1.5). Release: MCP Sentinel 2.23.1 Minor update available for module mcp_sentinel (2.23.1). Release: Audit Chain 1.9.1 Minor update available for module audit_chain (1.9.1). Release: Menu Autopilot 1.4.1 Minor update available for module menu_autopilot (1.4.1). Release: Webships Project Template 1.0.0 Initial release available for module webships_project (1.0.0)! Release: Webships Starter 2.0.0 Major update available for module webships_starter (2.0.0). Module Revived: Flag for Someone Else 1.0.2 Module flag_fse updated after 9 months of inactivity (1.0.2). Security Coverage: smart 404 Module smart_404 now has official Drupal security advisory coverage.

Private Message Advanced adds group conversation features to Private Message: leave a thread, remove a member, add people, and name a conversation. It works on the released 4.x module with no patch.

Why this exists

Private Message identifies a thread by its exact set of members. That is how it finds "the conversation between these people", and it is why nobody has been able to add leaving, removing or adding members: once C leaves the A, B, C thread, it has the same members as the real A, B conversation, and the lookup can return either one. Adding a member has the mirror problem.

The request has been open for years across several issues, and nothing was ever decided:

So I built it as a separate module. I think this is the way forward. If the Private Message maintainers agree, I am all for merging it into their module.

The approach

The members field stays the live roster. Leaving and removing take the person out of it, adding puts them in. Every inbox query, unread count, access check and notification in Private Message already reads that field, so the person's inbox and thread page follow with no further code.

One small table records every change: thread, person, who did it, joined or left or removed, when. It carries the rule that dissolves the collision: a thread with any row in that table is reachable by its id only and is never again the answer to a member-set lookup. The shrunken A, B group lives on as its own conversation, and a new message from A to B lands in the untouched one-on-one. Threads that were never edited keep their uniqueness exactly as before. The rule is applied by swapping the module's thread service for a subclass that overrides the one lookup method.

Two details make it hold. Private Message writes a person's per-thread history row only when a thread is created, and every inbox query joins on it, so a member added later would never see the thread. This module writes that row at join time with its cutoff set to now, which also means a newcomer sees only what was said after they joined. And every change posts a system line in the thread from the person who made it, "Alex added Sam", "Sam left", which is what makes the thread appear for a newcomer and what the others see.

What it changes in the database

  • One new table of its own, private_message_advanced_log, the membership change log described above.
  • One new column on the existing private message table: membership_event, a base field on the private_message entity holding joined, left, removed or renamed for a system line, and empty for a normal message.

No existing thread, message or member data is modified.

Features

  • Leave a group. Remove a member. Add people; adding to a one-to-one starts a new group so the one-to-one keeps its history.
  • Name a conversation/thread.
  • A Details page per thread: the name, the member list as a View you control, an Add members field, and Leave or Remove on each row.
  • Permissions for leave, add, remove and rename. A setting caps conversation size.
  • An event after every change, for other modules.

Requirements

  • Private Message 4.0.0-alpha4 or later
  • Views

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
1
Tracked since
Sep 2026
Latest release
1 hour ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Active

Releases

Version Type Core Release date
1.0.x-dev Dev 10–11 Sep 20, 2026