Commit Graph

890 Commits

Author SHA1 Message Date
Toby Zerner
fb3038d128 Password cannot be null 2015-06-01 17:55:52 +09:30
Toby Zerner
82377f2302 Fix error on account registration 2015-06-01 17:55:41 +09:30
Toby Zerner
5d28fc2713 Only validate dirty attributes
To prevent unique-checking queries on every update
2015-06-01 12:26:44 +09:30
Toby Zerner
3334063740 Use pre-loaded state if applicable. closes flarum/core#89 2015-06-01 12:26:11 +09:30
Toby Zerner
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
Toby Zerner
0f9549f4b9 Remove default relationships from serializers 2015-06-01 12:24:06 +09:30
Toby Zerner
351775ef02 Add NotificationWillBeSent event 2015-06-01 08:52:04 +09:30
Toby Zerner
a1da95962d Move theme config to database 2015-05-31 11:18:19 +09:30
Toby Zerner
78e10ec541 Eager load notification relationships 2015-05-30 13:57:39 +09:30
Franz Liedke
a1f5060c05 Remove obsolete imports 2015-05-28 23:52:40 +02:00
Franz Liedke
8a57922833 For now, inject URL generator instead of providing helper method. 2015-05-28 23:46:56 +02:00
Franz Liedke
76114f2979 Implement helper for generating routes in API actions. 2015-05-27 23:59:41 +02:00
Franz Liedke
9526dbf210 Create URL generator interface.
Also bind a default implementation to the container.
2015-05-27 23:58:43 +02:00
Toby Zerner
2741923714 Improvements to change/forgot password 2015-05-27 16:25:44 +09:30
Toby Zerner
696bfe5a07 Improve email changing/confirmation stuff 2015-05-27 16:24:54 +09:30
Franz Liedke
7ab3437136 Switch admin app to new PSR-7 driven architecture 2015-05-27 03:02:10 +02:00
Franz Liedke
95677e05e3 Add another abstract action base class for dealing with returned views 2015-05-27 03:01:09 +02:00
Franz Liedke
cff0e96eaa Implement helper method for redirecting 2015-05-27 02:48:08 +02:00
Franz Liedke
05cecf080e Fixes to comply with PSR-2 2015-05-27 02:37:27 +02:00
Franz Liedke
97e43c5431 Update ForgotAction to comply with changes in base class 2015-05-27 01:58:39 +02:00
Franz Liedke
343da9fc40 Extract another middleware from API routing 2015-05-27 01:55:46 +02:00
Franz Liedke
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
Franz Liedke
910d96f905 Fix a typo 2015-05-27 01:49:14 +02:00
Franz Liedke
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
Toby Zerner
1ec2a4c742 Update email address confirmation subject 2015-05-26 18:07:27 +09:30
Toby Zerner
e5532d9618 Roughly implement change password/email, delete account modals 2015-05-26 18:03:02 +09:30
Toby Zerner
85ba97ed5c Improve appearance/behaviour of login/signup/forgot modals 2015-05-26 16:25:25 +09:30
Toby Zerner
feb4676aa0 Very rough implementation of forgot password 2015-05-26 11:14:06 +09:30
Toby Zerner
d481a38029 Old code, don't need these! 2015-05-23 08:36:14 +09:30
Toby Zerner
f54acebaf0 Fix bad logic in edit permission that was allowing guests to edit posts. Closes #88 2015-05-21 15:53:59 +09:30
Toby Zerner
edc59f37e3 PSR-2: Remove empty lines 2015-05-20 12:33:26 +09:30
Toby Zerner
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
Toby Zerner
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
Toby Zerner
f2d1100ec3 Fix broken DeleteAction 2015-05-20 11:13:32 +09:30
Toby Zerner
5fede6fe6d Limit notifications to one per user when dispatching events 2015-05-19 11:24:43 +09:30
Toby Zerner
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
Toby Zerner
0724aec77e Fix broken notification emailer 2015-05-19 10:53:17 +09:30
Toby Zerner
54c2eaff8e Fix notification preferences not being enabled by default 2015-05-19 10:12:19 +09:30
Toby Zerner
278ff7b9c2 Give all users guest permissions as well 2015-05-19 09:36:20 +09:30
Toby Zerner
811df6c278 Fix errors in DeleteAvatarAction/Command 2015-05-19 09:27:04 +09:30
Franz Liedke
1ab1631849 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
Franz Liedke
dd54803aaf Fix remaining PSR-2 issues. 2015-05-19 01:07:22 +02:00
Franz Liedke
7885c9a002 Fix coding standards to conform to PSR-2 2015-05-19 01:03:12 +02:00
Franz Liedke
7e4693a855 Fix code error, static methods can not be abstract. 2015-05-18 17:17:10 +02:00
Toby Zerner
8e24e7197e Rename ActivityPost to EventPost 2015-05-18 18:47:34 +09:30
Toby Zerner
1b4b03356a Better API error handling 2015-05-18 18:13:16 +09:30
Toby Zerner
4dfe6ee1d1 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
7f48a98af8 Make discussion edit permission specific to renaming 2015-05-18 12:34:03 +09:30
Toby Zerner
50ea261c47 Update permissions table seeder with new structure 2015-05-18 12:31:38 +09:30
Toby Zerner
6522ecffbc Fix permission query error for Guest model. Fixes #84 2015-05-18 12:29:31 +09:30
Toby Zerner
4494001ef7 Fix error on discussion page 2015-05-18 08:00:14 +09:30
Toby Zerner
a577910d04 New object-based extension APIs 2015-05-17 10:19:54 +09:30
Toby Zerner
8e6adb9be0 Expose serializer/actor to extensions 2015-05-15 17:06:09 +09:30
Toby Zerner
b4e5f0e6e5 Simplify permissions and add API to register configurable ones
Lots of thought has gone into this; it will show up later when I do the
admin permissions interface / category permissions :)
2015-05-15 17:05:46 +09:30
Toby Zerner
9ca77d79a0 GitHub for Mac is silly, this should've been in the last commit 2015-05-14 22:41:08 +09:30
Toby Zerner
3925e5892c Rework notifications architecture
- The recipient(s) are the concern of the notifier/sender, not the
notification itself
- Allow “retraction” of notifications (e.g. if a discussion is
stickied, but then it is unstickied)
- Misc. cleanup
2015-05-14 22:41:08 +09:30
Toby Zerner
6517b1ec3e Fix user searching 2015-05-14 22:41:08 +09:30
Toby Zerner
23caaf668a Make MappedMorphTo available on all models
In case extensions want to add that kind of relationship to an existing
model (there’s no way to include traits at runtime)
2015-05-14 22:41:08 +09:30
Toby Zerner
9e81e9f955 Properly include to-many relations 2015-05-14 22:41:07 +09:30
Toby Zerner
c5420ef7df Include user in post creation response 2015-05-14 22:41:07 +09:30
Toby Zerner
9284db5076 Allow finding a post by discussion ID and number 2015-05-14 22:41:07 +09:30
Toby Zerner
781dc2ef0c New component for post excerpts, which will be shown in search results
Perhaps also in user activity stream. They are used in the mentions
extension.

