- 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.
149 lines
6.1 KiB
PHP
149 lines
6.1 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.
|
|
*************************************************************************************/
|
|
|
|
class Settings_MailConverter_BodyRule_Model extends Settings_MailConverter_RuleRecord_Model {
|
|
|
|
var $_bodyruleTable = 'vtiger_mailscanner_bodyrule';
|
|
var $_bodyruleMappingTable = 'vtiger_mailscanner_mapping';
|
|
|
|
public static function getCleanInstance($qualifiedModuleName='Settings:MailConverter'){
|
|
$modelClassName = Vtiger_Loader::getComponentClassName('Model', 'BodyRule', $qualifiedModuleName);
|
|
return new $modelClassName();
|
|
|
|
}
|
|
|
|
public function getBodyRuleDelimiter() {
|
|
$delimiter = array(
|
|
'colon' => array('symbol' => ':', 'label' => 'LBL_COLON'),
|
|
'semicolon' => array('symbol' => ';', 'label' => 'LBL_SEMICOLON'),
|
|
'dash' => array('symbol' => '-', 'label' => 'LBL_DASH'),
|
|
'equal' => array('symbol' => '=', 'label' => 'LBL_EQUAL'),
|
|
'lessthan' => array('symbol' => '>', 'label' => 'LBL_GREATER_THAN'),
|
|
'colondash' => array('symbol' => ':-', 'label' => 'LBL_COLON_DASH'),
|
|
'colonequal' => array('symbol' => ':=', 'label' => 'LBL_COLON_EQUAL'),
|
|
'semicolondash' => array('symbol' => ';-', 'label' => 'LBL_SEMICOLON_DASH'),
|
|
'semicolonequal' => array('symbol' => ';=', 'label' => 'LBL_SEMICOLON_EQUAL'),
|
|
'equallessthan' => array('symbol' => '=>', 'label' => 'LBL_EQUAL_GREATER_THAN'),
|
|
);
|
|
return $delimiter;
|
|
}
|
|
|
|
public function getModuleFields($action) {
|
|
$module = Settings_MailConverter_BodyRule_Model::getModuleNameByAction($action);
|
|
if(!$module)
|
|
return array();
|
|
$fields = array();
|
|
$moduleInstance = Vtiger_Module_Model::getInstance($module);
|
|
$fieldInstances = Vtiger_Field_Model::getAllForModule($moduleInstance);
|
|
foreach($fieldInstances as $blockInstance) {
|
|
foreach($blockInstance as $fieldInstance) {
|
|
if($fieldInstance->isEditable()) {
|
|
$fieldName = $fieldInstance->getName();
|
|
$uiType = $fieldInstance->get('uitype');
|
|
$displayType = $fieldInstance->getDisplayType();
|
|
$dataType = $fieldInstance->getFieldDataType();
|
|
$blockedUiType = array(4, 52, 53, 69, 105);
|
|
$blockedDisplayType = array(2, 3);
|
|
if(!in_array($uiType, $blockedUiType) && !in_array($displayType, $blockedDisplayType) &&
|
|
$dataType != 'boolean' && $dataType != 'reference' && $fieldName != 'comments') {
|
|
$fields[$fieldName] = vtranslate($fieldInstance->get('label'), $module);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $fields;
|
|
}
|
|
|
|
public function parseBody($bodyText, $delimeter) {
|
|
$bodyFields = array('Subject', 'From Email', 'From Name', 'Email Content');
|
|
$rows = explode("\n", $bodyText);
|
|
foreach($rows as $row) {
|
|
if(strrpos($row, $delimeter)) {
|
|
$columns = explode($delimeter, $row);
|
|
$bodyFields[] = decode_html(trim($columns[0]));
|
|
}
|
|
}
|
|
return array_unique($bodyFields);
|
|
}
|
|
|
|
public function getModuleNameByAction($action) {
|
|
if($action == 'CREATE_HelpDesk_FROM' || $action == 'CREATE_HelpDeskNoContact_FROM') {
|
|
$module = 'HelpDesk';
|
|
} else if($action == 'CREATE_Leads_SUBJECT') {
|
|
$module = 'Leads';
|
|
} else if($action == 'CREATE_Contacts_SUBJECT') {
|
|
$module = 'Contacts';
|
|
} else if($action == 'CREATE_Accounts_SUBJECT') {
|
|
$module = 'Accounts';
|
|
} else if($action == 'CREATE_Potentials_SUBJECT' || $action == 'CREATE_PotentialsNoContact_SUBJECT') {
|
|
$module = 'Potentials';
|
|
} else {
|
|
$module = false;
|
|
}
|
|
return $module;
|
|
}
|
|
|
|
function saveBodyRule() {
|
|
$scannerId = $this->get('scannerId');
|
|
$ruleId = $this->get('ruleId');
|
|
$delimiter = $this->get('delimiter');
|
|
$mappingData = $this->get('filedsMapping');
|
|
$action = $this->get('action');
|
|
$body = $this->get('body');
|
|
$moduleName = $this->getModuleNameByAction($action);
|
|
$db = PearDatabase::getInstance();
|
|
|
|
$db->pquery("DELETE FROM $this->_bodyruleTable WHERE ruleid = ? AND scannerid = ?", array($ruleId, $scannerId));
|
|
$db->pquery("DELETE FROM $this->_bodyruleMappingTable WHERE ruleid = ? AND scannerid = ?", array($ruleId, $scannerId));
|
|
$db->pquery("INSERT INTO $this->_bodyruleTable VALUES (?, ?, ?, ?, ?)", array($ruleId, $scannerId, $delimiter, $moduleName, $body));
|
|
foreach($mappingData as $bodyField => $crmField) {
|
|
$db->pquery("INSERT INTO $this->_bodyruleMappingTable VALUES (?, ?, ?, ?)", array($ruleId, $scannerId, $crmField, $bodyField));
|
|
}
|
|
}
|
|
|
|
function getDelimiter() {
|
|
$db = PearDatabase::getInstance();
|
|
$params = array($this->get('ruleid'), $this->get('scannerid'));
|
|
$result = $db->pquery("SELECT delimiter FROM $this->_bodyruleTable WHERE ruleid = ? AND scannerid = ?", $params);
|
|
if($db->num_rows($result) > 0) {
|
|
return decode_html(decode_html($db->query_result($result, 0, 'delimiter')));
|
|
}
|
|
}
|
|
|
|
function getBody() {
|
|
$db = PearDatabase::getInstance();
|
|
$params = array($this->get('ruleid'), $this->get('scannerid'));
|
|
$result = $db->pquery("SELECT body FROM $this->_bodyruleTable WHERE ruleid = ? AND scannerid = ?", $params);
|
|
if($db->num_rows($result) > 0) {
|
|
return decode_html($db->query_result($result, 0, 'body'));
|
|
}
|
|
}
|
|
|
|
function getMapping() {
|
|
$db = PearDatabase::getInstance();
|
|
$params = array($this->get('ruleid'), $this->get('scannerid'));
|
|
$result = $db->pquery("SELECT crm_field, body_field FROM $this->_bodyruleMappingTable WHERE ruleid = ? AND scannerid = ?", $params);
|
|
$count = $db->num_rows($result);
|
|
for($i = 0; $i < $count; $i++) {
|
|
$crmField = decode_html($db->query_result($result, $i, 'crm_field'));
|
|
$bodyField = decode_html($db->query_result($result, $i, 'body_field'));
|
|
$data[$bodyField] = $crmField;
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function deleteBodyRule($scannerId, $ruleId) {
|
|
$db = PearDatabase::getInstance();
|
|
$db->pquery("DELETE FROM $this->_bodyruleTable WHERE ruleid = ? AND scannerid = ?", array($ruleId, $scannerId));
|
|
$db->pquery("DELETE FROM $this->_bodyruleMappingTable WHERE ruleid = ? AND scannerid = ?", array($ruleId, $scannerId));
|
|
}
|
|
}
|