晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/public_html/crm/modules/WSAPP/Handlers/ |
Upload File : |
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
require_once 'modules/WSAPP/Handlers/vtigerCRMHandler.php';
require_once 'include/utils/GetUserGroups.php';
class OutlookVtigerCRMHandler extends vtigerCRMHandler{
public function translateReferenceFieldNamesToIds($entityRecords,$user){
$entityRecordList = array();
foreach($entityRecords as $index=>$record){
$entityRecordList[$record['module']][$index] = $record;
}
foreach($entityRecordList as $module=>$records){
$handler = vtws_getModuleHandlerFromName($module, $user);
$meta = $handler->getMeta();
$referenceFieldDetails = $meta->getReferenceFieldDetails();
foreach($referenceFieldDetails as $referenceFieldName=>$referenceModuleDetails){
$recordReferenceFieldNames = array();
foreach($records as $index=>$recordDetails){
if(!empty($recordDetails[$referenceFieldName])) {
$recordReferenceFieldNames[] = trim($recordDetails[$referenceFieldName]);
}
}
$entityNameIds = wsapp_getRecordEntityNameIds(array_values($recordReferenceFieldNames), $referenceModuleDetails, $user);
if(is_array($entityNameIds))
$entityNameIds = array_change_key_case($entityNameIds, CASE_LOWER);
foreach($records as $index=>$recordInfo){
$refFieldValue = strtolower(trim($recordInfo[$referenceFieldName]));
if(!empty($entityNameIds[$refFieldValue])){
$recordInfo[$referenceFieldName] = $entityNameIds[$refFieldValue];
} else {
if($referenceFieldName == 'account_id'){
if($recordInfo[$referenceFieldName]!=NULL){
$element['accountname'] = trim($recordInfo[$referenceFieldName]);
$element['assigned_user_id'] = vtws_getWebserviceEntityId('Users', $user->id);
$element['source'] = Vtiger_Cache::get('WSAPP','appName');
$element['module'] = "Accounts";
$createRecord= array($element);
$createRecord = $this->fillNonExistingMandatoryPicklistValues($createRecord);
$createRecord = $this->fillMandatoryFields($createRecord, $user);
/**
* It'll loop only once. Still we need to loop because to fill mandatory values we need
* array of records
*/
foreach ($createRecord as $key => $record) {
try {
$result = vtws_create($record['module'], $record, $user);
$entityNameIds[$refFieldValue] = $result['id'];
} catch (Exception $e) {
unset($entityNameIds[$refFieldValue]);
continue;
}
}
$recordInfo[$referenceFieldName] = $entityNameIds[$refFieldValue];
}
}
else{
$recordInfo[$referenceFieldName] = "";
}
}
$records[$index] = $recordInfo;
}
}
$entityRecordList[$module] = $records;
}
$crmRecords = array();
foreach($entityRecordList as $module=>$entityRecords){
foreach($entityRecords as $index=>$record){
$crmRecords[$index] = $record;
}
}
return $crmRecords;
}
public function translateTheReferenceFieldIdsToName($records, $module, $user) {
$db = PearDatabase::getInstance();
global $current_user;
$current_user = $user;
$handler = vtws_getModuleHandlerFromName($module, $user);
$meta = $handler->getMeta();
$referenceFieldDetails = $meta->getReferenceFieldDetails();
foreach ($referenceFieldDetails as $referenceFieldName => $referenceModuleDetails) {
if($module == 'Events' && $referenceFieldName == "contact_id"){
// to set all related Contacts of Event records
foreach($records as $index => $record){
$id = $record['id'];
$idComp = vtws_getIdComponents($id);
$recordIds[] = $idComp[1];
}
$eventRecordModel = new Events_Record_Model();
$contactsInfos = $eventRecordModel->getRelatedContactInfoFromIds($recordIds);
foreach($records as $index => $record){
$id = $record['id'];
$idComp = vtws_getIdComponents($id);
if($contactsInfos[$idComp[1]]){
$records[$index]['attendees'] = $contactsInfos[$idComp[1]];
}
}
}else{
$referenceFieldIds = array();
$referenceModuleIds = array();
$referenceIdsName = array();
foreach ($records as $recordDetails) {
$referenceWsId = $recordDetails[$referenceFieldName];
if (!empty($referenceWsId)) {
$referenceIdComp = vtws_getIdComponents($referenceWsId);
$webserviceObject = VtigerWebserviceObject::fromId($db, $referenceIdComp[0]);
if ($webserviceObject->getEntityName() == 'Currency') {
continue;
}
$referenceModuleIds[$webserviceObject->getEntityName()][] = $referenceIdComp[1];
$referenceFieldIds[] = $referenceIdComp[1];
}
}
foreach ($referenceModuleIds as $referenceModule => $idLists) {
$nameList = getEntityName($referenceModule, $idLists);
foreach ($nameList as $key => $value)
$referenceIdsName[$key] = $value;
}
$recordCount = count($records);
for ($i = 0; $i < $recordCount; $i++) {
$record = $records[$i];
if (!empty($record[$referenceFieldName])) {
$wsId = vtws_getIdComponents($record[$referenceFieldName]);
$record[$referenceFieldName] = decode_html($referenceIdsName[$wsId[1]]);
}
$records[$i] = $record;
}
}
}
return $records;
}
/*
* Function to attach outlook attendees to Contacts of Vtiger Event
*/
public function relateEventandContacts($Event){
$contactids = array();
foreach($Event['attendees'] as $attendee){
$searchModule = "Contacts";
$searchModuleLabel = vtranslate($searchModule, $searchModule);
$emailsModule = new Emails_Module_Model();
$result = $emailsModule->searchEmails($attendee,$searchModule);
if($result[$searchModuleLabel]){
$keys = array_keys($result[$searchModuleLabel]);
$contactids = array_merge($contactids, $keys);
}
}
$contactids = array_values(array_unique($contactids));
if($contactids){
$_REQUEST['contactidlist'] = implode(';', $contactids);
$Event['contact_id_display'] = implode(',',$contactids);
}
unset($Event['attendees']);
return $Event;
}
/*
* Function overriden to handle duplication
*/
public function put($recordDetails, $user) {
global $log;
$this->user = $user;
$recordDetails = $this->syncToNativeFormat($recordDetails);
$createdRecords = $recordDetails['created'];
$updatedRecords = $recordDetails['updated'];
$deletedRecords = $recordDetails['deleted'];
if (count($createdRecords) > 0) {
$createdRecords = $this->translateReferenceFieldNamesToIds($createdRecords, $user);
$createdRecords = $this->fillNonExistingMandatoryPicklistValues($createdRecords);
$createdRecords = $this->fillMandatoryFields($createdRecords, $user);
}
foreach ($createdRecords as $index => $record) {
if($record['module'] == "Events" && isset($record['attendees'])){
$record = $this->relateEventandContacts($record);
}
try {
$createdRecords[$index] = vtws_create($record['module'], $record, $this->user);
} catch (Exception $e) {
unset($createdRecords[$index]);
continue;
}
}
if (count($updatedRecords) > 0) {
$updatedRecords = $this->translateReferenceFieldNamesToIds($updatedRecords, $user);
$updatedRecords = $this->removeMandatoryEmptyFields($updatedRecords, $user);
}
$crmIds = array();
foreach ($updatedRecords as $index => $record) {
$webserviceRecordId = $record["id"];
$recordIdComp = vtws_getIdComponents($webserviceRecordId);
$crmIds[] = $recordIdComp[1];
}
$assignedRecordIds = array();
if ($this->isClientUserSyncType()) {
$assignedRecordIds = wsapp_checkIfRecordsAssignToUser($crmIds, $this->user->id);
// To check if the record assigned to group
if ($this->isClientUserAndGroupSyncType()) {
$getUserGroups = new GetUserGroups();
$getUserGroups->getAllUserGroups($this->user->id);
$groupIds = $getUserGroups->user_groups;
if(!empty($groupIds)){
$groupRecordId = wsapp_checkIfRecordsAssignToUser($crmIds, $groupIds);
$assignedRecordIds = array_merge($assignedRecordIds, $groupRecordId);
}
}
// End
}
foreach ($updatedRecords as $index => $record) {
if($record['module'] == "Events" && isset($record['attendees'])){
$record = $this->relateEventandContacts($record);
}
$webserviceRecordId = $record["id"];
$recordIdComp = vtws_getIdComponents($webserviceRecordId);
try {
if (in_array($recordIdComp[1], $assignedRecordIds)) {
$updatedRecords[$index] = vtws_revise($record, $this->user);
} else if (!$this->isClientUserSyncType()) {
$updatedRecords[$index] = vtws_revise($record, $this->user);
} else {
$this->assignToChangedRecords[$index] = $record;
}
} catch (Exception $e) {
continue;
}
// Added to handle duplication
if($record['duplicate']){
$updatedRecords[$index]['duplicate'] = true;
}
// End
}
$hasDeleteAccess = null;
$deletedCrmIds = array();
foreach ($deletedRecords as $index => $record) {
$webserviceRecordId = $record;
$recordIdComp = vtws_getIdComponents($webserviceRecordId);
$deletedCrmIds[] = $recordIdComp[1];
}
$assignedDeletedRecordIds = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $this->user->id);
// To get record id's assigned to group of the current user
if ($this->isClientUserAndGroupSyncType()) {
if(!empty($groupIds)){
foreach ($groupIds as $group) {
$groupRecordId = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $group);
$assignedDeletedRecordIds = array_merge($assignedDeletedRecordIds, $groupRecordId);
}
}
}
// End
foreach ($deletedRecords as $index => $record) {
$idComp = vtws_getIdComponents($record);
if (empty($hasDeleteAccess)) {
$handler = vtws_getModuleHandlerFromId($idComp[0], $this->user);
$meta = $handler->getMeta();
$hasDeleteAccess = $meta->hasDeleteAccess();
}
if ($hasDeleteAccess) {
if (in_array($idComp[1], $assignedDeletedRecordIds)) {
try {
vtws_delete($record, $this->user);
} catch (Exception $e) {
continue;
}
}
}
}
$recordDetails['created'] = $createdRecords;
$recordDetails['updated'] = $updatedRecords;
$recordDetails['deleted'] = $deletedRecords;
return $this->nativeToSyncFormat($recordDetails);
}
/**
* Function to remove empty mandatory fields from record as vtws_revise will
* fail if we have empty mandaoty fields in record
* @global type $adb
* @param type $records
* @param type $user
* @return $records
*/
function removeMandatoryEmptyFields($records,$user){
foreach ($records as $index => $record) {
$moduleHandler = vtws_getModuleHandlerFromName($record['module'],$user);
$meta = $moduleHandler->getMeta();
$mandatoryFields = $meta->getMandatoryFields();
$updateFields = array_keys($record);
$updateMandatoryFields = array_intersect($updateFields, $mandatoryFields);
if(!empty($updateMandatoryFields)){
foreach($updateMandatoryFields as $ind=>$field){
if( !isset($record[$field]) || $record[$field] === "" || $record[$field] === null ){
unset($records[$index][$field]);
}
}
}
}
return $records;
}
}
?>