vtenext/modules/ChangeLog/ChangeLogHandler.php
2021-04-28 20:10:26 +02:00

279 lines
12 KiB
PHP
Raw Permalink Blame History

<?php
/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@82326 crmv@104566 crmv@164120 crmv@164655 */
require_once('modules/ChangeLog/ChangeLog.php');
class ChangeLogHandler extends VTEventHandler {
function handleEvent($eventName, $entityData) {
global $adb, $table_prefix;
global $current_user,$current_auth_record,$record_init,$record_last,$currentModule;
if (!vtlib_isModuleActive('ChangeLog')) return;
$currentModule_tmp = $currentModule;
$currentModule = 'ChangeLog';
$moduleName = $entityData->getModuleName();
$entityData->date = date('Y-m-d H:i:s');
$id = $entityData->getId();
$obj = ChangeLog::getInstance();
if($moduleName == 'Activity'){
$moduleName = 'Calendar';
}
if ($obj->isEnabled($moduleName) && isRecordExists($id)) { //crmv@47905 crmv@115268
if($moduleName == 'Calendar'){
if($_REQUEST['activity_mode'] == 'Events'){
$moduleName = 'Events';
}
}
if ($entityData->isNew()) {
if ($eventName == 'history_last') {
$proj = CRMEntity::getInstance($moduleName);
$proj->retrieve_entity_info_no_html($id,$moduleName);
$obj->column_fields['modified_date'] = $proj->column_fields['createdtime'];
$obj->column_fields['audit_no'] = $obj->get_revision_id($id);
$obj->column_fields['user_id'] = $current_user->id;
$obj->column_fields['parent_id'] = $id;
$obj->column_fields['user_name'] = $current_user->column_fields['user_name'];
$obj->column_fields['description'] = Zend_Json::encode(array('ChangeLogCreation'));
$obj->column_fields['request_id'] = RequestHandler::getId(); // crmv@177677
if (!empty($current_auth_record)) {
$obj->column_fields['display_id'] = $current_auth_record['id'];
$obj->column_fields['display_module'] = $current_auth_record['module'];
$obj->column_fields['display_name'] = getEntityName($current_auth_record['module'],$current_auth_record['id'],true);
}
$obj->save(); //crmv@47905
}
} else {
if($eventName == 'history_first' && empty($record_init[$moduleName][$id]) && empty($record_last[$moduleName][$id])) { //se il record <20> modificato
$proj = CRMEntity::getInstance($moduleName);
$proj->overrideTimezone('default'); // crmv@163361
$proj->mode = 'edit';
$proj->id = $id;
$proj->retrieve_entity_info_no_html($id,$moduleName);
$record_init[$moduleName][$id] = $proj->column_fields; //scrivo la column_fields attuale in json nel campo description
}
elseif($eventName == 'history_last' && !empty($record_init[$moduleName][$id])){
$data = array_filter($entityData->getData());
$data_encoded = Zend_Json::encode($data);
$id = $entityData->getId();
$nr_rev = $obj->get_revision_id($id); //crmv@103534
$obj->column_fields['audit_no'] = $nr_rev;//versione record calcolata
$obj->column_fields['user_id'] = $current_user->id; //utente corrente
$obj->column_fields['parent_id'] = $id; //id entit<69> collegata
$obj->column_fields['request_id'] = RequestHandler::getId(); // crmv@177677
$proj = CRMEntity::getInstance($moduleName);
$proj->overrideTimezone('default'); // crmv@163361
$proj->mode = 'edit';
$proj->id = $id;
$proj->retrieve_entity_info_no_html($id,$moduleName);
$record_last[$moduleName][$id] = $proj->column_fields;
$result = array_diff_assoc($record_init[$moduleName][$id], $record_last[$moduleName][$id]);
$final_record = Array();
$campi = array();
$obj->column_fields['user_name'] = $current_user->column_fields['user_name'];
// TODO: cache field info
$q = "SELECT fieldname, fieldlabel, fieldtype, readonly, {$table_prefix}_field.uitype
FROM ".$table_prefix."_field
LEFT JOIN ".$table_prefix."_ws_fieldtype ON ".$table_prefix."_field.uitype = ".$table_prefix."_ws_fieldtype.uitype
WHERE tabid = (SELECT tabid FROM ".$table_prefix."_tab WHERE name = ?)"; // crmv@31240 crmv@37679
$ress = $adb->pquery($q, array($moduleName));
// crmv@109801
$label = array();
$types = array();
$readonly = array();
$uitypes = array();
while($row = $adb->fetchByAssoc($ress)){
$label[$row['fieldname']] = $row['fieldlabel'];
$types[$row['fieldname']] = $row['fieldtype'];
$readonly[$row['fieldname']] = $row['readonly']; // crmv@31240
$uitypes[$row['fieldname']] = $row['uitype'];
}
// crmv@109801e
$reference_changelogs = array();
foreach ($result as $key=>$value){
if($readonly[$key] == '100') continue; // crmv@31240
$previous_value = $record_init[$moduleName][$id][$key];
$current_value = $record_last[$moduleName][$id][$key];
$saveReference = false;
if ($types[$key] == 'owner' || ($types[$key] == 'reference' && in_array($uitypes[$key], array(50,51,52,53,54)))) {
global $showfullusername;
if (!empty($previous_value)) {
$prevModule = getOwnerType($previous_value);
$prevName = getOwnerName($previous_value, $showfullusername);
} else {
$prevModule = '';
$prevName = '';
}
if (!empty($current_value)) {
$nextModule = getOwnerType($current_value);
$nextName = getOwnerName($current_value, $showfullusername);
} else {
$nextModule = '';
$nextName = '';
}
} elseif ($types[$key] == 'reference') {
$thisName = getEntityName($moduleName, $id, true);
if (!empty($previous_value)) {
$prevModule = getSalesEntityType($previous_value);
$prevName = getEntityName($prevModule, array($previous_value), true);
} else {
$prevModule = '';
$prevName = '';
}
if (!empty($current_value)) {
$nextModule = getSalesEntityType($current_value);
$nextName = getEntityName($nextModule, array($current_value), true);
} else {
$nextModule = '';
$nextName = '';
}
$saveReference = true;
// crmv@205568
} elseif ($uitypes[$key] == 83) {
$types[$key] = 'json';
$tax_names = array();
$InventoryUtils = InventoryUtils::getInstance();
$tax_details = $InventoryUtils->getTaxDetailsForProduct($id,'available_associated');
if (!empty($tax_details)) {
foreach($tax_details as $tax_detail) {
$tax_names[$tax_detail['taxname']] = $tax_detail['taxlabel'];
}
}
if (!empty($previous_value)) {
$previous_value_new = array();
$previous_value = Zend_Json::decode($previous_value);
if (!empty($previous_value)) {
foreach($previous_value as $k => $v) {
$previous_value_new[$tax_names[$k]] = $v;
}
}
$previous_value = Zend_Json::encode($previous_value_new);
}
if (!empty($current_value)) {
$current_value_new = array();
$current_value = Zend_Json::decode($current_value);
if (!empty($current_value)) {
foreach($current_value as $k => $v) {
$current_value_new[$tax_names[$k]] = $v;
}
}
$current_value = Zend_Json::encode($current_value_new);
}
// crmv@205568e
} else {
$prevModule = $nextModule = '';
$prevName = $nextName = '';
}
if (strtolower($key) == 'modifiedtime') {
$obj->column_fields['modified_date'] = $proj->column_fields[$key];
} elseif ($obj->isFieldSkipped($moduleName, $key, $uitypes[$key])) { // crmv@109801
// skip field, don't save it!
} else {
$campi[] = array($label[$key], $previous_value, $current_value, $key, $types[$key], $prevModule, $prevName, $nextModule, $nextName);
}
// save also a changelog in the linked record
if ($saveReference && (!empty($current_value) || !empty($previous_value))) {
$reference_changelogs[] = array($previous_value,$current_value,$key, $thisName);
}
}
$record_init[$moduleName][$id] = '';
$record_last[$moduleName][$id] = '';
if (!empty($campi)) { //se non c'<27> nessuna differenza non creo il ChangeLog
$obj->column_fields['description'] = Zend_Json::encode($campi);
if (!empty($current_auth_record)) {
$obj->column_fields['display_id'] = $current_auth_record['id'];
$obj->column_fields['display_module'] = $current_auth_record['module'];
$obj->column_fields['display_name'] = getEntityName($current_auth_record['module'],$current_auth_record['id'],true);
} else {
$obj->column_fields['display_id'] = $current_user->id;
$obj->column_fields['display_module'] = 'Users';
$obj->column_fields['display_name'] = getUserFullName($current_user->id);
}
$obj->save(); //crmv@47905
/* crmv@103534
if ($moduleName == 'Processes') {
require_once('modules/Settings/ProcessMaker/ProcessDynaForm.php');
$processDynaFormObj = ProcessDynaForm::getInstance();
$processDynaFormObj->propagateParallelsChangeLog($id,$obj);
}
crmv@103534e */
}
if (!empty($reference_changelogs)) {
foreach($reference_changelogs as $tmp) {
$previous_value = $tmp[0];
$current_value = $tmp[1];
$key = $tmp[2];
if (!empty($previous_value)) {
$obj1 = ChangeLog::getInstance();
$obj1->column_fields['modified_date'] = $obj->column_fields['modified_date'];
$obj1->column_fields['audit_no'] = $obj1->get_revision_id($previous_value);
$obj1->column_fields['user_id'] = $current_user->id;
$obj1->column_fields['parent_id'] = $previous_value;
$obj1->column_fields['user_name'] = $current_user->column_fields['user_name'];
$obj1->column_fields['description'] = Zend_Json::encode(array('ChangeLogRemoveRelation1N',$id,$moduleName,$key,$previous_value,$current_value,$tmp[3]));
$obj1->column_fields['request_id'] = RequestHandler::getId(); // crmv@177677
if (!empty($current_auth_record)) {
$obj1->column_fields['display_id'] = $current_auth_record['id'];
$obj1->column_fields['display_module'] = $current_auth_record['module'];
$obj1->column_fields['display_name'] = getEntityName($current_auth_record['module'],$current_auth_record['id'],true);
} else {
$obj1->column_fields['display_id'] = $current_user->id;
$obj1->column_fields['display_module'] = 'Users';
$obj1->column_fields['display_name'] = getUserFullName($current_user->id);
}
$obj1->save(); //crmv@47905
}
if (!empty($current_value)) {
//crmv@170349
$related_module = getSalesEntityType($current_value);
if ($obj->isEnabled($related_module)) {
$obj1 = ChangeLog::getInstance();
$obj1->column_fields['modified_date'] = $obj->column_fields['modified_date'];
$obj1->column_fields['audit_no'] = $obj1->get_revision_id($current_value);
$obj1->column_fields['user_id'] = $current_user->id;
$obj1->column_fields['parent_id'] = $current_value;
$obj1->column_fields['user_name'] = $current_user->column_fields['user_name'];
$obj1->column_fields['description'] = Zend_Json::encode(array('ChangeLogRelation1N',$id,$moduleName,$current_value,$related_module,$key,$tmp[3]));
$obj1->column_fields['request_id'] = RequestHandler::getId(); // crmv@177677
if (!empty($current_auth_record)) {
$obj1->column_fields['display_id'] = $current_auth_record['id'];
$obj1->column_fields['display_module'] = $current_auth_record['module'];
$obj1->column_fields['display_name'] = getEntityName($current_auth_record['module'],$current_auth_record['id'],true);
} else {
$obj1->column_fields['display_id'] = $current_user->id;
$obj1->column_fields['display_module'] = 'Users';
$obj1->column_fields['display_name'] = getUserFullName($current_user->id);
}
$obj1->save(); //crmv@47905
}
//crmv@170349e
}
}
}
}
}
}
$currentModule = $currentModule_tmp;
}
}