- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
200 lines
8.6 KiB
PHP
200 lines
8.6 KiB
PHP
<?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.
|
|
*************************************************************************************/
|
|
include_once 'include/Webservices/Create.php';
|
|
include_once 'include/utils/utils.php';
|
|
|
|
class PBXManager_IncomingCallPoll_Action extends Vtiger_Action_Controller{
|
|
|
|
function __construct() {
|
|
$this->exposeMethod('searchIncomingCalls');
|
|
$this->exposeMethod('createRecord');
|
|
$this->exposeMethod('getCallStatus');
|
|
$this->exposeMethod('checkModuleViewPermission');
|
|
$this->exposeMethod('checkPermissionForPolling');
|
|
}
|
|
|
|
public function process(Vtiger_Request $request) {
|
|
$mode = $request->getMode();
|
|
if(!empty($mode) && $this->isMethodExposed($mode)) {
|
|
$this->invokeExposedMethod($mode, $request);
|
|
return;
|
|
}
|
|
}
|
|
|
|
public function checkPermission(Vtiger_Request $request) {
|
|
$moduleName = $request->getModule();
|
|
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
|
|
$userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
|
|
$permission = $userPrivilegesModel->hasModulePermission($moduleModel->getId());
|
|
|
|
if(!$permission) {
|
|
throw new AppException('LBL_PERMISSION_DENIED');
|
|
}
|
|
}
|
|
|
|
public function checkModuleViewPermission(Vtiger_Request $request){
|
|
$response = new Vtiger_Response();
|
|
$modules = array('Contacts','Leads');
|
|
$view = $request->get('view');
|
|
Users_Privileges_Model::getCurrentUserPrivilegesModel();
|
|
foreach($modules as $module){
|
|
if(Users_Privileges_Model::isPermitted($module, $view)){
|
|
$result['modules'][$module] = true;
|
|
}else{
|
|
$result['modules'][$module] = false;
|
|
}
|
|
}
|
|
$response->setResult($result);
|
|
$response->emit();
|
|
}
|
|
|
|
public function searchIncomingCalls(Vtiger_Request $request){
|
|
$recordModel = PBXManager_Record_Model::getCleanInstance();
|
|
$response = new Vtiger_Response();
|
|
$user = Users_Record_Model::getCurrentUserModel();
|
|
|
|
$recordModels = $recordModel->searchIncomingCall();
|
|
// To check whether user have permission on caller record
|
|
if($recordModels){
|
|
foreach ($recordModels as $recordModel){
|
|
// To check whether the user has permission to see contact name in popup
|
|
$recordModel->set('callername', null);
|
|
|
|
//SalesPlatform.ru begin incoming call for calling user
|
|
if($user->id != $recordModel->get('user')) {
|
|
continue;
|
|
}
|
|
//SalesPlatform.ru end
|
|
|
|
$callerid = $recordModel->get('customer');
|
|
//SalesPlatform.ru begin
|
|
if($callerid && isRecordExists($callerid)){
|
|
//if($callerid){
|
|
//SalesPlatform.ru end
|
|
$moduleName = $recordModel->get('customertype');
|
|
|
|
// SalesPlatform.ru begin
|
|
$callerRecordModel = Vtiger_Record_Model::getInstanceById($callerid, $moduleName);
|
|
$ownerId = $callerRecordModel->get('assigned_user_id');
|
|
$ownername = (getUserFullName($ownerId) != "") ? getUserFullName($ownerId) : getGroupFullName($ownerId);
|
|
$recordModel->set('ownername', $ownername);
|
|
// SalesPlatform.ru end
|
|
|
|
if(!Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $callerid)){
|
|
$name = $recordModel->get('customernumber').vtranslate('LBL_HIDDEN','PBXManager');
|
|
$recordModel->set('callername',$name);
|
|
}else{
|
|
$entityNames = getEntityName($moduleName, array($callerid));
|
|
$callerName = $entityNames[$callerid];
|
|
$recordModel->set('callername',$callerName);
|
|
}
|
|
}
|
|
//SalesPlatform.ru begin
|
|
else {
|
|
$recordModel->set('customer', null);
|
|
}
|
|
//SalesPlatform.ru end
|
|
// End
|
|
$direction = $recordModel->get('direction');
|
|
if($direction == 'inbound'){
|
|
$userid = $recordModel->get('user');
|
|
if($userid){
|
|
$entityNames = getEntityName('Users', array($userid));
|
|
$userName = $entityNames[$userid];
|
|
$recordModel->set('answeredby',$userName);
|
|
}
|
|
}
|
|
$recordModel->set('current_user_id',$user->id);
|
|
$calls[] = $recordModel->getData();
|
|
}
|
|
}
|
|
$response->setResult($calls);
|
|
$response->emit();
|
|
}
|
|
|
|
public function createRecord(Vtiger_Request $request){
|
|
$user = Users_Record_Model::getCurrentUserModel();
|
|
$moduleName = $request->get('modulename');
|
|
$name = explode("@",$request->get('email'));
|
|
$element['lastname'] = $name[0];
|
|
$element['email'] = $request->get('email');
|
|
$element['phone'] = $request->get('number');
|
|
$element['assigned_user_id'] = vtws_getWebserviceEntityId('Users', $user->id);
|
|
|
|
$moduleInstance = Vtiger_Module_Model::getInstance($moduleName);
|
|
$mandatoryFieldModels = $moduleInstance->getMandatoryFieldModels();
|
|
foreach($mandatoryFieldModels as $mandatoryField){
|
|
$fieldName = $mandatoryField->get('name');
|
|
$fieldType = $mandatoryField->getFieldDataType();
|
|
$defaultValue = decode_html($mandatoryField->get('defaultvalue'));
|
|
if(!empty($element[$fieldName])){
|
|
continue;
|
|
}else{
|
|
$fieldValue = $defaultValue;
|
|
if(empty($fieldValue)) {
|
|
$fieldValue = Vtiger_Util_Helper::getDefaultMandatoryValue($fieldType);
|
|
}
|
|
$element[$fieldName] = $fieldValue ;
|
|
}
|
|
}
|
|
|
|
$entity = vtws_create($moduleName, $element, $user);
|
|
$this->updateCustomerInPhoneCalls($entity, $request);
|
|
$response = new Vtiger_Response();
|
|
$response->setResult(true);
|
|
$response->emit();
|
|
}
|
|
|
|
public function updateCustomerInPhoneCalls($customer, $request){
|
|
$id = vtws_getIdComponents($customer['id']);
|
|
$sourceuuid = $request->get('callid');
|
|
$module = $request->get('modulename');
|
|
//SalesPlatform.ru begin
|
|
$recordModel = Vtiger_Record_Model::getInstanceById($sourceuuid);
|
|
$recordModel->set('mode', 'edit');
|
|
$recordModel->set('customer', $id[1]);
|
|
$recordModel->set('customertype', $module);
|
|
$recordModel->save();
|
|
//$recordModel = PBXManager_Record_Model::getInstanceBySourceUUID($sourceuuid);
|
|
//$recordModel->updateCallDetails(array('customer'=>$id[1], 'customertype'=>$module));
|
|
//SalesPlatform.ru end
|
|
}
|
|
|
|
public function getCallStatus($request){
|
|
$phonecallsid = $request->get('callid');
|
|
$recordModel = PBXManager_Record_Model::getInstanceById($phonecallsid);
|
|
$response = new Vtiger_Response();
|
|
$response->setResult($recordModel->get('callstatus'));
|
|
$response->emit();
|
|
}
|
|
|
|
function checkPermissionForPolling(Vtiger_Request $request) {
|
|
Users_Privileges_Model::getCurrentUserPrivilegesModel();
|
|
$callPermission = Users_Privileges_Model::isPermitted('PBXManager', 'ReceiveIncomingCalls');
|
|
|
|
$serverModel = PBXManager_Server_Model::getInstance();
|
|
$gateway = $serverModel->get("gateway");
|
|
|
|
$user = Users_Record_Model::getCurrentUserModel();
|
|
$userNumber = $user->phone_crm_extension;
|
|
|
|
$result = false;
|
|
if($callPermission && $userNumber && $gateway ){
|
|
$result = true;
|
|
}
|
|
|
|
$response = new Vtiger_Response();
|
|
$response->setResult($result);
|
|
$response->emit();
|
|
}
|
|
|
|
}
|
|
|
|
?>
|