In order to generate the excerpt, each formatter can implement a
“strip” method which basically converts block formatting into inline
formatting.
2015-05-14 22:41:05 +09:30
Toby Zerner
85fa9ca609 Fix incorrect attribute name 2015-05-11 12:12:00 +09:30
Toby Zerner
a1cd6417c7 Add API for adding a formatter 2015-05-11 12:11:26 +09:30
Toby Zerner
b4fd662000 Remove BasicFormatter; add LinkifyFormatter 2015-05-11 12:11:19 +09:30
Toby Zerner
e5f2355d17 Post can't be abstract because it needs to be instantiable for querying 2015-05-11 10:40:41 +09:30
Toby Zerner
d166757930 Extract mappedMorphTo function into a trait
Not sure if this is the best thing to do, it could also just be put on
the base Model class
2015-05-11 10:39:54 +09:30
Franz Liedke
825b4082de Copy the config.php file upon installation.
This allows us to know whether Flarum is already installed, so that
we can disable certain service providers when it isn't.

This should fix #67.
2015-05-08 20:44:53 +02:00
Franz Liedke
e1569beb00 Fix discussion seeder not using the correct post subtypes.
Related to #67.
2015-05-08 18:12:02 +02:00
Franz Liedke
2245b11bb1 Seed command: Only run seeders that have not been run as part of flarum:install command. 2015-05-08 15:15:09 +02:00
Franz Liedke
df8a035935 Remove obsolete line.
Related to #67.
2015-05-08 15:15:08 +02:00
Toby Zerner
023b8b9a9c Don't attempt deletion if the user doesn't have an avatar 2015-05-07 16:54:26 +09:30
Toby Zerner
c58fc07798 Actually use the calculated offset 2015-05-07 16:54:14 +09:30
Toby Zerner
b5169512cb Move some API error handling code around. It still sucks though 2015-05-07 16:08:20 +09:30
Toby Zerner
59d8d63acd Add preliminary avatar resizing 2015-05-07 13:59:07 +09:30
Toby Zerner
05e561d3d6 Add pagination links to JSON-API index actions 2015-05-07 08:22:15 +09:30
Toby Zerner
8e1f6db85d Change mergeInto return signature; only merge posts if same user 2015-05-07 06:38:40 +09:30
Toby Zerner
80aaf42a53 Fix signup error 2015-05-06 12:12:31 +09:30
Toby Zerner
bde9bf9378 Fix FontAwesome path 2015-05-06 12:12:22 +09:30
Toby Zerner
54f731942e Add user group badges 2015-05-06 11:25:19 +09:30
Toby Zerner
92c1ee26c8 Fix content attribute decoding into an object 2015-05-06 11:24:02 +09:30
Toby Zerner
e7ff776001 Collect gambits that were matched and applied 2015-05-06 11:23:35 +09:30
Toby Zerner
a4d3345b99 Add shortcut API to serialize attributes 2015-05-06 11:23:12 +09:30
Toby Zerner
9559ac1bb6 Delete previous avatar when uploading a new one 2015-05-06 11:22:35 +09:30
Toby Zerner
8258d4e504 Fix dud call in magic method 2015-05-05 17:31:29 +09:30
Toby Zerner
a822deaa98 Clean up post type heritable view arguments 2015-05-05 17:29:43 +09:30
Toby Zerner
8aa6253c59 Precursor to storing extension providers for later use 2015-05-05 17:05:47 +09:30
Toby Zerner
92a75fd786 Add a base ServiceProvider with useful public APIs 2015-05-05 14:30:45 +09:30
Toby Zerner
2850c1b38c Make NotificationSender compatibleWith method static 2015-05-05 14:29:57 +09:30
Toby Zerner
d13cb03e39 Return the post that was added/changed/deleted 2015-05-05 14:29:07 +09:30
Toby Zerner
f2056c4acf Clean up post type API 2015-05-05 14:28:40 +09:30
Toby Zerner
bf593504c7 Clean up event handlers 2015-05-05 14:27:47 +09:30
Toby Zerner
24481f3f77 Change API for serializer relationships 2015-05-05 14:26:53 +09:30
Toby Zerner
3726c97d5c Remove old code 2015-05-05 09:17:00 +09:30
Toby Zerner
f0219de93f Fix admin 2015-05-05 09:16:53 +09:30
Toby Zerner
56ef42f931 Add concept of "mergeable" activity posts
For example: when you rename a discussion, DiscussionRenamedPost is
created. If you rename it again immediately afterwards, then a new
DiscussionRenamedPost can be merged into the old one. This will either
result in the old one being updated with the new title, or it being
deleted all together if it was renamed back to the old title.
2015-05-04 12:19:25 +09:30
Toby Zerner
0a2c05379c Update TokenAction for new architecture 2015-05-04 10:30:56 +09:30
Toby Zerner
9af9dce740 Add ExtensionsServiceProvider to load enabled extensions 2015-05-04 08:56:19 +09:30
Toby Zerner
67f64b631a Pass action in RenderView event so that handler can access actor 2015-05-04 08:55:44 +09:30
Toby Zerner
850a49285b Add API to define custom model relationships 2015-05-04 08:55:03 +09:30
Toby Zerner
f03f046efe Add event to modify user search 2015-05-03 12:07:15 +09:30
Toby Zerner
d966c9831a Add event for registering user search gambits 2015-05-03 12:06:01 +09:30
Toby Zerner
b38878da80 Add delete avatar action 2015-05-03 12:05:18 +09:30
Toby Zerner
29be20c91a Fix incorrect function call 2015-05-03 12:04:57 +09:30
Toby Zerner
8f29679b46 Convert the rest of the API to new action architecture
Also make some tweaks:
- Merge SerializeAction::$include and
SerializeAction::$includeAvailable into a keyed boolean array
- Set defaults for SerializeAction::$limit and $limitMax
- Rename SerializeAction::$sortAvailable to $sortFields
2015-05-03 12:04:43 +09:30
Toby Zerner
ecdb2becd4 Assign user input to data property on EditDiscussionCommand 2015-05-02 09:01:27 +09:30
Toby Zerner
f67f34e287 Add removed posts as an API attribute 2015-05-02 09:00:22 +09:30
Toby Zerner
8ee9480205 Update discussion/post sort semantics inline with new API actions
Instead of $sort and $order being separate, they are now a single
array, allowing multiple sort criteria: `[‘foo’ => ‘asc', ‘bar’ =>
‘desc’]`
2015-05-02 09:00:07 +09:30
Toby Zerner
22ff8a203d Make sure serializers work with relations implemented with magic (via __call) 2015-05-02 08:58:28 +09:30
Toby Zerner
db31d9f772 Making a note that we should not use Actor as a singleton 2015-05-02 08:57:14 +09:30
Toby Zerner
a426fa6560 Update API action architecture
- An API action handles a Flarum\Api\Request, which is a simple object
containing an array of params, the actor, and optionally an HTTP
request object
- Most API actions use SerializeAction as a base, which parses request
input according to the JSON-API spec (creates a JsonApiRequest object),
runs the child class method to get data, then serializes it and assigns
it to a JsonApiResponse (standard HTTP response with a
Tobscure\JsonApi\Document as content)
- The JSON-API request input parsing is subject to restrictions as
defined by public static properties on the action (i.e. extensible)
- Also the actor is given to the serializer instance now, instead of
being a static property
2015-05-02 08:56:43 +09:30
Toby Zerner
288fd694a8 Extensibility: data when starting a new discussion 2015-05-02 08:39:44 +09:30
Toby Zerner
60e69ae7b9 Add an event to register discussion gambits 2015-05-02 08:12:30 +09:30
Toby Zerner
66b374b1c1 Add API to collect posts that were removed during an action
This is useful for both the Sticky and Categories extensions, where if
you sticky a discussion and then immediately unsticky it, or if you
move it to a category and then immediately move it back, the last
“activity” post will be removed.
2015-05-02 08:12:09 +09:30
Toby Zerner
a2fd60ed0c Define assets in a more appropriate spot, make extensible 2015-05-02 08:10:06 +09:30
Toby Zerner
c3aecbceaa Extract config into database 2015-05-02 08:07:51 +09:30
Toby Zerner
ac269683ed Merge remote-tracking branch 'upstream/master' 2015-04-25 22:45:27 +09:30
Toby Zerner
52b476dc6b Return more relations when a discussion is created 2015-04-25 22:37:25 +09:30
Toby Zerner
34d150b24b Fix read discussion command action 2015-04-25 22:37:04 +09:30
Toby Zerner
0548ebd54c Allow custom relation to be specified as string 2015-04-25 22:36:34 +09:30
Toby Zerner
8fdc1ba548 Add BootForum event so extensions can add assets 2015-04-25 22:35:41 +09:30
Toby Zerner
b6613dbdc2 Recompile assets every time a file changes 2015-04-25 22:34:56 +09:30
Toby Zerner
a57e3fc028 Use Less_Parser cache feature to speed up LESS generation 2015-04-25 22:34:46 +09:30
Toby Zerner
c6079c53c9 Fix email confirmation route 2015-04-25 22:34:33 +09:30
Toby Zerner
8491c4cbf8 Rename assets directory 2015-04-25 22:34:26 +09:30
Toby Zerner
b68a4711dc Replace Ember app with Mithril app 2015-04-25 22:28:39 +09:30
Franz Liedke
a4ccc020e7 Fix class name conflict. 2015-04-15 13:44:35 +02:00
Toby Zerner
6f67b8c247 Fix attribute serialisation event mutability 2015-04-03 17:04:59 +10:30
Toby Zerner
0bcaaaa9b9 Add an event to modify search queries 2015-04-03 17:04:41 +10:30
Toby Zerner
6898e0acbb Refactor Flarum\Web and Flarum\Admin
- In order to be consistent with the Ember/LESS naming scheme, renamed
Flarum\Web to Flarum\Forum.
- Moved common classes into Flarum\Support so that Flarum\Admin doesn’t
depend on Flarum\Forum. Also moved Actor into Flarum\Support as it
doesn’t belong in the domain.
2015-03-30 16:17:04 +10:30
Toby Zerner
8e0a27de49 Oops 2015-03-30 12:56:41 +10:30
Toby Zerner
3b4beaa6ca "See" a user on the initial page load too 2015-03-30 12:55:39 +10:30
Toby Zerner
a43957e1e2 Don't allow guests into the admin area 2015-03-30 12:43:55 +10:30
Toby Zerner
7051b608a0 Update administration page title 2015-03-30 10:42:13 +10:30
Toby Zerner
3886efffef Turns out putting a . there breaks Laravel 2015-03-29 22:27:37 +10:30
Toby Zerner
40a6d77e74 Big front-end asset/filestructure refactor
- Extract shared Ember components into a “flarum-common” ember-cli
addon. This can be used by both the forum + admin Ember apps, keeping
things DRY
- Move LESS styles into their own top-level directory and do a similar
thing (extract common styles)
- Add LESS/JS compilation and versioning to PHP (AssetManager)
- Set up admin entry point

