Skip to content
Extraits de code Groupes Projets
admins_controller.rb 4,24 ko
Newer Older
  • Learn to ignore specific revisions
  • # frozen_string_literal: true
    
    
    class AdminsController < Admin::AdminController
    
      include ApplicationHelper
    
      def dashboard
        gon.push(pod_version: pod_version)
      end
    
        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
    
        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
    
    Fabian Rodriguez's avatar
    Fabian Rodriguez a validé
        @created_users_by_week = Hash.new{ |h,k| h[k] = [] }
    
        @created_users = User.where("username IS NOT NULL and created_at IS NOT NULL")
    
        @created_users.find_each do |u|
    
    Fabian Rodriguez's avatar
    Fabian Rodriguez a validé
          week = u.created_at.beginning_of_week.strftime("%Y-%m-%d")
          @created_users_by_week[week] << u.username
    
    Fabian Rodriguez's avatar
    Fabian Rodriguez a validé
    
    
        @selected_week = params[:week] || @created_users_by_week.keys.last
    
    Fabian Rodriguez's avatar
    Fabian Rodriguez a validé
        @counter = @created_users_by_week[@selected_week].count
    
        @popular_tags = ActsAsTaggableOn::Tagging.joins(:tag).limit(50).order('count(taggings.id) DESC').group(:tag).count
    
    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')
    
        [Post, Comment, AspectMembership, User].each do |model|
    
    danielgrippi's avatar
    danielgrippi a validé
          create_hash(model, :range => range)
    
        @posts_per_day = Post.where("created_at >= ?", Date.today - 21.days).group("DATE(created_at)").order("DATE(created_at) ASC").count
    
        @most_posts_within = @posts_per_day.values.max.to_f
    
    
        @user_count = User.count
    
    
        #@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
    
    
      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])
    
        include ActiveModel::Model
    
        include ActiveModel::Conversion
        include ActiveModel::Validations
    
        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)
          values.each do |k, v|
            public_send("#{k}=", v)
    
          if %w(username email guid under13).all? { |attr| public_send(attr).blank? }
    
            errors.add :base, "no fields for search set"
          end
        end
    
        def perform
    
          return User.none 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