From c458e8a3f4052865310409768669d535c638c288 Mon Sep 17 00:00:00 2001
From: Uma <uma.s@vtiger.com>
Date: Fri, 4 Oct 2019 15:47:34 +0530
Subject: [PATCH] Fixes #1086 ::Uma::MassAction on Tagged records is supported

---
 layouts/v7/modules/Vtiger/AddCommentForm.tpl  |  1 +
 layouts/v7/modules/Vtiger/MassEditForm.tpl    |  1 +
 .../v7/modules/Vtiger/SelectEmailFields.tpl   |  1 +
 layouts/v7/modules/Vtiger/resources/List.js   | 16 +++++---
 .../Accounts/actions/TransferOwnership.php    | 28 ++++++++++++--
 modules/Vtiger/actions/Mass.php               | 30 ++++++++++++++-
 modules/Vtiger/views/ComposeEmail.php         | 28 +++++++++++++-
 modules/Vtiger/views/MassActionAjax.php       | 38 ++++++++++++++++++-
 8 files changed, 131 insertions(+), 12 deletions(-)

diff --git a/layouts/v7/modules/Vtiger/AddCommentForm.tpl b/layouts/v7/modules/Vtiger/AddCommentForm.tpl
index 3238c76b1..a3771e228 100644
--- a/layouts/v7/modules/Vtiger/AddCommentForm.tpl
+++ b/layouts/v7/modules/Vtiger/AddCommentForm.tpl
@@ -22,6 +22,7 @@
             <input type="hidden" name="operator" value="{$OPERATOR}" />
             <input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" />
             <input type="hidden" name="search_params" value='{Vtiger_Util_Helper::toSafeHTML(ZEND_JSON::encode($SEARCH_PARAMS))}' />
+            <input type="hidden" name="tag_params" value={ZEND_JSON::encode($TAG_PARAMS)}>
 
             {assign var=HEADER_TITLE value={vtranslate('LBL_ADDING_COMMENT', $MODULE)}}
             {include file="ModalHeader.tpl"|vtemplate_path:$MODULE TITLE=$HEADER_TITLE}
diff --git a/layouts/v7/modules/Vtiger/MassEditForm.tpl b/layouts/v7/modules/Vtiger/MassEditForm.tpl
index 8fc24ee41..0a138c42e 100644
--- a/layouts/v7/modules/Vtiger/MassEditForm.tpl
+++ b/layouts/v7/modules/Vtiger/MassEditForm.tpl
@@ -17,6 +17,7 @@
             <input type="hidden" name="viewname" value="{$CVID}" />
             <input type="hidden" name="selected_ids" value={ZEND_JSON::encode($SELECTED_IDS)}>
             <input type="hidden" name="excluded_ids" value={ZEND_JSON::encode($EXCLUDED_IDS)}>
+            <input type="hidden" name="tag_params" value={ZEND_JSON::encode($TAG_PARAMS)}>
             <input type="hidden" name="search_params" value='{Vtiger_Util_Helper::toSafeHTML(ZEND_JSON::encode($SEARCH_PARAMS))}' />
             <div>
                 <header class="overlayHeader" style='flex:0 0 auto;'>
diff --git a/layouts/v7/modules/Vtiger/SelectEmailFields.tpl b/layouts/v7/modules/Vtiger/SelectEmailFields.tpl
index 7094c7793..98db34602 100644
--- a/layouts/v7/modules/Vtiger/SelectEmailFields.tpl
+++ b/layouts/v7/modules/Vtiger/SelectEmailFields.tpl
@@ -23,6 +23,7 @@
                     <input type="hidden" name="search_key" value= "{$SEARCH_KEY}" />
                     <input type="hidden" name="operator" value="{$OPERATOR}" />
                     <input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" />
+                    <input type="hidden" name="tag_params" value={ZEND_JSON::encode($TAG_PARAMS)}>
                     {if $SEARCH_PARAMS}
                         <input type="hidden" name="search_params" value='{Vtiger_Util_Helper::toSafeHTML(ZEND_JSON::encode($SEARCH_PARAMS))}' />
                     {/if}