(Theoretical) upgrade instructions:
- Delete everything in [app_root]/public
- Set up tooling in forum/admin Ember apps (npm install/update, bower
install/update) and then build them (ember build)
- php artisan vendor:publish
- Upgrade flarum/flarum repo (slight change in a config file)
- If you need to trigger a LESS/JS recompile, delete the .css/.js files
in [app_root]/public/flarum. I set up LiveReload to do this for me when
I change files in less/ or ember/

Todo:
- Start writing admin app!
- Remove bootstrap/font-awesome from repo and instead depend on their
composer packages? Maybe? (Bower is not an option here)
2015-03-29 22:13:26 +10:30
Toby Zerner
950d2f0eb9 Move forum ember app into a subdir, preparing for admin app to exist alongside 2015-03-28 19:10:52 +10:30
Toby Zerner
52a7b536c4 Fix scope removal of bindings 2015-03-28 16:31:26 +10:30
Toby Zerner
bc9be30a02 More powerful/extensible notifications
- Notifications can be delivered in multiple ways (alert, email)
- Different notification types can implement interfaces to allow
themselves to be delivered in these various ways
- User preferences for each notification type/method combination are
automatically registered
2015-03-28 15:43:58 +10:30
Toby Zerner
49c3fa09e6 Change "renamed" post type to more descriptive "discussionRenamed" 2015-03-28 15:43:58 +10:30
Toby Zerner
89eca757e6 Give MappedMorphTo a more generic property name 2015-03-28 15:43:58 +10:30
Toby Zerner
afa4b98c4a Only get posts with registered types.
This is so that if an extension adds a post type, and the database gets
populated with posts of that type, but then if the extension is
disabled, we wouldn’t want those posts to display because we would have
no knowledge about how to deal with/render them.
2015-03-28 15:43:58 +10:30
Toby Zerner
38ebb15334 Track user "last seen" time and display whether they are online or not
according to their preferences
2015-03-28 15:43:58 +10:30
Toby Zerner
359f44552e Implement user preferences API
Preferences must be registered (optionally with a callback to transform
data, and a default value) on the User model.
2015-03-28 15:43:57 +10:30
Ciarán O'Mara
be067ae1b6 Fix comment count update.
Addresses the following error when using pqsql.

