[COMPONENT][Group] Add group subscribe button
This commit is contained in:
parent
559ec3df39
commit
5c10448080
@ -30,7 +30,6 @@ use App\Core\Form;
|
|||||||
use function App\Core\I18n\_m;
|
use function App\Core\I18n\_m;
|
||||||
use App\Core\Log;
|
use App\Core\Log;
|
||||||
use App\Core\UserRoles;
|
use App\Core\UserRoles;
|
||||||
use App\Entity\Actor;
|
|
||||||
use App\Entity as E;
|
use App\Entity as E;
|
||||||
use App\Util\Common;
|
use App\Util\Common;
|
||||||
use App\Util\Exception\ClientException;
|
use App\Util\Exception\ClientException;
|
||||||
@ -62,15 +61,17 @@ class Group extends ActorController
|
|||||||
{
|
{
|
||||||
Nickname::validate($nickname, which: Nickname::CHECK_LOCAL_GROUP); // throws
|
Nickname::validate($nickname, which: Nickname::CHECK_LOCAL_GROUP); // throws
|
||||||
$group = LocalGroup::getActorByNickname($nickname);
|
$group = LocalGroup::getActorByNickname($nickname);
|
||||||
if (\is_null($group)) {
|
|
||||||
$actor = Common::actor();
|
$actor = Common::actor();
|
||||||
|
$subscribe_form = null;
|
||||||
|
|
||||||
|
if (\is_null($group)) {
|
||||||
if (!\is_null($actor)) {
|
if (!\is_null($actor)) {
|
||||||
$form = Form::create([
|
$create_form = Form::create([
|
||||||
['create', SubmitType::class, ['label' => _m('Create this group')]],
|
['create', SubmitType::class, ['label' => _m('Create this group')]],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$form->handleRequest($request);
|
$create_form->handleRequest($request);
|
||||||
if ($form->isSubmitted() && $form->isValid()) {
|
if ($create_form->isSubmitted() && $create_form->isValid()) {
|
||||||
Log::info(
|
Log::info(
|
||||||
_m(
|
_m(
|
||||||
'Actor id:{actor_id} nick:{actor_nick} created the group {nickname}',
|
'Actor id:{actor_id} nick:{actor_nick} created the group {nickname}',
|
||||||
@ -78,9 +79,9 @@ class Group extends ActorController
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
DB::persist($group = Actor::create([
|
DB::persist($group = E\Actor::create([
|
||||||
'nickname' => $nickname,
|
'nickname' => $nickname,
|
||||||
'type' => Actor::GROUP,
|
'type' => E\Actor::GROUP,
|
||||||
'is_local' => true,
|
'is_local' => true,
|
||||||
'roles' => UserRoles::BOT,
|
'roles' => UserRoles::BOT,
|
||||||
]));
|
]));
|
||||||
@ -98,17 +99,40 @@ class Group extends ActorController
|
|||||||
'is_admin' => true,
|
'is_admin' => true,
|
||||||
]));
|
]));
|
||||||
DB::flush();
|
DB::flush();
|
||||||
Cache::delete(Actor::cacheKeys($actor->getId())['subscriber']);
|
Cache::delete(E\Actor::cacheKeys($actor->getId())['subscriber']);
|
||||||
Cache::delete(Actor::cacheKeys($actor->getId())['subscribed']);
|
Cache::delete(E\Actor::cacheKeys($actor->getId())['subscribed']);
|
||||||
throw new RedirectException();
|
throw new RedirectException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'_template' => 'group/view.html.twig',
|
'_template' => 'group/view.html.twig',
|
||||||
'nickname' => $nickname,
|
'nickname' => $nickname,
|
||||||
'create_form' => $form->createView(),
|
'create_form' => $create_form->createView(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (!\is_null($actor)
|
||||||
|
&& \is_null(Cache::get(
|
||||||
|
E\Subscription::cacheKeys($actor, $group)['subscribed'],
|
||||||
|
fn () => DB::findOneBy('subscription', [
|
||||||
|
'subscriber' => $actor->getId(),
|
||||||
|
'subscribed' => $group->getId(),
|
||||||
|
], return_null: true),
|
||||||
|
))
|
||||||
|
) {
|
||||||
|
$subscribe_form = Form::create([['subscribe', SubmitType::class, ['label' => _m('Subscribe to this group')]]]);
|
||||||
|
$subscribe_form->handleRequest($request);
|
||||||
|
if ($subscribe_form->isSubmitted() && $subscribe_form->isValid()) {
|
||||||
|
DB::persist(E\Subscription::create([
|
||||||
|
'subscriber' => $actor->getId(),
|
||||||
|
'subscribed' => $group->getId(),
|
||||||
|
]));
|
||||||
|
DB::flush();
|
||||||
|
Cache::delete(E\Actor::cacheKeys($group->getId())['subscriber']);
|
||||||
|
Cache::delete(E\Actor::cacheKeys($actor->getId())['subscribed']);
|
||||||
|
Cache::delete(E\Subscription::cacheKeys($actor, $group)['subscribed']);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$notes = !\is_null($group) ? DB::dql(
|
$notes = !\is_null($group) ? DB::dql(
|
||||||
@ -127,6 +151,7 @@ class Group extends ActorController
|
|||||||
'actor' => $group,
|
'actor' => $group,
|
||||||
'nickname' => $group?->getNickname() ?? $nickname,
|
'nickname' => $group?->getNickname() ?? $nickname,
|
||||||
'notes' => $notes,
|
'notes' => $notes,
|
||||||
|
'subscribe_form' => $subscribe_form?->createView(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,9 @@
|
|||||||
{% endblock stylesheets %}
|
{% endblock stylesheets %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
{% if subscribe_form is defined and subscribe_form is not null %}
|
||||||
|
{{ form(subscribe_form) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if actor is defined and actor is not null %}
|
{% if actor is defined and actor is not null %}
|
||||||
{% block profile_view %}
|
{% block profile_view %}
|
||||||
|
Loading…
Reference in New Issue
Block a user