Completed
Push — master ( f92548...5447f3 )
by Marcel
03:46
created

ProfileController   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Test Coverage

Coverage 42.11%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 38
c 1
b 0
f 0
dl 0
loc 71
ccs 16
cts 38
cp 0.4211
rs 10
wmc 11

2 Methods

Rating   Name   Duplication   Size   Complexity  
B index() 0 35 7
A changePassword() 0 23 4
1
<?php
2
3
namespace App\Controller;
4
5
use App\Entity\ActiveDirectoryUser;
6
use App\Entity\User;
7
use App\Form\AttributeDataTrait;
8
use App\Form\PasswordChangeType;
9
use App\Form\ProfileType;
10
use App\Security\EmailConfirmation\ConfirmationManager;
11
use App\Service\AttributePersister;
12
use Doctrine\ORM\EntityManagerInterface;
13
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\Routing\Annotation\Route;
16
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
17
18
/**
19
 * @Route("/profile")
20
 */
21
class ProfileController extends AbstractController {
22
23
    use AttributeDataTrait;
24
25
    /**
26
     * @Route("", name="profile")
27
     */
28
    public function index(Request $request, AttributePersister $attributePersister, EntityManagerInterface $em, ConfirmationManager $confirmationManager) {
29
        /** @var User $user */
30
        $user = $this->getUser();
31
32
        $form = $this->createForm(ProfileType::class, $user);
33
        $form->handleRequest($request);
34
35
        if($form->isSubmitted() && $form->isValid()) {
36
            if($form->has('group_email')) {
37
                $email = $form->get('group_email')->get('email')->getData();
38
39
                if(empty($email)) {
40
                    $user->setEmail(null);
41
                } else if($user->getEmail() !== $email) {
42
                    $confirmationManager->newConfirmation($user, $email);
43
                }
44
            }
45
46
            $em->persist($user);
47
            $em->flush();
48
49
            $attributeData = $this->getAttributeData($form);
50
            $attributePersister->persistUserAttributes($attributeData, $user);
51
52
            $this->addFlash('success', 'profile.success');
53
            return $this->redirectToRoute('profile');
54
        }
55
56
        if($confirmationManager->hasConfirmation($user)) {
57
            $this->addFlash('success', 'email_confirmation.sent');
58
        }
59
60
        return $this->render('profile/index.html.twig', [
61
            'form' => $form->createView(),
62
            'user' => $user
63
        ]);
64
    }
65
66
    /**
67
     * @Route("/password", name="change_password")
68
     */
69 1
    public function changePassword(Request $request, EntityManagerInterface $em, UserPasswordEncoderInterface $passwordEncoder) {
70
        /** @var User $user */
71 1
        $user = $this->getUser();
72
73 1
        $form = $this->createForm(PasswordChangeType::class);
74 1
        $form->handleRequest($request);
75
76 1
        if($form->isSubmitted() && $form->isValid() && !$user instanceof ActiveDirectoryUser) {
77 1
            $password = $form->get('newPassword')->getData();
78 1
            $user->setPassword($passwordEncoder->encodePassword($user, $password));
79 1
            $user->setMustChangePassword(false);
80
81 1
            $em->persist($user);
82 1
            $em->flush();
83
84 1
            $this->addFlash('success', 'profile.change_password.success');
85 1
            return $this->redirectToRoute('change_password');
86
        }
87
88 1
        return $this->render('profile/change_password.html.twig', [
89 1
            'form' => $form->createView(),
90 1
            'user' => $user,
91 1
            'can_change_password' => !$user instanceof ActiveDirectoryUser
92
        ]);
93
    }
94
}