Newer
Older
class AdminsController < Admin::AdminController
use_bootstrap_for :user_search, :weekly_user_stats, :stats, :correlations
def user_search
if params[:admins_controller_user_search]
search_params = params.require(:admins_controller_user_search)
.permit(:username, :email, :guid, :under13)
@search = UserSearch.new(search_params)
@users = @search.perform
end
@search ||= UserSearch.new
@users ||= []
end
def admin_inviter
inviter = InvitationCode.default_inviter_or(current_user)
email = params[:identifier]
user = User.find_by_email(email)
danielgrippi
a validé
unless user
EmailInviter.new(email, inviter).send!
flash[:notice] = "invitation sent to #{email}"
flash[:notice]= "error sending invite to #{email}"
danielgrippi
a validé
end
redirect_to user_search_path, :notice => flash[:notice]
end
def add_invites
InvitationCode.find_by_token(params[:invite_code_id]).add_invites!
redirect_to user_search_path
end
@created_users = User.where("username IS NOT NULL and created_at IS NOT NULL")
@created_users.find_each do |u|
week = u.created_at.beginning_of_week.strftime("%Y-%m-%d")
@created_users_by_week[week] << u.username
@selected_week = params[:week] || @created_users_by_week.keys.first
@counter = @created_users_by_week[@selected_week].count
@popular_tags = ActsAsTaggableOn::Tagging.joins(:tag).limit(50).count(:group => :tag, :order => 'count(taggings.id) DESC')
case params[:range]
when "week"
range = 1.week
@segment = t('admins.stats.week')
@segment = t('admins.stats.2weeks')
@segment = t('admins.stats.month')
@segment = t('admins.stats.daily')
[Post, Comment, AspectMembership, User].each do |model|
@posts_per_day = Post.count(:group => "DATE(created_at)", :conditions => ["created_at >= ?", Date.today - 21.days], :order => "DATE(created_at) ASC")
@most_posts_within = @posts_per_day.values.max.to_f
#@posts[:new_public] = Post.where(:type => ['StatusMessage','ActivityStreams::Photo'],
# :public => true).order('created_at DESC').limit(15).all
@correlations_hash = Statistics.new.generate_correlations
def percent_change(today, yesterday)
sprintf( "%0.02f", ((today-yesterday) / yesterday.to_f)*100).to_f
end
def create_hash(model, opts={})
opts[:range] ||= 1.day
plural = model.to_s.underscore.pluralize
eval(<<DATA
@#{plural} = {
:day_before => #{model}.where(:created_at => ((Time.now.midnight - #{opts[:range]*2})..Time.now.midnight - #{opts[:range]})).count,
:yesterday => #{model}.where(:created_at => ((Time.now.midnight - #{opts[:range]})..Time.now.midnight)).count
@#{plural}[:change] = percent_change(@#{plural}[:yesterday], @#{plural}[:day_before])
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# TODO action needed after rails4 update
class UserSearch
#include ActiveModel::Model # rails4
include ActiveModel::Conversion
include ActiveModel::Validations
include ActiveModel::MassAssignmentSecurity
attr_accessor :username, :email, :guid, :under13
validate :any_searchfield_present?
def initialize(attributes={})
assign_attributes(attributes)
yield(self) if block_given?
end
def assign_attributes(values, options={})
sanitize_for_mass_assignment(values, options[:as]).each do |k, v|
send("#{k}=", v)
end
end
# TODO remove this once ActiveModel is included
def persisted?
false
end
def any_searchfield_present?
if %w(username email guid under13).all? { |attr| self.send(attr).blank? }
errors.add :base, "no fields for search set"
end
end
def perform
#return User.none unless valid? # rails4
return [] unless valid?
users = User.arel_table
people = Person.arel_table
profiles = Profile.arel_table
res = User.joins(person: :profile)
res = res.where(users[:username].matches("%#{username}%")) unless username.blank?
res = res.where(users[:email].matches("%#{email}%")) unless email.blank?
res = res.where(people[:guid].matches("%#{guid}%")) unless guid.blank?
res = res.where(profiles[:birthday].gt(Date.today-13.years)) if under13 == '1'
res
end
end