Passed
Push — developer ( 0ad77d...ea9b04 )
by Mariusz
15:55
created

editViewPreSave()   C

Complexity

Conditions 14
Paths 24

Size

Total Lines 59
Code Lines 45

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 45
c 1
b 0
f 0
dl 0
loc 59
rs 6.2666
cc 14
nc 24
nop 2

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * Phone duplicate checker handler file.
4
 *
5
 * @package Handler
6
 *
7
 * @copyright YetiForce S.A.
8
 * @license YetiForce Public License 5.0 (licenses/LicenseEN.txt or yetiforce.com)
9
 * @author    Mariusz Krzaczkowski <[email protected]>
10
 */
11
/**
12
 * Phone duplicate checker handler class.
13
 */
14
class Contacts_PhoneDuplicateChecker_Handler
15
{
16
	/** @var bool Allow record to be written */
17
	const ALLOW_SAVE = false;
18
19
	/** @var array A list of additional information about the record */
20
	const FIELDS_DETAILS = [
21
		'Contacts' => ['firstname', 'lastname', 'parent_id', 'assigned_user_id'],
22
		'Accounts' => ['accountname', 'kod', 'assigned_user_id'],
23
		'Leads' => ['company', 'kod', 'assigned_user_id'],
24
	];
25
26
	/**
27
	 * EditViewPreSave handler function.
28
	 *
29
	 * @param App\EventHandler $eventHandler
30
	 * @param array            $handler
31
	 */
32
	public function editViewPreSave(App\EventHandler $eventHandler, array $handler)
33
	{
34
		$recordModel = $eventHandler->getRecordModel();
35
		$response = ['result' => true];
36
		$values = [];
37
		foreach ($recordModel->getModule()->getFieldsByType('phone', true) as $fieldModel) {
38
			if (($value = $recordModel->get($fieldModel->getName())) && $fieldModel->isViewable()) {
39
				$values[] = $value;
40
			}
41
		}
42
		if ($values) {
43
			$modules = explode(',', $handler['include_modules']);
44
			foreach ($modules as $moduleName) {
45
				$queryGenerator = new \App\QueryGenerator($moduleName);
46
				$queryGenerator->setFields(array_merge(['id'], self::FIELDS_DETAILS[$moduleName] ?? []))->permissions = false;
47
				if ($moduleName === $recordModel->getModuleName() && $recordModel->getId()) {
48
					$queryGenerator->addCondition('id', $recordModel->getId(), 'n');
49
				}
50
				$fields = [];
51
				foreach ($queryGenerator->getModuleModel()->getFieldsByType('phone', true) as $fieldName => $fieldModel) {
52
					$queryGenerator->addCondition($fieldName, $values, 'e', false);
53
					$fields[$fieldName] = $fieldModel;
54
				}
55
				if ($row = $queryGenerator->createQuery()->one()) {
56
					$label = '';
57
					foreach (self::FIELDS_DETAILS[$recordModel->getModuleName()] ?? [] as $fieldName) {
58
						$fieldModel = $recordModel->getModule()->getFieldByName($fieldName);
59
						if ('' !== $recordModel->get($fieldName) && $fieldModel->isViewable()) {
60
							$label .= '<br>' . $fieldModel->getFullLabelTranslation() . ': ' . $recordModel->getDisplayValue($fieldName);
61
						}
62
					}
63
					if (self::ALLOW_SAVE) {
64
						$response = [
65
							'result' => false,
66
							'type' => 'confirm',
67
							'hash' => hash('sha256', implode('|', $recordModel->getData())),
68
							'message' => App\Language::translateArgs(
69
								'LBL_DUPLICATE_PHONE',
70
								$moduleName,
71
								\App\Language::translate($moduleName, $moduleName)
72
							) . '<br>' .
73
							\App\Record::getHtmlLink($row['id'], $moduleName) . $label
74
						];
75
					} else {
76
						$response = [
77
							'result' => false,
78
							'message' => App\Language::translateArgs(
79
								'LBL_DUPLICATE_PHONE',
80
								$moduleName,
81
								\App\Language::translate($moduleName, $moduleName),
82
							) . '<br>' .
83
							\App\Record::getHtmlLink($row['id'], $moduleName) . $label
84
						];
85
					}
86
					break;
87
				}
88
			}
89
		}
90
		return $response;
91
	}
92
}
93