Passed
Push — developer ( 6b5868...bed0f9 )
by Radosław
22:42 queued 03:39
created

Settings_Companies_VerifyEmail_Action   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 12
eloc 57
c 1
b 0
f 0
dl 0
loc 95
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B confirm() 0 41 6
A request() 0 30 5
A __construct() 0 5 1
1
<?php
2
/**
3
 * YetiForce verify email action class file.
4
 *
5
 * @package   Action
6
 *
7
 * @copyright YetiForce S.A.
8
 * @license   YetiForce Public License 6.5 (licenses/LicenseEN.txt or yetiforce.com)
9
 * @author    Klaudia Łozowska <[email protected]>
10
 * @author    Radosław Skrzypczak <[email protected]>
11
 */
12
13
use App\YetiForce\EmailVerification;
14
15
/**
16
 * Class for YetiForce verify email actions.
17
 */
18
class Settings_Companies_VerifyEmail_Action extends Settings_Vtiger_Basic_Action
19
{
20
	/** {@inheritdoc} */
21
	public function __construct()
22
	{
23
		parent::__construct();
24
		$this->exposeMethod('request');
25
		$this->exposeMethod('confirm');
26
	}
27
28
	/**
29
	 * Send email with a verification code to the given email address.
30
	 *
31
	 * @param \App\Request $request
32
	 *
33
	 * @throws \yii\db\Exception
34
	 */
35
	public function request(App\Request $request): void
36
	{
37
		$result = false;
38
		$responseType = 'error';
39
		$message = '';
40
		if ($request->has('terms_agreement') && !$request->getBoolean('terms_agreement')) {
41
			$message = \App\Language::translate('LBL_TERMS_AGREEMENT_REQUIRED', $request->getModule(false));
42
		} else {
43
			try {
44
				$email = $request->getByType('email', \App\Purifier::EMAIL);
45
				$registration = (new EmailVerification());
46
				$result = $registration->setEmail($email)->setType(EmailVerification::PROCESS_INIT)->send();
47
48
				if ($error = $registration->getError()) {
49
					throw new \App\Exceptions\AppException($error);
50
				}
51
			} catch (\App\Exceptions\AppException $e) {
52
				$result = false;
53
				$responseType = 'error';
54
				$message = $e->getDisplayMessage();
55
			}
56
		}
57
58
		$response = new Vtiger_Response();
59
		$response->setResult([
60
			'success' => $result,
61
			'message' => $message,
62
			'type' => $responseType
63
		]);
64
		$response->emit();
65
	}
66
67
	/**
68
	 * Register an email address.
69
	 *
70
	 * @param \App\Request $request
71
	 */
72
	public function confirm(App\Request $request): void
73
	{
74
		$result = false;
75
		$responseType = 'error';
76
		$message = \App\Language::translate('LBL_INVALID_VERIFICATION_CODE', $request->getModule(false));
77
78
		try {
79
			if ($request->has('terms_agreement') && !$request->getBoolean('terms_agreement')) {
80
				throw new \App\Exceptions\AppException(\App\Language::translate('LBL_TERMS_AGREEMENT_REQUIRED', $request->getModule(false), null, false));
81
			}
82
			$email = $request->getByType('email', \App\Purifier::EMAIL);
83
			$code = $request->getByType('code', \App\Purifier::TEXT);
84
			$newsletterAgreement = $request->getBoolean('newsletter_agreement');
85
86
			$registration = (new EmailVerification());
87
			$result = $registration->setEmail($email)
88
				->setNewsletter($newsletterAgreement)
89
				->setCode($code)
90
				->setType(EmailVerification::PROCESS_REGISTER)
91
				->send();
92
93
			if ($result) {
94
				$registration->postProcess();
95
				$responseType = 'success';
96
				$message = \App\Language::translate('LBL_EMAIL_VERIFIED', $request->getModule(false));
97
				App\Process::removeEvent(Settings_Companies_EmailVerificationModal_View::MODAL_EVENT['name']);
98
			} elseif ($error = $registration->getError()) {
99
				throw new \App\Exceptions\AppException($error);
100
			}
101
		} catch (\App\Exceptions\AppException $e) {
102
			$result = false;
103
			$message = $e->getDisplayMessage();
104
		}
105
106
		$response = new \Vtiger_Response();
107
		$response->setResult([
108
			'success' => $result,
109
			'message' => $message,
110
			'type' => $responseType
111
		]);
112
		$response->emit();
113
	}
114
}
115