Commit Graph

550 Commits

Author SHA1 Message Date
7383c14eae Remove lots of unneeded imports. 2015-06-03 03:20:58 +02:00
8c40c2b4ad Get rid of unneeded injected dependency. 2015-06-03 03:19:32 +02:00
203c21846c Use API client class in admin action, too 2015-06-03 03:18:33 +02:00
7b45ca3a78 Typehint container contract instead of application class.
This helps us in decoupling from Laravel, as we only need any
implementation of the container contract now.
2015-06-03 03:05:10 +02:00
c616cd811b Use the new client class to consume API actions 2015-06-03 02:40:24 +02:00
a94a9afdcc Create an API client class.
This should make it easier to make API calls from the frontends.
2015-06-03 02:39:01 +02:00
d462eb585e Convert forum app to be PSR-7 compatible.
I also installed one new dependency: a helper library that makes it
easier to read and write cookies, given that there are no helper methods
for these purposes in the PSR-7 standard.
2015-06-03 02:04:57 +02:00
7f83552cbb Make JSON parameter middleware a bit more generic 2015-06-03 02:04:00 +02:00
33ae52a30c Fix responses returned by JSON helper. 2015-06-03 02:02:28 +02:00
6cf1dbe648 Add HTMLPurifier after formatters are run.
After a morning of searching, it seems there is no PHP Markdown library
that has built-in XSS/sanitization support. The recommended solution is
to use HTMLPurifier.

This actually works out OK, though, as it’s probably a good idea to
enforce sanitization regardless of which formatters are enabled, and to
not leave them with the responsibility of sanitization (it’s a big
responsibility). Since we cache rendered posts, the slow speed of
HTMLPurifier isn’t a concern.

Note that HTMLPurifier requires a file to be loaded by Composer, but
Studio does not yet support this, so for now I have included it
manually.
2015-06-02 11:36:25 +09:30
fb3038d128 Password cannot be null 2015-06-01 17:55:52 +09:30
82377f2302 Fix error on account registration 2015-06-01 17:55:41 +09:30
5d28fc2713 Only validate dirty attributes
To prevent unique-checking queries on every update
2015-06-01 12:26:44 +09:30
3334063740 Use pre-loaded state if applicable. closes flarum/core#89 2015-06-01 12:26:11 +09:30
bb1491e19e Extract current user attributes into a separate serializer
This prevents the unread notifications count query being run for every
post by the currently authenticated user
2015-06-01 12:25:40 +09:30
0f9549f4b9 Remove default relationships from serializers 2015-06-01 12:24:06 +09:30
351775ef02 Add NotificationWillBeSent event 2015-06-01 08:52:04 +09:30
a1da95962d Move theme config to database 2015-05-31 11:18:19 +09:30
78e10ec541 Eager load notification relationships 2015-05-30 13:57:39 +09:30
a1f5060c05 Remove obsolete imports 2015-05-28 23:52:40 +02:00
8a57922833 For now, inject URL generator instead of providing helper method. 2015-05-28 23:46:56 +02:00
76114f2979 Implement helper for generating routes in API actions. 2015-05-27 23:59:41 +02:00
9526dbf210 Create URL generator interface.
Also bind a default implementation to the container.
2015-05-27 23:58:43 +02:00
2741923714 Improvements to change/forgot password 2015-05-27 16:25:44 +09:30
696bfe5a07 Improve email changing/confirmation stuff 2015-05-27 16:24:54 +09:30
7ab3437136 Switch admin app to new PSR-7 driven architecture 2015-05-27 03:02:10 +02:00
95677e05e3 Add another abstract action base class for dealing with returned views 2015-05-27 03:01:09 +02:00
cff0e96eaa Implement helper method for redirecting 2015-05-27 02:48:08 +02:00
05cecf080e Fixes to comply with PSR-2 2015-05-27 02:37:27 +02:00
97e43c5431 Update ForgotAction to comply with changes in base class 2015-05-27 01:58:39 +02:00
343da9fc40 Extract another middleware from API routing 2015-05-27 01:55:46 +02:00
3ff230dc26 Change API to use PSR-7 style requests and responses
This required some interface changes (mostly changing Laravel's or
Symfony's request and response classes to those of Zend's Diactoros.
Some smaller changes to the execution flow in a few of the abstract
action base classes, but nothing substantial.

Note: The request and response classes are immutable, so we usually
need to return new instances after modifying the old ones.
2015-05-27 01:55:05 +02:00
910d96f905 Fix a typo 2015-05-27 01:49:14 +02:00
be97f5f303 Implement a minimal router using FastRoute.
This will be able to dispatch PSR-7-style requests to any callback
that returns a proper response object.

Largely based on my original work for FluxBB 2.0.
2015-05-27 01:49:14 +02:00
1ec2a4c742 Update email address confirmation subject 2015-05-26 18:07:27 +09:30
e5532d9618 Roughly implement change password/email, delete account modals 2015-05-26 18:03:02 +09:30
85ba97ed5c Improve appearance/behaviour of login/signup/forgot modals 2015-05-26 16:25:25 +09:30
feb4676aa0 Very rough implementation of forgot password 2015-05-26 11:14:06 +09:30
d481a38029 Old code, don't need these! 2015-05-23 08:36:14 +09:30
f54acebaf0 Fix bad logic in edit permission that was allowing guests to edit posts. Closes #88 2015-05-21 15:53:59 +09:30
edc59f37e3 PSR-2: Remove empty lines 2015-05-20 12:33:26 +09:30
3c7078b423 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
98b3d0f89e 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
f2d1100ec3 Fix broken DeleteAction 2015-05-20 11:13:32 +09:30
5fede6fe6d Limit notifications to one per user when dispatching events 2015-05-19 11:24:43 +09:30
248c19de73 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
0724aec77e Fix broken notification emailer 2015-05-19 10:53:17 +09:30
54c2eaff8e Fix notification preferences not being enabled by default 2015-05-19 10:12:19 +09:30
278ff7b9c2 Give all users guest permissions as well 2015-05-19 09:36:20 +09:30
811df6c278 Fix errors in DeleteAvatarAction/Command 2015-05-19 09:27:04 +09:30