function process(Vtiger_Request $request) { vimport('~include/events/include.inc'); $db = PearDatabase::getInstance(); $em = new VTEventsManager($db); $em->initTriggerCache(); $em->triggerEvent('user.logout.before', []); Vtiger_Session::regenerateId(true); // to overcome session id reuse. Vtiger_Session::destroy(); //Track the logout History $moduleName = $request->getModule(); $moduleModel = Users_Module_Model::getInstance($moduleName); $moduleModel->saveLogoutHistory(); //End header('Location: index.php'); }
function transformOwnerShipAndDelete($userId, $transformToUserId) { $adb = PearDatabase::getInstance(); $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromUserId($adb, $userId); //set transform user id $entityData->set('transformtouserid', $transformToUserId); $em->triggerEvent("vtiger.entity.beforedelete", $entityData); vtws_transferOwnership($userId, $transformToUserId); //delete from user vtiger_table; $sql = "delete from vtiger_users where id=?"; $adb->pquery($sql, array($userId)); //Delete user extension in asterisk. $sql = "delete from vtiger_asteriskextensions where userid=?"; $adb->pquery($sql, array($userId)); }
/** * Function to related two records of different entity types */ function relateEntities($focus, $sourceModule, $sourceRecordId, $destinationModule, $destinationRecordIds) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug("Entering relateEntities method ({$sourceModule}, {$sourceRecordId}, {$destinationModule}, {$destinationRecordIds})"); require_once 'include/events/include.inc'; //require_once('modules/com_vtiger_workflow/VTWorkflowManager.inc'); //require_once('modules/com_vtiger_workflow/VTEntityCache.inc'); $em = new VTEventsManager($adb); $em->initTriggerCache(); if (!is_array($destinationRecordIds)) { $destinationRecordIds = [$destinationRecordIds]; } $data = []; $data['CRMEntity'] = $focus; $data['entityData'] = VTEntityData::fromEntityId($adb, $sourceRecordId); $data['sourceModule'] = $sourceModule; $data['sourceRecordId'] = $sourceRecordId; $data['destinationModule'] = $destinationModule; foreach ($destinationRecordIds as $destinationRecordId) { $data['destinationRecordId'] = $destinationRecordId; $em->triggerEvent('vtiger.entity.link.before', $data); $focus->save_related_module($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $focus->trackLinkedInfo($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); /* $wfs = new VTWorkflowManager($adb); $workflows = $wfs->getWorkflowsForModule($sourceModule, VTWorkflowManager::$ON_RELATED); $entityCache = new VTEntityCache(Users_Record_Model::getCurrentUserModel()); $entityData = VTEntityData::fromCRMEntity($focus); $entityData->eventType = VTWorkflowManager::$ON_RELATED; $entityData->relatedInfo = [ 'destId' => $destinationRecordId, 'destModule' => $destinationModule, ]; foreach ($workflows as $id => $workflow) { if ($workflow->evaluate($entityCache, $entityData->getId())) { $workflow->performTasks($entityData); } } */ $em->triggerEvent('vtiger.entity.link.after', $data); } $log->debug("Exiting relateEntities method ..."); }
public function createRecords() { $adb = PearDatabase::getInstance(); $moduleName = $this->module; $focus = CRMEntity::getInstance($moduleName); $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $this->user); $moduleMeta = $moduleHandler->getMeta(); $moduleObjectId = $moduleMeta->getEntityId(); $moduleFields = $moduleMeta->getModuleFields(); $entityData = array(); $tableName = Import_Utils_Helper::getDbTableName($this->user); $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = ' . Import_Data_Action::$IMPORT_RECORD_NONE; if ($this->batchImport) { $configReader = new Import_Config_Model(); $importBatchLimit = $configReader->get('importBatchLimit'); $sql .= ' LIMIT ' . $importBatchLimit; } $result = $adb->query($sql); $numberOfRecords = $adb->num_rows($result); if ($numberOfRecords <= 0) { return; } $fieldMapping = $this->fieldMapping; $fieldColumnMapping = $moduleMeta->getFieldColumnMapping(); for ($i = 0; $i < $numberOfRecords; ++$i) { $row = $adb->raw_query_result_rowdata($result, $i); $rowId = $row['id']; $entityInfo = null; $fieldData = array(); foreach ($fieldMapping as $fieldName => $index) { $fieldData[$fieldName] = $row[$fieldName]; } $mergeType = $this->mergeType; $createRecord = false; if (method_exists($focus, 'importRecord')) { $entityInfo = $focus->importRecord($this, $fieldData); } else { if (!empty($mergeType) && $mergeType != Import_Utils_Helper::$AUTO_MERGE_NONE) { $queryGenerator = new QueryGenerator($moduleName, $this->user); $customView = new CustomView($moduleName); $viewId = $customView->getViewIdByName('All', $moduleName); if (!empty($viewId)) { $queryGenerator->initForCustomViewById($viewId); } else { $queryGenerator->initForDefaultCustomView(); } $fieldsList = array('id'); $queryGenerator->setFields($fieldsList); $mergeFields = $this->mergeFields; if ($queryGenerator->getWhereFields() && $mergeFields) { $queryGenerator->addConditionGlue(QueryGenerator::$AND); } foreach ($mergeFields as $index => $mergeField) { if ($index != 0) { $queryGenerator->addConditionGlue(QueryGenerator::$AND); } $comparisonValue = $fieldData[$mergeField]; $fieldInstance = $moduleFields[$mergeField]; if ($fieldInstance->getFieldDataType() == 'owner') { $userId = getUserId_Ol($comparisonValue); $comparisonValue = getUserFullName($userId); } if ($fieldInstance->getFieldDataType() == 'reference') { if (strpos($comparisonValue, '::::') > 0) { $referenceFileValueComponents = explode('::::', $comparisonValue); } else { $referenceFileValueComponents = explode(':::', $comparisonValue); } if (count($referenceFileValueComponents) > 1) { $comparisonValue = trim($referenceFileValueComponents[1]); } } $queryGenerator->addCondition($mergeField, $comparisonValue, 'e', '', '', '', true); } $query = $queryGenerator->getQuery(); $duplicatesResult = $adb->query($query); $noOfDuplicates = $adb->num_rows($duplicatesResult); if ($noOfDuplicates > 0) { if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_IGNORE) { $entityInfo['status'] = self::$IMPORT_RECORD_SKIPPED; } elseif ($mergeType == Import_Utils_Helper::$AUTO_MERGE_OVERWRITE || $mergeType == Import_Utils_Helper::$AUTO_MERGE_MERGEFIELDS) { for ($index = 0; $index < $noOfDuplicates - 1; ++$index) { $duplicateRecordId = $adb->query_result($duplicatesResult, $index, $fieldColumnMapping['id']); $entityId = vtws_getId($moduleObjectId, $duplicateRecordId); vtws_delete($entityId, $this->user); } $baseRecordId = $adb->query_result($duplicatesResult, $noOfDuplicates - 1, $fieldColumnMapping['id']); $baseEntityId = vtws_getId($moduleObjectId, $baseRecordId); if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_OVERWRITE) { $fieldData = $this->transformForImport($fieldData, $moduleMeta); $fieldData['id'] = $baseEntityId; $entityInfo = vtws_update($fieldData, $this->user); $entityInfo['status'] = self::$IMPORT_RECORD_UPDATED; } if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_MERGEFIELDS) { $filteredFieldData = array(); foreach ($fieldData as $fieldName => $fieldValue) { // empty will give false for value = 0 if (!empty($fieldValue) || $fieldValue != "") { $filteredFieldData[$fieldName] = $fieldValue; } } // Custom handling for default values & mandatory fields // need to be taken care than normal import as we merge // existing record values with newer values. $fillDefault = false; $mandatoryValueChecks = false; $existingFieldValues = vtws_retrieve($baseEntityId, $this->user); $defaultFieldValues = $this->getDefaultFieldValues($moduleMeta); foreach ($existingFieldValues as $fieldName => $fieldValue) { if (empty($fieldValue) && empty($filteredFieldData[$fieldName]) && !empty($defaultFieldValues[$fieldName])) { $filteredFieldData[$fieldName] = $defaultFieldValues[$fieldName]; } } $filteredFieldData = $this->transformForImport($filteredFieldData, $moduleMeta, $fillDefault, $mandatoryValueChecks); $filteredFieldData['id'] = $baseEntityId; $entityInfo = vtws_revise($filteredFieldData, $this->user); $entityInfo['status'] = self::$IMPORT_RECORD_MERGED; $fieldData = $filteredFieldData; } } else { $createRecord = true; } } else { $createRecord = true; } } else { $createRecord = true; } if ($createRecord) { $fieldData = $this->transformForImport($fieldData, $moduleMeta); if ($fieldData == null) { $entityInfo = null; } else { try { $entityInfo = vtws_create($moduleName, $fieldData, $this->user); } catch (Exception $e) { } } } } if ($entityInfo == null) { $entityInfo = array('id' => null, 'status' => self::$IMPORT_RECORD_FAILED); } else { if ($createRecord) { $entityInfo['status'] = self::$IMPORT_RECORD_CREATED; } } if ($createRecord || $mergeType == Import_Utils_Helper::$AUTO_MERGE_MERGEFIELDS || $mergeType == Import_Utils_Helper::$AUTO_MERGE_OVERWRITE) { $entityIdComponents = vtws_getIdComponents($entityInfo['id']); $recordId = $entityIdComponents[1]; $entityfields = getEntityFieldNames($this->module); switch ($this->module) { case 'HelpDesk': $entityfields['fieldname'] = array('ticket_title'); break; case 'Documents': $entityfields['fieldname'] = array('notes_title'); break; case 'Documents': $entityfields['fieldname'] = array('notes_title'); break; } $label = ''; if (is_array($entityfields['fieldname'])) { foreach ($entityfields['fieldname'] as $field) { $label .= $fieldData[$field] . " "; } } else { $label = $fieldData[$entityfields['fieldname']]; } $label = trim($label); $adb->pquery('UPDATE vtiger_crmentity SET label=? WHERE crmid=?', array($label, $recordId)); } $this->importedRecordInfo[$rowId] = $entityInfo; $this->updateImportStatus($rowId, $entityInfo); } if ($this->entityData) { $entity = new VTEventsManager($adb); $entity->triggerEvent('vtiger.batchevent.save', $this->entityData); } $this->entityData = null; $result = null; return true; }
function vtws_convertlead($entityvalues, $user) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug('Start ' . __CLASS__ . ':' . __FUNCTION__); if (empty($entityvalues['assignedTo'])) { $entityvalues['assignedTo'] = vtws_getWebserviceEntityId('Users', $user->id); } if (empty($entityvalues['transferRelatedRecordsTo'])) { $entityvalues['transferRelatedRecordsTo'] = 'Accounts'; } $leadObject = VtigerWebserviceObject::fromName($adb, 'Leads'); $handlerPath = $leadObject->getHandlerPath(); $handlerClass = $leadObject->getHandlerClass(); require_once $handlerPath; $leadHandler = new $handlerClass($leadObject, $user, $adb, $log); $leadInfo = vtws_retrieve($entityvalues['leadId'], $user); $sql = "select converted from vtiger_leaddetails where converted = 1 and leadid=?"; $leadIdComponents = vtws_getIdComponents($entityvalues['leadId']); $result = $adb->pquery($sql, array($leadIdComponents[1])); if ($result === false) { $log->error('Error converting a lead: ' . vtws_getWebserviceTranslatedString('LBL_' . WebServiceErrorCode::$DATABASEQUERYERROR)); throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, vtws_getWebserviceTranslatedString('LBL_' . WebServiceErrorCode::$DATABASEQUERYERROR)); } $rowCount = $adb->num_rows($result); if ($rowCount > 0) { $log->error('Error converting a lead: Lead is already converted'); throw new WebServiceException(WebServiceErrorCode::$LEAD_ALREADY_CONVERTED, "Lead is already converted"); } require_once "include/events/include.inc"; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromEntityId($adb, $leadIdComponents[1]); $em->triggerEvent('entity.convertlead.before', [$entityvalues, $user, $leadInfo]); $entityIds = []; $availableModules = ['Accounts', 'Contacts', 'Potentials']; if (!($entityvalues['entities']['Accounts']['create'] || $entityvalues['entities']['Contacts']['create'])) { return null; } foreach ($availableModules as $entityName) { if ($entityvalues['entities'][$entityName]['create']) { $entityvalue = $entityvalues['entities'][$entityName]; $entityObject = VtigerWebserviceObject::fromName($adb, $entityvalue['name']); $handlerPath = $entityObject->getHandlerPath(); $handlerClass = $entityObject->getHandlerClass(); require_once $handlerPath; $entityHandler = new $handlerClass($entityObject, $user, $adb, $log); $entityObjectValues = array(); $entityObjectValues['assigned_user_id'] = $entityvalues['assignedTo']; $entityObjectValues = vtws_populateConvertLeadEntities($entityvalue, $entityObjectValues, $entityHandler, $leadHandler, $leadInfo); //update potential related to property if ($entityvalue['name'] == 'Potentials') { if (!empty($entityIds['Accounts'])) { $entityObjectValues['related_to'] = $entityIds['Accounts']; } if (!empty($entityIds['Contacts'])) { $entityObjectValues['contact_id'] = $entityIds['Contacts']; } } //update the contacts relation if ($entityvalue['name'] == 'Contacts') { if (!empty($entityIds['Accounts'])) { $entityObjectValues['parent_id'] = $entityIds['Accounts']; } } try { $create = true; if ($entityvalue['name'] == 'Accounts' && $entityvalue['convert_to_id'] && is_int($entityvalue['convert_to_id'])) { $entityIds[$entityName] = vtws_getWebserviceEntityId('Accounts', $entityvalue['convert_to_id']); $create = false; } if ($create) { $entityRecord = vtws_create($entityvalue['name'], $entityObjectValues, $user); $entityIds[$entityName] = $entityRecord['id']; } } catch (Exception $e) { $log->error('Error converting a lead: ' . $e->getMessage()); throw new WebServiceException(WebServiceErrorCode::$UNKNOWNOPERATION, $e->getMessage() . ' : ' . $entityvalue['name']); } } } try { $accountIdComponents = vtws_getIdComponents($entityIds['Accounts']); $accountId = $accountIdComponents[1]; $contactIdComponents = vtws_getIdComponents($entityIds['Contacts']); $contactId = $contactIdComponents[1]; if (!empty($accountId) && !empty($contactId) && !empty($entityIds['Potentials'])) { $potentialIdComponents = vtws_getIdComponents($entityIds['Potentials']); $potentialId = $potentialIdComponents[1]; $sql = "insert into vtiger_contpotentialrel values(?,?)"; $result = $adb->pquery($sql, array($contactId, $potentialIdComponents[1])); if ($result === false) { throw new WebServiceException(WebServiceErrorCode::$FAILED_TO_CREATE_RELATION, "Failed to related Contact with the Potential"); } } $transfered = vtws_convertLeadTransferHandler($leadIdComponents, $entityIds, $entityvalues); $relatedIdComponents = vtws_getIdComponents($entityIds[$entityvalues['transferRelatedRecordsTo']]); vtws_getRelatedActivities($leadIdComponents[1], $accountId, $contactId, $relatedIdComponents[1]); vtws_updateConvertLeadStatus($entityIds, $entityvalues['leadId'], $user); if ($em) { $em->triggerEvent('entity.convertlead.after', [$entityvalues, $user, $leadInfo, $entityIds]); } } catch (Exception $e) { $log->error('Error converting a lead: ' . $e->getMessage()); foreach ($entityIds as $entity => $id) { vtws_delete($id, $user); } return null; } $log->debug('End ' . __CLASS__ . ':' . __FUNCTION__); return $entityIds; }
/** Function to delete the specified group * @param $groupId -- Group Id :: Type integer * @param $transferId -- Id of the group/user to which record ownership is to be transferred:: Type integer * @param $transferType -- It can have only two values namely 'Groups' or 'Users'. This determines whether the owneship is to be transferred to a group or user :: Type varchar */ function deleteGroup($groupId, $transferId) { global $log; $log->debug("Entering deleteGroup(" . $groupId . ") method ..."); global $adb; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = array(); $entityData['groupid'] = $groupId; $entityData['transferToId'] = $transferId; $em->triggerEvent("vtiger.entity.beforegroupdelete", $entityData); tranferGroupOwnership($groupId, $transferId); deleteGroupRelatedSharingRules($groupId); $query = "delete from vtiger_groups where groupid=?"; $adb->pquery($query, array($groupId)); deleteGroupRelatedGroups($groupId); deleteGroupRelatedRoles($groupId); deleteGroupReportRelations($groupId); deleteGroupRelatedRolesAndSubordinates($groupId); deleteGroupRelatedUsers($groupId); $log->debug("Exiting deleteGroup method ..."); }
/** * Save the inventory data */ public function saveInventoryData() { //Event triggering code require_once "include/events/include.inc"; $db = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug('Entering ' . __CLASS__ . '::' . __METHOD__); $moduleName = $this->getModuleName(); $inventory = Vtiger_InventoryField_Model::getInstance($moduleName); $fields = $inventory->getColumns(); $table = $inventory->getTableName('data'); $summaryFields = $inventory->getSummaryFields(); $insertDataTemp = $summary = []; $request = new Vtiger_Request($_REQUEST, $_REQUEST); $numRow = $request->get('inventoryItemsNo'); //In Bulk mode stop triggering events if (!CRMEntity::isBulkSaveMode()) { $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $em->triggerEvent('entity.inventory.beforesave', [$this, $inventory]); } $db->pquery("delete from {$table} where id = ?", [$this->getId()]); for ($i = 1; $i <= $numRow; $i++) { if (!$request->has(reset($fields)) && !$request->has(reset($fields) . $i)) { continue; } $insertData = ['id' => $this->getId(), 'seq' => $request->get('seq' . $i)]; foreach ($fields as $field) { $value = $insertData[$field] = $inventory->getValueForSave($request, $field, $i); if (in_array($field, $summaryFields)) { $summary[$field] += $value; } } $db->insert($table, $insertData); $insertDataTemp[] = $insertData; } foreach ($summary as $fieldName => $fieldValue) { if ($this->has($fieldName)) { $this->set($fieldName, CurrencyField::convertToUserFormat($fieldValue, null, true)); } } if ($em) { //Event triggering code $em->triggerEvent('entity.inventory.aftersave', [$this, $inventory, $insertDataTemp, $summary]); } $log->debug('Exiting ' . __CLASS__ . '::' . __METHOD__); }
/** Function to saves the values in all the tables mentioned in the class variable $tab_name for the specified module * @param $module -- module:: Type varchar */ function save($module_name, $fileid = '') { global $log; $log->debug("module name is " . $module_name); //Event triggering code require_once "include/events/include.inc"; global $adb; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromCRMEntity($this); $em->triggerEvent("vtiger.entity.beforesave.modifiable", $entityData); $em->triggerEvent("vtiger.entity.beforesave", $entityData); $em->triggerEvent("vtiger.entity.beforesave.final", $entityData); //Event triggering code ends //GS Save entity being called with the modulename as parameter $this->saveentity($module_name, $fileid); //Event triggering code $em->triggerEvent("vtiger.entity.aftersave", $entityData); //Event triggering code ends }
/** * Function to related two records of different entity types */ function relateEntities($focus, $sourceModule, $sourceRecordId, $destinationModule, $destinationRecordIds) { global $log, $adb; $log->debug("Entering relateEntities method ({$sourceModule}, {$sourceRecordId}, {$destinationModule}, {$destinationRecordIds})"); require_once "include/events/include.inc"; $em = new VTEventsManager($adb); $em->initTriggerCache(); if (!is_array($destinationRecordIds)) { $destinationRecordIds = array($destinationRecordIds); } foreach ($destinationRecordIds as $destinationRecordId) { $data = array(); $data['focus'] = $focus; $data['sourceModule'] = $sourceModule; $data['sourceRecordId'] = $sourceRecordId; $data['destinationModule'] = $destinationModule; $data['destinationRecordId'] = $destinationRecordId; $em->triggerEvent('vtiger.entity.link.before', $data); $focus->save_related_module($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $focus->trackLinkedInfo($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $em->triggerEvent('vtiger.entity.link.after', $data); } $log->debug("Exiting relateEntities method ..."); }
/** * Function to delete the group * @param <Settings_Groups_Record_Model> $transferToGroup */ public function delete($transferToGroup) { $db = PearDatabase::getInstance(); $groupId = $this->getId(); $transferGroupId = $transferToGroup->getId(); $em = new VTEventsManager($db); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = array(); $entityData['groupid'] = $groupId; $entityData['transferToId'] = $transferGroupId; $em->triggerEvent("vtiger.entity.beforegroupdelete", $entityData); $this->transferOwnership($transferToGroup); deleteGroupRelatedSharingRules($groupId); $db->pquery('DELETE FROM vtiger_group2grouprel WHERE groupid=?', array($groupId)); $db->pquery('DELETE FROM vtiger_group2role WHERE groupid=?', array($groupId)); $db->pquery('DELETE FROM vtiger_group2rs WHERE groupid=?', array($groupId)); $db->pquery('DELETE FROM vtiger_users2group WHERE groupid=?', array($groupId)); $db->pquery("DELETE FROM vtiger_reportsharing WHERE shareid=? AND setype='groups'", array($groupId)); $db->pquery('DELETE FROM vtiger_group2modules WHERE groupid=?', array($groupId)); $db->pquery('DELETE FROM vtiger_groups WHERE groupid=?', array($groupId)); }
function undoImport(Vtiger_Request $request) { $viewer = new Vtiger_Viewer(); $db = PearDatabase::getInstance(); $moduleName = $request->getModule(); $ownerId = $request->get('foruser'); $user = Users_Record_Model::getCurrentUserModel(); $dbTableName = Import_Utils_Helper::getDbTableName($user); if (!$user->isAdminUser() && $user->id != $ownerId) { $viewer->assign('MESSAGE', 'LBL_PERMISSION_DENIED'); $viewer->view('OperationNotPermitted.tpl', 'Vtiger'); exit; } $previousBulkSaveMode = $VTIGER_BULK_SAVE_MODE; $VTIGER_BULK_SAVE_MODE = true; $query = "SELECT recordid FROM {$dbTableName} WHERE temp_status = ? AND recordid IS NOT NULL"; //For inventory modules $inventoryModules = getInventoryModules(); if (in_array($moduleName, $inventoryModules)) { $query .= ' GROUP BY subject'; } //End $result = $db->pquery($query, array(Import_Data_Action::$IMPORT_RECORD_CREATED)); $noOfRecords = $db->num_rows($result); $noOfRecordsDeleted = 0; $entityData = array(); for ($i = 0; $i < $noOfRecords; $i++) { $recordId = $db->query_result($result, $i, 'recordid'); if (isRecordExists($recordId) && isPermitted($moduleName, 'Delete', $recordId) == 'yes') { $recordModel = Vtiger_Record_Model::getCleanInstance($moduleName); $recordModel->setId($recordId); $recordModel->delete(); $focus = $recordModel->getEntity(); $focus->id = $recordId; $entityData[] = VTEntityData::fromCRMEntity($focus); $noOfRecordsDeleted++; } } $entity = new VTEventsManager($db); $entity->triggerEvent('vtiger.batchevent.delete', $entityData); $VTIGER_BULK_SAVE_MODE = $previousBulkSaveMode; $viewer->assign('FOR_MODULE', $moduleName); $viewer->assign('MODULE', 'Import'); $viewer->assign('TOTAL_RECORDS', $noOfRecords); $viewer->assign('DELETED_RECORDS_COUNT', $noOfRecordsDeleted); $viewer->view('ImportUndoResult.tpl', 'Import'); }
/** * Function to related two records of different entity types */ function relateEntities($focus, $sourceModule, $sourceRecordId, $destinationModule, $destinationRecordIds) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug("Entering relateEntities method ({$sourceModule}, {$sourceRecordId}, {$destinationModule}, {$destinationRecordIds})"); require_once "include/events/include.inc"; $em = new VTEventsManager($adb); $em->initTriggerCache(); if (!is_array($destinationRecordIds)) { $destinationRecordIds = [$destinationRecordIds]; } $data = []; $data['CRMEntity'] = $focus; $data['entityData'] = VTEntityData::fromEntityId($adb, $sourceRecordId); $data['sourceModule'] = $sourceModule; $data['sourceRecordId'] = $sourceRecordId; $data['destinationModule'] = $destinationModule; foreach ($destinationRecordIds as $destinationRecordId) { $data['destinationRecordId'] = $destinationRecordId; $em->triggerEvent('vtiger.entity.link.before', $data); $focus->save_related_module($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $focus->trackLinkedInfo($sourceModule, $sourceRecordId, $destinationModule, $destinationRecordId); $em->triggerEvent('vtiger.entity.link.after', $data); } $log->debug("Exiting relateEntities method ..."); }
/** Function to restore a deleted record of specified module with given crmid * @param $module -- module name:: Type varchar * @param $entity_ids -- list of crmids :: Array */ function restore($module, $id) { $db = PearDatabase::getInstance(); $currentUser = vglobal('current_user'); $db->startTransaction(); $db->update('vtiger_crmentity', ['deleted' => 0, 'modifiedtime' => date('Y-m-d H:i:s'), 'modifiedby' => $currentUser->id], 'crmid = ?', [$id]); //Restore related entities/records $this->restoreRelatedRecords($module, $id); //Event triggering code require_once 'include/events/include.inc'; $em = new VTEventsManager($db); // Initialize Event trigger cache $em->initTriggerCache(); $this->id = $id; $entityData = VTEntityData::fromCRMEntity($this); //Event triggering code $em->triggerEvent('vtiger.entity.afterrestore', $entityData); //Event triggering code ends $db->completeTransaction(); }
require_once "modules/com_vtiger_workflow/VTWorkflowManager.inc"; require_once "modules/com_vtiger_workflow/VTTaskManager.inc"; require_once "modules/com_vtiger_workflow/VTWorkflowApplication.inc"; require_once "modules/com_vtiger_workflow/VTEntityMethodManager.inc"; require_once "include/utils/CommonUtils.php"; require_once "include/events/SqlResultIterator.inc"; require_once "modules/com_vtiger_workflow/VTWorkflowUtils.php"; require_once "modules/Project/Project.php"; $focus1 = new Project(); $focus1->retrieve_entity_info($pcdetailsproject, "Project"); $focus1->id = $pcdetailsproject; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromCRMEntity($focus1); $em->triggerEvent("vtiger.entity.beforesave.modifiable", $entityData); $em->triggerEvent("vtiger.entity.beforesave", $entityData); $em->triggerEvent("vtiger.entity.beforesave.final", $entityData); $em->triggerEvent("vtiger.entity.aftersave", $entityData); //} $projectQuery1 = $adb->query("select * from vtiger_project where projectid={$pcdetailsproject}"); if ($adb->query_result($projectQuery1, 0, "substatusproj") == "CAT_parts sent by Teknema" && $adb->query_result($projectQuery1, 0, "statopartech") == 'SHIPPED') { $logpart .= "Movimento frecce avvenuto con successo </span><br><br>"; $logs[$i - 1] .= "Movimento frecce avvenuto con successo"; } elseif ($subs != "CAT_parts request" && strstr($subs, "attesa parti") != '' && $adb->query_result($projectQuery1, 0, "statopartech") == 'SHIPPED') { $logpart .= "<span style='color:blue'> Substatus errato {$d['2']} </span></span><br><br>"; $logs[$i - 1] .= "Substatus errato {$d['2']}"; } else { $logpart .= "Substatus non modificato </span><br><br>"; $logs[$i - 1] .= "Substatus non modificato"; }
/** * Trigger event based on CRM Record * @param String Name of the Event to trigger * @param Integer CRM record id on which event needs to be triggered. */ static function trigger($eventname, $crmid) { if (!self::hasSupport()) { return; } $adb = PearDatabase::getInstance(); $checkres = $adb->pquery("SELECT setype, crmid, deleted FROM vtiger_crmentity WHERE crmid=?", array($crmid)); if ($adb->num_rows($checkres)) { $result = $adb->fetch_array($checkres, 0); if ($result['deleted'] == '0') { $module = $result['setype']; $moduleInstance = CRMEntity::getInstance($module); $moduleInstance->retrieve_entity_info($result['crmid'], $module); $moduleInstance->id = $result['crmid']; $current_user = vglobal('current_user'); if (!$current_user) { $current_user = new Users(); $current_user->id = $moduleInstance->column_fields['assigned_user_id']; } // Trigger the event $em = new VTEventsManager($adb); $em->triggerEvent($eventname, VTEntityData::fromCRMEntity($moduleInstance)); } } }
/** * Save the inventory data */ public function saveInventoryData() { //Event triggering code require_once "include/events/include.inc"; $db = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug('Entering ' . __CLASS__ . '::' . __METHOD__); $moduleName = $this->getModuleName(); $inventory = Vtiger_InventoryField_Model::getInstance($moduleName); $table = $inventory->getTableName('data'); if ($this->has('inventoryData')) { $request = $this->get('inventoryData'); } else { $request = new Vtiger_Request($_REQUEST, $_REQUEST); } $numRow = $request->get('inventoryItemsNo'); //In Bulk mode stop triggering events if (!CRMEntity::isBulkSaveMode()) { $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $em->triggerEvent('entity.inventory.beforesave', [$this, $inventory, $this->inventoryData]); } $db->delete($table, 'id = ?', [$this->getId()]); foreach ($this->inventoryData as $insertData) { $insertData['id'] = $this->getId(); $db->insert($table, $insertData); } if ($em) { //Event triggering code $em->triggerEvent('entity.inventory.aftersave', [$this, $inventory, $this->inventoryData]); } $log->debug('Exiting ' . __CLASS__ . '::' . __METHOD__); }
public function triggerAfterSaveEventHandlers() { $adb = PearDatabase::getInstance(); require_once "include/events/include.inc"; //In Bulk mode stop triggering events if (!self::isBulkSaveMode()) { $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromCRMEntity($this); } //Event triggering code ends if ($em) { //Event triggering code $em->triggerEvent("vtiger.entity.aftersave", $entityData); $em->triggerEvent("vtiger.entity.aftersave.final", $entityData); } }
public function remove($pickListFieldName, $valueToDeleteId, $replaceValueId, $moduleName) { $db = PearDatabase::getInstance(); if (!is_array($valueToDeleteId)) { $valueToDeleteId = array($valueToDeleteId); } $primaryKey = Vtiger_Util_Helper::getPickListId($pickListFieldName); $pickListValues = array(); $valuesOfDeleteIds = "SELECT {$pickListFieldName} FROM " . $this->getPickListTableName($pickListFieldName) . " WHERE {$primaryKey} IN (" . generateQuestionMarks($valueToDeleteId) . ")"; $pickListValuesResult = $db->pquery($valuesOfDeleteIds, array($valueToDeleteId)); $num_rows = $db->num_rows($pickListValuesResult); for ($i = 0; $i < $num_rows; $i++) { $pickListValues[] = decode_html($db->query_result($pickListValuesResult, $i, $pickListFieldName)); } $replaceValueQuery = $db->pquery("SELECT {$pickListFieldName} FROM " . $this->getPickListTableName($pickListFieldName) . " WHERE {$primaryKey} IN (" . generateQuestionMarks($replaceValueId) . ")", array($replaceValueId)); $replaceValue = decode_html($db->query_result($replaceValueQuery, 0, $pickListFieldName)); //As older look utf8 characters are pushed as html-entities,and in new utf8 characters are pushed to database //so we are checking for both the values $encodedValueToDelete = array(); foreach ($pickListValues as $key => $value) { $encodedValueToDelete[$key] = Vtiger_Util_Helper::toSafeHTML($value); } $mergedValuesToDelete = array_merge($pickListValues, $encodedValueToDelete); $fieldModel = Settings_Picklist_Field_Model::getInstance($pickListFieldName, $this); //if role based then we need to delete all the values in role based picklist if ($fieldModel->isRoleBased()) { $picklistValueIdToDelete = array(); $query = 'SELECT picklist_valueid FROM ' . $this->getPickListTableName($pickListFieldName) . ' WHERE ' . $primaryKey . ' IN (' . generateQuestionMarks($valueToDeleteId) . ')'; $result = $db->pquery($query, $valueToDeleteId); $num_rows = $db->num_rows($result); for ($i = 0; $i < $num_rows; $i++) { $picklistValueIdToDelete[] = $db->query_result($result, $i, 'picklist_valueid'); } $query = 'DELETE FROM vtiger_role2picklist WHERE picklistvalueid IN (' . generateQuestionMarks($picklistValueIdToDelete) . ')'; $db->pquery($query, $picklistValueIdToDelete); } $query = 'DELETE FROM ' . $this->getPickListTableName($pickListFieldName) . ' WHERE ' . $primaryKey . ' IN (' . generateQuestionMarks($valueToDeleteId) . ')'; $db->pquery($query, $valueToDeleteId); vimport('include/utils/CommonUtils.php'); $tabId = getTabId($moduleName); $query = 'DELETE FROM vtiger_picklist_dependency WHERE sourcevalue IN (' . generateQuestionMarks($pickListValues) . ')' . ' AND sourcefield=?'; $params = array(); array_push($params, $pickListValues); array_push($params, $pickListFieldName); $db->pquery($query, $params); $query = 'SELECT tablename,columnname FROM vtiger_field WHERE fieldname=? AND presence in (0,2)'; $result = $db->pquery($query, array($pickListFieldName)); $num_row = $db->num_rows($result); for ($i = 0; $i < $num_row; $i++) { $row = $db->query_result_rowdata($result, $i); $tableName = $row['tablename']; $columnName = $row['columnname']; $query = 'UPDATE ' . $tableName . ' SET ' . $columnName . '=? WHERE ' . $columnName . ' IN (' . generateQuestionMarks($pickListValues) . ')'; $params = array($replaceValue); array_push($params, $pickListValues); $db->pquery($query, $params); } $query = 'UPDATE vtiger_field SET defaultvalue=? WHERE defaultvalue IN (' . generateQuestionMarks($pickListValues) . ') AND columnname=?'; $params = array($replaceValue); array_push($params, $pickListValues); array_push($params, $columnName); $db->pquery($query, $params); $em = new VTEventsManager($db); $data = array(); $data['fieldname'] = $pickListFieldName; $data['valuetodelete'] = $pickListValues; $data['replacevalue'] = $replaceValue; $data['module'] = $moduleName; $em->triggerEvent('vtiger.picklist.afterdelete', $data); return true; }
/** Function to restore a deleted record of specified module with given crmid * @param $module -- module name:: Type varchar * @param $entity_ids -- list of crmids :: Array */ function restore($module, $id) { global $current_user, $adb; $this->db->println("TRANS restore starts {$module}"); $this->db->startTransaction(); $date_var = date("Y-m-d H:i:s"); $query = 'UPDATE vtiger_crmentity SET deleted=0,modifiedtime=?,modifiedby=? WHERE crmid = ?'; $this->db->pquery($query, array($this->db->formatDate($date_var, true), $current_user->id, $id), true, "Error restoring records :"); //Restore related entities/records $this->restoreRelatedRecords($module, $id); //Event triggering code require_once "include/events/include.inc"; global $adb; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $this->id = $id; $entityData = VTEntityData::fromCRMEntity($this); //Event triggering code $em->triggerEvent("vtiger.entity.afterrestore", $entityData); //Event triggering code ends $this->db->completeTransaction(); $this->db->println("TRANS restore ends"); }
/** * This function returns no value but handles the delete functionality of each entity. * Input Parameter are $module - module name, $return_module - return module name, $focus - module object, $record - entity id, $return_id - return entity id. */ function DeleteEntity($module, $return_module, $focus, $record, $return_id) { global $log, $adb; $log->debug("Entering DeleteEntity method ({$module}, {$return_module}, {$record}, {$return_id})"); require_once "include/events/include.inc"; $em = new VTEventsManager($adb); $em->initTriggerCache(); $entityData = VTEntityData::fromEntityId($adb, $record); $em->triggerEvent("vtiger.entity.beforeunlink", $entityData); if ($module != $return_module && !empty($return_module) && !empty($return_id)) { $focus->unlinkRelationship($record, $return_module, $return_id); $focus->trackUnLinkedInfo($return_module, $return_id, $module, $record); } else { $focus->trash($module, $record); } if ($em) { $entityData = VTEntityData::fromEntityId($adb, $record); $em->triggerEvent("vtiger.entity.afterunlink", $entityData); } $log->debug("Exiting DeleteEntity method ..."); }