1
0
mirror of https://github.com/flarum/core.git synced 2025-08-05 07:57:46 +02:00

[mentions] feat: group mentions (#3658)

* wip: group mentions

* Apply fixes from StyleCI

* chore: format

* group mention autocomplete

* chore: format

* remove console.log

* implement notifications

* prevent guest and member groups from being mentioned

* Update extensions/mentions/less/forum.less

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* rename displayname to groupname

* Update extensions/mentions/src/Formatter/FormatGroupMentions.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* remove redundant unparse

* simplify migrations

* add group deleted translation

* Apply fixes from StyleCI

* handle everything falsy

* Include icon in group mention preview

* remove box-shadow from autocomplete group results

* Add color to preview

* chore: format

* Remove box shadow from group autocomplete results

* Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* remove unneeded migration

* prevent former group icon from beingdisplayed

* add group searcher with permissions

* Apply fixes from StyleCI

* Search groups based on canSearchGroups permission

* Don't include virtual groups in results

* Add search groups translation

* Revert "remove unneeded migration"

This reverts commit 9347665baa.

* Revert "Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php"

This reverts commit 8406d51df2.

* add searchGroups permission to tests

* Apply fixes from StyleCI

* Add default searchGroups permission

* Apply fixes from StyleCI

* Update extensions/mentions/js/src/forum/addComposerAutocomplete.js

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update extensions/mentions/migrations/2022_10_21_000000_create_post_mentions_groups_table.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* remove unneeded migration, correct table table

* correct table name in down migration

* Remove group searcher

* Apply fixes from StyleCI

* Remove group searching from composer autocomplete

* Add mentionGroups permission

* Apply fixes from StyleCI

* prevent post preview from rendering a group mention when user does not have permission

* remove test changes

* wip: expose ServerRequestInterface to textformatter parse()

* Apply fixes from StyleCI

* Set post content properly

* php 7.x compatibility

* begin adding groupmention tests

* Apply fixes from StyleCI

* test virtual groups don't mention

* Apply fixes from StyleCI

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update extensions/mentions/extend.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update extensions/mentions/extend.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* requested changes

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/tests/integration/api/groups/ListTest.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/src/Search/SearchServiceProvider.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* Update framework/core/src/Extend/Formatter.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* remove default permission migration

* try using datetime column instead of timestamp

* Apply fixes from StyleCI

* chore: remove commented code

* add tests

* Apply fixes from StyleCI

* Pass actor to parser instead of ServerRequest

* Allow for  to be null

* Update framework/core/src/Extend/Formatter.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* pass actor instead of request

* Apply fixes from StyleCI

* actor instead of request

* remove serverrequest

* Apply fixes from StyleCI

* remove dupe actor

* Update extensions/mentions/src/Formatter/CheckPermissions.php

Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>

* fix type in comment

* group does not have the relation, post does

* test: invalid, deleted, fresh data mentions

Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>

* Apply fixes from StyleCI

* fix: group mentions don't work when editing posts

Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>

Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
This commit is contained in:
Ian Morland
2022-11-05 19:29:01 +00:00
committed by GitHub
parent cdc76567d4
commit 827e905f8e
24 changed files with 915 additions and 34 deletions

View File

@@ -52,6 +52,7 @@ class Formatter implements ExtenderInterface, LifecycleInterface
* - \s9e\TextFormatter\Parser $parser
* - mixed $context
* - string $text: The text to be parsed.
* - \Flarum\User\User|null $actor. This argument MUST either be nullable, or omitted entirely.
*
* The callback should return:
* - string $text: The text to be parsed.

View File

@@ -9,6 +9,7 @@
namespace Flarum\Formatter;
use Flarum\User\User;
use Illuminate\Contracts\Cache\Repository;
use Psr\Http\Message\ServerRequestInterface;
use s9e\TextFormatter\Configurator;
@@ -83,14 +84,15 @@ class Formatter
*
* @param string $text
* @param mixed $context
* @param User|null $user
* @return string
*/
public function parse($text, $context = null)
public function parse($text, $context = null, User $user = null)
{
$parser = $this->getParser($context);
foreach ($this->parsingCallbacks as $callback) {
$text = $callback($parser, $context, $text);
$text = $callback($parser, $context, $text, $user);
}
return $parser->parse($text);

View File

@@ -85,7 +85,8 @@ class PostReplyHandler
$discussion->id,
Arr::get($command->data, 'attributes.content'),
$actor->id,
$command->ipAddress
$command->ipAddress,
$command->actor,
);
if ($actor->isAdmin() && ($time = Arr::get($command->data, 'attributes.createdAt'))) {

View File

@@ -44,9 +44,10 @@ class CommentPost extends Post
* @param string $content
* @param int $userId
* @param string $ipAddress
* @param User|null $actor
* @return static
*/
public static function reply($discussionId, $content, $userId, $ipAddress)
public static function reply($discussionId, $content, $userId, $ipAddress, User $actor = null)
{
$post = new static;
@@ -57,7 +58,7 @@ class CommentPost extends Post
$post->ip_address = $ipAddress;
// Set content last, as the parsing may rely on other post attributes.
$post->content = $content;
$post->setContentAttribute($content, $actor);
$post->raise(new Posted($post));
@@ -74,7 +75,7 @@ class CommentPost extends Post
public function revise($content, User $actor)
{
if ($this->content !== $content) {
$this->content = $content;
$this->setContentAttribute($content, $actor);
$this->edited_at = Carbon::now();
$this->edited_user_id = $actor->id;
@@ -145,10 +146,11 @@ class CommentPost extends Post
* Parse the content before it is saved to the database.
*
* @param string $value
* @param User $actor
*/
public function setContentAttribute($value)
public function setContentAttribute($value, User $actor = null)
{
$this->attributes['content'] = $value ? static::$formatter->parse($value, $this) : null;
$this->attributes['content'] = $value ? static::$formatter->parse($value, $this, $actor ?? $this->user) : null;
}
/**