diff --git a/layouts/v7/modules/Vtiger/resources/List.js b/layouts/v7/modules/Vtiger/resources/List.js
index c73c6fdb0..888b5fba8 100644
--- a/layouts/v7/modules/Vtiger/resources/List.js
+++ b/layouts/v7/modules/Vtiger/resources/List.js
@@ -119,7 +119,7 @@ Vtiger.Class("Vtiger_List_Js", {
 		var listSelectParams = listInstance.getListSelectAllParams();
 		if (listSelectParams) {
 			app.helper.showProgress();
-			app.request.get({'url': massActionUrl}).then(
+			app.request.get({'url': massActionUrl,'data': listSelectParams}).then(
 					function (error, data) {
 						app.helper.hideProgress();
 						if (data) {
@@ -1430,11 +1430,15 @@ Vtiger.Class("Vtiger_List_Js", {
 		recordSelectTracker.clearList();
 	},
 	getListSelectAllParams: function (jsonDecode) {
-		var self = this;
-		var recordSelectTrackerInstance = self.getRecordSelectTrackerInstance();
-		var params = recordSelectTrackerInstance.getSelectedAndExcludedIds(jsonDecode);
-		params.search_params = JSON.stringify(self.getListSearchParams());
-		return params;
+            var self = this;
+            var recordSelectTrackerInstance = self.getRecordSelectTrackerInstance();
+            var params = recordSelectTrackerInstance.getSelectedAndExcludedIds(jsonDecode);
+            params.search_params = JSON.stringify(self.getListSearchParams());
+            var container = self.getListViewContainer();
+            params.tag_params = JSON.stringify(self.getListTagParams());
+            params.tag = container.find('[name="tag"]').val();
+            params.master_search_params = container.find('[name="masterSearchParams"]').val();
+            return params;
 	},
 	registerCheckBoxClickEvent: function () {
 		var self = this;
diff --git a/modules/Accounts/actions/TransferOwnership.php b/modules/Accounts/actions/TransferOwnership.php
index d5b11d18f..292bdecf0 100644
--- a/modules/Accounts/actions/TransferOwnership.php
+++ b/modules/Accounts/actions/TransferOwnership.php
@@ -79,18 +79,40 @@ class Accounts_TransferOwnership_Action extends Vtiger_Action_Controller {
 			}
 		}
 
+        $tagParams = $request->get('tag_params');
+		$tag = $request->get('tag');
+		$listViewSessionKey = $module.'_'.$cvId;
+
+		if(!empty($tag)) {
+			$listViewSessionKey .='_'.$tag;
+		}
+
+		$orderParams = Vtiger_ListView_Model::getSortParamsSession($listViewSessionKey);
+		if(!empty($tag) && empty($tagParams)){
+			$tagParams = $orderParams['tag_params'];
+		}
+
+		if(empty($tagParams)){
+			$tagParams = array();
+		}
+        
+		$searchParams = $request->get('search_params');
+		if(empty($searchParams) && !is_array($searchParams)){
+			$searchParams = array();
+		}
+		$searchAndTagParams = array_merge($searchParams, $tagParams);
+
 		if($selectedIds == 'all'){
 			$customViewModel = CustomView_Record_Model::getInstanceById($cvId);
 			if($customViewModel) {
 				$operator = $request->get('operator');
-				$searchParams = $request->get('search_params');
 				if (!empty($operator)) {
 					$customViewModel->set('operator', $operator);
 					$customViewModel->set('search_key', $request->get('search_key'));
 					$customViewModel->set('search_value', $request->get('search_value'));
 				}
-				if (!empty($searchParams)) {
-					$customViewModel->set('search_params', $searchParams);
+				if (!empty($searchAndTagParams)) {
+					$customViewModel->set('search_params', $searchAndTagParams);
 				}
 				return $customViewModel->getRecordIds($excludedIds, $module);
 			}
diff --git a/modules/Vtiger/actions/Mass.php b/modules/Vtiger/actions/Mass.php
index cb2a11c2d..8ca99c3cf 100644
--- a/modules/Vtiger/actions/Mass.php
+++ b/modules/Vtiger/actions/Mass.php
@@ -32,7 +32,35 @@ abstract class Vtiger_Mass_Action extends Vtiger_Action_Controller {
 				return $selectedIds;
 			}
 		}
+        $tagParams = $request->get('tag_params');
+        $tag = $request->get('tag');
+        $listViewSessionKey = $module.'_'.$cvId;
 
+        if(!empty($tag)) {
+            $listViewSessionKey .='_'.$tag;
+        }
+
+        $orderParams = Vtiger_ListView_Model::getSortParamsSession($listViewSessionKey);
+        if(!empty($tag) && empty($tagParams)){
+            $tagParams = $orderParams['tag_params'];
+        }
+
+        if(empty($tagParams)){
+            $tagParams = array();
+        }
+        
+        $searchParams = $request->get('search_params');
+        if(empty($searchParams) || !is_array($searchParams)){
+            $searchParams = array();
+        }
+		$masterSearchParams = $request->get('master_search_params');
+        if (!$masterSearchParams || !is_array($masterSearchParams)) {
+            $masterSearchParams = array();
+        }
+        
+        $searchAndTagParams = array_merge($searchParams, $tagParams);
+        $searchAndTagParams = array_merge($masterSearchParams, $searchAndTagParams);
+        
 		$customViewModel = CustomView_Record_Model::getInstanceById($cvId);
 		if($customViewModel) {
             $searchKey = $request->get('search_key');
@@ -53,7 +81,7 @@ abstract class Vtiger_Mass_Action extends Vtiger_Action_Controller {
 				$customViewModel->set('folder_value', $request->get('folder_value'));
 			}
 
-			$customViewModel->set('search_params',$request->get('search_params'));
+			$customViewModel->set('search_params',$searchAndTagParams);
 			return $customViewModel->getRecordIds($excludedIds,$module);
 		}
 	}
diff --git a/modules/Vtiger/views/ComposeEmail.php b/modules/Vtiger/views/ComposeEmail.php
index f06c1375e..5e832f4b6 100644
--- a/modules/Vtiger/views/ComposeEmail.php
+++ b/modules/Vtiger/views/ComposeEmail.php
@@ -273,6 +273,27 @@ class Vtiger_ComposeEmail_View extends Vtiger_Footer_View {
 		$cvId = $request->get('viewname');
 		$selectedIds = $request->get('selected_ids');
 		$excludedIds = $request->get('excluded_ids');
+        $tagParams = $request->get('tag_params');
+		$tag = $request->get('tag');
+		$listViewSessionKey = $moduleName.'_'.$cvId;
+
+		if(!empty($tag)) {
+			$listViewSessionKey .='_'.$tag;
+		}
+
+		$orderParams = Vtiger_ListView_Model::getSortParamsSession($listViewSessionKey);
+		if(!empty($tag) && empty($tagParams)){
+			$tagParams = $orderParams['tag_params'];
+		}
+
+		if(empty($tagParams)){
+			$tagParams = array();
+		}
+        
+        if(!is_array($tagParams))
+        {
+            $tagParams = array($tagParams);
+        }
 
 		if(!empty($selectedIds) && $selectedIds != 'all') {
 			if(!empty($selectedIds) && count($selectedIds) > 0) {
@@ -280,6 +301,11 @@ class Vtiger_ComposeEmail_View extends Vtiger_Footer_View {
 			}
 		}
 
+        $searchParams = $request->get('search_params');
+		if(empty($searchParams) && !is_array($searchParams)){
+			$searchParams = array();
+		}
+        $searchAndTagParams = array_merge($searchParams, $tagParams);
 		$sourceRecord = $request->get('sourceRecord');
 		$sourceModule = $request->get('sourceModule');
 		if ($sourceRecord && $sourceModule) {
@@ -297,7 +323,7 @@ class Vtiger_ComposeEmail_View extends Vtiger_Footer_View {
 				$customViewModel->set('search_key', $searchKey);
 				$customViewModel->set('search_value', $searchValue);
 			}
-			$customViewModel->set('search_params', $request->get('search_params'));
+			$customViewModel->set('search_params', $searchAndTagParams);
 			return $customViewModel->getRecordIds($excludedIds);
 		}
 		return array();
diff --git a/modules/Vtiger/views/MassActionAjax.php b/modules/Vtiger/views/MassActionAjax.php
index 9073a7810..e954da59b 100644
--- a/modules/Vtiger/views/MassActionAjax.php
+++ b/modules/Vtiger/views/MassActionAjax.php
@@ -71,6 +71,10 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$cvId = $request->get('viewname');
 		$selectedIds = $request->get('selected_ids');
 		$excludedIds = $request->get('excluded_ids');
+        $tagParams = $request->get('tag_params');
+		if(empty($tagParams)){
+            $tagParams = array();
+        }
 
 		$viewer = $this->getViewer($request);
 
@@ -96,6 +100,7 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$viewer->assign('CVID', $cvId);
 		$viewer->assign('SELECTED_IDS', $selectedIds);
 		$viewer->assign('EXCLUDED_IDS', $excludedIds);
+        $viewer->assign('TAG_PARAMS', $tagParams);
 		$viewer->assign('VIEW_SOURCE','MASSEDIT');
 		$viewer->assign('RECORD_STRUCTURE_MODEL', $recordStructureInstance);
 		$viewer->assign('MODULE_MODEL',$moduleModel); 
@@ -129,6 +134,10 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$cvId = $request->get('viewname');
 		$selectedIds = $request->get('selected_ids');
 		$excludedIds = $request->get('excluded_ids');
+        $tagParams = $request->get('tag_params');
+        if(empty($tagParams)){
+            $tagParams = array();
+        }
 
 		$viewer = $this->getViewer($request);
 		$viewer->assign('SOURCE_MODULE', $sourceModule);
@@ -136,6 +145,7 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$viewer->assign('CVID', $cvId);
 		$viewer->assign('SELECTED_IDS', $selectedIds);
 		$viewer->assign('EXCLUDED_IDS', $excludedIds);
+        $viewer->assign('TAG_PARAMS', $tagParams);
 		$viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel());
         
         $modCommentsModel = Vtiger_Module_Model::getInstance($moduleName);
@@ -175,6 +185,10 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$excludedIds = $request->get('excluded_ids');
 		$step = $request->get('step');
 		$relatedLoad = $request->get('relatedLoad');
+        $tagParams = $request->get('tag_params');
+		if(empty($tagParams)){
+            $tagParams = array();
+        }
 		
 		$emailFieldsInfo = $this->getEmailFieldsInfo($request);
 		$viewer = $this->getViewer($request);
@@ -184,6 +198,7 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 		$viewer->assign('VIEWNAME', $cvId);
 		$viewer->assign('SELECTED_IDS', $selectedIds);
 		$viewer->assign('EXCLUDED_IDS', $excludedIds);
+        $viewer->assign('TAG_PARAMS', $tagParams);
 		$viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel());
         $viewer->assign('SELECTED_EMAIL_SOURCE_MODULE', $sourceModule);
         
@@ -398,6 +413,27 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 				return $selectedIds;
 			}
 		}
+        $tagParams = $request->get('tag_params');
+		$tag = $request->get('tag');
+		$listViewSessionKey = $module.'_'.$cvId;
+
+		if(!empty($tag)) {
+			$listViewSessionKey .='_'.$tag;
+		}
+
+		$orderParams = Vtiger_ListView_Model::getSortParamsSession($listViewSessionKey);
+		if(!empty($tag) && empty($tagParams)){
+			$tagParams = $orderParams['tag_params'];
+		}
+
+		if(empty($tagParams)){
+			$tagParams = array();
+		}
+		$searchParams = $request->get('search_params');
+		if(empty($searchParams) && !is_array($searchParams)){
+			$searchParams = array();
+		}
+		$searchAndTagParams = array_merge($searchParams, $tagParams);
 		
 		$sourceRecord = $request->get('sourceRecord');
 		$sourceModule = $request->get('sourceModule');
@@ -416,7 +452,7 @@ class Vtiger_MassActionAjax_View extends Vtiger_IndexAjax_View {
 				$customViewModel->set('search_key', $searchKey);
 				$customViewModel->set('search_value', $searchValue);
 			}
-            $customViewModel->set('search_params', $request->get('search_params'));
+            $customViewModel->set('search_params', $searchAndTagParams);
 			return $customViewModel->getRecordIds($excludedIds,$module);
 		}
 	}
-- 
GitLab