Snitch watches element editors (entry, category, global set, user, etc.) and field editors, and lets you know when someone else may also be editing the same thing at the same time.
To install Snitch, follow these steps:
composer require marionnewlevant/snitch
from your project directoryor
Snitch works on Craft 3.x.
Snitch works by injecting a javascript file into backend pages. That javascript looks for an element edit window or a modal element edit window, and when it detects one, asks the server to report any collisions.
A warning banner appears at the top of the editor pane when someone else may be editing the same element:
A warning banner also appears at the top of editor modals:
Clicking the X
will dismiss the banner.
The default configuration can be overridden with a config file in craft/config/snitch.php
. This is a standard Craft config file, with the usual multienvironment support. The configurable values are:
serverPollInterval
: interval (in seconds) for polling server to look for newly arrived conflicts. Default value: 2
. Minimum value 1, maximum value 5.messageTemplate
: text for the warning banner. This is parsed as twig, with user
the user who may be in conflict. Default value is: May also be edited by: <a href="https://github.com/marionnewlevant/craft-snitch/blob/v2/mailto:{{user.email}}">{{user.username}}</a>.
. This will generate a mailto
link to the user. You can change this to enable Slack messaging, or what-have-you.elementInputIdSelector
: the css selector for identifying the hidden inputs which indicate an element edit window or modal element edit window.fieldInputIdSelector
: css selector for identifying the hidden inputs which indicate a field edit window.The visual look of the warning banners can be modifed with the cpcss plugin.
Javascript (and css) is added to every backend page. That javascript fetches the configuration values, and then starts polling. Every 2 seconds, it looks for any edit forms on the page, and if it finds such a form, reports via ajax the type and the id of the element that the edit form is editing. In return, it is passed a list of possible collisions.
On the server, a database table (snitch_collisions) records
When the ajax call arrives reporting that an element is being edited, these things happen:
Snitch will fail to notice when one person is editing a Commerce product, and another is editing a variant of that product through a modal.
Brought to you by Marion Newlevant