Document tagging/filtering: filter not working when tag has multiple values #1272

This commit is contained in:
karel.picman@lbcfree.net 2021-08-11 10:39:26 +02:00
parent b002820991
commit ba8c1f511b

View File

@ -127,7 +127,16 @@ class DmsfQuery < Query
when 'title' when 'title'
next if (operator == '~') && v.join.empty? next if (operator == '~') && v.join.empty?
end end
filters_clauses << '(' + sql_for_field(field, operator, v, queried_table_name, field) + ')' if field =~ /cf_(\d+)$/
# custom field
sql_cf = +sql_for_custom_field(field, operator, v, $1)
sql_cf.gsub!('dmsf_folders.id IN (SELECT dmsf_folders.id', 'dmsf_folders.customized_id IN (SELECT dmsf_folders.customized_id');
sql_cf.gsub!("customized_type='DmsfFolder'", 'customized_type=dmsf_folders.customized_type')
sql_cf.gsub!('customized_id=dmsf_folders.id', 'customized_id=dmsf_folders.customized_id')
filters_clauses << sql_cf
else
filters_clauses << '(' + sql_for_field(field, operator, v, queried_table_name, field) + ')'
end
end end
filters_clauses.reject!(&:blank?) filters_clauses.reject!(&:blank?)
@statement = filters_clauses.any? ? filters_clauses.join(' AND ') : nil @statement = filters_clauses.any? ? filters_clauses.join(' AND ') : nil
@ -244,7 +253,9 @@ class DmsfQuery < Query
CAST(NULL AS #{get_integer_type}) AS author, CAST(NULL AS #{get_integer_type}) AS author,
'project' AS type, 'project' AS type,
CAST(0 AS #{get_integer_type}) AS deleted, CAST(0 AS #{get_integer_type}) AS deleted,
0 AS sort #{cf_columns}}).visible 0 AS sort#{cf_columns},
'' as customized_type,
0 as customized_id}).visible
if dmsf_folder_id || deleted if dmsf_folder_id || deleted
scope.none scope.none
else else
@ -275,7 +286,9 @@ class DmsfQuery < Query
users.id AS author, users.id AS author,
'folder' AS type, 'folder' AS type,
dmsf_folders.deleted AS deleted, dmsf_folders.deleted AS deleted,
1 AS sort #{cf_columns}}). 'DmsfFolder' AS customized_type,
dmsf_folders.id AS customized_id,
1 AS sort#{cf_columns}}).
joins('LEFT JOIN users ON dmsf_folders.user_id = users.id') joins('LEFT JOIN users ON dmsf_folders.user_id = users.id')
return scope.none unless project return scope.none unless project
if deleted if deleted
@ -317,7 +330,9 @@ class DmsfQuery < Query
users.id AS author, users.id AS author,
'folder-link' AS type, 'folder-link' AS type,
dmsf_links.deleted AS deleted, dmsf_links.deleted AS deleted,
1 AS sort #{cf_columns}}). 'DmsfFolder' as customized_type,
dmsf_folders.id as customized_id,
1 AS sort#{cf_columns}}).
joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id'). joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id').
joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)') joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)')
if dmsf_folder_id if dmsf_folder_id
@ -354,7 +369,9 @@ class DmsfQuery < Query
users.id AS author, users.id AS author,
'file' AS type, 'file' AS type,
dmsf_files.deleted AS deleted, dmsf_files.deleted AS deleted,
2 AS sort #{cf_columns}}). 'DmsfFileRevision' as customized_type,
dmsf_file_revisions.id as customized_id,
2 AS sort#{cf_columns}}).
joins(:dmsf_file_revisions). joins(:dmsf_file_revisions).
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
where(sub_query) where(sub_query)
@ -392,7 +409,9 @@ class DmsfQuery < Query
users.id AS author, users.id AS author,
'file-link' AS type, 'file-link' AS type,
dmsf_links.deleted AS deleted, dmsf_links.deleted AS deleted,
2 AS sort #{cf_columns}}). 'DmsfFileRevision' as customized_type,
dmsf_file_revisions.id as customized_id,
2 AS sort#{cf_columns}}).
joins('JOIN dmsf_files ON dmsf_files.id = dmsf_links.target_id'). joins('JOIN dmsf_files ON dmsf_files.id = dmsf_links.target_id').
joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id'). joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id').
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
@ -432,7 +451,9 @@ class DmsfQuery < Query
users.id AS author, users.id AS author,
'url-link' AS type, 'url-link' AS type,
dmsf_links.deleted AS deleted, dmsf_links.deleted AS deleted,
2 AS sort #{cf_columns}}). '' as customized_type,
0 as customized_id,
2 AS sort#{cf_columns}}).
joins('LEFT JOIN users ON dmsf_links.user_id = users.id ') joins('LEFT JOIN users ON dmsf_links.user_id = users.id ')
if dmsf_folder_id if dmsf_folder_id
scope.where dmsf_links: { target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id, deleted: deleted } scope.where dmsf_links: { target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id, deleted: deleted }