Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/config/packages/backoffice_menu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ parameters:
niveau: 'ROLE_SITE'
url : '/admin/site/feuilles'
extra_routes:
- admin_site_sheets_list
- admin_site_sheets_add
- admin_site_sheets_edit
- admin_site_feuilles_list
- admin_site_feuilles_add
- admin_site_feuilles_edit
site_rubriques:
nom: 'Rubriques'
niveau: 'ROLE_SITE'
Expand Down
5 changes: 5 additions & 0 deletions app/config/packages/doctrine.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ doctrine:

profiling_collect_backtrace: '%kernel.debug%'
use_savepoints: true
types:
unix_timestamp: AppBundle\Doctrine\Type\UnixTimestampType
orm:
auto_generate_proxy_classes: true
enable_lazy_ghost_objects: true
Expand All @@ -18,6 +20,9 @@ doctrine:
auto_mapping: true
controller_resolver:
auto_mapping: false
dql:
datetime_functions:
UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp
mappings:
Accounting:
type: attribute
Expand Down
16 changes: 8 additions & 8 deletions app/config/routing/admin_site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,22 @@ admin_site_articles_delete:
requirements:
id: '\d+'

admin_site_sheets_list:
admin_site_feuilles_list:
path: /feuilles
defaults: {_controller: AppBundle\Controller\Admin\Site\Sheet\ListSheetsAction}
defaults: {_controller: AppBundle\Controller\Admin\Site\Feuille\ListFeuillesAction}

admin_site_sheets_add:
admin_site_feuilles_add:
path: /feuilles/add
defaults: {_controller: AppBundle\Controller\Admin\Site\Sheet\AddSheetAction}
defaults: {_controller: AppBundle\Controller\Admin\Site\Feuille\AddFeuilleAction}

admin_site_sheets_edit:
admin_site_feuilles_edit:
path: /feuilles/edit/{id}
defaults: {_controller: AppBundle\Controller\Admin\Site\Sheet\EditSheetAction}
defaults: {_controller: AppBundle\Controller\Admin\Site\Feuille\EditFeuilleAction}
requirements:
id: '\d+'

admin_site_sheets_delete:
admin_site_feuilles_delete:
path: /feuilles/delete/{id}/{token}
defaults: {_controller: AppBundle\Controller\Admin\Site\Sheet\DeleteSheetAction}
defaults: {_controller: AppBundle\Controller\Admin\Site\Feuille\DeleteFeuilleAction}
requirements:
id: '\d+'
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"ext-pdo": "*",
"ext-zip": "*",
"algolia/algoliasearch-client-php": "^3.4",
"beberlei/doctrineextensions": "^1.5",
"captioning/captioning": "^2.6",
"ccmbenchmark/ting_bundle": "^3.8",
"cocur/slugify": "^2.3",
Expand Down
64 changes: 63 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

75 changes: 34 additions & 41 deletions sources/Afup/Corporate/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,55 +4,48 @@

namespace Afup\Site\Corporate;

use AppBundle\Site\Model\Repository\SheetRepository;
use AppBundle\Site\Entity\Feuille as FeuilleEntity;
use AppBundle\Site\Entity\Repository\FeuilleRepository;
use Symfony\Component\Security\Core\User\UserInterface;

