From 6cf720bc7bd16c27bc2dc077d2b1eb78ae678fc1 Mon Sep 17 00:00:00 2001 From: Uma <uma.s@vtiger.com> Date: Thu, 26 Sep 2019 18:32:27 +0530 Subject: [PATCH] Fixes:#1173::Uma::Multi picklist Validation and save for editable picklist values is supported --- modules/Calendar/actions/Save.php | 18 ++---------- modules/SalesOrder/actions/SaveAjax.php | 36 ++++-------------------- modules/Vtiger/actions/Save.php | 18 ++---------- modules/Vtiger/actions/SaveAjax.php | 37 ++++--------------------- modules/Vtiger/helpers/Util.php | 20 +++++++++++++ 5 files changed, 38 insertions(+), 91 deletions(-) diff --git a/modules/Calendar/actions/Save.php b/modules/Calendar/actions/Save.php index 32cb30162..6fc2b91e4 100644 --- a/modules/Calendar/actions/Save.php +++ b/modules/Calendar/actions/Save.php @@ -144,24 +144,12 @@ class Calendar_Save_Action extends Vtiger_Save_Action { $fieldValue = $request->get($fieldName, null); // For custom time fields in Calendar, it was not converting to db insert format(sending as 10:00 AM/PM) $fieldDataType = $fieldModel->getFieldDataType(); + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } if($fieldDataType == 'time' && $fieldValue !== null){ $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'&& !empty($editablePicklistValues)){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } // End if ($fieldName === $request->get('field')) { $fieldValue = $request->get('value'); diff --git a/modules/SalesOrder/actions/SaveAjax.php b/modules/SalesOrder/actions/SaveAjax.php index bcb53e74a..92d2df700 100755 --- a/modules/SalesOrder/actions/SaveAjax.php +++ b/modules/SalesOrder/actions/SaveAjax.php @@ -56,24 +56,12 @@ class SalesOrder_SaveAjax_Action extends Inventory_SaveAjax_Action { } $fieldDataType = $fieldModel->getFieldDataType(); + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } if ($fieldDataType == 'time' && $fieldValue !== null) { $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'&& !empty($editablePicklistValues)){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } if ($fieldValue !== null) { if (!is_array($fieldValue)) { $fieldValue = trim($fieldValue); @@ -96,24 +84,12 @@ class SalesOrder_SaveAjax_Action extends Inventory_SaveAjax_Action { $fieldValue = $fieldModel->getDefaultFieldValue(); } $fieldDataType = $fieldModel->getFieldDataType(); + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } if ($fieldDataType == 'time' && $fieldValue !== null) { $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'&& !empty($editablePicklistValues)){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } if ($fieldValue !== null) { if (!is_array($fieldValue)) { $fieldValue = trim($fieldValue); diff --git a/modules/Vtiger/actions/Save.php b/modules/Vtiger/actions/Save.php index fdbf584dc..3def25fd8 100644 --- a/modules/Vtiger/actions/Save.php +++ b/modules/Vtiger/actions/Save.php @@ -158,24 +158,12 @@ class Vtiger_Save_Action extends Vtiger_Action_Controller { foreach ($fieldModelList as $fieldName => $fieldModel) { $fieldValue = $request->get($fieldName, null); $fieldDataType = $fieldModel->getFieldDataType(); + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } if($fieldDataType == 'time' && $fieldValue !== null){ $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'&& !empty($editablePicklistValues)){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } if($fieldValue !== null) { if(!is_array($fieldValue) && $fieldDataType != 'currency') { $fieldValue = trim($fieldValue); diff --git a/modules/Vtiger/actions/SaveAjax.php b/modules/Vtiger/actions/SaveAjax.php index 2a560adaa..4207e24b1 100644 --- a/modules/Vtiger/actions/SaveAjax.php +++ b/modules/Vtiger/actions/SaveAjax.php @@ -102,26 +102,13 @@ class Vtiger_SaveAjax_Action extends Vtiger_Save_Action { }else if($fieldName === $request->get('field')){ $fieldValue = $request->get('value'); } - + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } $fieldDataType = $fieldModel->getFieldDataType(); if ($fieldDataType == 'time' && $fieldValue !== null) { $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'&& !empty($editablePicklistValues)){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } if ($fieldValue !== null) { if (!is_array($fieldValue)) { $fieldValue = trim($fieldValue); @@ -147,25 +134,13 @@ class Vtiger_SaveAjax_Action extends Vtiger_Save_Action { } else { $fieldValue = $fieldModel->getDefaultFieldValue(); } + if($fieldValue){ + $fieldValue = Vtiger_Util_Helper::validateFieldValue($fieldValue,$fieldModel); + } $fieldDataType = $fieldModel->getFieldDataType(); if ($fieldDataType == 'time' && $fieldValue !== null) { $fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue); } - if(($fieldDataType == 'picklist' || $fieldDataType == 'multipicklist' || $fieldDataType == 'multiowner') && $fieldValue !== null){ - $fieldInfo = $fieldModel->getFieldInfo(); - $editablePicklistValues = $fieldInfo['editablepicklistvalues']; - if($fieldDataType == 'multipicklist'){ - $selectedMultiPick = array(); - foreach ($fieldValue as $key => $selectedValue) { - if(in_array($selectedValue, $editablePicklistValues)){ - $selectedMultiPick[] = $selectedValue; - } - } - $fieldValue = $selectedMultiPick; - }else if( $fieldDataType != 'multipicklist' && !empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ - $fieldValue = null; - } - } if ($fieldValue !== null) { if (!is_array($fieldValue)) { $fieldValue = trim($fieldValue); diff --git a/modules/Vtiger/helpers/Util.php b/modules/Vtiger/helpers/Util.php index 23b7f18e7..a23595084 100644 --- a/modules/Vtiger/helpers/Util.php +++ b/modules/Vtiger/helpers/Util.php @@ -1250,4 +1250,24 @@ class Vtiger_Util_Helper { } return $encryptedFileName; } + + public static function validateFieldValue($fieldValue,$fieldModel){ + $fieldDataType = $fieldModel->getFieldDataType(); + $fieldInfo = $fieldModel->getFieldInfo(); + $editablePicklistValues = $fieldInfo['editablepicklistvalues']; + if($fieldValue && $fieldDataType == 'picklist'){ + if(!empty($editablePicklistValues) && !in_array($fieldValue, $editablePicklistValues)){ + $fieldValue = null; + } + }elseif(count($fieldValue) > 0 && $fieldDataType == 'multipicklist'){ + if(!empty($editablePicklistValues)){ + foreach($fieldValue as $key => $value){ + if(!in_array($value, $editablePicklistValues)){ + unset($fieldValue[$key]); + } + } + } + } + return $fieldValue; + } } -- GitLab