Passed
Pull Request — developer (#15831)
by Arkadiusz
20:14
created

ServiceContracts_Detail_View::checkPermission()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
eloc 4
c 0
b 0
f 0
dl 0
loc 6
ccs 0
cts 0
cp 0
rs 10
cc 3
nc 2
nop 1
crap 12
1
<?php
2
/**
3
 * Service contracts detail view  file.
4
 *
5
 * @package View
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
/**
13
 * Service contracts detail view  class.
14
 */
15
class ServiceContracts_Detail_View extends Vtiger_Detail_View
16
{
17
	/** {@inheritdoc} */
18
	public function __construct()
19
	{
20
		parent::__construct();
21
		$this->exposeMethod('showSlaPolicyView');
22
	}
23
24
	/** {@inheritdoc} */
25
	public function checkPermission(App\Request $request)
26
	{
27
		parent::checkPermission($request);
28
		$userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
29
		if (!$userPrivilegesModel->hasModuleActionPermission($this->record->getModuleName(), 'ServiceContractsSla') && $userPrivilegesModel->hasModulePermission($request->getByType('target', \App\Purifier::ALNUM))) {
0 ignored issues
show
Bug introduced by
It seems like $request->getByType('tar...', App\Purifier::ALNUM) can also be of type boolean; however, parameter $mixed of Users_Privileges_Model::hasModulePermission() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

29
		if (!$userPrivilegesModel->hasModuleActionPermission($this->record->getModuleName(), 'ServiceContractsSla') && $userPrivilegesModel->hasModulePermission(/** @scrutinizer ignore-type */ $request->getByType('target', \App\Purifier::ALNUM))) {
Loading history...
30
			throw new \App\Exceptions\NoPermittedToRecord('ERR_NO_PERMISSIONS_FOR_THE_RECORD', 406);
31
		}
32
	}
33
34
	/**
35
	 * Show SLA Policy.
36
	 *
37
	 * @param \App\Request $request
38
	 *
39
	 * @throws \App\Exceptions\IllegalValue
40
	 *
41
	 * @return string
42
	 */
43
	public function showSlaPolicyView(App\Request $request)
44
	{
45
		$moduleName = $request->getModule();
46
		$relatedModuleName = $request->getByType('target', \App\Purifier::ALNUM);
47
		$rows = \App\Utils\ServiceContracts::getSlaPolicyForServiceContracts($request->getInteger('record'), \App\Module::getModuleId($relatedModuleName));
0 ignored issues
show
Bug introduced by
It seems like App\Module::getModuleId($relatedModuleName) can also be of type boolean; however, parameter $sourceModuleId of App\Utils\ServiceContrac...cyForServiceContracts() does only seem to accept integer|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

47
		$rows = \App\Utils\ServiceContracts::getSlaPolicyForServiceContracts($request->getInteger('record'), /** @scrutinizer ignore-type */ \App\Module::getModuleId($relatedModuleName));
Loading history...
48
		$policyType = 0;
49
		if (isset($rows[0])) {
50
			$policyType = (int) $rows[0]['policy_type'];
51
		}
52
		$viewer = $this->getViewer($request);
53
		$viewer->assign('RECORD', $this->record->getRecord());
54
		$viewer->assign('ALL_BUSINESS_HOURS', \App\Utils\ServiceContracts::getAllBusinessHours());
55
		$viewer->assign('SLA_POLICY_ROWS', $rows);
56
		$viewer->assign('POLICY_TYPE', $policyType);
57
		$viewer->assign('MODULE', $moduleName);
58
		$viewer->assign('TARGET_MODULE', $relatedModuleName);
59
		$viewer->assign('SOURCE_MODULE', $relatedModuleName);
60
		$recordStructureModulesField = [];
61
		$moduleModel = Vtiger_Module_Model::getInstance($relatedModuleName);
62
		foreach ($moduleModel->getFieldsByReference() as $referenceField) {
63
			foreach ($referenceField->getReferenceList() as $relatedModuleName) {
64
				$recordStructureModulesField[$relatedModuleName][$referenceField->getFieldName()] = Vtiger_RecordStructure_Model::getInstanceForModule(Vtiger_Module_Model::getInstance($relatedModuleName))->getStructure();
65
			}
66
		}
67
		$viewer->assign('RECORD_STRUCTURE_RELATED_MODULES', $recordStructureModulesField);
68
		$viewer->assign('RECORD_STRUCTURE', Vtiger_RecordStructure_Model::getInstanceForModule($moduleModel)->getStructure());
69
		$viewer->assign('VIEW', $request->getByType('view'));
70
		return $viewer->view('SlaPolicy.tpl', $moduleName, true);
71
	}
72
73
	/** {@inheritdoc} */
74
	public function getFooterScripts(App\Request $request)
75
	{
76
		return array_merge(
77
			parent::getFooterScripts($request),
78
			$this->checkAndConvertJsScripts([
79
				'modules.ServiceContracts.resources.InRelation',
80
			])
81
		);
82
	}
83
}
84