Commit Graph

594 Commits

Author SHA1 Message Date
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
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
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
6bdf36253c Rename ActivityPost to EventPost 2015-05-18 18:47:34 +09:30
Toby Zerner
00be36ad16 Better API error handling 2015-05-18 18:13:16 +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
8b7e7c0afd Clicking on an index nav item should always refresh the discussion list 2015-05-18 15:27:39 +09:30
Toby Zerner
bfef59c172 Correct composer position when pane is pinned but screen is too small to actually show it 2015-05-18 15:17:33 +09:30
Toby Zerner
c811dd569e Fix select-input appearance on Firefox 35+. Closes #43 2015-05-18 15:11:31 +09:30
Toby Zerner
b11595de06 Refresh discussion after logging in. Fixes #68 2015-05-18 15:07:04 +09:30
Toby Zerner
a7ff92cbff Only allow user profile to be edited if user has permission. Fixes #72 2015-05-18 14:58:59 +09:30
Toby Zerner
3fcf8f3da5 Make avatar edit menu extensible 2015-05-18 14:58:23 +09:30
Toby Zerner
82dc0cdd7b Fix broken login/signup links
They’re still broken, hoping that
https://github.com/babel/babel/issues/1150#issuecomment-102881157 will
fix
2015-05-18 14:58:08 +09:30
Toby Zerner
c9b971bdf8 Don't affix the sidebar if it is taller than the viewport. fixes #79 2015-05-18 14:47:08 +09:30
Toby Zerner
d7facbd90a Set document.title on every page 2015-05-18 14:28:15 +09:30
Toby Zerner
39dd2f9b9b Actually fade out post when it is being edited 2015-05-18 14:27:29 +09:30
Toby Zerner
0ef4469849 Fade out post when it is being edited 2015-05-18 14:24:18 +09:30
Toby Zerner
c9cb6170f5 Update deps (including the addition of codesniffer, which should fix travis builds) 2015-05-18 14:09:05 +09:30
Toby Zerner
f70f602f09 Add some extra optional functionality to the Extend\Permission API
- Automatically serialise the attribute
- Apply Permissible grant callbacks

Need to consider splitting the $permission property into two arguments
(currently have to explode by ‘.’)
2015-05-18 13:51:30 +09:30
Toby Zerner
7a487793a0 Tweak discussion list badges positioning 2015-05-18 13:49:39 +09:30
Toby Zerner
9004aff630 Make discussion edit permission specific to renaming 2015-05-18 12:34:03 +09:30
Toby Zerner
8aea1d1051 Update permissions table seeder with new structure 2015-05-18 12:31:38 +09:30