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 -%>