Files
crm.clientright.ru/modules/Workflow2/tasks/WfTaskComplexrecordsource.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- 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.
2025-10-16 11:17:21 +03:00

102 lines
3.1 KiB
PHP

<?php
require_once(realpath(dirname(__FILE__).'/../autoload_wf.php'));
class WfTaskComplexrecordsource extends \Workflow\Task
{
/**
* @var \Workflow\Preset\RecordSources
*/
private $RecordSources = null;
public function init() {
if(-1 != $this->get("search_module") || !empty($_POST["task"]["search_module"])) {
$module = !empty($_POST["task"]["search_module"]) ? $_POST["task"]["search_module"] : $this->get("search_module");
$parts = explode('#~#', $module);
/*$this->addPreset("Condition", "condition", array(
'toModule' => VtUtils::getModuleName($parts[1]),
'mode' => 'mysql',
));*/
$this->RecordSources = $this->addPreset("RecordSources", "recordsource", array(
'module' => VtUtils::getModuleName($parts[1]),
'default' => 'condition',
//'ignorechain' => true
));
}
}
public function handleTask(&$context) {
/* Insert here source code to execute the task */
$chainid = $this->get('chainid');
$chainid = md5($chainid);
$environmentId = '__chain_'.$chainid;
$this->addStat('EnvID: '.$environmentId);
$chain = $context->getEnvironment($environmentId);
if(empty($chain)) {
$chain = array();
$this->addStat('Create Chain');
}
$query = $this->RecordSources->getQuery(
$context,
$this->notEmpty("sort_field")?$this->get('sort_field'):null,
$this->notEmpty("found_rows")?$this->get('found_rows'):null,
false
);
$query = str_replace('/* Insert Fields */', '', $query);
$logical = 'AND';
if($this->get('combine') == 'OR') {
$logical = 'OR';
}
if($this->get('includemode') == 'include') {
$chain[] = $logical.' vtiger_crmentity.crmid IN ('.$query.')';
}
if($this->get('includemode') == 'exclude') {
$chain[] = $logical.' vtiger_crmentity.crmid NOT IN ('.$query.')';
}
$this->addStat('Result chain');
$this->addStat($chain);
$context->setEnvironment($environmentId, $chain);
return "yes";
}
public function beforeGetTaskform($viewer) {
$viewer->assign("related_modules", VtUtils::getEntityModules(true));
$search_module = $this->get("search_module");
if(!empty($_POST["task"]["search_module"])) {
$parts = explode("#~#", $_POST["task"]["search_module"]);
} elseif(!empty($search_module)) {
if($search_module != -1) {
$parts = explode("#~#", $search_module);
}
} else {
return;
}
if(!empty($parts)) {
$search_module_name = VtUtils::getModuleName($parts[1]);
$viewer->assign("related_tabid", $parts[1]);
$fields = VtUtils::getFieldsWithBlocksForModule($search_module_name);
$viewer->assign("sort_fields", $fields);
}
}
public function beforeSave(&$values) {
/* Insert here source code to modify the values the user submit on configuration */
}
}