PackageController::delete()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 8
c 1
b 0
f 0
nc 2
nop 2
dl 0
loc 13
rs 10
1
<?php
2
3
namespace PiouPiou\RibsAdminBundle\Controller;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Exception;
7
use PiouPiou\RibsAdminBundle\Entity\Package;
8
use PiouPiou\RibsAdminBundle\Service\PackagistApi;
9
use PiouPiou\RibsAdminBundle\Service\Version;
10
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11
use Symfony\Component\HttpFoundation\RedirectResponse;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\Routing\Annotation\Route;
15
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
16
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
17
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
18
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
19
20
class PackageController extends AbstractController
21
{
22
    /**
23
     * @Route("/packages/", name="ribsadmin_packages")
24
     * @param EntityManagerInterface $em
25
     * @return Response
26
     */
27
    public function index(EntityManagerInterface $em): Response
28
    {
29
        $packages = $em->getRepository(Package::class)->findAll();
30
        
31
        return $this->render("@RibsAdmin/packages/list.html.twig", ["packages" => $packages]);
32
    }
33
34
    /**
35
     * @Route("/packages/create/", name="ribsadmin_packages_create")
36
     * @Route("/packages/show/{guid}", name="ribsadmin_packages_show")
37
     * @Route("/packages/edit/{guid}", name="ribsadmin_packages_edit")
38
     * @param Request $request
39
     * @param EntityManagerInterface $em
40
     * @param PackagistApi $packagist
41
     * @param string|null $guid
42
     * @return Response
43
     * @throws ClientExceptionInterface
44
     * @throws RedirectionExceptionInterface
45
     * @throws ServerExceptionInterface
46
     * @throws TransportExceptionInterface
47
     */
48
    public function edit(Request $request, EntityManagerInterface $em, PackagistApi $packagist, string $guid = null): Response
49
    {
50
        $disabled_form = strpos($request->get("_route"), "_show") ? true : false;
51
        if (!$guid) {
52
            $package = new Package();
53
            $text = "created";
54
        } else {
55
            $package = $em->getRepository(Package::class)->findOneBy(["guid" => $guid]);
56
            $text = "edited";
57
        }
58
59
        $form = $this->createForm(\PiouPiou\RibsAdminBundle\Form\Package::class, $package, ["disabled" => $disabled_form]);
60
        $form->handleRequest($request);
61
62
        if ($form->isSubmitted() && $form->isValid()) {
63
            /** @var Package $data */
64
            $data = $form->getData();
65
            $em->persist($data);
66
            $em->flush();
67
            $this->addFlash("success-flash", "Package " . $data->getProjectName() . " was " . $text);
68
69
            return $this->redirectToRoute("ribsadmin_packages");
70
        }
71
72
        return $this->render("@RibsAdmin/packages/edit.html.twig", [
73
            "disabled_form" => $disabled_form,
74
            "form" => $form->createView(),
75
            "form_errors" => $form->getErrors(),
76
            "package" => $package,
77
            "versions" => $packagist->getAllPackagistVersions($package->getPackageName())
78
        ]);
79
    }
80
81
    /**
82
     * @Route("/packages/delete/{guid}", name="ribsadmin_packages_delete")
83
     * @param EntityManagerInterface $em
84
     * @param string $guid
85
     * @return RedirectResponse
86
     */
87
    public function delete(EntityManagerInterface $em, string $guid): RedirectResponse
88
    {
89
        $package = $em->getRepository(Package::class)->findOneBy(["guid" => $guid]);
90
91
        if ($package) {
92
            $em->remove($package);
93
            $em->flush();
94
            $this->addFlash("success-flash", "The project package was deleted");
95
        } else {
96
            $this->addFlash("error-flash", "The project package was not found");
97
        }
98
99
        return $this->redirectToRoute("ribsadmin_packages");
100
    }
101
102
    /**
103
     * @Route("/packages/update/{guid}", name="ribsadmin_packages_update")
104
     * @param Version $version
105
     * @param string $guid
106
     * @return RedirectResponse
107
     * @throws ClientExceptionInterface
108
     * @throws RedirectionExceptionInterface
109
     * @throws ServerExceptionInterface
110
     * @throws TransportExceptionInterface
111
     */
112
    public function updatePackage(Version $version, string $guid): RedirectResponse
113
    {
114
        if ($guid) {
115
            $version->save($guid);
116
117
            if ($version->getMessages()) {
118
                $message = "<ul>";
119
                $message .= "<li>The project package was not well updated</li>";
120
                foreach ($version->getMessages() as $version_message) {
121
                    $message .= "<li>".$version_message."</li>";
122
                }
123
                $message .= "</ul>";
124
125
                $this->addFlash("info-flash", $message);
126
            } else {
127
                $this->addFlash("success-flash", "The project package was updated");
128
            }
129
        } else {
130
            $this->addFlash("error-flash", "The project package was not found");
131
        }
132
133
        return $this->redirectToRoute("ribsadmin_packages");
134
    }
135
136
    /**
137
     * @Route("/packages/update-version/{guid}/{install_version}", name="ribsadmin_packages_update_version")
138
     * @param Version $version
139
     * @param string $guid
140
     * @param string $install_version
141
     * @return RedirectResponse|Response
142
     * @throws ClientExceptionInterface
143
     * @throws RedirectionExceptionInterface
144
     * @throws ServerExceptionInterface
145
     * @throws TransportExceptionInterface
146
     */
147
    public function changePackageVersion(Version $version, string $guid, string $install_version)
148
    {
149
        $response = $version->updatePackage($guid, $install_version);
150
151
        if ($response) {
152
            $response = str_replace("\n", "<br>", $response);
153
            return $this->render("@RibsAdmin/packages/show-update-version.html.twig", ["logs" => $response]);
154
        }
155
156
        return $this->redirectToRoute("ribsadmin_packages_update", ["guid" => $guid]);
157
    }
158
}
159