PageService   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
c 0
b 0
f 0
dl 0
loc 53
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A remove() 0 4 1
A save() 0 4 1
A create() 0 14 2
A __construct() 0 7 1
A delete() 0 11 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Service\Admin;
6
7
use App\Entity\Menu;
8
use App\Entity\Page;
9
use App\Service\AbstractService;
10
use Doctrine\ORM\EntityManagerInterface;
11
use Symfony\Component\HttpFoundation\RequestStack;
12
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
13
14
final class PageService extends AbstractService
15
{
16
    private EntityManagerInterface $em;
17
18
    public function __construct(
19
        CsrfTokenManagerInterface $tokenManager,
20
        RequestStack $requestStack,
21
        EntityManagerInterface $entityManager
22
    ) {
23
        parent::__construct($tokenManager, $requestStack);
24
        $this->em = $entityManager;
25
    }
26
27
    public function create(Page $page): void
28
    {
29
        // Save page
30
        $this->save($page);
31
        $this->clearCache('pages_count');
32
        $this->addFlash('success', 'message.created');
33
34
        // Add a menu item
35
        if (true === $page->getShowInMenu()) {
36
            $menu = new Menu();
37
            $menu->setTitle($page->getTitle() ?? '');
38
            $menu->setLocale($page->getLocale() ?? '');
39
            $menu->setUrl('/info/'.($page->getSlug() ?? ''));
40
            $this->save($menu);
41
        }
42
    }
43
44
    public function save(object $object): void
45
    {
46
        $this->em->persist($object);
47
        $this->em->flush();
48
    }
49
50
    public function remove(object $object): void
51
    {
52
        $this->em->remove($object);
53
        $this->em->flush();
54
    }
55
56
    public function delete(Page $page): void
57
    {
58
        // Delete page
59
        $this->remove($page);
60
        $this->clearCache('pages_count');
61
        $this->addFlash('success', 'message.deleted');
62
63
        // Delete a menu item
64
        $menu = $this->em->getRepository(Menu::class)->findOneBy(['url' => '/info/'.($page->getSlug() ?? '')]);
65
        if ($menu) {
66
            $this->remove($menu);
67
        }
68
    }
69
}
70