Skip to content
Extraits de code Groupes Projets
admins_controller.rb 3,22 ko
Newer Older
class AdminsController < ApplicationController
  before_filter :authenticate_user!
  before_filter :redirect_unless_admin

    params[:user] ||= {}
    params[:user].delete_if {|key, value| value.blank? }
    @users = User.joins(person: :profile).where(["profiles.birthday > ?", Date.today - 13.years]) if params[:under13]
    @users = (@users || User).where(params[:user]) if params[:user].present?
    @users ||= []
    inviter = InvitationCode.default_inviter_or(current_user)
    email = params[:identifier]
    user = User.find_by_email(email)
      EmailInviter.new(email, inviter).send!
      flash[:notice] = "invitation sent to #{email}"
Maxwell Salzberg's avatar
Maxwell Salzberg a validé
    else
      flash[:notice]= "error sending invite to #{email}"
Maxwell Salzberg's avatar
Maxwell Salzberg a validé
    redirect_to user_search_path, :notice => flash[:notice]
  def add_invites
    InvitationCode.find_by_token(params[:invite_code_id]).add_invites!
    redirect_to user_search_path
  end

  def weekly_user_stats
    @created_users = User.where("username IS NOT NULL and created_at IS NOT NULL")
    @created_users_by_week =  Hash.new{ |h,k| h[k] = [] }
    @created_users.find_each do |u|
      unless u.nil?
          @created_users_by_week[u.created_at.beginning_of_week.strftime("%Y-%m-%d")].push("#{u.username}")
      # @segment = "#{@created_users_by_week[(params[:week])]}"
      @counter = "#{@created_users_by_week[(params[:week])].count}"
    else
movilla's avatar
movilla a validé
      @counter = ""
    @popular_tags = ActsAsTaggableOn::Tagging.joins(:tag).limit(50).count(:group => :tag, :order => 'count(taggings.id) DESC')
danielgrippi's avatar
danielgrippi a validé
    case params[:range]
    when "week"
      range = 1.week
      @segment = t('admins.stats.week')
danielgrippi's avatar
danielgrippi a validé
    when "2weeks"
      range = 2.weeks
      @segment = t('admins.stats.2weeks')
danielgrippi's avatar
danielgrippi a validé
    when "month"
      range = 1.month
      @segment = t('admins.stats.month')
danielgrippi's avatar
danielgrippi a validé
    else
      range = 1.day
      @segment = t('admins.stats.daily')
danielgrippi's avatar
danielgrippi a validé
    end

    [Post, Comment, AspectMembership, User].each do |model|
danielgrippi's avatar
danielgrippi a validé
      create_hash(model, :range => range)
danielgrippi's avatar
danielgrippi a validé
    @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

    @user_count = User.count

danielgrippi's avatar
danielgrippi a validé
    #@posts[:new_public] = Post.where(:type => ['StatusMessage','ActivityStreams::Photo'],
    #                                 :public => true).order('created_at DESC').limit(15).all

danielgrippi's avatar
danielgrippi a validé
  end

  def correlations
    @correlations_hash = Statistics.new.generate_correlations
  end

  private
  def percent_change(today, yesterday)
    sprintf( "%0.02f", ((today-yesterday) / yesterday.to_f)*100).to_f
  end

danielgrippi's avatar
danielgrippi a validé
  def create_hash(model, opts={})
    opts[:range] ||= 1.day
    plural = model.to_s.underscore.pluralize
    eval(<<DATA
      @#{plural} = {
danielgrippi's avatar
danielgrippi a validé
        :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])