Passed
Pull Request — developer (#16238)
by Arkadiusz
17:56
created

VTRecordCollector::doTask()   B

Complexity

Conditions 9
Paths 28

Size

Total Lines 34
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 26
c 1
b 0
f 0
dl 0
loc 34
rs 8.0555
cc 9
nc 28
nop 1
1
<?php
2
/**
3
 * Record collectors task file.
4
 *
5
 * @package 	WorkflowTask
6
 *
7
 * @copyright YetiForce S.A.
8
 * @license   YetiForce Public License 5.0 (licenses/LicenseEN.txt or yetiforce.com)
9
 * @author    Arkadiusz Sołek <[email protected]>
10
 */
11
/**
12
 * Record collectors task class.
13
 */
14
require_once 'modules/com_vtiger_workflow/VTWorkflowUtils.php';
15
16
class VTRecordCollector extends VTTask
17
{
18
	/** @var bool Performs the task immediately after saving. */
19
	public $executeImmediately = true;
20
21
	/** {@inheritdoc} */
22
	public function getFieldNames()
23
	{
24
		return ['recordCollector', 'fieldsMap'];
25
	}
26
27
	/** {@inheritdoc} */
28
	public function doTask($recordModel)
29
	{
30
		$moduleName = $recordModel->getModuleName();
31
		$value = [];
32
		$value['module'] = $moduleName;
33
		if (!empty($this->recordCollector)) {
34
			$recordCollector = \App\RecordCollector::getInstance('\App\RecordCollectors\\' . $this->recordCollector, $moduleName);
0 ignored issues
show
Bug Best Practice introduced by
The property recordCollector does not exist on VTRecordCollector. Did you maybe forget to declare it?
Loading history...
35
			foreach ($recordCollector->modulesFieldsMap[$moduleName] as $key => $searchField) {
0 ignored issues
show
Bug introduced by
The property modulesFieldsMap is declared protected in App\RecordCollectors\Base and cannot be accessed from this context.
Loading history...
36
				if ('' !== $recordModel->get($searchField)) {
37
					$value[$key] = $recordModel->get($searchField);
38
					break;
39
				}
40
			}
41
			if (!empty($value)) {
42
				$recordCollector->setRequest(new \App\Request($value, false));
43
				$response = $recordCollector->search();
44
				$key = array_key_first($response['dataCounter']);
45
				if (!empty($this->fieldsMap)) {
46
					foreach ($this->fieldsMap as $fieldMapName) {
47
						$updateFields[$fieldMapName] = $response['fields'][$fieldMapName];
48
					}
49
				} else {
50
					$updateFields = $response['fields'];
51
				}
52
				foreach ($updateFields as $fieldName => $values) {
53
					try {
54
						$recordModel->getField($fieldName)->getUITypeModel()->validate($values['data'][$key]['raw']);
55
						$recordModel->set($fieldName, $values['data'][$key]['raw']);
56
					} catch (\Throwable $th) {
57
						\App\Log::error("[taxNumber => $value]Error during data validation: \n{$th->__toString()}\n", __CLASS__);
58
					}
59
				}
60
				$recordModel->setHandlerExceptions(['disableHandlerClasses' => ['Vtiger_Workflow_Handler']]);
61
				$recordModel->save();
62
			}
63
		}
64
	}
65
}
66