ghost
1 year ago
21 changed files with 736 additions and 360 deletions
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
<?php |
||||
|
||||
namespace App\Controller; |
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
|
||||
class DashboardController extends AbstractController |
||||
{ |
||||
#[Route('/')] |
||||
public function indexNoLocale(): Response |
||||
{ |
||||
return $this->redirectToRoute( |
||||
'dashboard_index', |
||||
[ |
||||
'_locale' => 'en' |
||||
] |
||||
); |
||||
} |
||||
|
||||
#[Route( |
||||
'/{_locale}', |
||||
name: 'dashboard_index' |
||||
)] |
||||
public function index(Request $request): Response |
||||
{ |
||||
return $this->render( |
||||
'default/dashboard/index.html.twig' |
||||
); |
||||
} |
||||
} |
@ -1,20 +0,0 @@
@@ -1,20 +0,0 @@
|
||||
<?php |
||||
|
||||
namespace App\Controller; |
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
|
||||
class HomeController extends AbstractController |
||||
{ |
||||
#[Route( |
||||
'/{_locale}/', |
||||
name: 'home_index' |
||||
)] |
||||
public function index(Request $request): Response |
||||
{ |
||||
return $this->render('default/home/index.html.twig'); |
||||
} |
||||
} |
@ -1,76 +0,0 @@
@@ -1,76 +0,0 @@
|
||||
<?php |
||||
|
||||
namespace App\Controller; |
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
|
||||
use App\Service\User; |
||||
|
||||
class ProfileController extends AbstractController |
||||
{ |
||||
#[Route( |
||||
'/{_locale}/profile', |
||||
name: 'profile_index' |
||||
)] |
||||
public function index(Request $request, User $user): Response |
||||
{ |
||||
return $this->render( |
||||
'default/profile/index.html.twig', |
||||
[ |
||||
'user' => $user->init($request->getClientIp()) |
||||
] |
||||
); |
||||
} |
||||
|
||||
#[Route( |
||||
'/{_locale}/profile/setting', |
||||
name: 'profile_setting' |
||||
)] |
||||
public function setting(): Response |
||||
{ |
||||
// @TODO |
||||
return $this->render( |
||||
'default/profile/setting.html.twig' |
||||
); |
||||
} |
||||
|
||||
public function module(string $route = ''): Response |
||||
{ |
||||
return $this->render( |
||||
'default/profile/module.html.twig', |
||||
[ |
||||
'route' => $route, |
||||
'stars' => 0, |
||||
'views' => 0, |
||||
'comments' => 0, |
||||
'downloads' => 0, |
||||
'editions' => 0, |
||||
'identicon' => $this->_getIdenticon( |
||||
'@TODO', |
||||
17, |
||||
[ |
||||
'backgroundColor' => 'rgba(255, 255, 255, 0)', |
||||
] |
||||
) |
||||
] |
||||
); |
||||
} |
||||
|
||||
private function _getIdenticon( |
||||
mixed $id, |
||||
int $size, |
||||
array $style, |
||||
string $format = 'webp') : string |
||||
{ |
||||
$identicon = new \Jdenticon\Identicon(); |
||||
|
||||
$identicon->setValue($id); |
||||
$identicon->setSize($size); |
||||
$identicon->setStyle($style); |
||||
|
||||
return $identicon->getImageDataUri($format); |
||||
} |
||||
} |
@ -0,0 +1,161 @@
@@ -0,0 +1,161 @@
|
||||
<?php |
||||
|
||||
namespace App\Controller; |
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
|
||||
use App\Service\UserService; |
||||
use App\Service\TimeService; |
||||
|
||||
class UserController extends AbstractController |
||||
{ |
||||
#[Route( |
||||
'/{_locale}/profile', |
||||
name: 'user_profile', |
||||
defaults: [ |
||||
'_locale' => '%app.locale%' |
||||
], |
||||
requirements: [ |
||||
'_locale' => '%app.locales%', |
||||
], |
||||
)] |
||||
public function profile( |
||||
Request $request, |
||||
UserService $userService, |
||||
TimeService $timeService): Response |
||||
{ |
||||
// Init user |
||||
$user = $userService->init( |
||||
$request->getClientIp() |
||||
); |
||||
|
||||
// Process post request |
||||
if ($request->isMethod('post')) |
||||
{ |
||||
// Update locale |
||||
if (in_array($request->get('locale'), explode('|', $this->getParameter('app.locales')))) |
||||
{ |
||||
$user->setLocale( |
||||
$request->get('locale') |
||||
); |
||||
} |
||||
|
||||
// Update locales |
||||
if ($request->get('locales')) |
||||
{ |
||||
$user->setLocales( |
||||
$request->get('locales') |
||||
); |
||||
} |
||||
|
||||
// Save changes to DB |
||||
$userService->save($user); |
||||
} |
||||
|
||||
// Generate identicon |
||||
$identicon = new \Jdenticon\Identicon(); |
||||
|
||||
$identicon->setValue($user->getAddress()); |
||||
$identicon->setSize(48); |
||||
$identicon->setStyle( |
||||
[ |
||||
'backgroundColor' => 'rgba(255, 255, 255, 0)', |
||||
'padding' => 0 |
||||
] |
||||
); |
||||
|
||||
// Render template |
||||
return $this->render( |
||||
'default/user/profile.html.twig', |
||||
[ |
||||
'user' => [ |
||||
'id' => $user->getId(), |
||||
'address' => $request->getClientIp() == $user->getAddress() ? $user->getAddress() : false, |
||||
'moderator' => $user->isModerator(), |
||||
'approved' => $user->isApproved(), |
||||
'status' => $user->isStatus(), |
||||
'locale' => $user->getLocale(), |
||||
'locales' => $user->getLocales(), |
||||
'added' => $timeService->ago( |
||||
$user->getAdded() |
||||
), |
||||
'identicon' => $identicon->getImageDataUri('webp'), |
||||
], |
||||
'locales' => explode('|', $this->getParameter('app.locales')) |
||||
] |
||||
); |
||||
} |
||||
|
||||
#[Route( |
||||
'/{_locale}/user/{id}', |
||||
name: 'user_info', |
||||
defaults: [ |
||||
'_locale' => '%app.locale%' |
||||
], |
||||
requirements: [ |
||||
'_locale' => '%app.locales%', |
||||
], |
||||
)] |
||||
public function info( |
||||
int $id, |
||||
Request $request, |
||||
UserService $userService, |
||||
TimeService $timeService): Response |
||||
{ |
||||
// Init user |
||||
if (!$user = $userService->get($id)) |
||||
{ |
||||
throw $this->createNotFoundException(); |
||||
} |
||||
|
||||
// Generate identicon |
||||
$identicon = new \Jdenticon\Identicon(); |
||||
|
||||
$identicon->setValue($user->getAddress()); |
||||
$identicon->setSize(48); |
||||
$identicon->setStyle( |
||||
[ |
||||
'backgroundColor' => 'rgba(255, 255, 255, 0)', |
||||
'padding' => 0 |
||||
] |
||||
); |
||||
|
||||
// Render template |
||||
return $this->render( |
||||
'default/user/info.html.twig', |
||||
[ |
||||
'user' => [ |
||||
'id' => $user->getId(), |
||||
'address' => $request->getClientIp() == $user->getAddress() ? $user->getAddress() : false, |
||||
'moderator' => $user->isModerator(), |
||||
'approved' => $user->isApproved(), |
||||
'status' => $user->isStatus(), |
||||
'locale' => $user->getLocale(), |
||||
'locales' => $user->getLocales(), |
||||
'added' => $timeService->ago( |
||||
$user->getAdded() |
||||
), |
||||
'identicon' => $identicon->getImageDataUri('webp'), |
||||
] |
||||
] |
||||
); |
||||
} |
||||
|
||||
public function module(string $route = ''): Response |
||||
{ |
||||
return $this->render( |
||||
'default/user/module.html.twig', |
||||
[ |
||||
'route' => $route, |
||||
'stars' => 0, |
||||
'views' => 0, |
||||
'comments' => 0, |
||||
'downloads' => 0, |
||||
'editions' => 0, |
||||
] |
||||
); |
||||
} |
||||
} |
@ -1,12 +0,0 @@
@@ -1,12 +0,0 @@
|
||||
<?php |
||||
|
||||
namespace App\Service; |
||||
|
||||
class User |
||||
{ |
||||
public function init(string $address): string |
||||
{ |
||||
// @TODO |
||||
return $address; |
||||
} |
||||
} |
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
<?php |
||||
|
||||
namespace App\Service; |
||||
|
||||
use App\Entity\User; |
||||
use App\Repository\UserRepository; |
||||
use Doctrine\ORM\EntityManagerInterface; |
||||
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; |
||||
|
||||
class UserService |
||||
{ |
||||
private EntityManagerInterface $entityManager; |
||||
private UserRepository $userRepository; |
||||
private ParameterBagInterface $parameterBagInterface; |
||||
|
||||
public function __construct(EntityManagerInterface $entityManager, ParameterBagInterface $parameterBagInterface) |
||||
{ |
||||
$this->entityManager = $entityManager; |
||||
$this->userRepository = $entityManager->getRepository(User::class); |
||||
$this->parameterBagInterface = $parameterBagInterface; |
||||
} |
||||
|
||||
public function init(string $address): User |
||||
{ |
||||
// Return existing user |
||||
if ($result = $this->userRepository->findOneByAddressField($address)) |
||||
{ |
||||
return $result; |
||||
} |
||||
|
||||
// Create new user |
||||
$user = new User(); |
||||
|
||||
$user->setAddress($address); |
||||
$user->setAdded(time()); |
||||
$user->setApproved(false); |
||||
$user->setModerator(false); |
||||
$user->setStatus(true); |
||||
$user->setLocale( |
||||
$this->parameterBagInterface->get('app.locale') |
||||
); |
||||
$user->setLocales( |
||||
explode('|', $this->parameterBagInterface->get('app.locales')) |
||||
); |
||||
|
||||
$this->save($user); |
||||
|
||||
// Return user data |
||||
return $user; |
||||
} |
||||
|
||||
public function get(int $id): ?User |
||||
{ |
||||
return $this->userRepository->findOneByIdField($id); |
||||
} |
||||
|
||||
public function save(User $user) : void |
||||
{ |
||||
$this->entityManager->persist($user); |
||||
$this->entityManager->flush(); |
||||
} |
||||
} |
@ -1,2 +0,0 @@
@@ -1,2 +0,0 @@
|
||||
{% extends 'default/layout.html.twig' %} |
||||
{% block title %}{{ 'Profile - Settings'|trans }} - {{ name }}{% endblock %} |
@ -1,178 +0,0 @@
@@ -1,178 +0,0 @@
|
||||
<div class="margin-y-8-px position-fixed width-180-px margin-l--196-px background-color-night border-radius-3-px"> |
||||
<div class="padding-x-16-px padding-y-12-px border-bottom-default"> |
||||
<a href="{{ path('profile_index') }}"> |
||||
<img class="border-radius-50 vertical-align-middle" src="{{ identicon }}" alt="identicon" /> |
||||
anon |
||||
</a> |
||||
<a class="text-color-default float-right" href="{{ path('profile_setting') }}" title="{{ 'Setting'|trans }}"> |
||||
<svg class="vertical-align-middle" xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-gear-fill" viewBox="0 0 16 16"> |
||||
<path d="M9.405 1.05c-.413-1.4-2.397-1.4-2.81 0l-.1.34a1.464 1.464 0 0 1-2.105.872l-.31-.17c-1.283-.698-2.686.705-1.987 1.987l.169.311c.446.82.023 1.841-.872 2.105l-.34.1c-1.4.413-1.4 2.397 0 2.81l.34.1a1.464 1.464 0 0 1 .872 2.105l-.17.31c-.698 1.283.705 2.686 1.987 1.987l.311-.169a1.464 1.464 0 0 1 2.105.872l.1.34c.413 1.4 2.397 1.4 2.81 0l.1-.34a1.464 1.464 0 0 1 2.105-.872l.31.17c1.283.698 2.686-.705 1.987-1.987l-.169-.311a1.464 1.464 0 0 1 .872-2.105l.34-.1c1.4-.413 1.4-2.397 0-2.81l-.34-.1a1.464 1.464 0 0 1-.872-2.105l.17-.31c.698-1.283-.705-2.686-1.987-1.987l-.311.169a1.464 1.464 0 0 1-2.105-.872l-.1-.34zM8 10.93a2.929 2.929 0 1 1 0-5.86 2.929 2.929 0 0 1 0 5.858z"/> |
||||
</svg> |
||||
</a> |
||||
</div> |
||||
<div class="padding-y-8-px"> |
||||
{% if route == 'home_index' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-house-door-fill" viewBox="0 0 16 16"> |
||||
<path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Home'|trans }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('home_index') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-house-door-fill" viewBox="0 0 16 16"> |
||||
<path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Home'|trans }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_stars' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-star-fill" viewBox="0 0 16 16"> |
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Stars'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ stars }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_stars') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-star-fill" viewBox="0 0 16 16"> |
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Stars'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ stars }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_views' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-clock-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Views'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ views }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_views') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-clock-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Views'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ views }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_comments' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-chat-fill" viewBox="0 0 16 16"> |
||||
<path d="M8 15c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7c0 1.76.743 3.37 1.97 4.6-.097 1.016-.417 2.13-.771 2.966-.079.186.074.394.273.362 2.256-.37 3.597-.938 4.18-1.234A9.06 9.06 0 0 0 8 15z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Comments'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ comments }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_comments') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-chat-fill" viewBox="0 0 16 16"> |
||||
<path d="M8 15c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7c0 1.76.743 3.37 1.97 4.6-.097 1.016-.417 2.13-.771 2.966-.079.186.074.394.273.362 2.256-.37 3.597-.938 4.18-1.234A9.06 9.06 0 0 0 8 15z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Comments'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ comments }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_downloads' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-arrow-down-circle-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Downloads'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ downloads }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_downloads') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-arrow-down-circle-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Downloads'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ downloads }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_editions' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-file-diff-fill" viewBox="0 0 16 16"> |
||||
<path d="M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM8.5 4.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5a.5.5 0 0 1 1 0zM6 10h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1 0-1z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Editions'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ editions }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_editions') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-file-diff-fill" viewBox="0 0 16 16"> |
||||
<path d="M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM8.5 4.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5a.5.5 0 0 1 1 0zM6 10h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1 0-1z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Editions'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ editions }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == '/page/submit' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-plus-circle-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Submit'|trans }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_submit') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-plus-circle-fill" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Submit'|trans }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
@ -1,2 +0,0 @@
@@ -1,2 +0,0 @@
|
||||
{% extends 'default/layout.html.twig' %} |
||||
{% block title %}{{ 'Profile - Settings'|trans }} - {{ name }}{% endblock %} |
@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
|
||||
{% extends 'default/layout.html.twig' %} |
||||
{% block title %}{{ 'User'|trans }} #{{ user.id }} - {{ name }}{% endblock %} |
||||
{% block main_content %} |
||||
<div class="text-center"> |
||||
<img class="border-radius-50 border-default border-width-2-px" src="{{ user.identicon }}" alt="identicon" /> |
||||
</div> |
||||
<h2>{{ 'Profile'|trans }}</h2> |
||||
<table class="width-100"> |
||||
<tbody> |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Common'|trans }}</td> |
||||
</tr> |
||||
{% if user.address %} |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Address'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
{{ user.address }} |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M11 1a2 2 0 0 0-2 2v4a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h5V3a3 3 0 0 1 6 0v4a.5.5 0 0 1-1 0V3a2 2 0 0 0-2-2zM3 8a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1H3z"/> |
||||
</svg> |
||||
<span class="opacity-0 parent-hover-opacity-09" title="{{ 'Address hidden for others'|trans }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/> |
||||
</svg> |
||||
</span> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Joined'|trans }}</td> |
||||
<td>{{ user.added }}</td> |
||||
</tr> |
||||
{% else %} |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Joined'|trans }}</td> |
||||
<td class="padding-t-16-px">{{ user.added }}</td> |
||||
</tr> |
||||
{% endif %} |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Access'|trans }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Status'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
{% if user.status %} |
||||
{{ 'active'|trans }} |
||||
{% else %} |
||||
{{ 'disabled'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Approved'|trans }}</td> |
||||
<td> |
||||
{% if user.approved %} |
||||
{{ 'yes'|trans }} |
||||
{% else %} |
||||
{{ 'no'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Moderator'|trans }}</td> |
||||
<td> |
||||
{% if user.moderator %} |
||||
{{ 'yes'|trans }} |
||||
{% else %} |
||||
{{ 'no'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Settings'|trans }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Interface'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
{{ user.locale|trans }} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Content filter'|trans }}</td> |
||||
<td> |
||||
{% for locale in user.locales %} |
||||
<div class="padding-y-4-px"> |
||||
{{ locale|trans }} |
||||
</div> |
||||
{% endfor %} |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
{% endblock %} |
@ -0,0 +1,186 @@
@@ -0,0 +1,186 @@
|
||||
<div class="margin-y-8-px position-fixed width-180-px margin-l--196-px background-color-night border-radius-3-px"> |
||||
<div class="padding-y-8-px"> |
||||
{% if route == 'dashboard_index' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Home'|trans }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('dashboard_index') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Home'|trans }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'user_profile' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Profile'|trans }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('user_profile') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Profile'|trans }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_stars' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Stars'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ stars }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_stars') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Stars'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ stars }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_views' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Views'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ views }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_views') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Views'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ views }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_comments' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M8 15c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7c0 1.76.743 3.37 1.97 4.6-.097 1.016-.417 2.13-.771 2.966-.079.186.074.394.273.362 2.256-.37 3.597-.938 4.18-1.234A9.06 9.06 0 0 0 8 15z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Comments'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ comments }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_comments') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M8 15c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7c0 1.76.743 3.37 1.97 4.6-.097 1.016-.417 2.13-.771 2.966-.079.186.074.394.273.362 2.256-.37 3.597-.938 4.18-1.234A9.06 9.06 0 0 0 8 15z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Comments'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ comments }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_downloads' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Downloads'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ downloads }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_downloads') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Downloads'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ downloads }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_editions' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM8.5 4.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5a.5.5 0 0 1 1 0zM6 10h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1 0-1z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Editions'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ editions }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_editions') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM8.5 4.5V6H10a.5.5 0 0 1 0 1H8.5v1.5a.5.5 0 0 1-1 0V7H6a.5.5 0 0 1 0-1h1.5V4.5a.5.5 0 0 1 1 0zM6 10h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1 0-1z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Editions'|trans }} |
||||
</span> |
||||
<span class="float-right"> |
||||
{{ editions }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
{% if route == 'page_submit' %} |
||||
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Submit'|trans }} |
||||
</span> |
||||
</span> |
||||
{% else %} |
||||
<a class="padding-x-16-px padding-y-8-px display-block background-color-hover-night-light text-color-default" href="{{ path('page_submit') }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/> |
||||
</svg> |
||||
<span class="margin-l-4-px"> |
||||
{{ 'Submit'|trans }} |
||||
</span> |
||||
</a> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
|
||||
{% extends 'default/layout.html.twig' %} |
||||
{% block title %}{{ 'Profile'|trans }} - {{ name }}{% endblock %} |
||||
{% block main_content %} |
||||
<form name="profile" action="{{ path('user_profile') }}" method="post"> |
||||
<div class="text-center"> |
||||
<img class="border-radius-50 border-default border-width-2-px" src="{{ user.identicon }}" alt="identicon" /> |
||||
</div> |
||||
<h2>{{ 'Profile'|trans }}</h2> |
||||
<table class="width-100"> |
||||
<tbody> |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Common'|trans }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Address'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
{{ user.address }} |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M11 1a2 2 0 0 0-2 2v4a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h5V3a3 3 0 0 1 6 0v4a.5.5 0 0 1-1 0V3a2 2 0 0 0-2-2zM3 8a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1H3z"/> |
||||
</svg> |
||||
<span class="opacity-0 parent-hover-opacity-09" title="{{ 'Address hidden for others'|trans }}"> |
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> |
||||
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/> |
||||
</svg> |
||||
</span> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Joined'|trans }}</td> |
||||
<td>{{ user.added }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Access'|trans }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Status'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
{% if user.status %} |
||||
{{ 'active'|trans }} |
||||
{% else %} |
||||
{{ 'disabled'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Approved'|trans }}</td> |
||||
<td> |
||||
{% if user.approved %} |
||||
{{ 'yes'|trans }} |
||||
{% else %} |
||||
{{ 'no'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Moderator'|trans }}</td> |
||||
<td> |
||||
{% if user.moderator %} |
||||
{{ 'yes'|trans }} |
||||
{% else %} |
||||
{{ 'no'|trans }} |
||||
{% endif %} |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-b-8-px border-bottom-default text-right" colspan="2">{{ 'Settings'|trans }}</td> |
||||
</tr> |
||||
<tr> |
||||
<td class="padding-t-16-px">{{ 'Interface'|trans }}</td> |
||||
<td class="padding-t-16-px"> |
||||
<select name="locale"> |
||||
{% for locale in locales %} |
||||
{% if locale == user.locale %} |
||||
<option value="{{ locale }}" selected="selected">{{ locale|trans }}</option> |
||||
{% else %} |
||||
<option value="{{ locale }}">{{ locale|trans }}</option> |
||||
{% endif %} |
||||
{% endfor %} |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td>{{ 'Content filter'|trans }}</td> |
||||
<td> |
||||
{% for locale in locales %} |
||||
<div class="padding-y-4-px"> |
||||
{% if locale in user.locales %} |
||||
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" checked="checked" /> |
||||
{% else %} |
||||
<input name="locales[]" id="{{ locale }}" type="checkbox" value="{{ locale }}" /> |
||||
{% endif %} |
||||
<label for="{{ locale }}"> |
||||
{{ locale|trans }} |
||||
</label> |
||||
</div> |
||||
{% endfor %} |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<div class="text-right"> |
||||
<input class="button-green" type="submit" value="{{'Save'|trans }}" /> |
||||
</div> |
||||
</form> |
||||
{% endblock %} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
{% extends 'base.html.twig' %} |
||||
|
||||
{% block title %}Hello RedirectController!{% endblock %} |
||||
|
||||
{% block body %} |
||||
<style> |
||||
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; } |
||||
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; } |
||||
</style> |
||||
|
||||
<div class="example-wrapper"> |
||||
<h1>Hello {{ controller_name }}! ✅</h1> |
||||
|
||||
This friendly message is coming from: |
||||
<ul> |
||||
<li>Your controller at <code><a href="{{ '/home/ibox/Sites/yggverse/YGGtracker/src/Controller/RedirectController.php'|file_link(0) }}">src/Controller/RedirectController.php</a></code></li> |
||||
<li>Your template at <code><a href="{{ '/home/ibox/Sites/yggverse/YGGtracker/templates/redirect/index.html.twig'|file_link(0) }}">templates/redirect/index.html.twig</a></code></li> |
||||
</ul> |
||||
</div> |
||||
{% endblock %} |
Loading…
Reference in new issue