Files
crm.clientright.ru/modules/Workflow2/extends/frontendconditions/core.inc.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

262 lines
7.6 KiB
PHP

<?php
$formatCondition["core/is_equal"] = array("function" => "
if(typeof parameter.value == 'object' && value.indexOf(' |##| ') != -1) {
parameter.value = parameter.value.join(' |##| ');
}
if(key == 'resultField' && value == parameter.value) {
return true;
} else {
value = value + '';
if(value.match(/([0-9]+x[0-9]+)/) && parameter.value.match(/([0-9]+)/) && value.indexOf('x' + parameter.value) != -1) {
return true;
}
return false;
}
",
'config' => array(
'value' => array(
'type' => 'default'
)
),
'label' => 'is equal',
'fieldtypes' => array('text', 'date', 'picklist', 'multipicklist', 'number', 'crmid'),
'text' => '##field## is ##not##equal to ##c.value##'
);
$formatCondition['core/has_changed'] = array(
'function' => '
RedooUtils("Workflow2").getFieldElement(config.field).find(\'[name="\' + config.field + \'"]\').attr("monitorchanges", "1");
if(window.WorkflowFrontendInitialize == true) { return false; }
var OldFieldValues = window.currentFrontendWorkflowManager.FieldValueCache;
if(typeof OldFieldValues[config.field] == "undefined" && checkValue == "") return false;
if(typeof OldFieldValues[config.field] == "undefined" && checkValue != "") return true;
return OldFieldValues[config.field] != checkValue;
',
'config' => array(),
'label' => 'was changed',
'fieldtypes' => array('text', 'picklist', 'multipicklist', 'number', 'crmid'),
'text' => '##field## was changed since last execution'
);
$formatCondition["core/is_empty"] = array("function" => "
if(key == 'resultField' && (value == '0' || !value || 0 === value.length || value == '0000-00-00'))
return true;
else
return false;
",
'config' => array(),
'label' => 'is empty',
'fieldtypes' => array('text', 'picklist', 'multipicklist', 'number', 'crmid'),
'text' => '##field## is ##not##empty'
);
$formatCondition["core/is_bigger"] = array("function" => "
if(jQuery.isNumeric(value))
value = Number(value);
if(key == 'resultField' && value > parameter.value)
return true;
else
return false;
",
'config' => array(
'value' => array(
'type' => 'textfield'
),
),
'label' => 'greater than',
'fieldtypes' => array('number'),
'text' => '##field## is ##not##bigger then ##c.value##'
);
$formatCondition["core/is_lower"] = array("function" => "
if(jQuery.isNumeric(value))
value = Number(value);
if(key == 'resultField' && value < parameter.value)
return true;
else
return false;
",
'config' => array(
'value' => array(
'type' => 'textfield'
),
),
'label' => 'lower then',
'fieldtypes' => array('number'),
'text' => '##field## is ##not##lower then ##c.value##'
);
$formatCondition["core/contain_product"] = array("function" => "
var found = false;
jQuery('[name^=\"hdnProductId\"]').each(function(index, ele) {
if(jQuery(ele).val() == parameter.value) {
found = true;
}
});
return found;
",
'config' => array(
'value' => array(
'type' => 'productid'
),
),
'label' => 'contains product',
'fieldtypes' => array('crmid'),
'text' => 'record contains productid ##c.value##'
);
$formatCondition["core/contains"] = array("function" => "
value = value + '';
if(typeof parameter.value == 'object' && value.indexOf(' |##| ') != -1) {
value = value.split(' |##| ');
var result = false;
jQuery.each(parameter.value, function(index, tmpValue) {
if(jQuery.inArray(tmpValue, value) != -1) {
result = true;
}
});
return result;
}
if(value.indexOf(parameter.value) > -1)
return true;
else
return false;
",
'config' => array(
'value' => array(
'type' => 'default'
),
),
'label' => 'contains',
'fieldtypes' => array('text', 'multipicklist'),
'text' => '##field## ##not##contains'
);
$formatCondition["core/is_checked"] = array("function" => "
if(value == 1 || value == 'on')
return true;
return false;
",
'config' => array(),
'label' => 'is checked',
'fieldtypes' => array('boolean'),
'text' => '##field## is ##not##checked'
);
/** OLD **/
/*
$formatCondition["within_x_days"] = array("function" => "
if(value == null) return false;
if(value.indexOf(' ') != -1) { value = value.split(' ')[0]; }
if(/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(value)) {
var start = new Date(value);
} else {
var start = $.datepicker.parseDate(app.convertTojQueryDatePickerFormat(Colorizer_DateFormat), value);
}
var end = new Date();
var diff = new Date(start - end);
var days = diff / 1000 / 60 / 60 / 24;
if(days < parameter.value && days > -1) {
return true;
} else {
return false;
}
",
"title" => "is within X days",
"blockType" => array("boolean", 'multipicklist'),
"description" => "True if the value/date is within ... days",
"parameter" => array("within the next X days"),
'text' => '##field## is ##not##within next ##c.value## days'
);
$formatCondition["within_last_x_days"] = array("function" => "
if(value == null) return false;
if(value.indexOf(' ') != -1) { value = value.split(' ')[0]; }
if(/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(value)) {
var start = new Date(value);
} else {
var start = $.datepicker.parseDate(app.convertTojQueryDatePickerFormat(Colorizer_DateFormat), value);
}
var end = new Date();
var diff = new Date(start - end);
var days = diff / 1000 / 60 / 60 / 24;
if(days > -1 * parameter.value && days < 0) {
return true;
} else {
return false;
}
",
"blockType" => array("boolean", 'multipicklist'),
"title" => "is within last X days",
"description" => "True if the value/date is within last ... days",
"parameter" => array("within the last X days"),
'text' => '##field## is ##not##within last ##c.value## days'
);
$formatCondition["is_today"] = array("function" => "
if(value == null) return false;
if(value.indexOf(' ') != -1) { value = value.split(' ')[0]; }
if(/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(value)) {
var start = new Date(value);
} else {
var start = $.datepicker.parseDate(app.convertTojQueryDatePickerFormat(Colorizer_DateFormat), value);
}
var end = new Date();
if(end.toDateString() == start.toDateString()) {
return true;
} else {
return false;
}
",
"blockType" => array("boolean", 'multipicklist'),
"title" => "is today",
"description" => "True if the value/date is today",
"parameter" => array(),
'text' => '##field## is ##not##today'
);
$formatCondition["is_futuredate"] = array("function" => "
if(value == null) return false;
if(value.indexOf(' ') != -1) { value = value.split(' ')[0]; }
if(/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(value)) {
var start = new Date(value);
} else {
var start = $.datepicker.parseDate(app.convertTojQueryDatePickerFormat(Colorizer_DateFormat), value);
}
var end = new Date();
if(start > end) {
return true;
} else {
return false;
}
",
"title" => "is date in future",
"blockType" => array("boolean", 'multipicklist'),
"description" => "Colorize if the date in in the future",
"parameter" => 0,
'text' => '##field## is ##not##date in future'
);
*/