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 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"); }
/** 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 ..."); }
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); } }
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 ..."); }
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 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 ..."); }
/** * 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__); }
/** * 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 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) { $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 "include/CustomFieldUtil.php"; require_once "data/Tracker.php"; 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>";
/** * 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__); }
/** * 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 ..."); }