Commit Graph

8401 Commits

Author SHA1 Message Date
Toby Zerner
72a676ddfd Update for new notifications API 2015-05-20 12:30:57 +09:30
Toby Zerner
500c279fb3 New user activity feed API.
Originally the user activity feed was implemented using UNIONs. I was
looking at make an API to add activity “sources”, or extra UNION
queries (select from posts, mentions, etc.) but quickly realised that
this is too slow and there’s no way to make it scale.

So I’ve implemented an API which is very similar to how notifications
work (see previous commit). The `activity` table is an aggregation of
stuff that happens, and it’s kept in sync by an ActivitySyncer which is
used whenever a post it created/edited/deleted, a user is
mentioned/unmentioned, etc.

Again, the API is very simple (see Core\Activity\PostedActivity +
Core\Handlers\Events\UserActivitySyncer)
2015-05-20 12:30:27 +09:30
Toby Zerner
8edb684ea9 Simplify and improve notifications API.
It turns out that the idea of “sending” a notification is flawed. (What
happens if the notification subject is deleted shortly after? The
notified user would end up with a dud notification which would be
confusing. What about if a post is edited to mention an extra user? If
you sent out notifications, the users who’ve already been mentioned
would get a duplicate notification.)

Instead, I’ve introduced the idea of notification “syncing”. Whenever a
change is made to a piece of data (e.g. a post is created, edited, or
deleted), you make a common notification and “sync” it to a set of
users. The users who’ve received this notification before won’t get it
again. It will be sent out to new users, and hidden from users who’ve
received it before but are no longer recipients (e.g. users who’ve been
“unmentioned” in a post).

To keep track of this, we use the existing notifications database
table, with an added `is_deleted` column. The syncing/diffing is
handled all behind the scenes; the API is extremely simple (see
Core\Notifications\DiscussionRenamedNotification +
Core\Events\Handlers\DiscussionRenamedNotifier)
2015-05-20 12:24:01 +09:30
Toby Zerner
fe8763c3d0 Fix broken DeleteAction 2015-05-20 11:13:32 +09:30
Toby Zerner
de690fad16 Just being picky 2015-05-20 11:12:48 +09:30
Toby Zerner
26fad11f6f Limit notifications to one per user when dispatching events 2015-05-19 11:24:43 +09:30
Toby Zerner
643726df43 Fix undefined variables 2015-05-19 11:23:35 +09:30
Toby Zerner
978ecd369d Email notifications. Too easy! 2015-05-19 11:02:02 +09:30
Toby Zerner
4080a76a99 Don't parse user mentions with a # ahead of them 2015-05-19 11:01:50 +09:30
Toby Zerner
2101250eaa Only notify when a post is created, not edited 2015-05-19 11:01:11 +09:30
Toby Zerner
fdc82b5273 Add notification preferences 2015-05-19 11:00:49 +09:30
Toby Zerner
2a6403a6a7 Reset original content before inserting the mention 2015-05-19 11:00:29 +09:30
Toby Zerner
53357ad56f Experimenting with some new ways to handle config
For now I’ve chucked it on Flarum\Core as a static method, but
ultimately I think we will need a ConfigRepository abstraction (whether
it replaces or sits underneath the Flarum\Core static method I’m not
sure).

