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:
@@ -41,7 +41,9 @@ class IndexAction extends SerializeCollectionAction
|
||||
'lastUser' => true,
|
||||
'startPost' => false,
|
||||
'lastPost' => false,
|
||||
'relevantPosts' => false
|
||||
'relevantPosts' => false,
|
||||
'relevantPosts.discussion' => false,
|
||||
'relevantPosts.user' => false
|
||||
];
|
||||
|
||||
/**
|
||||
|
@@ -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.
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
);
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
};
|
||||
}
|
||||
|
21
framework/core/src/Api/Serializers/CurrentUserSerializer.php
Normal file
21
framework/core/src/Api/Serializers/CurrentUserSerializer.php
Normal 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);
|
||||
}
|
||||
}
|
@@ -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.
|
||||
*
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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.
|
||||
*
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user