Passed
Push — developer ( 9459cf...0f6457 )
by Radosław
26:45
created

showFieldLayout()   C

Complexity

Conditions 15
Paths 168

Size

Total Lines 63
Code Lines 49

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 240

Importance

Changes 0
Metric Value
eloc 49
c 0
b 0
f 0
dl 0
loc 63
rs 5.35
ccs 0
cts 46
cp 0
cc 15
nc 168
nop 1
crap 240

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
 * The contents of this file are subject to the vtiger CRM Public License Version 1.1
4
 * ("License"); You may not use this file except in compliance with the License
5
 * The Original Code is:  vtiger CRM Open Source
6
 * The Initial Developer of the Original Code is vtiger.
7
 * Portions created by vtiger are Copyright (C) vtiger.
8
 * All Rights Reserved.
9
 * Contributor(s): YetiForce S.A.
10
 * ********************************************************************************** */
11
12
class Settings_LayoutEditor_Index_View extends Settings_Vtiger_Index_View
13
{
14
	use \App\Controller\ExposeMethod;
15
16
	public function __construct()
17
	{
18
		parent::__construct();
19
		$this->exposeMethod('showFieldLayout');
20
		$this->exposeMethod('showRelatedListLayout');
21
	}
22
23
	public function process(App\Request $request)
24
	{
25
		$mode = $request->getMode();
26
		if ($this->isMethodExposed($mode)) {
27
			$this->invokeExposedMethod($mode, $request);
28
		} else {
29
			//by default show field layout
30
			$this->showFieldLayout($request);
31
		}
32
	}
33
34
	public function showFieldLayout(App\Request $request)
35
	{
36
		$qualifiedModule = $request->getModule(false);
37
		$activeTab = 'detailViewLayout';
38
		if ($request->has('tab')) {
39
			$activeTab = $request->getByType('tab', \App\Purifier::ALNUM);
40
		}
41
		$sourceModule = $request->getByType('sourceModule', \App\Purifier::ALNUM);
42
		$supportedModulesList = Settings_LayoutEditor_Module_Model::getSupportedModules();
43
		if (empty($sourceModule)) {
44
			//To get the first element
45
			$sourceModule = reset($supportedModulesList);
46
		}
47
		$moduleModel = Settings_LayoutEditor_Module_Model::getInstance($qualifiedModule)->setSourceModule($sourceModule);
48
		$fieldModels = $moduleModel->getFields();
49
		$blockModels = $moduleModel->getBlocks();
50
51
		$blockIdFieldMap = [];
52
		$inactiveFields = [];
53
		foreach ($fieldModels as $fieldModel) {
54
			$fieldName = $fieldModel->getName();
55
			$lastItem = strrchr($fieldName, '_');
56
			$firstItem = '';
57
			if ('_extra' === $lastItem) {
58
				$firstItem = str_replace($lastItem, '', $fieldName);
59
			}
60
			if ((!empty($firstItem) && !empty($firstItemModuleModal = \Vtiger_Field_Model::getInstance($firstItem, \Vtiger_Module_Model::getInstance($sourceModule))) && $firstItemModuleModal->isActiveField() && $fieldModel->isActiveField()) && (11 == $firstItemModuleModal->getUIType()) && (1 == $fieldModel->getUIType())) {
61
				unset($fieldName);
62
			} else {
63
				$blockIdFieldMap[$fieldModel->getBlockId()][$fieldName] = $fieldModel;
64
				if (!$fieldModel->isActiveField()) {
65
					$inactiveFields[$fieldModel->getBlockId()][$fieldModel->getId()] = \App\Language::translate($fieldModel->getLabel(), $sourceModule);
66
				}
67
			}
68
		}
69
		foreach ($blockModels as $blockModel) {
70
			if (isset($blockIdFieldMap[$blockModel->get('id')])) {
71
				$fieldModelList = $blockIdFieldMap[$blockModel->get('id')];
72
				$blockModel->setFields($fieldModelList);
73
			}
74
		}
75
76
		$isInvenotry = $moduleModel->getSourceModule()->isInventory();
77
		$type = $isInvenotry ? Vtiger_Module_Model::STANDARD_TYPE : Vtiger_Module_Model::ADVANCED_TYPE;
78
		$batchMethod = (new \App\BatchMethod([
79
			'method' => '\App\Module::changeType',
80
			'params' => [$sourceModule, $type],
81
		]));
82
		$viewer = $this->getViewer($request);
83
		$viewer->assign('ACTIVE_TAB', $activeTab);
84
		$viewer->assign('SELECTED_MODULE_NAME', $sourceModule);
85
		$viewer->assign('SUPPORTED_MODULES', $supportedModulesList);
86
		$viewer->assign('SELECTED_MODULE_MODEL', $moduleModel);
87
		$viewer->assign('BLOCKS', $blockModels);
88
		$viewer->assign('ADD_SUPPORTED_FIELD_TYPES', $moduleModel->getAddSupportedFieldTypes());
89
		$viewer->assign('DISPLAY_TYPE_LIST', Vtiger_Field_Model::showDisplayTypeList());
90
		$viewer->assign('MODULE', $qualifiedModule);
91
		$viewer->assign('QUALIFIED_MODULE', $qualifiedModule);
92
		$viewer->assign('IN_ACTIVE_FIELDS', $inactiveFields);
93
		$viewer->assign('IS_INVENTORY', $isInvenotry);
94
		$viewer->assign('CHANGE_MODULE_TYPE_DISABLED', $batchMethod->isExists());
95
		$viewer->assign('INVENTORY_MODEL', Vtiger_Inventory_Model::getInstance($sourceModule));
96
		$viewer->view('Index.tpl', $qualifiedModule);
97
	}
98
99
	public function showRelatedListLayout(App\Request $request)
100
	{
101
		$qualifiedModule = $request->getModule(false);
102
		$supportedModulesList = Settings_LayoutEditor_Module_Model::getSupportedModules();
103
		if ($request->isEmpty('sourceModule', true)) {
104
			//To get the first element
105
			$moduleName = reset($supportedModulesList);
106
			$sourceModule = Vtiger_Module_Model::getInstance($moduleName)->getName();
107
		} else {
108
			$sourceModule = $request->getByType('sourceModule', \App\Purifier::ALNUM);
109
		}
110
		$moduleModel = Settings_LayoutEditor_Module_Model::getInstance($qualifiedModule)->setSourceModule($sourceModule);
111
112
		$viewer = $this->getViewer($request);
113
		$viewer->assign('SELECTED_MODULE_NAME', $sourceModule);
114
		$viewer->assign('MODULE_MULTI_REFERENCE_FIELDS', Settings_LayoutEditor_Module_Model::getMultiReferenceFieldsRelatedWithModule($sourceModule));
115
		$viewer->assign('SUPPORTED_MODULES', $supportedModulesList);
116
		$viewer->assign('RELATED_MODULES', $moduleModel->getRelations());
117
		$viewer->assign('MODULE', $qualifiedModule);
118
		$viewer->assign('BASE_CUSTOM_VIEW', [
119
			'relation' => \App\Language::translate('LBL_RECORDS_FROM_RELATION'),
120
			'private' => \App\Language::translate('LBL_RCV_PRIVATE', $qualifiedModule),
121
			'all' => \App\Language::translate('LBL_RCV_ALL', $qualifiedModule),
122
		]);
123
		$viewer->assign('QUALIFIED_MODULE', $qualifiedModule);
124
		$viewer->view('RelatedList.tpl', $qualifiedModule);
125
	}
126
127
	public function getFooterScripts(App\Request $request)
128
	{
129
		return array_merge(parent::getFooterScripts($request), $this->checkAndConvertJsScripts(['libraries.clipboard.dist.clipboard']));
130
	}
131
}
132