Failed Conditions
Push — issue#699 ( 7155bc )
by Guilherme
07:26
created

PersonSupportController::viewAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 2
dl 0
loc 13
ccs 0
cts 9
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * This file is part of the login-cidadao project or it's bundles.
4
 *
5
 * (c) Guilherme Donato <guilhermednt on github>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace LoginCidadao\SupportBundle\Controller;
12
13
use Doctrine\ORM\NonUniqueResultException;
14
use LoginCidadao\CoreBundle\Entity\PersonRepository;
15
use LoginCidadao\CoreBundle\Entity\SentEmail;
16
use LoginCidadao\CoreBundle\Model\PersonInterface;
17
use LoginCidadao\SupportBundle\Form\PersonSearchFormType;
18
use LoginCidadao\SupportBundle\Model\PersonSearchRequest;
19
use LoginCidadao\SupportBundle\Service\SupportHandler;
20
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
21
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
22
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
23
use Symfony\Component\HttpFoundation\Request;
24
25
/**
26
 * Class PersonSupportController
27
 * @package LoginCidadao\SupportBundle\Controller
28
 *
29
 * @Security("has_role('ROLE_SUPPORT_AGENT')")
30
 */
31
class PersonSupportController extends Controller
32
{
33
    /**
34
     * @Route("/support/search", name="lc_support_person_search")
35
     */
36
    public function indexAction(Request $request)
37
    {
38
        $search = new PersonSearchRequest();
39
40
        $search->smartSearch = $request->get('search', null);
41
42
        $form = $this->createForm(PersonSearchFormType::class, $search);
43
        $form->handleRequest($request);
44
45
        if ($form->isSubmitted() && $form->isValid()) {
46
            /** @var PersonRepository $repo */
47
            $repo = $this->getDoctrine()->getRepository('LoginCidadaoCoreBundle:Person');
48
            try {
49
                $person = $repo->getSmartSearchQuery($search->smartSearch)
50
                    ->getQuery()->getOneOrNullResult();
51
52
                if ($person instanceof PersonInterface) {
53
                    return $this->redirectToRoute('lc_support_person_view', [
54
                        'id' => $person->getId(),
55
                        'ticket' => $search->supportTicket,
56
                    ]);
57
                }
58
            } catch (NonUniqueResultException $e) {
59
                // TODO: regular search
60
            }
61
62
            dump("FORM OK");
63
        }
64
65
        return $this->render('LoginCidadaoSupportBundle:PersonSupport:index.html.twig', [
66
            'form' => $form->createView(),
67
        ]);
68
    }
69
70
    /**
71
     * @Route("/support/person/{id}", name="lc_support_person_view")
72
     */
73
    public function viewAction(Request $request, $id)
74
    {
75
        $supportRequest = $this->validateSupportTicketId($request->get('ticket'));
76
77
        /** @var SupportHandler $supportHandler */
78
        $supportHandler = $this->get(SupportHandler::class);
79
80
        $person = $supportHandler->getSupportPerson($id);
81
82
        return $this->render('LoginCidadaoSupportBundle:PersonSupport:view.html.twig', [
83
            'person' => $person,
84
            'supportRequest' => $supportRequest,
85
            'dataValidation' => $supportHandler->getValidationMap($person),
86
        ]);
87
    }
88
89
    private function validateSupportTicketId(string $ticket = null): SentEmail
90
    {
91
        /** @var SupportHandler $supportHandler */
92
        $supportHandler = $this->get(SupportHandler::class);
93
        $sentEmail = $ticket ? $supportHandler->getInitialMessage($ticket) : null;
94
        if (!$sentEmail instanceof SentEmail) {
95
            throw $this->createNotFoundException("Invalid Support Ticket ID");
96
        }
97
98
        return $sentEmail;
99
    }
100
}
101