Completed
Push — master ( 93d505...55670f )
by
unknown
03:20
created

UserExtraBetting::saveExtraBet()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 3
nop 1
dl 0
loc 28
rs 9.472
c 0
b 0
f 0
1
<?php
2
3
namespace App\GameExtraBetting\Communication\Controller;
4
5
6
use App\GameCore\Persistence\Entity\Team;
7
use App\GameExtraBetting\Business\Form\UserExtraBettingType;
8
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
9
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
10
use Symfony\Component\HttpFoundation\Request;
11
use Symfony\Component\Routing\Annotation\Route;
12
13
class UserExtraBetting extends Controller
14
{
15
    public const TIPP_DATE = '14.06.2018';
16
    /**
17
     * @Route("/gamebetextra/", name="game_bet_extra")
18
     */
19
    public function index()
20
    {
21
        $user = $this->getUser();
22
        
23
        $teams = $this->getTeams();
24
        $bets = [];
25
        /** @var \App\GameExtraBetting\Persistence\Entity\UserExtraBetting[] $userExtraBets */
26
        $userExtraBets = $this->getUserExtraBet($user);
27
        foreach ($userExtraBets as $userExtraBet) {
28
            $bets[$userExtraBet->getType()] = $userExtraBet;
29
        }
30
31
        $bet = new \App\GameExtraBetting\Persistence\Entity\UserExtraBetting();
32
        $forms[1] = $this->createForm(UserExtraBettingType::class, $bet,
0 ignored issues
show
Comprehensibility Best Practice introduced by
$forms was never initialized. Although not strictly required by PHP, it is generally a good practice to add $forms = array(); before regardless.
Loading history...
33
                ['teams' => $teams, 'extrabet' => $bets[1] ?? null, 'label' => 'Tipp 1 (+10 Punkte)', 'type' => 1]
34
                )->createView();
35
        $forms[2] =  $this->createForm(UserExtraBettingType::class, $bet,
36
                ['teams' => $teams, 'extrabet' => $bets[2] ?? null, 'label' => 'Tipp 2 (+5 Punkte)', 'type' => 2]
37
                )->createView();
38
39
        return $this->render(
40
            'gameextrabetting/user_extra_betting/widget.html.twig',
41
            [
42
                'forms' => $forms,
43
            ]
44
        );
45
    }
46
47
    /**
48
     * @Route("/saveextrabet", name="save_extra_bet")
49
     * @Method({"POST"})
50
     */
51
    public function saveExtraBet(Request $request)
52
    {
53
        $params = $request->get('user_extra_betting');
54
55
        $userExtraBetting = new \App\GameExtraBetting\Persistence\Entity\UserExtraBetting();
56
        $form = $this->createForm(UserExtraBettingType::class, $userExtraBetting);
57
        $form->handleRequest($request);
58
        if (!$form->isSubmitted() && !$form->isValid()) {
59
            return $this->json(['status' => false]);
60
        }
61
62
        $entityManager = $this->getDoctrine()->getManager();
63
        $userExtraBetting = $entityManager->getRepository(\App\GameExtraBetting\Persistence\Entity\UserExtraBetting::class)
64
            ->findOneBy(['user' => $this->getUser(), 'type' => $params['type']]);
65
66
        if (!$userExtraBetting instanceof \App\GameExtraBetting\Persistence\Entity\UserExtraBetting) {
67
            $userExtraBetting = new \App\GameExtraBetting\Persistence\Entity\UserExtraBetting();
68
            $userExtraBetting->setUser($this->getUser());
69
            $userExtraBetting->setType($params['type']);
70
        }
71
72
        $userExtraBetting->setDate(new \DateTime("now"));
73
        $userExtraBetting->setText($params['text']);
74
75
        $entityManager->persist($userExtraBetting);
76
        $entityManager->flush();
77
78
        return $this->json(['status' => true]);
79
    }
80
81
    private function getTeams()
82
    {
83
        $result = [];
84
        $teams = $this->getDoctrine()->getRepository(Team::class)
85
                      ->findAll();
86
87
        foreach ($teams as $team) {
88
            $result[$team->getName()] = $team->getId();
89
        }
90
91
        return $result;
92
    }
93
94
    private function getUserExtraBet($user)
95
    {
96
        return $this->getDoctrine()->getRepository(\App\GameExtraBetting\Persistence\Entity\UserExtraBetting::class)
97
                    ->findBy(['user' => $user->getId()]);
98
    }
99
}
100