[PDOException]
  SQLSTATE[42703]: Undefined column: 7 ERROR:  column "comment" does not exist
  LINE 1: ...d) FROM posts WHERE user_id = users.id and type = "comment")
2015-03-28 05:38:56 +11:00
Toby Zerner
257a3fde1a Refresh avatar display after uploading 2015-03-27 11:49:26 +10:30
Franz Liedke
9621e72b9b Fix order of arguments. 2015-03-26 22:03:55 +01:00
Franz Liedke
a19f35e8c1 Construct filesystem correctly. 2015-03-26 22:03:47 +01:00
Franz Liedke
18ccec4190 Pass newly configured filesystem disk to upload handler. 2015-03-26 22:01:58 +01:00
Franz Liedke
cf8e02977f Change name of avatar field in users table. 2015-03-26 20:59:06 +01:00
Franz Liedke
e4ed057557 Wire up instantiation of Flysystem adapter for avatar storage. 2015-03-25 14:26:38 +01:00
Franz Liedke
100a5038bf Add route and action for uploading user avatars. 2015-03-25 14:26:17 +01:00
Franz Liedke
a1f723671d Add simple implementation (command handler) for avatar upload. 2015-03-25 14:23:31 +01:00
Franz Liedke
7f66a77ede Add avatar handling to user model. 2015-03-25 14:21:50 +01:00
Franz Liedke
901b6b0839 Provide empty run() method.
This allows me to override the handle() method in subclasses (where
I need access to the request object) without having to overwrite
run(), too.

