Page MenuHomePhabricator

Create some kind of queue of profile/settings action items for users
Open, NormalPublic

Description

There is a class of action items we want to present to users which don't fit well into existing channels like Notifications. Generally, they pertain to profile and settings updates. For example:

  1. The email address on external account X changed, do you want to add it to your account?
  2. Your client has a different timezone than your account, do you want to update it?
  3. Another user suggested a profile edit, do you want to accept it?

Notifications are high-volume, time-sensitive, short-lived, ephemeral, and don't need to be updated or affect anything else, while these items should be durable and are not necessarily time sensitive, and might later need to be removed or adjusted or updated (e.g., if the user's client keeps switching timezones, or the external account address changes more times) so dumping them into notifications doesn't feel like a very good fit to me.

Some ideas:

  • These could be something like "super notifications" that just end up at the top of the menu, maybe.
  • These could show up on the profile page, and we could put a counter or indicator on the profile image in the main menu. For (1), specifically prompting the user at login time is desirable, but maybe we could just redirect them to the item after login.
  • We could put these on the dashboards, but users might completely miss them, and these are time-sensitive enough that I think we should make it hard.

Event Timeline

epriestley raised the priority of this task from to Normal.
epriestley updated the task description. (Show Details)
epriestley added a project: People.
epriestley added a subscriber: epriestley.
eadler added a project: Restricted Project.Feb 23 2016, 6:43 AM
eadler moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Feb 23 2016, 6:58 AM
eadler moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Apr 7 2016, 6:41 PM
eadler moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Apr 8 2016, 6:41 PM

Something somewhat related potentially depending on the implementation you'd imagine is "bulletins". Where you have a user base, and as the operator of the system you want to communicate something to folks in the tool where it's relevant (for example, to aid discovery of a new feature that was added that we think people want to use, or strongly suggest a best practice etc).

The traditional problem here is that you don't just want to blast everyone with a giant red thing because they'll just start ignoring it. So you tend to want things like that to be permanently dismissible. And we all now sending email doesn't work.

So... we've wanted the kind of "Did you know ?" with a simple one-click dismissal a few times in the past. Perhaps what you're planning here could be extended to actually support such custom bulletins.

This should realistically wait until the we get rid of the old default homepage and everything is driven through dashboards.

Our main interest has to do with "please fix your timezone" and "please link your external accounts". That is, action oriented, high priority, requests. The FYI or MOTD style prompts are secondary.

Yes - my comments were meandering in nature. Sorry, should have made that
clear.

Maybe a good way to attack this is to discuss specific notifications. I think the use cases we're aware of are:

  1. Browser timezone differs from profile timezone.
  2. Client is HTTPS but server is not.
  3. Browser language differs from profile language?
  4. External account email address has changed.
  5. You don't have an X account linked.
  6. Another user suggested a new profile picture.
  7. Server is going down for maintenance in 15 minutes.
  8. Daily fun facts / did you know / protips.

I think (1), (2) and (3) are very high urgency: we'd want to show them on every page if they're triggering. For example, if you follow an email link to a calendar event, it's important that we prompt you immediately to change your timezone because the page may be misleading otherwise. The HTTPS warning should probably work like this for technical/setup. If we do language detection it should also show up on every page so you can translate the page into something you can understand. Best current analog for this is notification bubbles.

(4), (5) and (6) are lower-urgency. We'd probably want to show them fairly prominently but they don't need to be on every page. Something like a notification in the notification menu or a panel on the homepage, maybe.

(7) is high-urgency but transient, and probably (?) not part of this. I think the only use case anyone has for this is maintenance notifications (see also T8145).

I think (8) is probably totally separate. You could shoehorn it into one of the other systems, but if we were building it on its own I'd think of it more like "sticky news feed stories" that bubble to the top the first time you see them, then flow down the page or something -- it's probably OK to miss them, they're just kind of stuff you might want to check out. Maybe this wouldn't work quite like this but this feels pretty distant from "hey, your timezone setting is wrong and this meeting is at a different time than it looks like it is".

T10855 is also somewhat adjacent here, perhaps.


Further down the list, I think we're hesitant about building things out without doing Glorious Infrastructure first, per @chad. Specifically, default homepage dashboard is in bad shape and Dashboards in general has some weird stuff we never really cleaned up, but is likely the correct vehicle for stuff in the vein of (8) and maybe for the (4/5/6) stuff.

I think we can do the timezone check without any peril, since it doesn't make sense as a dashboard check.

For the "you don't have external account X linked", it might be easiest to just fork and implement it as an extension that pops a notification bubble? I can give you an outline of how to do this, but I don't think there's really much to gain by providing a formal extension point since you just need a one-liner in PhabricatorStandardPageView, fork-wise. The downside to this approach is that you could only dismiss it by linking an account (dismissal of the HTTPS warning would be impossible, and dismissal of the timezone warning would not be generic), but maybe that's fine.

For the "you don't have external account X linked", it might be easiest to just fork and implement it as an extension that pops a notification bubble? I can give you an outline of how to do this, but I don't think there's really much to gain by providing a formal extension point since you just need a one-liner in PhabricatorStandardPageView, fork-wise. The downside to this approach is that you could only dismiss it by linking an account (dismissal of the HTTPS warning would be impossible, and dismissal of the timezone warning would not be generic), but maybe that's fine.

This is fine for our use case. I actually looked into automating this; but from the Jira side but it doesn't seem to be possible.

Alright, let me sketch out the "missing X account" thing.

I think the timezone stuff in T3025 is 1-2 hours but doesn't really overlap with any of the other use cases or drive any broader infrastructure.

To install:

  • Put junkpile/ next to phabricator/.
  • Add junkpile/src to load-libraries config.
  • Apply one-line patch.

libjunkpile:

One-line fork which is actually two lines long:

diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
index 08f0c0b..2fc30cb 100644
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -245,6 +245,8 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
           'defaultImageUri' => $default_img_uri,
           'downloadForm'    => $download_form,
         ));
+
+      JunkpileExternalAccountLinkAlert::alertOnMissingAccountLink($user);
     }
 
     Javelin::initBehavior('aphront-form-disable-on-submit');

Result:

junk.png (1×1 px, 201 KB)

eadler moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.May 22 2016, 5:38 PM
eadler moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Jul 4 2016, 9:10 PM