[TWIG] Remove kludge event TwigPopulateVars

This commit is contained in:
Diogo Peralta Cordeiro 2021-09-18 07:27:17 +01:00
parent fda998e335
commit 67d62cf37b
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
15 changed files with 112 additions and 147 deletions

View File

@ -19,30 +19,8 @@
namespace Component\Left;
use App\Core\Event;
use App\Core\Log;
use App\Core\Modules\Component;
use App\Util\Common;
use Exception;
class Left extends Component
{
public function onEndTwigPopulateVars(array &$vars)
{
try {
$user = Common::user();
if ($user != null) {
$actor = $user->getActor();
$vars['user_id'] = $user->getId();
$vars['user_nickname'] = $user->getNickname();
$vars['user_tags'] = $actor->getSelfTags();
$vars['user_followers'] = $actor->getFollowersCount();
$vars['user_followed'] = $actor->getFollowedCount();
$vars['user_avatar'] = $actor->getAvatarUrl();
}
} catch (Exception $e) {
Log::error('Got an exception while populating variables for the left panel: ' . $e);
}
return Event::next;
}
}

View File

@ -53,7 +53,7 @@ class Posting extends Component
* @throws RedirectException
* @throws ServerException
*/
public function onStartTwigPopulateVars(array &$vars): bool
public function onAppendRightPostingBlock(array $vars, array &$res): bool
{
if (($user = Common::user()) === null) {
return Event::next;
@ -106,7 +106,7 @@ class Posting extends Component
}
}
$vars['post_form'] = $form->createView();
$res = $form->createView();
return Event::next;
}

View File

@ -19,14 +19,8 @@
namespace Component\Right;
use App\Core\Event;
use App\Core\Modules\Component;
use App\Util\Common;
class Right extends Component
{
public function onStartTwigPopulateVars(array &$vars)
{
return Event::next;
}
}

View File