The class is still abstract.
2015-03-25 13:00:23 +01:00
Toby Zerner
3081fe2aa4 Fix DiscussionWasStarted event not being dispatched 2015-03-24 19:50:52 +10:30
Toby Zerner
8be486a31d Don't show deleted posts in the activity feed 2015-03-24 19:41:30 +10:30
Toby Zerner
43842623aa Only include visible posts in post linkage 2015-03-24 19:29:47 +10:30
Toby Zerner
c35b472e66 Fix non-comment post content serialization 2015-03-24 17:03:59 +10:30
Toby Zerner
193bb0b085 Fix error if there is no included data with user
i.e. if the logged in user is unconfirmed (doesn’t have any groups
attached)
2015-03-24 16:55:22 +10:30
Toby Zerner
4a1550215c Implement notifications 2015-03-24 15:07:38 +10:30
Toby Zerner
1d1025dcd2 Only show comment posts in activity feed 2015-03-24 15:07:11 +10:30
Toby Zerner
e62119964b All post types get numbers
Decided this is necessary because some notifications will need to link
to posts which are not comments (e.g. a “renamed” post)
2015-03-24 15:06:57 +10:30
Toby Zerner
a62e04f956 Upgrade to JSON-API RC3 + latest version of tobscure/json-api
Note: npm source for ember-json-api changed to a fork, but I still had
to apply a custom change to get polymorphic relationships to work (see
https://github.com/kurko/ember-json-api/pull/71#issuecomment-85257281)
2015-03-24 15:04:24 +10:30
Toby Zerner
3880ce70f0 Add user activity system 2015-03-17 17:06:12 +10:30
Toby Zerner
c3fd7679d3 Fix error when hiding/restoring posts 2015-03-17 17:01:42 +10:30
Toby Zerner
4804d95b37 Implement user "bio" field
Perhaps this should be an extension, but it is pretty essential and I
can’t think of many instances where it wouldn’t be wanted. Would be
very easy to extract later on if need be.
2015-03-12 10:38:18 +10:30
Toby Zerner
6ffba13205 Implement user searching & minor search refactor 2015-03-12 10:37:02 +10:30
Toby Zerner
2882ecd46e Rename user posts count to comments count 2015-03-12 10:34:59 +10:30
Toby Zerner
df75c68ac4 Fix welcome hero link for demo 2015-02-26 15:30:07 +10:30
Toby Zerner
f67098461d Use sender information from config 2015-02-26 15:23:09 +10:30
Toby Zerner
2884662723 Prepare welcome hero for demo 2015-02-26 13:30:13 +10:30
Toby Zerner
225a618713 Fix password hashing 2015-02-26 13:29:36 +10:30
Toby Zerner
57f4dc6091 Have a go at some error handling
Still not happy with how this is all fitting together. But good enough
for now
2015-02-26 12:48:23 +10:30
Toby Zerner
c09e47c434 Temporary fix for read marking 2015-02-26 12:46:27 +10:30
Toby Zerner
b4f3148e30 Remove Middleware suffix 2015-02-26 12:45:44 +10:30
Toby Zerner
f2fe0a2e1d Fix setting user to null, for now
Still need to flesh out the exact purpose/use of the Actor class
2015-02-26 12:45:29 +10:30
Toby Zerner
074b4d0989 Add model validation back in 2015-02-26 12:44:39 +10:30
Toby Zerner
a079535883 I dun goofed 2015-02-25 15:44:09 +10:30
Toby Zerner
6a0cbbbe70 Fix logout action 2015-02-25 15:36:25 +10:30
Toby Zerner
3c53e512de Fix bug causing wrong index to be returned 2015-02-25 15:36:17 +10:30
Toby Zerner
9ea482254c Finish signup process, including state restoration 2015-02-25 15:34:02 +10:30
Toby Zerner
2c46888db5 Upgrade to L5 + huge refactor + more. closes #2
New stuff:
- Signup + email confirmation.
- Updated authentication strategy with remember cookies. closes #5
- New search system with some example gambits! This is cool - check out
the source. Fulltext drivers will be implemented as decorators
overriding the EloquentPostRepository’s findByContent method.
- Lay down the foundation for bootstrapping the Ember app.
- Update Web layer’s asset manager to properly publish CSS/JS files.
- Console commands to run installation migrations and seeds.

Refactoring:
- New structure: move models, repositories, commands, and events into
their own namespaces, rather than grouping by entity.
- All events are classes.
- Use L5 middleware and command bus implementations.
- Clearer use of repositories and the Active Record pattern.
Repositories are used only for retrieval of ActiveRecord objects, and
then save/delete operations are called directly on those ActiveRecords.
This way, we don’t over-abstract at the cost of Eloquent magic, but
testing is still easy.
- Refactor of Web layer so that it uses the Actions routing
architecture.
- “Actor” concept instead of depending on Laravel’s Auth.
- General cleanup!
2015-02-24 20:33:18 +10:30
Toby Zerner
0e4e44c358 Preliminary email confirmation implementation
Whenever a user registers or changes their email, they are sent an
email containing a link which they must click to confirm it.

Upon registering, a user won’t be assigned to any groups and therefore
won’t have permission to do anything (but they can still log in!) Upon
confirming their email for the first time, their account will be
assigned to the Member group and thus “activated”.
2015-02-16 14:52:53 +10:30
Toby Zerner
b6ef1f296e Cleanup 2015-02-16 14:50:38 +10:30
Toby Zerner
9bb7001645 Better check for user property in command validators 2015-02-16 14:48:10 +10:30
Toby Zerner
540902cd7a Seed renamed posts properly 2015-02-13 11:44:19 +10:30
Toby Zerner
5e09fd7cd8 Explicit mapping of post type to class 2015-02-13 10:30:32 +10:30
Toby Zerner
011ae3603e Implement "renamed" posts
Record when the discussion was renamed, from what, and by whom.
Information is stored in the `content` field as a serialised JSON
object because proper polymorphism will be too difficult with Ember
Data and especially when extensions try to add new post types.
2015-02-13 10:23:38 +10:30
Toby Zerner
5229c5c06a Mark a discussion as read when it is created 2015-02-12 15:18:45 +10:30
Toby Zerner
6138825db6 Only show reply button if user has permission 2015-02-12 15:17:20 +10:30
Toby Zerner
36787bcf45 Implement hard deletion and rename soft delete to hide 2015-02-12 14:35:24 +10:30
Toby Zerner
cf88fda8c8 Always add discussion state information 2015-02-10 17:53:52 +10:30
Toby Zerner
e30ae7b7b8 Don't imply order on posts relationship 2015-02-10 17:53:16 +10:30
Toby Zerner
8e5cbcd196 Add unordered list formatting 2015-02-10 17:52:13 +10:30
Toby Zerner
624d3d70bb Refresh comments count when updating metadata 2015-02-10 17:51:39 +10:30
Toby Zerner
227f19ddf6 Change API attribute for hiding/restoring posts 2015-02-10 17:51:16 +10:30
Toby Zerner
f56da376da Prevent unnecessary events from being triggered 2015-02-10 17:49:42 +10:30
Toby Zerner
8e6011e8d0 API for marking all as read 2015-02-10 17:48:58 +10:30
Toby Zerner
af94f22334 Rejig post formatting 2015-02-09 09:49:48 +10:30
Toby Zerner
d45f2fd1ac Signup + modal refactoring 2015-02-08 15:59:39 +10:30
Toby Zerner
077975fb17 Fix index sorting 2015-02-08 15:57:41 +10:30
Toby Zerner
7863f0114c Make post types/components more flexible 2015-02-08 15:56:44 +10:30
Toby Zerner
59964e3b22 Implement post editing 2015-02-08 15:55:33 +10:30
Toby Zerner
28d213d868 Implement discussion composition and creation 2015-02-06 14:07:15 +10:30
Toby Zerner
73d6b17963 Fix up API default sort order 2015-02-06 12:20:58 +10:30
Toby Zerner
809a87f03f Cleanup, remove some old code 2015-02-06 10:35:46 +10:30
Toby Zerner
0365ae6c71 Load discussion and posts with one request
Speeds things up a heap.
Also fix a whole bunch of bugs with the post stream.
2015-02-06 10:30:38 +10:30
Toby Zerner
5b0c775ab4 Mark discussion as read upon reply 2015-02-03 18:41:15 +10:30
Toby Zerner
edce73d6e9 Fix bugs with post creation API 2015-01-30 12:21:33 +10:30
Toby Zerner
c2feae406d Add ember-simple-auth, setup login
- Allow dropdown-buttons to render a partial
2015-01-30 12:21:18 +10:30
Toby Zerner
e37d3743ed Use our own token instead of Laravel's
Laravel’s remember_token is tied to the session/cookies, which we don’t
need as the API is stateless. It makes much more sense to use our own
token mechanism.
2015-01-30 12:08:02 +10:30
Toby Zerner
23a7f22f0b Change another instance of forum title 2015-01-26 12:07:24 +10:30
Toby Zerner
b57a8d3bc2 Improve auth API tests 2015-01-23 15:24:38 +10:30
Toby Zerner
d13ef6f1fc More flexible API URL (necessary for testing) 2015-01-23 12:48:21 +10:30
Toby Zerner
ad269fdb5a Implement token-based auth API 2015-01-22 14:44:33 +10:30
Toby Zerner
9cec5b8f41 Make default user a guest
The way it should be. Now maybe I’ll be forced to get a move-on with
auth :D
2015-01-21 12:16:54 +10:30
Toby Zerner
bf0ea864e4 Don't need to generate html content
as it’s generated on demand by the PostSerializer (for now)
2015-01-21 12:03:30 +10:30
Toby Zerner
7f22498e6c Change engine and make post content nullable
MyISAM doesn’t support transactions which is problematic for testing.
Will have to consider this more carefully when working on FULLTEXT
search, but for now I just wanna test!
2015-01-21 12:02:25 +10:30
Toby Zerner
3be47a3d4f Fix up default permissions 2015-01-21 12:00:52 +10:30
Toby Zerner
2fcb1dc7c8 Begin testing API (see #3) 2015-01-19 20:46:14 +10:30
Toby Zerner
49be8417a9 Fix incorrect column name 2015-01-19 20:43:09 +10:30
Toby Zerner
577d51358d Fix incorrect column name
(Sorry about the retrograde migration changes, but I figure it isn’t
problematic at this stage because we can just reseed. It’s nice to keep
things clean as long as we can!)
2015-01-19 20:42:56 +10:30
Toby Zerner
d204ca87cf 20 results, regardless of what's included 2015-01-16 17:26:17 +10:30
Toby Zerner
abc794c966 Change the way we fetch multiple posts by ID
JSON-API specifies that multiple resources should be fetched with a
comma-separated list of IDs, i.e. discussions/1,2,3,4. But this is
problematic because if we do a findQuery with only one ID, then a
single object will come back from the API where the serializer is
expecting an array containing a single object.

Instead, I’ve just implemented an ids “filter” on the discussions index
API route (which is the default way that the adapter finds multiple
IDs.)
2015-01-16 17:26:17 +10:30
Toby Zerner
5e288f55f5 Change the way post count metadata is stored
We care about the number of “comment” posts, not the number of posts in
total.
2015-01-16 17:26:17 +10:30
Toby Zerner
cfdf01ec70 More descriptive comments 2015-01-16 17:26:17 +10:30
Toby Zerner
c142965483 Clean up discussion API 2015-01-07 17:25:40 +10:30
Toby Zerner
569b9ab27e Fix last_post_number potentially being null 2015-01-07 17:25:40 +10:30
Allineer
d1344492ce "Specified key was too long" fix.
[Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `permissions` add primary key perm
  issions_grantee_entity_permission_primary(`grantee`, `entity`, `permission`))
2015-01-04 22:40:16 +03:00
Toby Zerner
dc74288915 Fix up bug in discussion seeder where number_index could be null. closes #27 2014-12-31 17:52:53 +10:30
Mike Dugan
cc122cfe4b rm vagrantfile, fix seed 2014-12-24 08:39:20 -05:00
Toby Zerner
4f2407bba3 Relocate to workbench so that dev dependencies are loaded properly. 2014-12-23 22:59:15 +10:30
Toby Zerner
238bb40360 Upgrade ember-cli to 0.1.4 and fix related breakage. closes #18 2014-12-23 12:45:07 +10:30
Toby Zerner
79ff8ff4d7 Fix asset publishing. 2014-12-20 21:06:38 +10:30
Toby Zerner
e8140cfd34 Fix seeders. 2014-12-20 21:06:29 +10:30
Toby Zerner
9b30d1b3f2 Forgot some imports. 2014-12-20 17:33:59 +10:30
Toby Zerner
dc73e36312 Add seeders. 2014-12-20 17:27:41 +10:30
Toby Zerner
5a98eb0f06 Use Laravel's database config. 2014-12-20 17:19:00 +10:30
Toby Zerner
74db323f83 Hello world! 2014-12-20 16:56:46 +10:30