forked from GNUsocial/gnu-social
[COMPONENTS][Conversation] Route 'conversation_mute' now has the
corresponding conversation view embedded, user is also redirected properly [PLUGINS][Favourite] Fixed typo
This commit is contained in:
parent
859bf0c0bf
commit
fa9df9962e
@ -31,6 +31,8 @@ use App\Core\Cache;
|
||||
use App\Core\DB\DB;
|
||||
use App\Core\Form;
|
||||
use function App\Core\I18n\_m;
|
||||
use App\Core\Log;
|
||||
use App\Core\Router\Router;
|
||||
use App\Entity\Note;
|
||||
use App\Util\Common;
|
||||
use App\Util\Exception\ClientException;
|
||||
@ -101,7 +103,7 @@ class Conversation extends FeedController
|
||||
$user = Common::ensureLoggedIn();
|
||||
$is_muted = ConversationMute::isMuted($conversation_id, $user);
|
||||
$form = Form::create([
|
||||
['mute_conversation', SubmitType::class, ['label' => $is_muted ? _m('Unmute conversation') : _m('Mute conversation')]],
|
||||
['mute_conversation', SubmitType::class, ['label' => $is_muted ? _m('Unmute') : _m('Mute'), 'attr' => ['class' => '']]],
|
||||
]);
|
||||
|
||||
$form->handleRequest($request);
|
||||
@ -113,11 +115,27 @@ class Conversation extends FeedController
|
||||
}
|
||||
DB::flush();
|
||||
Cache::delete(ConversationMute::cacheKeys($conversation_id, $user->getId())['mute']);
|
||||
throw new RedirectException();
|
||||
|
||||
// Redirect user to where they came from
|
||||
// Prevent open redirect
|
||||
if (!\is_null($from = $this->string('from'))) {
|
||||
if (Router::isAbsolute($from)) {
|
||||
Log::warning("Actor {$user->getId()} attempted to mute conversation {$conversation_id} and then get redirected to another host, or the URL was invalid ({$from})");
|
||||
throw new ClientException(_m('Can not redirect to outside the website from here'), 400); // 400 Bad request (deceptive)
|
||||
} else {
|
||||
// TODO anchor on element id
|
||||
throw new RedirectException(url: $from);
|
||||
}
|
||||
} else {
|
||||
// If we don't have a URL to return to, go to the instance root
|
||||
throw new RedirectException('root');
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'_template' => 'conversation/mute.html.twig',
|
||||
'notes' => $this->query(query: "note-conversation:{$conversation_id}")['notes'] ?? [],
|
||||
'is_muted' => $is_muted,
|
||||
'form' => $form->createView(),
|
||||
];
|
||||
}
|
||||
|
@ -226,10 +226,23 @@ class Conversation extends Component
|
||||
return Event::next;
|
||||
}
|
||||
|
||||
$from = $request->query->has('from')
|
||||
? $request->query->get('from')
|
||||
: $request->getPathInfo();
|
||||
|
||||
$mute_extra_action_url = Router::url(
|
||||
'conversation_mute',
|
||||
[
|
||||
'conversation_id' => $note->getConversationId(),
|
||||
'from' => $from . '#note-anchor-' . $note->getId(),
|
||||
],
|
||||
Router::ABSOLUTE_PATH,
|
||||
);
|
||||
|
||||
$actions[] = [
|
||||
'title' => ConversationMute::isMuted($note, $user) ? _m('Unmute conversation') : _m('Mute conversation'),
|
||||
'classes' => '',
|
||||
'url' => Router::url('conversation_mute', ['conversation_id' => $note->getConversationId()]),
|
||||
'url' => $mute_extra_action_url,
|
||||
];
|
||||
|
||||
return Event::next;
|
||||
|
@ -1,5 +1,21 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% extends 'collection/notes.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
{{ form(form) }}
|
||||
<div class="section-widget section-padding">
|
||||
{% if is_muted %}
|
||||
<span class="section-padding alert">
|
||||
<label>Do you wish to <b>unmute</b> this conversation?</label>
|
||||
{{ form(form) }}
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="section-padding alert">
|
||||
<label>Do you wish to <b>mute</b> this conversation?</label>
|
||||
{{ form(form) }}
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
<hr>
|
||||
|
||||
{{ parent() }}
|
||||
</div>
|
||||
{% endblock body %}
|
||||
|
@ -82,7 +82,7 @@ class Favourite extends FeedController
|
||||
// Prevent open redirect
|
||||
if (!\is_null($from = $this->string('from'))) {
|
||||
if (Router::isAbsolute($from)) {
|
||||
Log::warning("Actor {$actor_id} attempted to reply to a note and then get redirected to another host, or the URL was invalid ({$from})");
|
||||
Log::warning("Actor {$actor_id} attempted to favourite a note and then get redirected to another host, or the URL was invalid ({$from})");
|
||||
throw new ClientException(_m('Can not redirect to outside the website from here'), 400); // 400 Bad request (deceptive)
|
||||
} else {
|
||||
// TODO anchor on element id
|
||||
|
@ -30,6 +30,7 @@ input[type=radio] {
|
||||
|
||||
input[type=radio]:checked {
|
||||
background: var(--background-hard);
|
||||
box-shadow: inset 0 0 0 2px var(--accent) !important;
|
||||
}
|
||||
|
||||
input[type=file] {
|
||||
@ -99,6 +100,12 @@ button {
|
||||
margin-top: var(--s);
|
||||
}
|
||||
|
||||
.alert button {
|
||||
cursor: pointer !important;
|
||||
margin-top: unset !important;
|
||||
border-color: tomato !important;
|
||||
}
|
||||
|
||||
button,
|
||||
label {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
|
@ -276,7 +276,9 @@ textarea.form-row-widget {
|
||||
.alert-danger,
|
||||
.form-error,
|
||||
.form-row-widget-error {
|
||||
display: inline-block;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-style: italic;
|
||||
border: solid 2px #ff6347;
|
||||
background-color: #FF634733;
|
||||
|
Loading…
Reference in New Issue
Block a user