Skip to content

Commit

Permalink
Added default filters, fixed caching ids for all users.
Browse files Browse the repository at this point in the history
  • Loading branch information
Doug Youch committed May 24, 2010
1 parent d045f49 commit c6923df
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 3 deletions.
2 changes: 2 additions & 0 deletions app/controllers/members_controller.rb
Expand Up @@ -310,6 +310,8 @@ def builder

@segment = UserSegment.find_by_id params[:path][0]
@builder = @segment ? UserSegment::OperationBuilder.create_builder(@segment) : UserSegment::OperationBuilder.new(nil)
@filter = params[:filter]
@builder.build(UserSegment::OperationBuilder.get_prebuilt_filter(@filter)) if @filter

if request.post? && params[:builder]
@builder.build(params[:builder])
Expand Down
2 changes: 1 addition & 1 deletion app/models/user_segment/operation.rb
Expand Up @@ -28,7 +28,7 @@ def end_user_ids(ids=nil)
if ids
@end_user_ids = ids - @end_user_ids
else
@end_user_ids = EndUser.find(:all, :select => 'id', :conditions => ['id not in(?)', @end_user_ids]).collect &:id
@end_user_ids = (@end_user_ids.empty? ? EndUser.find(:all, :select => 'id') : EndUser.find(:all, :select => 'id', :conditions => ['id NOT IN(?)', @end_user_ids])).collect &:id
end
end

Expand Down
16 changes: 16 additions & 0 deletions app/models/user_segment/operation_builder.rb
Expand Up @@ -122,4 +122,20 @@ def self.create_builder(user_segment)
builder.build(user_segment.operations.to_builder)
builder
end

def self.prebuilt_filters
[
['New registered users in the last week', {:field => 'registered', :operation => 'is', :argument0 => true, :condition => 'and', :child => {:field => 'created', :operation => 'since', :argument0 => 1, :argument1 => 'week'}}],
['Users that have not logged in the last 7 days', {:operator => 'not', :field => 'user_action', :operation => 'is', :argument0 => '/editor/auth/login', :condition => 'and', :child => {:field => 'occurred', :operation => 'since', :argument0 => 7, :argument1 => 'days'}}]
]
end

def self.prebuilt_filters_options
[['Custom', 'custom']] + self.prebuilt_filters.collect { |filter| [filter[0], filter[0].gsub(/[^a-zA-Z0-9]/, '').downcase] }
end

def self.get_prebuilt_filter(filter)
value = self.prebuilt_filters.find { |f| f[0].gsub(/[^a-zA-Z0-9]/, '').downcase == filter }
value ? value[1] : {}
end
end
2 changes: 1 addition & 1 deletion app/views/members/_segment_form.html.erb
Expand Up @@ -20,7 +20,7 @@ UserSegment = {
<%= f.check_boxes :main_page, [['add to quick select list', true]], :single => true %>
<%= f.ordered_array :fields, UserSegment.fields_options, :label => 'Fields to Display' %>
<% f.custom_field '' do %>
<a href="javascript:void(0)" onclick='openWindow("<%= url_for(:action => "builder", :path => @segment.id) %>" ,"operationBuilder",440,500,"yes","yes");'><%= @segment.id ? 'Edit filter'.t : 'Create a filter'.t %></a>
<a href="javascript:void(0)" onclick='openWindow("<%= url_for(:action => "builder", :path => @segment.id) %>" ,"operationBuilder",460,500,"yes","yes");'><%= @segment.id ? 'Edit filter'.t : 'Create a filter'.t %></a>
<% end %>
<%= f.text_area :segment_options_text, :rows => 8, :style => 'width:400px;', :label => 'Filter' %>
<%= f.spacer %>
Expand Down
21 changes: 20 additions & 1 deletion app/views/members/builder.html.erb
@@ -1,3 +1,22 @@
<%= render :partial => 'operation_form' %>
<% if @filter.nil? && @segment.nil? && @builder.field.nil? -%>

<fieldset id="operation_builder" style="padding:10px 10px 20px 10px; margin:5px;">
<legend style="font-size:14px; font-weight:bold;">Rule Builder</legend>
<% form_tag do |f| -%>
<ul style="list-style:none; color:#3B648C; font-weight: bold;">
<li>Pre-built filters
<%= select_tag :filter, options_for_select(UserSegment::OperationBuilder.prebuilt_filters_options), :style => 'width:200px;' %>
</li>
<li style="padding-top:5px; width:400px; text-align:left;">
<%= submit_tag 'Select' %>
</li>
</ul>
</form>
<% end -%>

</fieldset>
<% else -%>
<%= render :partial => 'operation_form' %>
<% end -%>

0 comments on commit c6923df

Please sign in to comment.