@ -71,19 +71,19 @@ class Cover extends Plugin
* @param array $vars
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function onStartTwigPopulateVars(array &$vars): bool
{
/*if (Common::user() != null) {
$cover = DB::find('cover', ['actor_id' => Common::user()->getId()]);
if ($cover != null) {
$vars['profile_extras'][] = ['name' => 'cover', 'vars' => ['img' => '/cover']];
} else {
$vars['profile_extras'][] = ['name' => 'cover', 'vars' => []];
}
}*/
return Event::next;
}
*
* public function onStartTwigPopulateVars(array &$vars): bool
* {
* if (Common::user() != null) {
* $cover = DB::find('cover', ['actor_id' => Common::user()->getId()]);
* if ($cover != null) {
* $vars['profile_extras'][] = ['name' => 'cover', 'vars' => ['img' => '/cover']];
* } else {
* $vars['profile_extras'][] = ['name' => 'cover', 'vars' => []];
* }
* }
* return Event::next;
* }*/
/**
* Output our dedicated stylesheet

View File

@ -24,6 +24,7 @@ namespace Plugin\Directory;
use App\Core\Event;
use App\Core\Modules\Plugin;
use App\Core\Router\RouteLoader;
use App\Core\Router\Router;
class Directory extends Plugin
{
@ -39,17 +40,16 @@ class Directory extends Plugin
}
/**
* Populate twig vars
* Add Links to menu
*
* @param array $vars
* @param array $res out menu items
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function onStartTwigPopulateVars(array &$vars): bool
public function onAddMainNavigationItem(array $vars, array &$res): bool
{
$vars['main_nav_tabs'][] = ['title' => 'Actors', 'route' => 'directory_actors'];
$vars['main_nav_tabs'][] = ['title' => 'Groups', 'route' => 'directory_groups'];
$res[] = ['title' => 'Actors', 'path' => Router::url('directory_actors', [])];
$res[] = ['title' => 'Groups', 'path' => Router::url('directory_groups', [])];
return Event::next;
}
}

View File

@ -27,12 +27,12 @@ use App\Core\Form;
use function App\Core\I18n\_m;
use App\Core\Modules\NoteHandlerPlugin;
use App\Core\Router\RouteLoader;
use App\Core\Router\Router;
use App\Entity\Note;
use App\Util\Common;
use App\Util\Exception\InvalidFormException;
use App\Util\Exception\NoSuchNoteException;
use App\Util\Exception\RedirectException;
use App\Util\Formatting;
use App\Util\Nickname;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
@ -114,12 +114,10 @@ class Favourite extends NoteHandlerPlugin
return Event::next;
}
public function onInsertLeftPanelLink(string $user_nickname, &$res): bool
public function onAddProfileNavigationItem(array $vars, array &$res): bool
{
$res[] = Formatting::twigRenderString(<<<END
<a href="{{ path("actor_favourites_nickname", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("favourites") }}'>Favourites</a>
<a href="{{ path("actor_reverse_favourites_nickname", {'nickname' : user_nickname}) }}" class='hover-effect {{ active("reverse_favourites") }}'>Reverse Favs</a>
END, ['user_nickname' => $user_nickname]);
$res[] = ['title' => 'Favourites', 'path' => Router::url('actor_favourites_nickname', ['nickname' => $vars['nickname']])];
$res[] = ['title' => 'Reverse Favourites', 'path' => Router::url('actor_reverse_favourites_nickname', ['nickname' => $vars['nickname']])];
return Event::next;
}

View File

@ -70,14 +70,14 @@ class Poll extends NoteHandlerPlugin
* @param array $vars
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function onStartTwigPopulateVars(array &$vars): bool
{
$vars['tabs'][] = ['title' => 'Poll',
'href' => 'newpoll',
];
return Event::next;
}
*
* public function onStartTwigPopulateVars(array &$vars): bool
* {
* $vars['tabs'][] = ['title' => 'Poll',
* 'href' => 'newpoll',
* ];
* return Event::next;
* }*/
/**
* Output our dedicated stylesheet

View File

@ -71,22 +71,22 @@ class ProfileColor extends Plugin
* @param array $vars
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function onStartTwigPopulateVars(array &$vars): bool
{
/*$vars['profile_tabs'][] = [
'title' => 'Color',
'desc' => 'Change your profile color.',
'path' => 'profilecolor/profilecolor.html.twig',
];*/
if (Common::user() != null) {
$color = DB::find('profile_color', ['actor_id' => Common::user()->getId()]);
if ($color != null) {
$vars['profile_extras'][] = ['name' => 'profilecolor', 'vars' => ['color' => $color->getColor()]];
}
}
return Event::next;
}
*
* public function onStartTwigPopulateVars(array &$vars): bool
* {
* /*$vars['profile_tabs'][] = [
* 'title' => 'Color',
* 'desc' => 'Change your profile color.',
* 'path' => 'profilecolor/profilecolor.html.twig',
* ];
* if (Common::user() != null) {
* $color = DB::find('profile_color', ['actor_id' => Common::user()->getId()]);
* if ($color != null) {
* $vars['profile_extras'][] = ['name' => 'profilecolor', 'vars' => ['color' => $color->getColor()]];
* }
* }
* return Event::next;
* }*/
/**
* Output our dedicated stylesheet

View File

@ -89,8 +89,12 @@ class Controller extends AbstractController implements EventSubscriberInterface
$request = $event->getRequest();
$this->request = $request;
$this->vars = ['controller' => $controller, 'request' => $request, 'have_user' => Common::user() !== null];
Event::handle('StartTwigPopulateVars', [&$this->vars]);
$this->vars = ['controller' => $controller, 'request' => $request];
$user = Common::user();
if ($user !== null) {
$this->vars['current_actor'] = $user->getActor();
}
$event->stopPropagation();
return $event;
@ -111,10 +115,9 @@ class Controller extends AbstractController implements EventSubscriberInterface
}
$this->vars = array_merge_recursive($this->vars, $response);
Event::handle('EndTwigPopulateVars', [&$this->vars]);
$template = $this->vars['_template'];
unset($this->vars['_template'], $this->vars['request'], $response['_template']);
unset($this->vars['_template'], $response['_template']);
// Respond in the most preferred acceptable content type
$accept = $request->getAcceptableContentTypes() ?: ['text/html'];

View File

@ -265,7 +265,7 @@ class Actor extends Entity
Cache::delete('selftags-' . $this->id);
}
public function getFollowersCount()
public function getSubscribersCount()
{
return Cache::get('followers-' . $this->id,
function () {
@ -274,7 +274,7 @@ class Actor extends Entity
});
}
public function getFollowedCount()
public function getSubscriptionsCount()
{
return Cache::get('followed-' . $this->id,
function () {

View File

@ -113,7 +113,7 @@ abstract class Common
public static function actor(): ?Actor
{
return self::user()->getActor();
return self::user()?->getActor();
}
public static function userNickname(): ?string

View File

@ -8,7 +8,7 @@
<div class="h-feed hfeed notes">
{% if notes is defined and notes is not empty %}
{% for conversation in notes %}
{% include '/note/view.html.twig' with {'note': conversation['note'], 'have_user': have_user, 'replies': conversation['replies']} only %}
{% include '/note/view.html.twig' with {'note': conversation['note'], 'replies': conversation['replies']} only %}
<hr tabindex="0" title="{{ 'End of note and replies.' | trans }}">
{% endfor %}
{% else %}

View File

@ -16,21 +16,19 @@
{% if app.user %}
<div class="note-actions">
{% if have_user %}
{% for current_action in get_note_actions(note) %}
{{ form_start(current_action) }}
{% if current_action.submit_favourite is defined %}
{{ form_widget(current_action.submit_favourite) }}
{% endif %}
{% if current_action.submit_repeat is defined %}
{{ form_widget(current_action.submit_repeat) }}
{% endif %}
{% if current_action.reply is defined %}
{{ form_widget(current_action.reply) }}
{% endif %}
{{ form_end(current_action) }}
{% endfor %}
{% endif %}
{% for current_action in get_note_actions(note) %}
{{ form_start(current_action) }}
{% if current_action.submit_favourite is defined %}
{{ form_widget(current_action.submit_favourite) }}
{% endif %}
{% if current_action.submit_repeat is defined %}
{{ form_widget(current_action.submit_repeat) }}
{% endif %}
{% if current_action.reply is defined %}
{{ form_widget(current_action.reply) }}
{% endif %}
{{ form_end(current_action) }}
{% endfor %}
</div>
{% endif %}

View File

@ -6,12 +6,13 @@
<aside class="panel-content accessibility-target">
{% if app.user %}
<section class='section-widget section-widget-padded' title="{{ 'Your profile information.' | trans }}">
<a id="user" href="{{ path('actor_view_nickname', {'nickname' : user_nickname}) }}">
<img src='{{ user_avatar }}' class="icon icon-avatar" alt="{{ 'Your account\'s avatar.' | trans }}">
<a id="user" href="{{ path('actor_view_nickname', {'nickname' : current_actor.getNickname()}) }}">
<img src='{{ current_actor.getAvatarUrl() }}' class="icon icon-avatar" alt="{{ 'Your account\'s avatar.' | trans }}">
<div class="user-info">
<strong id="user-nickname" title="{{ 'Your account\' nickname.' | trans }}">{{ user_nickname }}</strong>
<strong id="user-nickname" title="{{ 'Your account\' nickname.' | trans }}">{{ current_actor.getNickname() }}</strong>
<nav class="user-tags">
{% set user_tags = current_actor.getSelfTags() %}
{% if user_tags %}
{% for tag in user_tags %}
<a href='#'> #{{ tag }}</a>
@ -22,28 +23,26 @@
</nav>
<section id="user-stats">
{% if user_followers %}<h2>{{ 'Followers' | trans }} {{ user_followers }}</h2> {% endif %}
{% if user_followed %}<h2>{{ 'Followed' | trans }} {{ user_followed }}</h2> {% endif %}
<h2>{{ 'Subscriptions' | trans }} {{ current_actor.getSubscriptionsCount() }}</h2>
<h2>{{ 'Subscribers' | trans }} {{ current_actor.getSubscribersCount() }}</h2>
</section>
</div>
</a>
{# {% for extra in profile_extras %}
{% include '/'~ extra.name ~ '/view.html.twig' with {'vars': extra.vars} only %}
{% endfor %} #}
<nav tabindex="0" class="profile-navigation" title="{{ 'Navigate through account related pages.' | trans }}">
<a title='{{ 'Your messages.' | trans }}' href='{{ path('settings') }}' class='{{ active("replies") }}'>
Messages
</a>
<a title='{{ 'Replies to your notes.' | trans }}' href="{{ path('replies', {'nickname' : user_nickname}) }}" class='{{ active("replies") }}'>
<a title='{{ 'Replies to your notes.' | trans }}' href="{{ path('replies', {'nickname' : current_actor.getNickname()}) }}" class='{{ active("replies") }}'>
Replies
</a>
{% for link in handle_event('InsertLeftPanelLink', user_nickname) %}
{{ link | raw }}
{% for tab in handle_event('AddProfileNavigationItem', {'nickname': current_actor.getNickname()}) %}
<a href="{{ tab['path'] }}">
{{ tab['title'] }}
</a>
{% endfor %}
<a title='{{ 'Access your account settings.' | trans }}' href="{{ path('settings') }}" class='{{ active('settings') }}'>
@ -85,8 +84,8 @@
</a>
</li>
<li>
{% if user_nickname is defined %}
<a href="{{ path("home_all", {'nickname' : user_nickname}) }}" class='{{ active("home_all") }}'>
{% if app.user %}
<a href="{{ path("home_all", {'nickname' : current_actor.getNickname()}) }}" class='{{ active("home_all") }}'>
Home
</a>
{% endif %}
@ -97,11 +96,11 @@
</a>
</li>
{% if main_nav_tabs is defined %}
{% for tab in main_nav_tabs %}
{% if app.user %}
{% for link in handle_event('AddMainNavigationItem', {'nickname': current_actor.getNickname()}) %}
<li>
<a href="{{ path(tab['route']) }}" class='{{ active(tab['route']) }}'>
{{ tab['title'] }}
<a href="{{ link['path'] }}">
{{ link['title'] }}
</a>
</li>
{% endfor %}

View File

@ -5,39 +5,34 @@
<a id="anchor-right-panel" class="anchor-hidden" title="{{ 'Press tab to access selected region!' | trans }}"></a>
<aside class="panel-content accessibility-target">
{% if post_form is defined and not post_form.isRendered() %}
<section class="section-widget" title={{ 'Create a new note.' | trans }}>
<details class="section-title-details" title={{ 'Expand if you want to access more options.' | trans }}>
<summary class="section-title-summary">
{{ "Create a note" | trans }}{{ icon('arrow-down', 'icon icon-details-open') | raw }}
</summary>
{% set post_form = handle_event('AppendRightPostingBlock', {'request': request}) %}
<section class="section-widget" title={{ 'Create a new note.' | trans }}>
<details class="section-title-details" title={{ 'Expand if you want to access more options.' | trans }}>
<summary class="section-title-summary">
{{ "Create a note" | trans }}{{ icon('arrow-down', 'icon icon-details-open') | raw }}
</summary>
</details>
{% for tab in tabs %}
<a class="section-title-menu-element" href={{ path(tab['href']) }}>{{ tab['title'] }}</a>
{% endfor %}
</details>
<div class="section-form">
<fieldset>
{{ form_start(post_form) }}
<div class="section-form">
<fieldset>
{{ form_start(post_form) }}
{{ form_row(post_form.to, {'attr': {'class': 'section-form-scope'}}) }}
{{ form_row(post_form.to, {'attr': {'class': 'section-form-scope'}}) }}
{{ form_row(post_form.visibility, {'attr': {'class': 'section-form-scope'}}) }}
{{ form_row(post_form.visibility, {'attr': {'class': 'section-form-scope'}}) }}
{{ form_row(post_form.content, {'attr': {'class': 'section-form-textarea'}}) }}
{{ form_row(post_form.content, {'attr': {'class': 'section-form-textarea'}}) }}
<label for="{{ post_form.attachments.vars.id }}" class="section-form-options">
{{ form_widget(post_form.attachments) }}
</label>
<label for="{{ post_form.attachments.vars.id }}" class="section-form-options">
{{ form_widget(post_form.attachments) }}
</label>
{{ form_row(post_form.post_note, {'attr': {'class': 'section-form-send'}}) }}
{{ form_row(post_form.post_note, {'attr': {'class': 'section-form-send'}}) }}
{{ form_end(post_form) }}
</fieldset>
</div>
</section>
{% endif %}
{{ form_end(post_form) }}
</fieldset>
</div>
</section>
{% set current_path = app.request.get('_route') %}
{% if right_panel_vars is defined %}