final readonly class Page
{
public function __construct(
private SheetRepository $sheetRepository,
private FeuilleRepository $feuilleRepository,
) {}

public function header($url = null, UserInterface $user = null): string
{
$url = urldecode((string) $url);
$str = '<ul>';

$feuillesEnfants = iterator_to_array($this->sheetRepository->getActiveChildrenByParentId(Feuille::ID_FEUILLE_HEADER));
$feuillesEnfants = $this->feuilleRepository->getFeuillesEnfant(Feuille::ID_FEUILLE_HEADER);

$cssClasses = [];
$feuilleLogin = new FeuilleEntity();
$feuilleLogin->idParent = Feuille::ID_FEUILLE_HEADER;
$feuilleLogin->lien = '/member';
$feuilleLogin->alt = '';
$feuilleLogin->position = 999;
$feuilleLogin->etat = 1;

if ($user instanceof UserInterface) {
$feuillesEnfants[] = [
'id' => PHP_INT_MAX,
'id_parent' => Feuille::ID_FEUILLE_HEADER,
'nom' => 'Espace membre',
'lien' => '/member',
'alt' => '',
'position' => '999',
'date' => null,
'etat' => '1',
'image' => null,
'patterns' => "#/admin/company#",
];
$feuilleLogin->id = PHP_INT_MAX;
$feuilleLogin->nom = 'Espace membre';
$feuilleLogin->patterns = "#/admin/company#";
} else {
$feuillesEnfants[] = [
'id' => PHP_INT_MAX - 1,
'id_parent' => Feuille::ID_FEUILLE_HEADER,
'nom' => 'Se connecter',
'lien' => '/member',
'alt' => '',
'position' => '999',
'date' => null,
'etat' => '1',
'image' => null,
'patterns' => null,
'class' => 'desktop-hidden',
];
$feuilleLogin = new FeuilleEntity();
$feuilleLogin->id = PHP_INT_MAX - 1;
$feuilleLogin->nom = 'Se connecter';
$cssClasses[PHP_INT_MAX - 1] = 'desktop-hidden';
}

$feuillesEnfants[] = $feuilleLogin;

foreach ($feuillesEnfants as $feuille) {
$isCurrent = false;
if ($feuille['patterns']) {
foreach (explode(PHP_EOL, (string) $feuille['patterns']) as $pattern) {
if ($feuille->patterns) {
foreach (explode(PHP_EOL, (string) $feuille->patterns) as $pattern) {
$pattern = trim($pattern);
if ($pattern === '') {
continue;
Expand All @@ -64,15 +57,15 @@ public function header($url = null, UserInterface $user = null): string
}
}

if (str_contains($url, (string) $feuille['lien'])) {
if (str_contains($url, (string) $feuille->lien)) {
$isCurrent = true;
}

if (false === $isCurrent) {
$enfants = $this->sheetRepository->getActiveChildrenByParentId($feuille['id']);
$enfants = $this->feuilleRepository->getFeuillesEnfant($feuille->id);
foreach ($enfants as $feuilleEnfant) {
foreach ($this->sheetRepository->getActiveChildrenByParentId($feuilleEnfant['id']) as $feuillesEnfant2) {
if (str_contains($url, (string) $feuillesEnfant2['lien'])) {
foreach ($this->feuilleRepository->getFeuillesEnfant($feuilleEnfant->id) as $feuilleEnfant2) {
if (str_contains($url, (string) $feuilleEnfant2->lien)) {
$isCurrent = true;
}
}
Expand All @@ -81,26 +74,26 @@ public function header($url = null, UserInterface $user = null): string

$class = $isCurrent ? " subheader-current " : "";

if (isset($feuille['class'])) {
$class .= ' ' . $feuille['class'];
if (isset($cssClasses[$feuille->id])) {
$class .= ' ' . $cssClasses[$feuille->id];
}

$str .= sprintf("<li class='%s'><a href='%s'>%s</a></li>", $class, $feuille['lien'], $feuille['nom']);
$str .= sprintf("<li class='%s'><a href='%s'>%s</a></li>", $class, $feuille->lien, $feuille->nom);
}

return $str . '<ul>';
}

/**
* @return array{nom: mixed, items: mixed}[]
* @return array{nom: mixed, items: FeuilleEntity[]}[]
*/
public function footer(): array
{
$footerColumns = [];
foreach ($this->sheetRepository->getActiveChildrenByParentId(Feuille::ID_FEUILLE_FOOTER) as $feuilleColonne) {
foreach ($this->feuilleRepository->getFeuillesEnfant(Feuille::ID_FEUILLE_FOOTER) as $feuilleColonne) {
$footerColumns[] = [
'nom' => $feuilleColonne['nom'],
'items' => $this->sheetRepository->getActiveChildrenByParentId($feuilleColonne['id']),
'nom' => $feuilleColonne->nom,
'items' => $this->feuilleRepository->getFeuillesEnfant($feuilleColonne->id),
];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,47 @@

declare(strict_types=1);

namespace AppBundle\Controller\Admin\Site\Sheet;
namespace AppBundle\Controller\Admin\Site\Feuille;

use AppBundle\AuditLog\Audit;
use AppBundle\Site\Form\SheetType;
use AppBundle\Site\Model\Repository\SheetRepository;
use AppBundle\Site\Model\Sheet;
use AppBundle\Site\Entity\Feuille;
use AppBundle\Site\Entity\Repository\FeuilleRepository;
use AppBundle\Site\Form\FeuilleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

final class AddSheetAction extends AbstractController
final class AddFeuilleAction extends AbstractController
{
public function __construct(
private readonly SheetRepository $sheetRepository,
private readonly FeuilleRepository $feuilleRepository,
private readonly Audit $audit,
#[Autowire('%kernel.project_dir%/../htdocs/templates/site/images')]
private readonly string $storageDir,
) {}

public function __invoke(Request $request): Response
{
$sheet = new Sheet();
$form = $this->createForm(SheetType::class, $sheet);
$feuille = new Feuille();
$form = $this->createForm(FeuilleType::class, $feuille);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
$file = $form->get('image')->getData();
if ($file instanceof UploadedFile) {
$file->move($this->storageDir, $file->getClientOriginalName());
$sheet->setImage($file->getClientOriginalName());
$feuille->image = $file->getClientOriginalName();
}
$this->sheetRepository->save($sheet);
$this->audit->log('Ajout de la feuille ' . $sheet->getName());
$this->addFlash('notice', 'La feuille ' . $sheet->getName() . ' a été ajoutée');
return $this->redirectToRoute('admin_site_sheets_list');
$this->feuilleRepository->save($feuille);
$this->audit->log('Ajout de la feuille ' . $feuille->nom);
$this->addFlash('notice', 'La feuille ' . $feuille->nom . ' a été ajoutée');
return $this->redirectToRoute('admin_site_feuilles_list');
}

return $this->render('admin/site/sheet_form.html.twig', [
return $this->render('admin/site/feuille_form.html.twig', [
'form' => $form->createView(),
'formTitle' => 'Ajouter une feuille',
'image' => false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,34 @@

declare(strict_types=1);

namespace AppBundle\Controller\Admin\Site\Sheet;
namespace AppBundle\Controller\Admin\Site\Feuille;

use AppBundle\AuditLog\Audit;
use AppBundle\Site\Model\Repository\SheetRepository;
use AppBundle\Site\Entity\Repository\FeuilleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;

class DeleteSheetAction extends AbstractController
final class DeleteFeuilleAction extends AbstractController
{
public function __construct(
private SheetRepository $sheetRepository,
private CsrfTokenManagerInterface $csrfTokenManager,
private readonly FeuilleRepository $feuilleRepository,
private readonly CsrfTokenManagerInterface $csrfTokenManager,
private readonly Audit $audit,
) {}

public function __invoke(int $id, string $token): RedirectResponse
{
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('sheet_delete', $token))) {
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('feuille_delete', $token))) {
$this->addFlash('error', 'Token invalide');
return $this->redirectToRoute('admin_site_sheets_list');
return $this->redirectToRoute('admin_site_feuilles_list');
}
$sheet = $this->sheetRepository->get($id);
$name = $sheet->getName();
$this->sheetRepository->delete($sheet);
$feuille = $this->feuilleRepository->find($id);
$name = $feuille->nom;
$this->feuilleRepository->delete($feuille);
$this->audit->log('Suppression de la feuille ' . $name);
$this->addFlash('notice', 'La feuille ' . $name . ' a été supprimée');
return $this->redirectToRoute('admin_site_sheets_list');
return $this->redirectToRoute('admin_site_feuilles_list');
}
}
Loading
Loading