From 2321b0a934dadd140700c0f450e978f7f712af52 Mon Sep 17 00:00:00 2001 From: Jack Anderson Date: Mon, 6 Mar 2023 20:54:36 +0000 Subject: [PATCH] [Legacy] Fix Relate Field Issue --- public/legacy/data/SugarBean.php | 18 ++++++++++++++++-- .../legacy/include/SearchForm/SearchForm2.php | 4 ++++ .../include/SubPanel/SubPanelDefinitions.php | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/public/legacy/data/SugarBean.php b/public/legacy/data/SugarBean.php index 76097648b..8aac15065 100755 --- a/public/legacy/data/SugarBean.php +++ b/public/legacy/data/SugarBean.php @@ -949,6 +949,8 @@ class SugarBean $replacement = substr_replace($query_array['select'], "SELECT count(", $select_position, 6); $query_rows = "( " . $replacement . ")" . $subquery['from_min'] . $query_array['join'] . $subquery['where'] . ' )'; + } elseif (!empty($subquery['params']['subpanel_relate_field_search'])) { + $query_rows = "( SELECT count(*)" . $subquery['from'] . $subquery['where'] . ' )'; } else { //resort to default behavior. $query_rows = "( SELECT count(*)" . $subquery['from_min'] @@ -1171,8 +1173,10 @@ class SugarBean if(!empty($union_related_list_columns) && array_key_exists($this_subpanel->name, $union_related_list_columns)) { $list_fields = $union_related_list_columns[$this_subpanel->name]; - }else{ + }elseif($subpanel_def->isCollection()){ $list_fields = $this_subpanel->get_list_fields(); + }else{ + $list_fields = $submodule->field_defs; } foreach ($list_fields as $list_key => $list_field) { @@ -1209,6 +1213,16 @@ class SugarBean $singleSelect = method_exists($submodule, 'is_relate_field') ? $submodule->is_relate_field($order_by) : null; + if (!$singleSelect && !empty($this_subpanel->searchByFields) && method_exists($submodule, 'is_relate_field')){ + foreach($this_subpanel->searchByFields as $field){ + if ($submodule->is_relate_field($field)){ + $singleSelect = true; + $params['subpanel_relate_field_search'] = true; + break; + } + } + } + $subquery = method_exists($submodule, 'create_new_list_query') ? $submodule->create_new_list_query( '', @@ -3956,7 +3970,7 @@ class SugarBean } - if ($join['type'] == 'many-to-many') { + if ($join['type'] === 'many-to-many') { if (empty($ret_array['secondary_select'])) { $ret_array['secondary_select'] = " SELECT $this->table_name.id ref_id "; diff --git a/public/legacy/include/SearchForm/SearchForm2.php b/public/legacy/include/SearchForm/SearchForm2.php index 594e60e2e..1a18aff02 100755 --- a/public/legacy/include/SearchForm/SearchForm2.php +++ b/public/legacy/include/SearchForm/SearchForm2.php @@ -78,6 +78,7 @@ class SearchForm public $nbTabs = 0; // hide saved searches drop and down near the search button public $showSavedSearchesOptions = true; + public $searchByFields = []; public $displayType = 'searchView'; @@ -900,6 +901,7 @@ class SearchForm global $timedate; $db = $this->seed->db; + $this->searchByFields = []; $this->searchColumns = array(); $values = $this->searchFields; @@ -996,6 +998,8 @@ class SearchForm $operator = strtolower($parms['operator']); } + $this->searchByFields[] = $field; + if (is_array($parms['value'])) { $field_value = ''; diff --git a/public/legacy/include/SubPanel/SubPanelDefinitions.php b/public/legacy/include/SubPanel/SubPanelDefinitions.php index ef9fb0e88..8c3079f9a 100755 --- a/public/legacy/include/SubPanel/SubPanelDefinitions.php +++ b/public/legacy/include/SubPanel/SubPanelDefinitions.php @@ -62,6 +62,8 @@ class aSubPanel public $panel_definition ; public $sub_subpanels ; public $parent_bean ; + public $searchByFields = []; + /** * Can we display this subpanel? @@ -197,6 +199,8 @@ class aSubPanel $where_clauses = $searchForm->generateSearchWhere(true, $seed->module_dir); + $this->searchByFields = $searchForm->searchByFields; + $GLOBALS['log']->info("Subpanel Where Clause: $this->search_query"); if (count($where_clauses) > 0) {