Completed
Push — master ( 857394...4794c5 )
by Mahmoud
03:25
created

SetUserEmailWithConfirmationAction::run()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
1
<?php
2
3
namespace App\Containers\Email\Actions;
4
5
use App\Containers\Authentication\Tasks\GetAuthenticatedUserTask;
6
use App\Containers\Email\Tasks\GenerateEmailConfirmationUrlTask;
7
use App\Containers\Email\Tasks\SendConfirmationEmailTask;
8
use App\Containers\Email\Tasks\SetUserEmailTask;
9
use App\Port\Action\Abstracts\Action;
10
11
/**
12
 * Class SetUserEmailWithConfirmationAction.
13
 *
14
 * @author Mahmoud Zalt <[email protected]>
15
 */
16
class SetUserEmailWithConfirmationAction extends Action
17
{
18
19
    /**
20
     * @var  \App\Containers\Email\Tasks\SetUserEmailTask
21
     */
22
    private $setUserEmailTask;
23
24
    /**
25
     * @var  \App\Containers\Email\Tasks\GenerateEmailConfirmationUrlTask
26
     */
27
    private $generateEmailConfirmationUrlTask;
28
29
    /**
30
     * @var  \App\Containers\Email\Tasks\SendConfirmationEmailTask
31
     */
32
    private $sendConfirmationEmailTask;
33
34
    /**
35
     * @var  \App\Containers\Authentication\Tasks\GetAuthenticatedUserTask
36
     */
37
    private $getAuthenticatedUserTask;
38
39
    /**
40
     * SetUserEmailAction constructor.
41
     *
42
     * @param \App\Containers\Email\Tasks\SetUserEmailTask                  $setUserEmailTask
43
     * @param \App\Containers\Email\Tasks\GenerateEmailConfirmationUrlTask  $generateEmailConfirmationUrlTask
44
     * @param \App\Containers\Email\Tasks\SendConfirmationEmailTask         $sendConfirmationEmailTask
45
     * @param \App\Containers\Authentication\Tasks\GetAuthenticatedUserTask $getAuthenticatedUserTask
46
     */
47
    public function __construct(
48
        SetUserEmailTask $setUserEmailTask,
49
        GenerateEmailConfirmationUrlTask $generateEmailConfirmationUrlTask,
50
        SendConfirmationEmailTask $sendConfirmationEmailTask,
51
        GetAuthenticatedUserTask $getAuthenticatedUserTask
52
    ) {
53
        $this->setUserEmailTask = $setUserEmailTask;
54
        $this->generateEmailConfirmationUrlTask = $generateEmailConfirmationUrlTask;
55
        $this->sendConfirmationEmailTask = $sendConfirmationEmailTask;
56
        $this->getAuthenticatedUserTask = $getAuthenticatedUserTask;
57
    }
58
59
60
    /**
61
     * @param $userId
62
     * @param $email
63
     *
64
     * @return  bool
65
     */
66
    public function run($email, $userId = null)
67
    {
68
        if(!$userId){
69
            $userId = $this->getAuthenticatedUserTask->run()->id;
70
        }
71
72
        // set the email on the user in the database
73
        $user = $this->setUserEmailTask->run($userId, $email);
74
75
        // generate confirmation code, store it on the memory and inject it in url
76
        $confirmationUrl = $this->generateEmailConfirmationUrlTask->run($user);
77
78
        // send a confirmation email to the user with the link
79
        $this->sendConfirmationEmailTask->run($user, $confirmationUrl);
80
81
        return true;
82
    }
83
}
84