From 6ef59e14f508cc0f29224b6b0e50adb5d0137afd Mon Sep 17 00:00:00 2001
From: angelo paglialonga <info@angelopaglialonga.com>
Date: Mon, 21 Jun 2021 15:07:29 +0200
Subject: [PATCH] Issue 1581 -  I've added preg_replace (for strings only) and
 substr to available expressions in workflow

---
 .../VTExpressionEvaluater.inc                 | 37 +++++++++++++++++++
 .../VTExpressionsManager.inc                  |  2 +-
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/modules/com_vtiger_workflow/expression_engine/VTExpressionEvaluater.inc b/modules/com_vtiger_workflow/expression_engine/VTExpressionEvaluater.inc
index fee64c337..43e142f87 100644
--- a/modules/com_vtiger_workflow/expression_engine/VTExpressionEvaluater.inc
+++ b/modules/com_vtiger_workflow/expression_engine/VTExpressionEvaluater.inc
@@ -70,6 +70,41 @@ function __vt_gt($arr) {
 function __vt_concat($arr){
 	return implode($arr);
 }
+
+function __vt_substring($arr){
+unset($string);unset($start);unset($end);
+    if (count($arr) == 3) {
+        $string = $arr[0];
+        $start = $arr[1];
+        $end = $arr[2];
+    } elseif (count($arr) == 2){
+        $string = $arr[0];
+        $start = $arr[1];
+        $end = strlen($string);
+    }elseif (count($arr) == 1){
+        $string = $arr[0];
+        $start = 0;
+        $end = strlen($string);
+    }else{return '';}
+    return mb_substr($string,$start,$end);
+}
+
+
+
+function __vt_preg_replace_str_only($arr){
+    unset($pattern);unset($replacement);unset($subject);
+    if (count($arr) == 3 && is_string($arr[0]) && is_string($arr[1]) && is_string($arr[2])) {
+        $pattern = $arr[0];
+
+
+        $replacement = $arr[1];
+
+        $subject = $arr[2];
+    } else{return '';}
+    return preg_replace($pattern,$replacement,$subject);
+}
+
+
 /* Date difference between (input times) or (current time and input time)
  *
  * @param Array $a $a[0] - Input time1, $a[1] - Input time2
@@ -283,6 +318,8 @@ class VTFieldExpressionEvaluater{
 				'>' => '__vt_gt',
 		);
 		$this->functions = array(
+		        'substring'=>'__vt_substring',
+				'preg_replace_str_only'=>'__vt_preg_replace_str_only',
 				'concat'=>'__vt_concat',
 				'time_diff' => '__vt_time_diff',
 				'time_diffdays' => '__vt_time_diffdays',
diff --git a/modules/com_vtiger_workflow/expression_engine/VTExpressionsManager.inc b/modules/com_vtiger_workflow/expression_engine/VTExpressionsManager.inc
index 7c2f1f0fb..7774e8854 100644
--- a/modules/com_vtiger_workflow/expression_engine/VTExpressionsManager.inc
+++ b/modules/com_vtiger_workflow/expression_engine/VTExpressionsManager.inc
@@ -39,7 +39,7 @@ class VTExpressionsManager{
 	}
 
 	function expressionFunctions() {
-		return array('concat' => 'concat(a,b)', 'time_diffdays(a,b)' => 'time_diffdays(a,b)', 'time_diffdays(a)' => 'time_diffdays(a)', 'time_diff(a,b)' => 'time_diff(a,b)','time_diff(a)' => 'time_diff(a)',
+		return array('substring(string,start,end)'=> 'substring(string,start,end)','preg_replace_str_only(pattern_str,replacement_str,subject)'=>'preg_replace_str_only(pattern_str,replacement_str,subject)','concat' => 'concat(a,b)', 'time_diffdays(a,b)' => 'time_diffdays(a,b)', 'time_diffdays(a)' => 'time_diffdays(a)', 'time_diff(a,b)' => 'time_diff(a,b)','time_diff(a)' => 'time_diff(a)',
 			'add_days' => 'add_days(datefield, noofdays)', 'sub_days' => 'sub_days(datefield, noofdays)', 'add_time(timefield, minutes)' => 'add_time(timefield, minutes)', 'sub_time(timefield, minutes)' => 'sub_time(timefield, minutes)',
 			'today' => "get_date('today')", 'tomorrow' => "get_date('tomorrow')",  'yesterday' => "get_date('yesterday')", 'power(base,exponential)' => "power(base,exponential)");
 	}
-- 
GitLab