Document's filtering in sub-folders
This commit is contained in:
parent
a4a00828d1
commit
f4d35a8a50
@ -82,6 +82,7 @@ class DmsfQuery < Query
|
|||||||
|
|
||||||
def base_scope
|
def base_scope
|
||||||
unless @scope
|
unless @scope
|
||||||
|
statement # We need statement before scope due to the current folder filtering
|
||||||
@scope = [dmsf_folders_scope, dmsf_folder_links_scope, dmsf_files_scope, dmsf_file_links_scope, dmsf_url_links_scope].
|
@scope = [dmsf_folders_scope, dmsf_folder_links_scope, dmsf_files_scope, dmsf_file_links_scope, dmsf_url_links_scope].
|
||||||
inject(:union_all)
|
inject(:union_all)
|
||||||
end
|
end
|
||||||
@ -110,14 +111,16 @@ class DmsfQuery < Query
|
|||||||
|
|
||||||
def statement
|
def statement
|
||||||
unless @statement
|
unless @statement
|
||||||
|
@filter_dmsf_folder_id = false
|
||||||
filters_clauses = []
|
filters_clauses = []
|
||||||
filters.each_key do |field|
|
filters.each_key do |field|
|
||||||
v = values_for(field).clone
|
v = values_for(field).clone
|
||||||
next unless v and !v.empty?
|
next unless v and !v.empty?
|
||||||
operator = operator_for(field)
|
operator = operator_for(field)
|
||||||
if field == 'author'
|
case field
|
||||||
|
when 'author'
|
||||||
if v.delete('me')
|
if v.delete('me')
|
||||||
v.push User.current.id.to_s
|
v.push User.current.id.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
filters_clauses << '(' + sql_for_field(field, operator, v, queried_table_name, field) + ')'
|
filters_clauses << '(' + sql_for_field(field, operator, v, queried_table_name, field) + ')'
|
||||||
@ -183,13 +186,11 @@ class DmsfQuery < Query
|
|||||||
0 AS sort #{cf_columns}}).
|
0 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').
|
||||||
visible(!deleted)
|
visible(!deleted)
|
||||||
if deleted
|
if dmsf_folder_id
|
||||||
scope.where dmsf_folders: { project_id: project.id, deleted: deleted }
|
scope.where dmsf_folders: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
||||||
else
|
else
|
||||||
if filters.any?
|
if filters.any? || deleted
|
||||||
scope.where dmsf_folders: { project_id: project.id, deleted: deleted }
|
scope.where dmsf_folders: { project_id: project.id, deleted: deleted }
|
||||||
elsif dmsf_folder_id
|
|
||||||
scope.where dmsf_folders: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
|
||||||
else
|
else
|
||||||
scope.where dmsf_folders: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_folders: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
||||||
end
|
end
|
||||||
@ -224,13 +225,11 @@ class DmsfQuery < Query
|
|||||||
0 AS sort #{cf_columns}}).
|
0 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 deleted
|
if dmsf_folder_id
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
||||||
else
|
else
|
||||||
if filters.any?
|
if filters.any? || deleted
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, deleted: deleted }
|
||||||
elsif dmsf_folder_id
|
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
|
||||||
else
|
else
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
||||||
end
|
end
|
||||||
@ -266,17 +265,15 @@ class DmsfQuery < Query
|
|||||||
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('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)')
|
where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)')
|
||||||
if deleted
|
if dmsf_folder_id
|
||||||
scope.where dmsf_files: { project_id: project.id, deleted: deleted }
|
|
||||||
else
|
|
||||||
if filters.any?
|
|
||||||
scope.where dmsf_files: { project_id: project.id, deleted: deleted }
|
|
||||||
elsif dmsf_folder_id
|
|
||||||
scope.where dmsf_files: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_files: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
||||||
else
|
else
|
||||||
scope.where dmsf_files: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
if filters.any? || deleted
|
||||||
|
scope.where dmsf_files: { project_id: project.id, deleted: deleted }
|
||||||
|
else
|
||||||
|
scope.where dmsf_files: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dmsf_file_links_scope
|
def dmsf_file_links_scope
|
||||||
@ -309,17 +306,16 @@ class DmsfQuery < Query
|
|||||||
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 ').
|
||||||
where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)')
|
where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)')
|
||||||
if deleted
|
if dmsf_folder_id
|
||||||
scope.where project_id: project.id, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfFile', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
||||||
else
|
else
|
||||||
if filters.any?
|
if filters.any? || deleted
|
||||||
scope.where project_id: project.id, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id, deleted: deleted }
|
||||||
elsif dmsf_folder_id
|
|
||||||
scope.where dmsf_folder_id: dmsf_folder_id, deleted: deleted
|
|
||||||
else
|
else
|
||||||
scope.where project_id: project.id, dmsf_folder_id: nil, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dmsf_url_links_scope
|
def dmsf_url_links_scope
|
||||||
@ -349,17 +345,16 @@ class DmsfQuery < Query
|
|||||||
dmsf_links.deleted AS deleted,
|
dmsf_links.deleted AS deleted,
|
||||||
1 AS sort #{cf_columns}}).
|
1 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 deleted
|
if dmsf_folder_id
|
||||||
scope.where target_type: 'DmsfUrl', project_id: project.id, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
||||||
else
|
else
|
||||||
if filters.any?
|
if filters.any? || deleted
|
||||||
scope.where target_type: 'DmsfUrl', project_id: project.id, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id, deleted: deleted }
|
||||||
elsif dmsf_folder_id
|
|
||||||
scope.where target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id, deleted: deleted
|
|
||||||
else
|
else
|
||||||
scope.where target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: nil, deleted: deleted
|
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -72,6 +72,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= form_tag(dmsf_folder_path(id: @project, folder_id: @folder), method: :get, id: 'query_form', class: 'dmsf-query-form') do %>
|
<%= form_tag(dmsf_folder_path(id: @project, folder_id: @folder), method: :get, id: 'query_form', class: 'dmsf-query-form') do %>
|
||||||
|
<%= hidden_field_tag('folder_id', @folder.id) if @folder %>
|
||||||
<%= render partial: 'queries/query_form' %>
|
<%= render partial: 'queries/query_form' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= render partial: 'query_list', locals: { query: @query, dmsf_pages: @dmsf_pages } %>
|
<%= render partial: 'query_list', locals: { query: @query, dmsf_pages: @dmsf_pages } %>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user