1
0
mirror of https://github.com/flarum/core.git synced 2025-07-24 02:01:19 +02:00

Merge branch 'master' into psr-7

Conflicts:
	composer.json
	composer.lock
	src/Api/Actions/TokenAction.php
	src/Core/Formatter/FormatterManager.php
	src/Core/Handlers/Events/EmailConfirmationMailer.php
	src/Forum/Actions/ConfirmEmailAction.php
	src/Forum/Actions/IndexAction.php
	src/Forum/Actions/ResetPasswordAction.php
	src/Forum/Actions/SavePasswordAction.php
	src/Forum/routes.php
This commit is contained in:
Franz Liedke
2015-06-06 13:59:59 +02:00
115 changed files with 2286 additions and 1619 deletions

View File

@@ -41,7 +41,9 @@ class IndexAction extends SerializeCollectionAction
'lastUser' => true,
'startPost' => false,
'lastPost' => false,
'relevantPosts' => false
'relevantPosts' => false,
'relevantPosts.discussion' => false,
'relevantPosts.user' => false
];
/**

View File

@@ -51,7 +51,7 @@ class ShowAction extends SerializeResourceAction
*
* @var array
*/
public static $link = ['posts'];
public static $link = ['posts', 'posts.discussion'];
/**
* The fields that are available to be sorted by.

View File

@@ -74,6 +74,7 @@ class IndexAction extends SerializeCollectionAction
$user->markNotificationsAsRead()->save();
return $this->notifications->findByUser($user, $request->limit, $request->offset);
return $this->notifications->findByUser($user, $request->limit, $request->offset)
->load($request->include);
}
}

View File

@@ -4,6 +4,7 @@ use Flarum\Api\Request;
use Flarum\Core\Commands\GenerateAccessTokenCommand;
use Flarum\Core\Repositories\UserRepositoryInterface;
use Flarum\Core\Exceptions\PermissionDeniedException;
use Flarum\Core\Events\UserEmailChangeWasRequested;
use Illuminate\Contracts\Bus\Dispatcher;
class TokenAction extends JsonApiAction
@@ -36,6 +37,14 @@ class TokenAction extends JsonApiAction
throw new PermissionDeniedException;
}
if (! $user->is_activated) {
event(new UserEmailChangeWasRequested($user, $user->email));
return $this->json([
'code' => 'confirm_email',
'email' => $user->email
], 401);
}
$token = $this->bus->dispatch(
new GenerateAccessTokenCommand($user->id)
);

View File

@@ -17,7 +17,7 @@ class ShowAction extends SerializeResourceAction
*
* @var string
*/
public static $serializer = 'Flarum\Api\Serializers\UserSerializer';
public static $serializer = 'Flarum\Api\Serializers\CurrentUserSerializer';
/**
* The relationships that are available to be included, and which ones are

View File

@@ -49,12 +49,12 @@ abstract class BaseSerializer extends SerializerAbstract
$relation = $caller['function'];
}
return function ($model, $include, $links) use ($serializer, $many, $relation) {
return function ($model, $include, $included, $links) use ($serializer, $many, $relation) {
if ($relation instanceof Closure) {
$data = $relation($model, $include);
} else {
if ($include) {
$data = !is_null($model->$relation) ? $model->$relation : ($many ? $model->$relation()->get() : $model->$relation()->first());
$data = !is_null($model->$relation) ? $model->$relation : $model->$relation()->getResults();
} elseif ($many) {
$relationIds = $relation.'_ids';
$data = $model->$relationIds ?: $model->$relation()->get(['id'])->fetch('id')->all();
@@ -67,7 +67,7 @@ abstract class BaseSerializer extends SerializerAbstract
if ($serializer instanceof Closure) {
$serializer = $serializer($model, $data);
}
$serializer = new $serializer($this->actor, $links);
$serializer = new $serializer($this->actor, $included, $links);
return $many ? $serializer->collection($data) : $serializer->resource($data);
};
}

View File

@@ -0,0 +1,21 @@
<?php namespace Flarum\Api\Serializers;
class CurrentUserSerializer extends UserSerializer
{
protected function attributes($user)
{
$attributes = parent::attributes($user);
$actingUser = $this->actor->getUser();
if ($user->id === $actingUser->id) {
$attributes += [
'readTime' => $user->read_time ? $user->read_time->toRFC3339String() : null,
'unreadNotificationsCount' => $user->getUnreadNotificationsCount(),
'preferences' => $user->preferences
];
}
return $this->extendAttributes($user, $attributes);
}
}

View File

@@ -2,13 +2,6 @@
class DiscussionSerializer extends DiscussionBasicSerializer
{
/**
* Default relations to include.
*
* @var array
*/
protected $include = ['startUser', 'lastUser'];
/**
* Serialize attributes of a Discussion model for JSON output.
*

View File

@@ -9,20 +9,6 @@ class PostBasicSerializer extends BaseSerializer
*/
protected $type = 'posts';
/**
* Default relations to link.
*
* @var array
*/
protected $link = ['discussion'];
/**
* Default relations to include.
*
* @var array
*/
protected $include = ['user'];
/**
* Serialize attributes of a Post model for JSON output.
*
@@ -39,7 +25,7 @@ class PostBasicSerializer extends BaseSerializer
];
if ($post->type === 'comment') {
$attributes['excerpt'] = str_limit($post->contentPlain, 200);
$attributes['contentHtml'] = $post->content_html;
} else {
$attributes['content'] = $post->content;
}

View File

@@ -2,13 +2,6 @@
class PostSerializer extends PostBasicSerializer
{
/**
* Default relations to include.
*
* @var array
*/
protected $include = ['user', 'editUser', 'hideUser'];
/**
* Serialize attributes of a Post model for JSON output.
*

View File

@@ -2,13 +2,6 @@
class UserSerializer extends UserBasicSerializer
{
/**
* Default relations to include.
*
* @var array
*/
protected $include = ['groups'];
/**
* Serialize attributes of a User model for JSON output.
*
@@ -19,8 +12,8 @@ class UserSerializer extends UserBasicSerializer
{
$attributes = parent::attributes($user);
$actorUser = $this->actor->getUser();
$canEdit = $user->can($actorUser, 'edit');
$actingUser = $this->actor->getUser();
$canEdit = $user->can($actingUser, 'edit');
$attributes += [
'bioHtml' => $user->bio_html,
@@ -28,7 +21,7 @@ class UserSerializer extends UserBasicSerializer
'discussionsCount' => (int) $user->discussions_count,
'commentsCount' => (int) $user->comments_count,
'canEdit' => $canEdit,
'canDelete' => $user->can($actorUser, 'delete'),
'canDelete' => $user->can($actingUser, 'delete'),
];
if ($user->preference('discloseOnline')) {
@@ -46,14 +39,6 @@ class UserSerializer extends UserBasicSerializer
];
}
if ($user->id === $actorUser->id) {
$attributes += [
'readTime' => $user->read_time ? $user->read_time->toRFC3339String() : null,
'unreadNotificationsCount' => $user->getUnreadNotificationsCount(),
'preferences' => $user->preferences
];
}
return $this->extendAttributes($user, $attributes);
}
}