晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/www/crm/include/Webservices/ |
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 'include/Webservices/Retrieve.php';
require_once 'include/Webservices/Create.php';
require_once 'include/Webservices/Delete.php';
require_once 'include/Webservices/DescribeObject.php';
require_once 'includes/Loader.php';
vimport ('includes.runtime.Globals');
vimport ('includes.runtime.BaseModel');
function vtws_convertlead($entityvalues, $user) {
global $adb, $log;
if (empty($entityvalues['assignedTo'])) {
$entityvalues['assignedTo'] = vtws_getWebserviceEntityId('Users', $user->id);
}
if (empty($entityvalues['transferRelatedRecordsTo'])) {
$entityvalues['transferRelatedRecordsTo'] = 'Contacts';
}
$activeAdminUser = Users::getActiveAdminUser();
$leadObject = VtigerWebserviceObject::fromName($adb, 'Leads');
$handlerPath = $leadObject->getHandlerPath();
$handlerClass = $leadObject->getHandlerClass();
require_once $handlerPath;
$leadHandler = new $handlerClass($leadObject, $activeAdminUser, $adb, $log);
$leadInfo = vtws_retrieve($entityvalues['leadId'], $activeAdminUser);
$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) {
throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
vtws_getWebserviceTranslatedString('LBL_' .
WebServiceErrorCode::$DATABASEQUERYERROR));
}
$rowCount = $adb->num_rows($result);
if ($rowCount > 0) {
throw new WebServiceException(WebServiceErrorCode::$LEAD_ALREADY_CONVERTED,
"Lead is already converted");
}
$leadHasImage = false;
if($leadInfo['imagename'] && $entityvalues['imageAttachmentId']) {
$leadHasImage = true;
$imageAttachmentId = $entityvalues['imageAttachmentId'];
}
$entityIds = array();
$availableModules = array('Accounts', 'Contacts', 'Potentials');
if (!(($entityvalues['entities']['Accounts']['create']) || ($entityvalues['entities']['Contacts']['create']))) {
return null;
}
$quoteIds = array();
$leadId = explode('x', $leadInfo['id']);
$getQuote = 'SELECT quoteid from vtiger_quotes where contactid=?';
$results = $adb->pquery($getQuote, array($leadId[1]));
$count = $adb->num_rows($results);
if($count > 0){
for($i=0; $i < $count; $i++){
$quoteIds[] = $adb->query_result($results, $i, 'quoteid');
}
}
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, $activeAdminUser, $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['account_id'] = $entityIds['Accounts'];
}
}
try {
$create = true;
if ($entityvalue['name'] == 'Accounts') {
$sql = "SELECT vtiger_account.accountid FROM vtiger_account,vtiger_crmentity WHERE vtiger_crmentity.crmid=vtiger_account.accountid AND vtiger_account.accountname=? AND vtiger_crmentity.deleted=0";
$result = $adb->pquery($sql, array($entityvalue['accountname']));
if ($adb->num_rows($result) > 0) {
$entityIds[$entityName] = vtws_getWebserviceEntityId('Accounts', $adb->query_result($result, 0, 'accountid'));
$create = false;
}
}
if ($create) {
$entityObjectValues['imagename'] = '';
if(($leadHasImage) && ((($entityName == 'Contacts') || ($entityName == 'Accounts' && !$entityvalues['entities']['Contacts']['create'])))) {
$imageName = $adb->query_result($adb->pquery('SELECT name FROM vtiger_attachments
WHERE attachmentsid = ?',array($imageAttachmentId)),0,'name');
$entityObjectValues['imagename'] = $imageName;
}
$entityObjectValues['isconvertedfromlead'] = 1;
$entityRecord = vtws_create($entityvalue['name'], $entityObjectValues, $activeAdminUser);
$entityIds[$entityName] = $entityRecord['id'];
if($leadHasImage && in_array($entityName,array('Accounts','Contacts'))) {
$idComponents = explode('x',$entityIds[$entityName]);
$crmId = $idComponents[1];
$adb->pquery('UPDATE vtiger_seattachmentsrel SET crmid = ? WHERE attachmentsid = ?',array($crmId,$imageAttachmentId));
$adb->pquery('UPDATE vtiger_crmentity SET setype = ? WHERE crmid = ?',array($entityName.' Image',$imageAttachmentId));
}
}
} catch (DuplicateException $e) {
throw $e;
} catch (Exception $e) {
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($entityIds['Potentials'])){
$potentialIdComponents = vtws_getIdComponents($entityIds['Potentials']);
$potentialId = $potentialIdComponents[1];
}
if (!empty($accountId) && !empty($contactId) && !empty($potentialId)) {
$sql = "insert into vtiger_contpotentialrel values(?,?)";
$result = $adb->pquery($sql, array($contactId, $potentialId));
if ($result === false) {
throw new WebServiceException(WebServiceErrorCode::$FAILED_TO_CREATE_RELATION,
"Failed to related Contact with the Potential");
}
}
if($quoteIds){
$queryUpdate = 'UPDATE vtiger_quotes SET contactid=?, potentialid=? WHERE quoteid IN('. generateQuestionMarks($quoteIds).') ';
$adb->pquery($queryUpdate, array($contactId, $potentialId, $quoteIds));
if($accountId){
$queryUpdate = 'UPDATE vtiger_quotes SET accountid=? WHERE quoteid IN('. generateQuestionMarks($quoteIds).')';
$adb->pquery($queryUpdate, array($accountId, $quoteIds));
}
}
$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);
} catch (Exception $e) {
foreach ($entityIds as $entity => $id) {
vtws_delete($id, $user);
}
return null;
}
$leadId = explode("x",$entityvalues['leadId']);
if($leadId[1]) {
$em = new VTEventsManager($adb);
$em->initTriggerCache();
$entityData = VTEntityData::fromEntityId($adb, $leadId[1], 'Leads');
$entityData->entityIds = $entityIds;
$entityData->transferRelatedRecordsTo = $entityvalues['transferRelatedRecordsTo'];
$em->triggerEvent('vtiger.lead.convertlead', $entityData);
}
return $entityIds;
}
/*
* populate the entity fields with the lead info.
* if mandatory field is not provided populate with '????'
* returns the entity array.
*/
function vtws_populateConvertLeadEntities($entityvalue, $entity, $entityHandler, $leadHandler, $leadinfo) {
global $adb, $log;
$column;
$entityName = $entityvalue['name'];
$sql = "SELECT * FROM vtiger_convertleadmapping";
$result = $adb->pquery($sql, array());
if ($adb->num_rows($result)) {
switch ($entityName) {
case 'Accounts':$column = 'accountfid';
break;
case 'Contacts':$column = 'contactfid';
break;
case 'Potentials':$column = 'potentialfid';
break;
default:$column = 'leadfid';
break;
}
$leadFields = $leadHandler->getMeta()->getModuleFields();
$entityFields = $entityHandler->getMeta()->getModuleFields();
$row = $adb->fetch_array($result);
$count = 1;
do {
$entityField = vtws_getFieldfromFieldId($row[$column], $entityFields);
if ($entityField == null) {
//user doesn't have access so continue.TODO update even if user doesn't have access
continue;
}
$leadField = vtws_getFieldfromFieldId($row['leadfid'], $leadFields);
if ($leadField == null) {
//user doesn't have access so continue.TODO update even if user doesn't have access
continue;
}
$leadFieldName = $leadField->getFieldName();
$entityFieldName = $entityField->getFieldName();
$entity[$entityFieldName] = $leadinfo[$leadFieldName];
$count++;
} while ($row = $adb->fetch_array($result));
foreach ($entityFields as $fieldName=>$fieldModel) {
if(!empty($entityFields[$fieldName]) && $fieldModel->getDefault() && $fieldName !='isconvertedfromlead') {
if(!isset($entityvalue[$fieldName]) && empty($entity[$fieldName])) {
$entityvalue[$fieldName] = $fieldModel->getDefault();
}
}
}
foreach ($entityvalue as $fieldname => $fieldvalue) {
if (!empty($fieldvalue)) {
$entity[$fieldname] = $fieldvalue;
}
}
$entity = vtws_validateConvertEntityMandatoryValues($entity, $entityHandler, $entityName);
}
return $entity;
}
//function to handle the transferring of related records for lead
function vtws_convertLeadTransferHandler($leadIdComponents, $entityIds, $entityvalues) {
try {
$entityidComponents = vtws_getIdComponents($entityIds[$entityvalues['transferRelatedRecordsTo']]);
vtws_transferLeadRelatedRecords($leadIdComponents[1], $entityidComponents[1], $entityvalues['transferRelatedRecordsTo']);
} catch (Exception $e) {
return false;
}
return true;
}
function vtws_updateConvertLeadStatus($entityIds, $leadId, $user) {
global $adb, $log;
$leadIdComponents = vtws_getIdComponents($leadId);
if ($entityIds['Accounts'] != '' || $entityIds['Contacts'] != '') {
$sql = "UPDATE vtiger_leaddetails SET converted = 1 where leadid=?";
$result = $adb->pquery($sql, array($leadIdComponents[1]));
if ($result === false) {
throw new WebServiceException(WebServiceErrorCode::$FAILED_TO_MARK_CONVERTED,
"Failed mark lead converted");
}
//updating the campaign-lead relation --Minnie
$sql = "DELETE FROM vtiger_campaignleadrel WHERE leadid=?";
$adb->pquery($sql, array($leadIdComponents[1]));
$sql = "DELETE FROM vtiger_tracker WHERE item_id=?";
$adb->pquery($sql, array($leadIdComponents[1]));
//update the modifiedtime and modified by information for the record
$leadModifiedTime = $adb->formatDate(date('Y-m-d H:i:s'), true);
$crmentityUpdateSql = "UPDATE vtiger_crmentity SET modifiedtime=?, modifiedby=? WHERE crmid=?";
$adb->pquery($crmentityUpdateSql, array($leadModifiedTime, $user->id, $leadIdComponents[1]));
}
}
?>