diff --git a/BrainPortal/app/models/task_custom_filter.rb b/BrainPortal/app/models/task_custom_filter.rb index e38959d95..a4164b8ca 100644 --- a/BrainPortal/app/models/task_custom_filter.rb +++ b/BrainPortal/app/models/task_custom_filter.rb @@ -28,6 +28,7 @@ #[*description*] The CbrainTask description to filter. #[*user_id*] The user_id of the CbrainTask owner to filter against. #[*bourreau_id*] The bourreau_id of the bourreau to filter against. +#[*results_data_provider_id*] The id of the results data provider for task results to filter against. class TaskCustomFilter < CustomFilter Revision_info=CbrainFileRevision[__FILE__] #:nodoc: @@ -45,11 +46,12 @@ class TaskCustomFilter < CustomFilter :wd_status, :archiving_status, { - :user_ids => [], - :group_ids => [], - :bourreau_ids => [], - :types => [], - :status => [], + :user_ids => [], + :group_ids => [], + :bourreau_ids => [], + :results_data_provider_ids => [], + :types => [], + :status => [], } ] self.data_setter_and_getter(WHITELIST_TASKS_FILTERING_PARAMS) @@ -64,12 +66,14 @@ class TaskCustomFilter < CustomFilter validate :valid_data_user_ids validate :valid_data_group_ids validate :valid_data_bourreau_ids + validate :valid_data_results_data_provider_ids validate :valid_data_types validate :valid_data_description validate :valid_data_wd_status validate :valid_data_status validate :valid_data_archiving_status + def valid_data_user_ids #:nodoc: my_ids = cleaned_array_for_attribute(:user_ids) return true if my_ids.empty? @@ -94,6 +98,14 @@ def valid_data_bourreau_ids #:nodoc: return false end + def valid_data_results_data_provider_ids #:nodoc: + my_ids = cleaned_array_for_attribute(:results_data_provider_ids) + return true if my_ids.empty? + return true if (my_ids.map(&:to_i) - DataProvider.find_all_accessible_by_user(self.user).pluck(:id)).empty? + errors.add(:data_results_data_provider_ids, 'are not all accessible data providers') + return false + end + def valid_data_types #:nodoc: self.data_types = cleaned_array_for_attribute(:types) return true if self.data_types.empty? @@ -153,14 +165,15 @@ def target_filtered_table # See CustomFilter def filter_scope(scope) scope = super(scope) - scope = scope_types(scope) if self.data_types.present? - scope = scope_description(scope) if self.data_description_type.present? && self.data_description_term.present? - scope = scope_user_ids(scope) if self.data_user_ids.present? - scope = scope_group_ids(scope) if self.data_group_ids.present? - scope = scope_bourreau_ids(scope) if self.data_bourreau_ids.present? - scope = scope_status(scope) if self.data_status.present? - scope = scope_archive(scope) if self.data_archiving_status.present? - scope = scope_wd_status(scope) if self.data_wd_status.present? + scope = scope_types(scope) if self.data_types.present? + scope = scope_description(scope) if self.data_description_type.present? && self.data_description_term.present? + scope = scope_user_ids(scope) if self.data_user_ids.present? + scope = scope_group_ids(scope) if self.data_group_ids.present? + scope = scope_bourreau_ids(scope) if self.data_bourreau_ids.present? + scope = scope_results_data_provider_ids(scope) if self.data_results_data_provider_ids.present? + scope = scope_status(scope) if self.data_status.present? + scope = scope_archive(scope) if self.data_archiving_status.present? + scope = scope_wd_status(scope) if self.data_wd_status.present? scope end @@ -207,6 +220,11 @@ def scope_bourreau_ids(scope) filter_by_attribute(scope, :bourreau_id, self.data_bourreau_ids) end + # Return +scope+ modified to filter the CbrainTask entry's data provider. + def scope_results_data_provider_ids(scope) + filter_by_attribute(scope, :results_data_provider_id, self.data_results_data_provider_ids) + end + # Returns +scope+ modified to filter the CbrainTask entry's status. def scope_status(scope) filter_by_attribute(scope, :status, self.data_status) diff --git a/BrainPortal/app/views/custom_filters/_new_task_custom_filter.html.erb b/BrainPortal/app/views/custom_filters/_new_task_custom_filter.html.erb index 03fa69f5d..a9e6e9ff3 100644 --- a/BrainPortal/app/views/custom_filters/_new_task_custom_filter.html.erb +++ b/BrainPortal/app/views/custom_filters/_new_task_custom_filter.html.erb @@ -48,6 +48,12 @@ Execution Servers
<%= bourreau_select 'data[bourreau_ids]', { :bourreaux => Bourreau.find_all_accessible_by_user(current_user).all, :selector => custom_filter.data_bourreau_ids, :offline_is_ok => true }, :include_blank => true, :multiple => true %>

+

+ Results on
+ <%= data_provider_select 'data[result_data_provider_ids]', { :data_providers => DataProvider.find_all_accessible_by_user(current_user).all, :selector => custom_filter.data_results_data_provider_ids, :offline_is_ok => true }, :include_blank => true, :multiple => true %> +

+ + Filtering by date
<%= date_range_panel(custom_filter[:data] || {}, "data") %> diff --git a/BrainPortal/app/views/custom_filters/_task_custom_filter.html.erb b/BrainPortal/app/views/custom_filters/_task_custom_filter.html.erb index 71990b5d2..72e3ddb39 100644 --- a/BrainPortal/app/views/custom_filters/_task_custom_filter.html.erb +++ b/BrainPortal/app/views/custom_filters/_task_custom_filter.html.erb @@ -67,6 +67,10 @@ <%= bourreau_select 'data[bourreau_ids]', { :bourreaux => Bourreau.find_all_accessible_by_user(current_user).all, :selector => @custom_filter.data_bourreau_ids, :offline_is_ok => true }, :include_blank => true, :multiple => true %> <% end %> + <% t.edit_cell(:data_results_data_provider_ids, :header => "Results on", :content => DataProvider.where(:id => @custom_filter.data_results_data_provider_ids).pluck(:name).join(", ").presence || "None") do %> + <%= data_provider_select 'data[results_data_provider_ids]', { :data_providers => DataProvider.find_all_accessible_by_user(current_user).all, :selector => @custom_filter.data_results_data_provider_ids, :offline_is_ok => true }, :include_blank => true, :multiple => true %> + <% end %> + <% archiving_status = {