diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 8a295345..5f39bfed 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -104,11 +104,16 @@ def email_targets_table_generate(opts,*find_options) ActiveTable::StaticHeader.new('Email') ] + @fields = [] if self.segment && self.segment.fields - self.segment.fields.each do |field| - option = UserSegment.fields_options.rassoc(field) - @generated_active_table_columns << ActiveTable::StaticHeader.new(option[1], :label => option[0]) if option - end + @fields = self.segment.fields + else self.class.module_options && self.class.module_options.fields + @fields = self.class.module_options.fields + end + + @fields.each do |field| + option = UserSegment.fields_options.rassoc(field) + @generated_active_table_columns << ActiveTable::StaticHeader.new(option[1], :label => option[0]) if option end active_table_generate('end_users', EndUser, @generated_active_table_columns, {:count_callback => 'count_end_users', :find_callback => 'find_end_users'}, opts, *find_options) @@ -145,7 +150,7 @@ def display_targets_table(display = true) handle_table_actions end - @active_table_output = email_targets_table_generate params, :per_page => 25, :include => :tag_cache, :conditions => 'client_user_id IS NULL', :order => 'created_at DESC' + @active_table_output = email_targets_table_generate params, :per_page => 25, :include => :tag_cache, :conditions => 'client_user_id IS NULL', :order => self.class.module_options.order_by if display @update_tags = true @@ -197,6 +202,37 @@ def user_segments_table(display=true) render :partial => 'user_segments_table' if display end + def options + cms_page_path ['People'], "Everyone Options" + + @options = self.class.module_options(params[:options]) + + if request.post? && @options.valid? + Configuration.set_config_model(@options) + flash[:notice] = "Updated Everyone options".t + redirect_to :action => 'index' + return + end + end + + def self.module_options(vals=nil) + Configuration.get_config_model(Options,vals) + end + + class Options < HashModel + attributes :fields => [], :order_by => 'created_at DESC' + + def validate + if self.fields + self.errors.add(:fields, 'is invalid') if self.fields.find { |f| UserSegment.fields_options.rassoc(f).nil? } + end + + if self.order_by + self.errors.add(:order_by, 'is invalid') unless UserSegment.order_by_options.rassoc(self.order_by) + end + end + end + def segments cms_page_path ['People'], 'Segments' user_segments_table(false) @@ -222,8 +258,12 @@ def edit_segment if request.post? && params[:segment] if @segment.update_attributes params[:segment] - @segment.refresh if @segment.should_refresh? - redirect_to :action => 'segments' + if @segment.should_refresh? + @segment.refresh + redirect_to :action => 'segments' + else + redirect_to :action => 'index', :path => @segment.id + end end end end diff --git a/app/models/user_segment.rb b/app/models/user_segment.rb index 04ae783e..779f7fcf 100644 --- a/app/models/user_segment.rb +++ b/app/models/user_segment.rb @@ -36,6 +36,12 @@ def segment_options_text=(text) text end + def order_by=(order) + @should_refresh = self.order_by != order + self.write_attribute :order_by, order + order + end + def should_refresh? @should_refresh end diff --git a/app/views/members/_targets_table.rhtml b/app/views/members/_targets_table.rhtml index c351e0d1..996f021b 100644 --- a/app/views/members/_targets_table.rhtml +++ b/app/views/members/_targets_table.rhtml @@ -27,8 +27,8 @@ %> - <% if @segment && @segment.fields -%> - <% @segment.fields.each do |field| -%> + <% if @fields -%> + <% @fields.each do |field| -%> <%= value = t.send(field) if value.is_a?(DomainModel) diff --git a/app/views/members/index.rhtml b/app/views/members/index.rhtml index cafc1b9b..594a90de 100644 --- a/app/views/members/index.rhtml +++ b/app/views/members/index.rhtml @@ -114,6 +114,8 @@ <%= form_tag %> <% if @segment && @segment.last_ran_at -%> Edit | Refresh +<% else -%> + Edit <% end -%> <%= select_tag :user_segment_id, options_for_select([['Everyone', nil]] + @segmentations.collect { |seg| [seg.name, seg.id] }, (@segment ? @segment.id : nil)), :onchange => 'MemberEditor.changeSegments();', :id => 'user_segments_user_segment_id', :style => 'width:200px;' %>
diff --git a/app/views/members/options.html.erb b/app/views/members/options.html.erb new file mode 100644 index 00000000..8673c11d --- /dev/null +++ b/app/views/members/options.html.erb @@ -0,0 +1,7 @@ + +<% admin_form_for :options, @options do |f| -%> +<%= f.select :order_by, UserSegment.order_by_options %> +<%= f.ordered_array :fields, UserSegment.fields_options, :label => 'Fields to Display' %> +<%= f.spacer %> +<%= f.cancel_submit_buttons 'Cancel', 'Save' %> +<% end -%>