Also starting to think about multisite scenarios, I think this is
important. The Forum model could actually end up with a database table
behind it, and each forum would have its own config settings? Haven’t
really thought about it too hard yet…
2015-05-19 10:59:57 +09:30
Toby Zerner
1adfe5d867 Fix broken notification emailer 2015-05-19 10:53:17 +09:30
Toby Zerner
48a8beea52 Fix notification preferences not being enabled by default 2015-05-19 10:12:19 +09:30
Toby Zerner
8095809c3f Prevent moment deprecation warning 2015-05-19 10:12:18 +09:30
Franz Liedke
ce742e416b Travis: Send an email for the first failed build
This will notify the committer whenever a build starts failing,
but not on subsequent failures (in order not to annoy @tobscure).
2015-05-19 02:14:56 +02:00
Franz Liedke
48a65ab1a6 Let's not test migrations for code style.
PHPCS (on Travis, not locally?) is complaining about these classes
not being namespaced. Meh.
2015-05-19 02:08:47 +02:00
Toby Zerner
1e5a3d5ea5 Give all users guest permissions as well 2015-05-19 09:36:20 +09:30
Toby Zerner
9fd5995703 Actually implement persistent avatar removal in the front-end 2015-05-19 09:27:04 +09:30
Toby Zerner
927f6e3c9b Fix errors in DeleteAvatarAction/Command 2015-05-19 09:27:04 +09:30
Franz Liedke
eb403d7bae Fix the config table seeder
It should include the "extensions_enabled" key which is read
when initializing all extensions.
2015-05-19 01:53:37 +02:00
Toby Zerner
9fdafcc014 Disable composer textarea before it has fully slid up
Prevents early focusing of the textarea while it is still off the edge
of the viewport, which was causing scroll position to jump
2015-05-19 09:17:48 +09:30
Franz Liedke
50ed24698d Travis: Only test against PHP 5.4
This is enough for now since we don't have any unit tests, only
code standard checks.
2015-05-19 01:24:11 +02:00
Franz Liedke
3200697489 Update PHPCS dependency 2015-05-19 01:22:52 +02:00
Franz Liedke
07e3556cab Also check code style in migrations folder. 2015-05-19 01:22:34 +02:00
Franz Liedke
fc20c0dd09 Fix migrations to comply with PSR-2 2015-05-19 01:22:09 +02:00
Franz Liedke
803d446bbb Fix remaining PSR-2 issues. 2015-05-19 01:07:22 +02:00
Franz Liedke
0ca4e1ab7b Fix coding standards to conform to PSR-2 2015-05-19 01:03:12 +02:00
Franz Liedke
dcd67b9d5c Primary key for access tokens table 2015-05-19 00:46:04 +02:00
Franz Liedke
0f8968ee63 Explicitly specify length for string columns.
The missing length attributes caused problems with too long indices.
2015-05-19 00:20:36 +02:00
Franz Liedke
5b5a213143 Fix code error, static methods can not be abstract. 2015-05-18 17:17:10 +02:00
Toby Zerner
e0401469dd Tweak notifications appearance 2015-05-18 18:56:11 +09:30
Toby Zerner
ed98a18681 Rename JS sub-components so that descriptors are before the noun, not after 2015-05-18 18:50:58 +09:30
Toby Zerner
6bfecec9f2 Rename JS sub-components so that descriptors are before the noun, not after 2015-05-18 18:50:54 +09:30
Toby Zerner
736824d45c Rename JS sub-components so that descriptors are before the noun, not after 2015-05-18 18:50:50 +09:30
Toby Zerner
9befc68ea3 GitHub for Mac sucks, why does it leave out a file sometimes? 2015-05-18 18:50:43 +09:30
Toby Zerner
58adcfa3c4 Rename JS sub-components so that descriptors are before the noun, not after
To be consistent with the naming in PHP world.

e.g. ReplyComposer instead of ComposerReply
2015-05-18 18:50:24 +09:30
Toby Zerner
2be7c4affc Rename ActivityPost to EventPost 2015-05-18 18:47:55 +09:30
Toby Zerner
c99055c6a3 Rename ActivityPost to EventPost 2015-05-18 18:47:49 +09:30
Toby Zerner
6bdf36253c Rename ActivityPost to EventPost 2015-05-18 18:47:34 +09:30
Toby Zerner
d4b8c9c8d7 Make excerpts look a little cooler 2015-05-18 18:14:52 +09:30
Toby Zerner
00be36ad16 Better API error handling 2015-05-18 18:13:16 +09:30
Toby Zerner
0b95fc7f81 Fix error when another user has replied to a post 2015-05-18 18:12:26 +09:30
Toby Zerner
d16a6a0a5d More defined style for sticky excerpts 2015-05-18 18:11:51 +09:30
Toby Zerner
3441002a5b Make sure links never have an underline 2015-05-18 16:46:44 +09:30
Toby Zerner
7d67098374 Tweak codeblock styles 2015-05-18 16:46:13 +09:30
Toby Zerner
43e5d8a9b0 Stop emailing me, Travis! :)
Looks like the newlines were changed too?
2015-05-18 15:45:12 +09:30
Toby Zerner
96c3c2cc25 Show composer after discussion is reloaded following login 2015-05-18 15:38:19 +09:30
Toby Zerner
73c101b075 props method just modifies props now, doesn't need to return 2015-05-18 15:28:04 +09:30