diff --git a/Gemfile b/Gemfile index 984972fc2..e398c4fd4 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,7 @@ gem 'uglifier', '>= 1.3.0' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' gem 'groupdate', '~> 4.1.0' +gem 'chartkick' gem 'grape-entity', '~> 0.7.1' gem 'kaminari', '~> 1.1', '>= 1.1.1' diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 839fadb57..4e57f532b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -16,3 +16,5 @@ //= require jquery3 //= require popper //= require bootstrap-sprockets +//= require chartkick +//= require Chart.bundle diff --git a/app/controllers/admins/project_statistics_controller.rb b/app/controllers/admins/project_statistics_controller.rb new file mode 100644 index 000000000..43db94b55 --- /dev/null +++ b/app/controllers/admins/project_statistics_controller.rb @@ -0,0 +1,70 @@ +class Admins::ProjectStatisticsController < Admins::BaseController + + + def index + projects = Project.project_statics_select.all + by_time = params[:time] + project_type = params[:project_type] + is_private = params[:is_private] + project_category_id = params[:project_category_id] + project_language_id = params[:project_language_id] + license_id = params[:license_id] + + projects = projects.where(project_type: project_type) if project_type.present? + projects = projects.where(is_private: is_private) if is_private.present? + projects = projects.where(project_category_id: project_category_id) if project_category_id.present? + projects = projects.where(project_language_id: project_language_id) if project_language_id.present? + projects = projects.where(license_id: license_id) if license_id.present? + + if by_time.present? + case by_time.to_s + when "week" + projects = projects.group_by_week(:created_on).size + when "month" + projects = projects.group_by_month(:created_on).size + when "quarter" + projects = projects.group_by_month(:created_on).size + when "year" + projects = projects.group_by_year(:created_on).size + else + projects = projects.group_by_day(:created_on).size + end + end + @projects = projects + end + + def visits_static + projects = Project.project_statics_select.all + by_time = params[:time] + project_type = params[:project_type] + is_private = params[:is_private] + project_category_id = params[:project_category_id] + project_language_id = params[:project_language_id] + license_id = params[:license_id] + + projects = projects.where(project_type: project_type) if project_type.present? + projects = projects.where(is_private: is_private) if is_private.present? + projects = projects.where(project_category_id: project_category_id) if project_category_id.present? + projects = projects.where(project_language_id: project_language_id) if project_language_id.present? + projects = projects.where(license_id: license_id) if license_id.present? + + if by_time.present? + case by_time.to_s + when "week" + projects = projects.group_by_week(:created_on).size + when "month" + projects = projects.group_by_month(:created_on).size + when "quarter" + projects = projects.group_by_month(:created_on).size + when "year" + projects = projects.group_by_year(:created_on).size + else + projects = projects.group_by_day(:created_on).size + end + end + @projects = projects + end + + + +end \ No newline at end of file diff --git a/app/controllers/admins/statistics_controller.rb b/app/controllers/admins/statistics_controller.rb deleted file mode 100644 index 707f36363..000000000 --- a/app/controllers/admins/statistics_controller.rb +++ /dev/null @@ -1,35 +0,0 @@ -class Admins::AboutsController < Admins::BaseController - - def index - projects = Project.all.project_statics_select - by_time = params[:time] - project_type = params[:project_type] - is_private = params[:is_private] - project_category_id = params[:project_category_id] - project_language_id = params[:project_language_id] - license_id = params[:license_id] - - projects = projects.where(project_type: project_type) if project_type.present? - projects = projects.where(is_private: is_private) if is_private.present? - projects = projects.where(project_category_id: project_category_id) if project_category_id.present? - projects = projects.where(project_language_id: project_language_id) if project_language_id.present? - projects = projects.where(license_id: license_id) if license_id.present? - - if by_time.present? - case by_time.to_s - when "week" - projects = projects.group_by_week(:created_on).count - when "month" - projects = projects.group_by_month(:created_on).count - when "quarter" - projects = projects.group_by_month(:created_on).count - when "year" - projects = projects.group_by_year(:created_on).count - else - projects = projects.group_by_day(:created_on).count - end - end - @projects = projects - end - -end \ No newline at end of file diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 8d19be016..f51e03146 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -173,6 +173,7 @@ class IssuesController < ApplicationController attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) unless attachment.blank? attachment.container = @issue + attachment.author_id = current_user.id attachment.save end end @@ -241,6 +242,7 @@ class IssuesController < ApplicationController attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) unless attachment.blank? attachment.container = @issue + attachment.author_id = current_user.id attachment.save end end diff --git a/app/models/project.rb b/app/models/project.rb index 78538ba7e..97d4aca94 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -30,7 +30,7 @@ class Project < ApplicationRecord has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" after_save :check_project_members - scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :hidden_repo, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} + scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} # 创建者 diff --git a/app/views/admins/project_statistics/index.html.erb b/app/views/admins/project_statistics/index.html.erb new file mode 100644 index 000000000..a5054aee4 --- /dev/null +++ b/app/views/admins/project_statistics/index.html.erb @@ -0,0 +1,2 @@ + +<%= line_chart @projects %> \ No newline at end of file diff --git a/app/views/admins/statistics/index.html.erb b/app/views/admins/statistics/index.html.erb deleted file mode 100644 index 030693d17..000000000 --- a/app/views/admins/statistics/index.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= @projects %> \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index baa0011f2..1fb0b4627 100644 --- a/config/application.rb +++ b/config/application.rb @@ -19,7 +19,7 @@ module Educoderplus # # config.educoder = config_for(:configuration) - config.active_record.default_timezone = :local + config.active_record.default_timezone = :utc config.time_zone = 'Beijing' # I18n diff --git a/config/routes.rb b/config/routes.rb index 38d59cb90..b119eb11e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -743,6 +743,11 @@ Rails.application.routes.draw do namespace :admins do get '/', to: 'dashboards#index' + resources :project_statistics, only: [:index] do + collection do + get :visits_static + end + end resources :major_informations, only: [:index] resources :ec_templates, only: [:index, :destroy] do collection do