myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2477] branches/discovery/app: added a lock filte


From: noreply
Subject: [myexperiment-hackers] [2477] branches/discovery/app: added a lock filter to keep certain filters locked to a given value
Date: Sat, 17 Jul 2010 08:20:12 -0400 (EDT)

Revision
2477
Author
dgc
Date
2010-07-17 08:20:02 -0400 (Sat, 17 Jul 2010)

Log Message

added a lock filter to keep certain filters locked to a given value

Modified Paths

Diff

Modified: branches/discovery/app/controllers/application.rb (2476 => 2477)


--- branches/discovery/app/controllers/application.rb	2010-07-16 11:53:18 UTC (rev 2476)
+++ branches/discovery/app/controllers/application.rb	2010-07-17 12:20:02 UTC (rev 2477)
@@ -518,6 +518,33 @@
       str.gsub(/\\/, '\&\&').gsub(/'/, "''")
     end
 
+    def build_url(params, opts, parts, extra = {})
+
+      query = {}
+
+      if parts.include?(:filter)
+        pivot_options[:filters].each do |filter|
+          if params[filter[:query_option]]
+            query[filter[:query_option]] = params[filter[:query_option]]
+          end
+        end
+      end
+
+      query["order"]        = params[:order]        if parts.include?(:order)
+      query["filter_query"] = params[:filter_query] if parts.include?(:filter_query)
+      query["advanced"]     = params[:advanced]     if parts.include?(:advanced)
+
+      query.merge!(extra)
+
+      if opts[:lock_filter]
+        opts[:lock_filter].keys.each do |filter|
+          query.delete(filter)
+        end
+      end
+
+      query
+    end
+
     def comparison(lhs, rhs)
 
       bits = rhs.split(",")
@@ -529,7 +556,7 @@
       end
     end
 
-    def calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, advanced_params, opts = {})
+    def calculate_filter(params, filter, user, opts = {})
 
       # apply all the joins and conditions except for the current filter
 
@@ -583,7 +610,7 @@
 
             new_selection = nil if new_selection.empty?
 
-            target_uri = content_path(filter_params.merge(order_params).merge(filter_query_params).merge(advanced_params).merge(filter[:query_option] => new_selection, "page" => nil))
+            target_uri = build_url(params, opts, [:filter, :order, :filter_query, :advanced], filter[:query_option] => new_selection, "page" => nil)
 
             label = object.filter_label
             label = visible_name(label) if filter[:visible_name]
@@ -602,6 +629,14 @@
       [current, objects]
     end
 
+    # apply locked filters
+
+    if opts[:lock_filter]
+      opts[:lock_filter].each do |filter, value|
+        params[filter] = value
+      end
+    end
+
     # determine joins, conditions and order for the main results
 
     joins      = []
@@ -636,22 +671,22 @@
 
     # produce a query hash to match the current filters
 
-    filter_params       = {}
-    filter_query_params = {}
-    order_params        = {}
-    advanced_params     = {}
+    opts[:filter_params] = {}
 
     pivot_options[:filters].each do |filter|
       if params[filter[:query_option]]
-        filter_params[filter[:query_option]] = params[filter[:query_option]]
+        next if opts[:lock_filter] && opts[:lock_filter][filter[:query_option]]
+        opts[:filter_params][filter[:query_option]] = params[filter[:query_option]]
       end
     end
 
-    order_params[:order] = params[:order] if params[:order]
+    opts[:order_params]        = {}
+    opts[:advanced_params]     = {}
+    opts[:filter_query_params] = {}
 
-    advanced_params[:advanced] = params[:advanced] if params[:advanced]
-    
-    filter_query_params[:filter_query] = params[:filter_query] if params[:filter_query]
+    opts[:order_params][:order]               = params[:order]        if params[:order]
+    opts[:advanced_params][:advanced]         = params[:advanced]     if params[:advanced]
+    opts[:filter_query_params][:filter_query] = params[:filter_query] if params[:filter_query]
 
     # produce the filter list
 
@@ -659,15 +694,15 @@
     cancel_filter_query_url = nil
     reset_filters_url = nil
 
-    if filter_params.length > 0
-      reset_filters_url = order_params.merge(advanced_params)
+    if opts[:filter_params].length > 0
+      reset_filters_url = build_url(params, opts, [:order, :advanced])
     end
 
     filters.each do |filter|
 
       # calculate the top n items of the list
 
