Page MenuHomePhabricator

Allow triggers to be attached to and removed from workboard columns

Authored by epriestley on Mar 14 2019, 5:23 PM.
Referenced Files
F13211107: D20287.diff
Fri, May 17, 5:29 AM
F13194949: D20287.diff
Sun, May 12, 10:00 PM
F13177685: D20287.diff
Wed, May 8, 7:53 PM
Unknown Object (File)
Mon, Apr 29, 7:00 PM
Unknown Object (File)
Mon, Apr 29, 4:20 PM
Unknown Object (File)
Sun, Apr 28, 11:45 AM
Unknown Object (File)
Sat, Apr 27, 11:19 PM
Unknown Object (File)
Thu, Apr 25, 12:00 AM



Depends on D20286. Ref T5474. Attaches triggers to columns and makes "Remove Trigger" work.

(There's no "pick an existing named trigger from a list" UI yet, but I plan to add that at some point.)

Test Plan

Attached and removed triggers, saw column UI update appropriately.

Diff Detail

rP Phabricator
Lint Passed
Advicesrc/applications/project/storage/PhabricatorProjectTrigger.php:64XHP16TODO Comment
Tests Passed
Build Status
Buildable 22289
Build 30483: Run Core Tests
Build 30482: arc lint + arc unit

Event Timeline

amckinley added inline comments.

Maybe add a count of the number of other columns which currently use the trigger? I guess you'd have to do a policy-violating query to include the comfort-inducing "no other columns use this trigger" text, but I think that's pretty ok? Or inversely, just a warning "X other columns are currently using this trigger".

NB: I assumed this code was invoking destroyObjectPermanently; disregard.


This code isn't actually invoked by PhabricatorProjectColumnRemoveTriggerController, right? Also, pretty sure my above comment is now irrelevant.


Just out of curiosity, what's the scope on these constants? Do they need to be globally unique? Would we ever know if we reused one by accident? In practice I guess we scope transactions per-application since they have their own DBs anyway.

This revision is now accepted and ready to land.Mar 18 2019, 7:14 PM

Yeah, this is just "Detach trigger from this column".

Possibly we should count and give the user an option to destroy it (or, more likely, banish it to the shadow realm). Elsewhere, I'm policy-violating on count/existence anyway to provide users a hint before they edit a trigger in use on a lot of boards they can't see, so I think this is fine from a policy perspective. It's generally okay to know that objects exist and what their PHIDs are, just rarely much more than that.

(For example, you can generally see all the edges attached to an object, even if D123 is attached to T123 which you can't see.)


Right, this is just so that when you bin/remove destroy <phid> a trigger we end up with minimally-weird column state since I don't really want to write all the UI for "this column references a trigger which no longer exists" and doubt the outcome would ever be any different from removing it, practically.


They only have to be unique per object type.

Some of the older stuff namespaces them heavily, but in practice all the transaction stuff is sharded into per-object tables anyway and there's no mode which says "give me every subscription change to every object ever", nor is there likely to ever be, I think. I currently believe the handful of cases for this are probably better served by fact extraction in the Facts ETL pipeline, so we don't have to run 250 queries against every single whatever.transaction table.


(In D20308, I ended up just counting use in active columns instead of having a separate "status".)

This revision was automatically updated to reflect the committed changes.