Project

General

Profile

Actions

Defect #36940

closed

Chained custom field filter doesn't work for User fields

Added by Thomas Löber over 2 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Category:
Filters
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed
Affected version:

Description

A chained custom field filter doesn't work for fields with format User.

Steps to reproduce:

  1. Create a user custom field A (the format doesn't matter) and check Used as a filter
  2. Create an issue custom field B with format User and check Used as a filter
  3. On the My account page set the custom value A for your own account to an arbitrary value
  4. Create an issue and select <<me>> for the custom field B
  5. Filter the issue list by the filter B's A and use the value you set on the My account page
Expected result:
  • The issue is found
Actual result:
  • The issue is not found

The reason is that the SQL that filters the issues contains a WHERE customized_type='User'. However, the correct clause would be WHERE customized_type='Principal'.

Here is a patch to fix the issue:

--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -1166,7 +1166,7 @@ class Query < ActiveRecord::Base
     end

     filter = available_filters[field]
-    target_class = filter[:through].format.target_class
+    target_class = filter[:through].format.target_class.base_class

     "#{queried_table_name}.id #{not_in} IN (" +
       "SELECT customized_id FROM #{CustomValue.table_name}" +

Best regards,
Thomas


Files

Actions #1

Updated by Go MAEDA over 2 years ago

  • Status changed from New to Confirmed
Actions #2

Updated by Go MAEDA over 2 years ago

  • Target version set to Candidate for next minor release
Actions #3

Updated by Marius BĂLTEANU over 2 years ago

I'm not sure if we should that change for all classes, maybe we will break some plugins.

What do you think about the attached change?

Actions #4

Updated by Thomas Löber over 2 years ago

I don't think it's necessary to differentiate between User and other classes.

base_class is an ActiveRecord class method and returns exactly the class, whose name is stored in the customized_type column, i.e. the base model for the STI models, if any:

User.base_class => Principal
Issue.base_class => Issue
Actions #5

Updated by Marius BĂLTEANU over 2 years ago

  • Target version changed from Candidate for next minor release to 4.2.8

I thought that maybe some plugins developers will add some custom fields that extend a base class and they don't want to filter after the base class.

Actions #6

Updated by Marius BĂLTEANU over 2 years ago

  • Status changed from Confirmed to Resolved
  • Assignee set to Marius BĂLTEANU
  • Resolution set to Fixed

Patch posted by Thomas committed with a test.

Actions #7

Updated by Marius BĂLTEANU over 2 years ago

Test committed in r21687 is for this issue, not for #37349.

Actions #8

Updated by Marius BĂLTEANU over 2 years ago

  • Status changed from Resolved to Closed
Actions

Also available in: Atom PDF