On Wed, Mar 8, 2017 at 12:27 PM, Guillaume Delhumeau
<[email protected]> wrote:
> Sure but it won't work when you upgrade an old wiki with users created
> years ago. We would still end up with thousands of unread notifications.

Which notifications ? You will start getting new notifications only
when you have new notification system, no ?

>
> 2017-03-08 12:07 GMT+01:00 Thomas Mortagne <[email protected]>:
>
>> On Wed, Mar 8, 2017 at 11:55 AM, Guillaume Delhumeau
>> <[email protected]> wrote:
>> > Hello everybody.
>> >
>> > *TL;DR:* Notifications are nothing but standard Events from the
>> Observation
>> > Manager, marked as "Storable" and stored by
>> > the Event Stream. They can be displayed in the top bar of the wiki and/or
>> > sent by e-mails periodically. Since this is
>> > overlapping with the Watchlist features, the idea in the future is to
>> > re-implement the watchlist using the notification
>> > mechanism and to push the current Watchlist module to contrib. Need your
>> > agreement to go in that way.
>> >
>> >
>> > *Background:*
>> >
>> > A few weeks ago I've sent a proposal about the Notifications feature.
>> I've
>> > made some work since, and talked with Vincent
>> > to define a vision.
>> >
>> > Let me introduce you what I've already done and what I'm going to do in
>> the
>> > following days:
>> >
>> > * I am going to introduce 2 interfaces: *StorableEvent* and
>> > *TargetableEvent* (currently I have only implemented a
>> >   *NotificationEvent* that represent both).
>> >
>> > * *StorableEvent*: when an event from the Observation Manager implements
>> > this interface, it means this event will be
>> >                  logged (stored) by the Event Stream.
>> >
>> > * *TargetableEvent*: introduce a list of "targets", which are the IDs of
>> > the entities who are targeted by this event.
>> >                    Example: when someones replies to your forum topic, an
>> > event called "someone has answered to your
>> >                    topic" is sent with the topic creator as target.
>> >
>> > * As I said, storable events are stored by the Event Stream, which is
>> > currently implemented by the Activity Stream
>> >   module. So it means a *StorableEvent* is currently stored as an
>> > *ActivityEvent* but this remains technical and not visible
>> >   from the outside.
>> >
>> > * I have introduced the role *StorableEventConverter* which convert a
>> > *StorableEvent* to an Event from the Event Stream.
>> >   Each application can provide its own converter (to store additional
>> > parameters for example) but there a default one
>> >   that is used if nothing else is defined.
>> >   See:
>> > https://github.com/xwiki/xwiki-platform/blob/
>> e5a3cc7b6a5cbe82b1668d9d30fbf6a61b026046/xwiki-platform-
>> core/xwiki-platform-eventstream/src/main/java/org/xwiki/eventstream/
>> NotificationConverter.java#L36-L36
>> >
>> > * I have added the "target" field (a list of string) to the Event and the
>> > *ActivityEvent* classes. I have also updated the
>> >   hibernate mapping for *ActivityEventImpl* accordingly.
>> >   See:
>> > https://github.com/xwiki/xwiki-platform/blob/
>> 81172b2dfd994ddd727efe93daf8fa446dc4abce/xwiki-platform-
>> core/xwiki-platform-activitystream/xwiki-platform-
>> activitystream-api/src/main/resources/activitystream.hbm.xml#L63-L63
>> >
>> > * I have introduced an *EventStatus* class (and *ActivityStatusImpl*) to
>> > store in the wiki which notifications has been seen
>> >   by a specified user. This is important because we want to distinguish
>> new
>> > notifications from those the user have
>> >   marked as read. Hibernate mapping has been updated as well in the
>> > Activity Stream module.
>> >   See:
>> > https://github.com/xwiki/xwiki-platform/blob/
>> e5a3cc7b6a5cbe82b1668d9d30fbf6a61b026046/xwiki-platform-
>> core/xwiki-platform-eventstream/src/main/java/org/
>> xwiki/eventstream/EventStatus.java#L25-L25
>> >   See:
>> > https://github.com/xwiki/xwiki-platform/blob/
>> 81172b2dfd994ddd727efe93daf8fa446dc4abce/xwiki-platform-
>> core/xwiki-platform-activitystream/xwiki-platform-
>> activitystream-api/src/main/resources/activitystream.hbm.xml#L69-L69
>> >
>> > * I am going to introduce the *StorableEventDescriptor* role. The
>> > components will give some meta-information about a
>> >   storable event: the pretty name of the event, the application that can
>> > send it and a short text giving a description
>> >   about the event. We need this to expose to the user the list of events
>> > that she can subscribe to.
>> >   (Right now I have implemented this as XObjects called
>> "*NotificationType*"
>> > which is an error)
>> >
>> > * I have introduced the concept of NotificationPreference. It's an
>> XObject
>> > stored in the user profile. When a user wants
>> >   to subscribe to a particular type of event, this xobject is created
>> with
>> > the id of the event and the media used for
>> >   the notification ('web notification', 'email' or both).
>> >
>> >   In the future, this preferences should handle some more precise
>> filters.
>> > Like: "I am interested in the notifcations
>> >   sent by the Forum Application but only when it comes from the wiki A
>> and
>> > not the wiki B."
>> >
>> > * I have introduced the role *NotificationDisplayer*. It's a component
>> that
>> > generates the XDOM to display in the
>> >   notifications menu. Each application can implement its own displayer,
>> but
>> > failback to a default one.
>> >
>> > * The *DefaultNotificationDisplayer* tries to render the template
>> > 'notifications/{eventType}.vm' and failback to
>> >   'notifications/default.vm'. It means you can create your own displayer
>> > either by implementing a custom
>> >   *NotificationDisplayer* or by creating a template in the right
>> location.
>> >
>> > * The *NotificationManager* is responsible for getting the notifications
>> > for the current user, according to its
>> >   preferences.
>> >
>> > * I have implemented a UI which load the notification asynchronously and
>> > display them in the notification menu, just
>> >   below the watchlist options.
>> >   See:
>> > http://jira.xwiki.org/secure/attachment/33586/WIP-NotificationsMenu.png
>> >
>> > * Unread notifications are displayed with a different styling that
>> others.
>> >
>> > * The user has the ability to mark a notification as read.
>> >
>> > * I have implemented a preferences page in the user profile, which list
>> all
>> > *StorableEventDescriptor*.
>> >   See:
>> > http://jira.xwiki.org/secure/attachment/33587/WIP-
>> NotificationsPreferences.png
>> >
>> > * As a proof of concept, I am going to make the Blog Application send
>> some
>> > custom events that will be displayed in the
>> >   notifications menu.
>> >
>> > Problems:
>> >
>> > * We clearly have some overlapping of concerns with the Watchlist. The UI
>> > is even very bad since the Watchlist options
>> >   are displayed in the same "bell" menu than the notifications without
>> > being connected together. It's confusing.
>> >
>> > * That is why we propose, with Vincent, to remove the Watchlist as it is,
>> > and re-implement its feature using the
>> >   notifications abilities.
>> >
>> > * The email sending is not implemented yet, and will not for the 9.2
>> > release.
>> >
>> > * We don't have a filter to not display similar notifications. For
>> example,
>> > a user saving a document 10 times in 10
>> >   minutes will generate 10 notifications. Possible flooding.
>> >
>> > * When a user registers, all the notifications that are stored since the
>> > beginning of the wiki are unread by her. It
>> >   does not make sense to tell her "you have 1 000 000 000 unread
>> > notifications" so we need to store a starting date for
>> >   each user.
>>
>> You already have a starting date in each profile, the profile page
>> creation date.
>>
>> >
>> > Do you see any problem with that vision?
>> >
>> > Thanks you,
>> >
>> > --
>> > Guillaume Delhumeau ([email protected])
>> > Research & Development Engineer at XWiki SAS
>> > Committer on the XWiki.org project
>>
>>
>>
>> --
>> Thomas Mortagne
>>
>
>
>
> --
> Guillaume Delhumeau ([email protected])
> Research & Development Engineer at XWiki SAS
> Committer on the XWiki.org project



-- 
Thomas Mortagne

Reply via email to