5
5
* @license licenses/License.html
6
6
* @author Mariusz Krzaczkowski <
[email protected] >
7
7
*/
8
+ include_once 'include/Webservices/Relation.php' ;
8
9
include_once 'include/main/WebUI.php' ;
9
10
$current_user = Users::getActiveAdminUser();
10
11
@@ -13,27 +14,55 @@ $log = vglobal('log');
13
14
$log = &LoggerManager::getLogger('MultiReferenceValue' );
14
15
$log->info('Cron MultiReferenceValue - Start' );
15
16
17
+ $executed = [];
16
18
$result = $db->pquery('SELECT * FROM s_yf_multireference' );
17
19
while ($multireference = $db->fetch_array($result)) {
18
- $entity = CRMEntity::getInstance($multireference['source_module' ]);
19
- $queryGenerator = new QueryGenerator($multireference['source_module' ], $current_user);
20
- $queryGenerator->setFields(['id' ]);
21
- $queryGenerator->addCustomWere(['column' => $entity->table_index, 'operator' => '>' , 'value' => $multireference['lastid' ], 'glue' => 'AND' ]);
22
- $query = $queryGenerator->getQuery();
23
- $query .= ' ORDER BY ' . $entity->table_index . ' ASC' ;
24
- $recordsResult = $db->query($query);
20
+ if ($multireference['type' ] == 0) {
21
+ $entity = CRMEntity::getInstance($multireference['source_module' ]);
22
+ $queryGenerator = new QueryGenerator($multireference['source_module' ], $current_user);
23
+ $queryGenerator->setFields(['id' ]);
24
+ $queryGenerator->addCustomWere(['column' => $entity->table_index, 'operator' => '>' , 'value' => $multireference['lastid' ], 'glue' => 'AND' ]);
25
+ $query = $queryGenerator->getQuery();
26
+ $query .= ' ORDER BY ' . $entity->table_index . ' ASC' ;
27
+ $recordsResult = $db->query($query);
25
28
26
- $fields = Vtiger_MultiReferenceValue_UIType::getMultiReferenceValueFields($multireference['source_module' ], $multireference['dest_module' ]);
27
- while ($id = $db->getSingleValue($recordsResult)) {
28
- foreach ($fields as $field) {
29
- $fieldModel = new Vtiger_Field_Model();
30
- $fieldModel->initialize($field);
31
- $UITypeModel = $fieldModel->getUITypeModel();
32
- $UITypeModel->reloadValue($multireference['source_module' ], $id);
29
+ $fields = Vtiger_MultiReferenceValue_UIType::getFieldsByModules($multireference['source_module' ], $multireference['dest_module' ]);
30
+ while ($id = $db->getSingleValue($recordsResult)) {
31
+ foreach ($fields as $field) {
32
+ $fieldModel = new Vtiger_Field_Model ();
33
+ $fieldModel->initialize($field);
34
+ $UITypeModel = $fieldModel->getUITypeModel();
35
+ $UITypeModel->reloadValue($multireference['source_module' ], $id);
36
+ }
37
+ $db->update('s_yf_multireference' , ['lastid' => $id], 'source_module = ? AND dest_module = ?' , [$multireference['source_module' ], $multireference['dest_module' ]]);
38
+ }
39
+ } else {
40
+ vglobal('currentModule' , $multireference['dest_module' ]);
41
+ $sourceRecordModel = Vtiger_Record_Model::getInstanceById($multireference['lastid' ], $multireference['dest_module' ]);
42
+ $targetModel = Vtiger_RelationListView_Model::getInstance($sourceRecordModel, $multireference['source_module' ]);
43
+ $relationModel = $targetModel->getRelationModel();
44
+ if (!$targetModel->getRelationModel()) {
45
+ continue;
46
+ }
47
+ $query = $targetModel->getRelationQuery();
48
+ $explodedQuery = explode('FROM' , $query, 2);
49
+ $relationQuery = 'SELECT vtiger_crmentity.crmid FROM' . $explodedQuery[1];
50
+
51
+ $result2 = $db->query($relationQuery);
52
+ while ($crmid = $db->getSingleValue($result2)) {
53
+ if (in_array($crmid, $executed)) {
54
+ continue;
55
+ }
56
+ $fields = Vtiger_MultiReferenceValue_UIType::getFieldsByModules($multireference['source_module' ], $multireference['dest_module' ]);
57
+ foreach ($fields as $field) {
58
+ $fieldModel = new Vtiger_Field_Model();
59
+ $fieldModel->initialize($field);
60
+ $UITypeModel = $fieldModel->getUITypeModel();
61
+ $UITypeModel->reloadValue($multireference['source_module' ], $crmid);
62
+ }
63
+ $executed[] = $crmid;
33
64
}
34
- $db->update('s_yf_multireference' , ['lastid' => $id], 'source_module = ? AND dest_module = ?' , [$multireference['source_module' ], $multireference['dest_module' ]]);
35
65
}
36
- $db->delete('s_yf_multireference' , 'source_module = ? AND dest_module = ?' , [$multireference['source_module' ], $multireference['dest_module' ]]);
66
+ $db->delete('s_yf_multireference' , 'source_module = ? AND dest_module = ? AND type = ? ' , [$multireference['source_module' ], $multireference['dest_module' ], $multireference[ 'type ' ]]);
37
67
}
38
-
39
68
$log->info('Cron MultiReferenceValue - End' );
0 commit comments