-      filter[:current], filter[:objects] = calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, advanced_params)
+      filter[:current], filter[:objects] = calculate_filter(params, filter, user, opts)
 
       # calculate which active filters are missing (because they weren't in the
       # top part of the list or have a count of zero)
@@ -675,7 +710,7 @@
       missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
 
       if missing_filter_ids.length > 0
-        filter[:objects] += calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, advanced_params, :ids => missing_filter_ids)[1]
+        filter[:objects] += calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids))[1]
       end
 
       # calculate which active filters are still missing (because they have a
@@ -684,7 +719,7 @@
       missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
       
       if missing_filter_ids.length > 0
-        zero_list = calculate_filter(params, filter, user, filter_params, order_params, filter_query_params, advanced_params, :ids => missing_filter_ids, :inhibit_other_conditions => true)[1]
+        zero_list = calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids, :inhibit_other_conditions => true))[1]
 
         zero_list.each do |x| x[:count] = 0 end
 
@@ -700,6 +735,8 @@
 
     filters.select do |filter|
 
+      next if opts[:lock_filter] && opts[:lock_filter][filter[:query_option]]
+
       selected = filter[:objects].select do |x| x[:selected] end
 
       if selected.length > 0
@@ -714,15 +751,16 @@
           end
 
           summary << '<span class="filter-in-use"><a href="" +
-          url_for(filter_params.merge(filter_query_params).merge(order_params).merge(advanced_params).merge( { filter[:query_option] => nil } )) +
-          '"><b>' + filter[:title].capitalize + "</b>: " + sentence +
-          " <img src='' /></a></span> "
+            url_for(build_url(params, opts, [:filter, :filter_query, :order, :advanced],
+                  { filter[:query_option] => nil } )) +
+            '"><b>' + filter[:title].capitalize + "</b>: " + sentence +
+            " <img src='' /></a></span> "
         end
       end
     end
 
     if params[:filter_query]
-      cancel_filter_query_url = request.query_parameters.merge(advanced_params).merge( { "filter_query" => nil } )
+      cancel_filter_query_url = build_url(params, opts, [:advanced])
     end
 
     # remove filters that do not help in narrowing down the result set
@@ -734,6 +772,8 @@
 #       false
       elsif params[:advanced].nil? && (params[filter[:query_option]] || filter[:objects].length < 2)
         false
+      elsif opts[:lock_filter] && opts[:lock_filter][filter[:query_option]]
+        false
       else
         true
       end
@@ -744,7 +784,7 @@
       :filters                 => filters,
       :reset_filters_url       => reset_filters_url,
       :cancel_filter_query_url => cancel_filter_query_url,
-      :filter_query_url        => filter_params,
+      :filter_query_url        => opts[:filter_params],
       :summary                 => summary
     }
   end

Modified: branches/discovery/app/controllers/workflows_controller.rb (2476 => 2477)


--- branches/discovery/app/controllers/workflows_controller.rb	2010-07-16 11:53:18 UTC (rev 2476)
+++ branches/discovery/app/controllers/workflows_controller.rb	2010-07-17 12:20:02 UTC (rev 2477)
@@ -167,7 +167,7 @@
     respond_to do |format|
       format.html do
         @pivot_options = pivot_options
-        @pivot = contributions_list(Contribution, params.merge({ "type" => "Workflow" }), current_user)
+        @pivot = contributions_list(Contribution, params, current_user, :lock_filter => { 'type' => 'Workflow' } )
       end
       format.rss do
         address@hidden = Workflow.find(:all, :order => "updated_at DESC") # list all (if required)

Modified: branches/discovery/app/views/content/_index.rhtml (2476 => 2477)


--- branches/discovery/app/views/content/_index.rhtml	2010-07-16 11:53:18 UTC (rev 2476)
+++ branches/discovery/app/views/content/_index.rhtml	2010-07-17 12:20:02 UTC (rev 2477)
@@ -33,9 +33,9 @@
       <% end %>
       <div class="advanced_switch">
         <% if params[:advanced] %>
-          <%= link_to("Switch to simple", request.query_parameters.merge( { "advanced" => nil } )) -%>
+          <%= link_to("Switch to simple mode", request.query_parameters.merge( { "advanced" => nil } )) -%>
         <% else %>
-          <%= link_to("Switch to advanced", request.query_parameters.merge( { "advanced" => 1 } )) -%>
+          <%= link_to("Switch to advanced mode", request.query_parameters.merge( { "advanced" => 1 } )) -%>
         <% end %>
       </div>
     </div>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]