Skip to content

Commit

Permalink
Merge remote branch 'core/user-list-fixes' into development
Browse files Browse the repository at this point in the history
  • Loading branch information
cykod committed Dec 7, 2010
2 parents 4b12cb3 + 7edcc91 commit 1116860
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 2 deletions.
1 change: 1 addition & 0 deletions app/controllers/content_controller.rb
Expand Up @@ -35,6 +35,7 @@ class ContentController < ModuleController #:nodoc: all
register_handler :user_segment, :fields, 'EndUserTagSegmentField'
register_handler :user_segment, :fields, 'UserSubscriptionEntrySegmentField'
register_handler :user_segment, :fields, 'EndUserTokenSegmentField'
register_handler :user_segment, :fields, 'DomainLogEntrySegmentField'

register_handler :structure, :wizard, 'Wizards::SimpleSite'
register_handler :structure, :wizard, 'Wizards::MembersSetup'
Expand Down
53 changes: 53 additions & 0 deletions app/models/domain_log_entry_segment_field.rb
@@ -0,0 +1,53 @@

class DomainLogEntrySegmentField < UserSegment::FieldHandler

def self.user_segment_fields_handler_info
{
:name => 'Domain Log Entry Fields',
:domain_model_class => DomainLogEntry,
:end_user_field => :user_id
}
end

class SiteNodeType < UserSegment::FieldType
def self.select_options
SiteNode.page_options
end

register_operation :is, [['Site Node', :model, {:class => DomainLogEntrySegmentField::SiteNodeType}]]

def self.is(cls, group_field, field, node)
cls.scoped(:conditions => ["#{field} = ?", node])
end

register_operation :count, [['Site Node', :model, {:class => DomainLogEntrySegmentField::SiteNodeType}], ['Operator', :option, {:options => UserSegment::CoreType.number_type_operators}], ['Value', :integer]], :complex => true

def self.count(cls, group_field, field, node, operator, value)
cls.scoped(:select => "#{group_field}, COUNT(#{field}) as #{field}_count", :conditions => ["#{field} = ?", node], :group => group_field, :having => "#{field}_count #{operator} #{value}")
end
end

class ContentNodeType < UserSegment::FieldType
def self.select_options
ContentNodeValue.find(:all, :conditions => ['link IS NOT NULL'], :select => 'DISTINCT content_node_id, link', :limit => 10000).collect { |v| [v.link, v.content_node_id] }.sort { |a, b| a[0] <=> b[0] }
end

register_operation :is, [['Content', :model, {:class => DomainLogEntrySegmentField::ContentNodeType}]]

def self.is(cls, group_field, field, action)
cls.scoped(:conditions => ["#{field} = ?", action])
end

register_operation :count, [['ContentNodeType', :model, {:class => DomainLogEntrySegmentField::ContentNodeType}], ['Operator', :option, {:options => UserSegment::CoreType.number_type_operators}], ['Value', :integer]], :complex => true

def self.count(cls, group_field, field, node, operator, value)
cls.scoped(:select => "#{group_field}, COUNT(#{field}) as #{field}_count", :conditions => ["#{field} = ?", node], :group => group_field, :having => "#{field}_count #{operator} #{value}")
end
end

register_field :log_occurred, UserSegment::CoreType::DateTimeType, :field => :occurred_at, :name => 'Log: Occurred'
register_field :log_content, DomainLogEntrySegmentField::ContentNodeType, :field => :content_node_id, :name => 'Log: Content', :combined_only => true
register_field :log_site_node, DomainLogEntrySegmentField::SiteNodeType, :field => :site_node_id, :name => 'Log: Site Node', :combined_only => true
register_field :log_user_level, EndUserSegmentType::UserLevelType, :field => :user_level, :name => 'Log: User Level', :combined_only => true
register_field :log_value, UserSegment::CoreType::NumberType, :field => :value, :name => 'Log: Value', :combined_only => true
end
2 changes: 1 addition & 1 deletion app/models/end_user_segment_field.rb
Expand Up @@ -17,7 +17,7 @@ def self.user_segment_fields_handler_info

register_field :acknowledged, UserSegment::CoreType::BooleanType, :name => 'Acknowledged', :sortable => true, :builder_name => 'Show acknowledged accounts?'
register_field :user_level, EndUserSegmentType::UserLevelType, :name => 'User Level', :sortable => true
register_field :user_value, EndUserSegmentType::UserLevelType, :field => :value, :name => 'User Value', :sortable => true
register_field :user_value, UserSegment::CoreType::SimpleNumberType, :field => :value, :name => 'User Value', :sortable => true
register_field :dob, UserSegment::CoreType::DateTimeType, :name => 'DOB', :sortable => true
register_field :last_name, UserSegment::CoreType::StringType, :name => 'Last Name', :sortable => true
register_field :first_name, UserSegment::CoreType::StringType, :name => 'First Name', :sortable => true
Expand Down
2 changes: 1 addition & 1 deletion app/models/end_user_segment_type.rb
Expand Up @@ -21,7 +21,7 @@ def self.select_options
register_operation :is, [['User Profile', :model, {:class => EndUserSegmentType::UserClassType}]]

def self.is(cls, group_field, field, user_class_id)
cls.scoped(:conditions => ["#{user_class_id} = ?", user_class_id])
cls.scoped(:conditions => ["#{field} = ?", user_class_id])
end
end

Expand Down
8 changes: 8 additions & 0 deletions app/models/user_segment/core_type.rb
Expand Up @@ -27,6 +27,14 @@ def self.since(cls, group_field, field, value, format)
def self.between(cls, group_field, field, from, to)
cls.scoped(:conditions => ["#{field} between ? and ?", from, to])
end

register_operation :range, [['Starts', :option, {:options => Content::Field.relative_date_start_options}], ['Ends', :option, {:options => Content::Field.relative_date_end_options}]], :default => true

def self.range(cls, group_field, field, start_option, end_option)
from = Content::Field.calculate_filter_start_date start_option
to = Content::Field.calculate_filter_end_date from, end_option
cls.scoped(:conditions => ["#{field} between ? and ?", from, to])
end
end

@@number_type_operators = [['Greater than', '>'], ['Greater than or equal to', '>='], ['Equal to', '='], ['Less than or equal to', '<='], ['Lest than', '<']]
Expand Down
1 change: 1 addition & 0 deletions app/models/user_segment/operation_builder.rb
Expand Up @@ -69,6 +69,7 @@ def field_group_options
if self.parent.nil? || self.parent.user_segment_field.handler == handler
options = []
handler[:class].user_segment_fields.each do |field, values|
next if values[:combined_only] && self.parent.nil?
options << ['- ' + values[:name], field.to_s] unless seen_options[field.to_s]
seen_options[field.to_s] = 1
end
Expand Down

0 comments on commit 1116860

Please sign in to comment.