sufia 4.2.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +21 -0
  3. data/README.md +7 -19
  4. data/SUFIA_VERSION +1 -1
  5. data/app/assets/images/orcid.png +0 -0
  6. data/app/assets/javascripts/sufia.js +6 -1
  7. data/app/assets/javascripts/sufia/permissions.js +2 -26
  8. data/app/assets/stylesheets/sufia.css.scss +6 -0
  9. data/app/assets/stylesheets/sufia/_buttons.scss +6 -1
  10. data/app/assets/stylesheets/sufia/_dashboard.scss +10 -0
  11. data/app/assets/stylesheets/sufia/_file-listing.scss +8 -0
  12. data/app/assets/stylesheets/sufia/_settings.scss +1 -0
  13. data/app/helpers/batch_edits_helper.rb +1 -1
  14. data/app/helpers/sufia/sufia_helper_behavior.rb +11 -0
  15. data/app/models/featured_work_list.rb +4 -1
  16. data/app/views/batch/edit.html.erb +2 -2
  17. data/app/views/batch_edits/_check_all.html.erb +8 -6
  18. data/app/views/collections/_edit_descriptions.html.erb +1 -1
  19. data/app/views/dashboard/_index_partials/_stats.html.erb +10 -1
  20. data/app/views/generic_files/_descriptions.html.erb +1 -1
  21. data/app/views/generic_files/_permission.html.erb +2 -2
  22. data/app/views/generic_files/_permission_form.html.erb +4 -6
  23. data/app/views/generic_files/_versioning.html.erb +2 -2
  24. data/app/views/records/show_fields/_contributor.html.erb +1 -1
  25. data/app/views/records/show_fields/_creator.html.erb +1 -1
  26. data/app/views/users/_profile.html.erb +1 -2
  27. data/app/views/users/_user_info.html.erb +20 -3
  28. data/app/views/users/edit.html.erb +11 -2
  29. data/app/views/users/show.html.erb +1 -1
  30. data/config/locales/sufia.en.yml +5 -0
  31. data/lib/generators/sufia/install_generator.rb +4 -0
  32. data/lib/generators/sufia/templates/catalog_controller.rb +4 -0
  33. data/lib/sufia/version.rb +1 -1
  34. data/spec/controllers/users_controller_spec.rb +18 -10
  35. data/spec/features/browse_files_spec.rb +17 -3
  36. data/spec/features/users_spec.rb +1 -1
  37. data/spec/helpers/batch_edits_helper_spec.rb +7 -1
  38. data/spec/lib/sufia/user_stat_importer_spec.rb +206 -0
  39. data/spec/models/featured_work_list_spec.rb +12 -0
  40. data/spec/models/file_view_stat_spec.rb +6 -2
  41. data/spec/models/user_spec.rb +25 -2
  42. data/spec/models/user_usage_stats_spec.rb +39 -0
  43. data/spec/views/dashboard/index_spec.rb +4 -0
  44. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +19 -0
  45. data/spec/views/generic_file/show.html.erb_spec.rb +2 -2
  46. data/sufia-models/app/models/concerns/sufia/file_stat_utils.rb +3 -3
  47. data/sufia-models/app/models/concerns/sufia/user.rb +27 -10
  48. data/sufia-models/app/models/concerns/sufia/user_usage_stats.rb +15 -0
  49. data/sufia-models/app/models/file_download_stat.rb +2 -2
  50. data/sufia-models/app/models/file_usage.rb +7 -3
  51. data/sufia-models/app/models/file_view_stat.rb +2 -2
  52. data/sufia-models/app/models/sufia/orcid_validator.rb +8 -0
  53. data/sufia-models/app/models/user_stat.rb +2 -0
  54. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +30 -0
  55. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +2 -31
  56. data/sufia-models/lib/generators/sufia/models/install_generator.rb +11 -31
  57. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +19 -0
  58. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +2 -31
  59. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +3 -5
  60. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +5 -0
  61. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb +19 -0
  62. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +2 -33
  63. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +31 -0
  64. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +85 -0
  65. data/sufia-models/lib/sufia/models/version.rb +1 -1
  66. data/sufia-models/lib/tasks/stats_tasks.rake +12 -0
  67. data/sufia.gemspec +0 -1
  68. metadata +21 -19
  69. data/app/views/users/_social_media_info.html.erb +0 -20
@@ -1,12 +1,7 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'rails/generators'
3
- require 'rails/generators/migration'
4
-
5
- class Sufia::Models::InstallGenerator < Rails::Generators::Base
6
- include Rails::Generators::Migration
1
+ require_relative 'abstract_migration_generator'
7
2
 
3
+ class Sufia::Models::InstallGenerator < Sufia::Models::AbstractMigrationGenerator
8
4
  source_root File.expand_path('../templates', __FILE__)
9
-
10
5
  argument :model_name, type: :string , default: "user"
11
6
  desc """
12
7
  This generator makes the following changes to your application:
@@ -19,30 +14,15 @@ This generator makes the following changes to your application:
19
14
  7. Runs full-text generator
20
15
  8. Runs proxies generator
21
16
  9. Runs cached stats generator
17
+ 10. Runs ORCID field generator
18
+ 11. Runs user stats generator
22
19
  """
23
-
24
- # Implement the required interface for Rails::Generators::Migration.
25
- # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
26
- def self.next_migration_number(path)
27
- if @prev_migration_nr
28
- @prev_migration_nr += 1
29
- else
30
- if last_migration = Dir[File.join(path, '*.rb')].sort.last
31
- @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
32
- else
33
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
34
- end
35
- end
36
- @prev_migration_nr.to_s
37
- end
38
-
39
20
  def banner
40
21
  say_status("warning", "GENERATING SUFIA MODELS", :yellow)
41
22
  end
42
23
 
43
24
  # Setup the database migrations
44
25
  def copy_migrations
45
- # Can't get this any more DRY, because we need this order.
46
26
  [
47
27
  "acts_as_follower_migration.rb",
48
28
  "add_social_to_users.rb",
@@ -114,13 +94,13 @@ This generator makes the following changes to your application:
114
94
  generate 'sufia:models:cached_stats'
115
95
  end
116
96
 
117
- private
97
+ # Adds orcid field to user model
98
+ def orcid_field
99
+ generate 'sufia:models:orcid_field'
100
+ end
118
101
 
119
- def better_migration_template(file)
120
- begin
121
- migration_template "migrations/#{file}", "db/migrate/#{file}"
122
- rescue Rails::Generators::Error => e
123
- say_status("warning", e.message, :yellow)
124
- end
102
+ # Adds user stats-related migration & methods
103
+ def user_stats
104
+ generate 'sufia:models:user_stats'
125
105
  end
126
106
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'abstract_migration_generator'
2
+
3
+ class Sufia::Models::OrcidFieldGenerator < Sufia::Models::AbstractMigrationGenerator
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This generator adds a field to hold users' ORCIDs to your application:
8
+ 1. Creates a database migration if they do not exist in /db/migrate
9
+ """
10
+
11
+ def banner
12
+ say_status("warning", "ADDING ORCID FIELD TO USER MODEL", :yellow)
13
+ end
14
+
15
+ # Setup the database migration
16
+ def copy_migrations
17
+ better_migration_template 'add_orcid_to_users.rb'
18
+ end
19
+ end
@@ -1,30 +1,12 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'rails/generators'
3
- require 'rails/generators/migration'
4
-
5
- class Sufia::Models::ProxiesGenerator < Rails::Generators::Base
6
- include Rails::Generators::Migration
1
+ require_relative 'abstract_migration_generator'
7
2
 
3
+ class Sufia::Models::ProxiesGenerator < Sufia::Models::AbstractMigrationGenerator
8
4
  source_root File.expand_path('../templates', __FILE__)
9
5
 
10
6
  desc """
11
7
  This generator adds proxies and transfers to your application:
12
8
  1. Creates several database migrations if they do not exist in /db/migrate
13
9
  """
14
- # Implement the required interface for Rails::Generators::Migration.
15
- # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
16
- def self.next_migration_number(path)
17
- if @prev_migration_nr
18
- @prev_migration_nr += 1
19
- else
20
- if last_migration = Dir[File.join(path, '*.rb')].sort.last
21
- @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
22
- else
23
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
24
- end
25
- end
26
- @prev_migration_nr.to_s
27
- end
28
10
 
29
11
  def banner
30
12
  say_status("warning", "ADDING PROXY/TRANSFER-RELATED SUFIA MODELS", :yellow)
@@ -32,7 +14,6 @@ This generator adds proxies and transfers to your application:
32
14
 
33
15
  # Setup the database migrations
34
16
  def copy_migrations
35
- # Can't get this any more DRY, because we need this order.
36
17
  [
37
18
  'create_proxy_deposit_rights.rb',
38
19
  'create_proxy_deposit_requests.rb'
@@ -40,14 +21,4 @@ This generator adds proxies and transfers to your application:
40
21
  better_migration_template file
41
22
  end
42
23
  end
43
-
44
- private
45
-
46
- def better_migration_template(file)
47
- begin
48
- migration_template "migrations/#{file}", "db/migrate/#{file}"
49
- rescue Rails::Generators::Error => e
50
- say_status("warning", e.message, :yellow)
51
- end
52
- end
53
24
  end
@@ -93,6 +93,9 @@ Sufia.config do |config|
93
93
  # Specify a Google Analytics tracking ID to gather usage statistics
94
94
  # config.google_analytics_id = 'UA-99999999-1'
95
95
 
96
+ # Specify a date you wish to start collecting Google Analytic statistics for.
97
+ # config.analytic_start_date = DateTime.new(2014,9,10)
98
+
96
99
  # Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)
97
100
  # config.temp_file_base = '/home/developer1'
98
101
 
@@ -108,11 +111,6 @@ Sufia.config do |config|
108
111
  # Specify how many seconds back from the current time that we should show by default of the user's activity on the user's dashboard
109
112
  # config.activity_to_show_default_seconds_since_now = 24*60*60
110
113
 
111
- # Specify a date you wish to start collecting Google Analytic statistics for.
112
- # Leaving it blank will set the start date to when ever the file was uploaded by
113
- # NOTE: if you have always sent analytics to GA for downloads and page views leave this commented out
114
- # config.analytic_start_date = DateTime.new(2014,9,10)
115
-
116
114
  # If browse-everything has been configured, load the configs. Otherwise, set to nil.
117
115
  begin
118
116
  if defined? BrowseEverything
@@ -0,0 +1,5 @@
1
+ class AddOrcidToUsers < ActiveRecord::Migration
2
+ def change
3
+ add_column :users, :orcid, :string
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ class CreateUserStats < ActiveRecord::Migration
2
+ def change
3
+ create_table :user_stats do |t|
4
+ t.integer :user_id
5
+ t.datetime :date
6
+ t.integer :file_views
7
+ t.integer :file_downloads
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_column :file_view_stats, :user_id, :integer
13
+ add_column :file_download_stats, :user_id, :integer
14
+
15
+ add_index :user_stats, :user_id
16
+ add_index :file_view_stats, :user_id
17
+ add_index :file_download_stats, :user_id
18
+ end
19
+ end
@@ -1,13 +1,8 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'rails/generators'
3
- require 'rails/generators/migration'
4
-
5
- class Sufia::Models::Upgrade400Generator < Rails::Generators::Base
6
- include Rails::Generators::Migration
1
+ require_relative 'abstract_migration_generator'
7
2
 
3
+ class Sufia::Models::Upgrade400Generator < Sufia::Models::AbstractMigrationGenerator
8
4
  source_root File.expand_path('../templates', __FILE__)
9
5
 
10
- argument :model_name, type: :string , default: "user"
11
6
  desc """
12
7
  This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following changes to your application:
13
8
  1. Creates several database migrations if they do not exist in /db/migrate
@@ -16,28 +11,12 @@ This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following
16
11
  4. Runs full-text generator
17
12
  """
18
13
 
19
- # Implement the required interface for Rails::Generators::Migration.
20
- # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
21
- def self.next_migration_number(path)
22
- if @prev_migration_nr
23
- @prev_migration_nr += 1
24
- else
25
- if last_migration = Dir[File.join(path, '*.rb')].sort.last
26
- @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
27
- else
28
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
29
- end
30
- end
31
- @prev_migration_nr.to_s
32
- end
33
-
34
14
  def banner
35
15
  say_status("warning", "UPGRADING SUFIA MODELS", :yellow)
36
16
  end
37
17
 
38
18
  # Setup the database migrations
39
19
  def copy_migrations
40
- # Can't get this any more DRY, because we need this order.
41
20
  [
42
21
  'create_tinymce_assets.rb',
43
22
  'create_content_blocks.rb',
@@ -72,14 +51,4 @@ This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following
72
51
  def full_text_indexing
73
52
  generate "sufia:models:fulltext"
74
53
  end
75
-
76
- private
77
-
78
- def better_migration_template(file)
79
- begin
80
- migration_template "migrations/#{file}", "db/migrate/#{file}"
81
- rescue Rails::Generators::Error => e
82
- say_status("warning", e.message, :yellow)
83
- end
84
- end
85
54
  end
@@ -0,0 +1,31 @@
1
+ require_relative 'abstract_migration_generator'
2
+
3
+ class Sufia::Models::UserStatsGenerator < Sufia::Models::AbstractMigrationGenerator
4
+ source_root File.expand_path('../templates', __FILE__)
5
+ argument :model_name, type: :string , default: "user"
6
+
7
+ desc """
8
+ This generator adds usage stats methods to the user model in your application:
9
+ """
10
+
11
+ def banner
12
+ say_status("warning", "ADDING USER STATS-RELATED ABILITIES TO SUFIA MODELS", :yellow)
13
+ end
14
+
15
+ # Setup the database migrations
16
+ def copy_migrations
17
+ better_migration_template 'create_user_stats.rb'
18
+ end
19
+
20
+ def add_stats_mixin_to_user_model
21
+ file_path = "app/models/#{model_name.underscore}.rb"
22
+
23
+ if File.exists?(file_path)
24
+ inject_into_file file_path, after: /include Sufia\:\:User.*$/ do
25
+ "\n include Sufia::UserUsageStats"
26
+ end
27
+ else
28
+ puts " \e[31mFailure\e[0m Sufia requires a user object. This generator assumes that the model is defined in the file #{file_path}, which does not exist. If you used a different name, please re-run the generator and provide that name as an argument. Such as \b rails g sufia:models:user_stats client"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,85 @@
1
+ module Sufia
2
+ class UserStatImporter
3
+
4
+ def initialize(options={})
5
+ @verbose = options[:verbose]
6
+ @logging = options[:logging]
7
+ end
8
+
9
+ def import
10
+ log_message('Begin import of User stats.')
11
+ ::User.find_each do |user|
12
+ start_date = date_since_last_cache(user)
13
+
14
+ stats = {}
15
+ files_for_user(user).each do |file|
16
+ view_stats = FileViewStat.statistics(file.id, start_date, user.id)
17
+ stats = tally_results(view_stats, :views, stats)
18
+
19
+ dl_stats = FileDownloadStat.statistics(file.id, start_date, user.id)
20
+ stats = tally_results(dl_stats, :downloads, stats)
21
+ end
22
+
23
+ create_or_update_user_stats(stats, user)
24
+ end
25
+ log_message('User stats import complete.')
26
+ end
27
+
28
+
29
+ private
30
+
31
+ def date_since_last_cache(user)
32
+ last_cached_stat = UserStat.where(user_id: user.id).order(date: :asc).last
33
+
34
+ if last_cached_stat
35
+ last_cached_stat.date + 1.day
36
+ else
37
+ Sufia.config.analytic_start_date
38
+ end
39
+ end
40
+
41
+ def files_for_user(user)
42
+ ::GenericFile.where(Solrizer.solr_name('depositor', :symbol) => user.user_key)
43
+ end
44
+
45
+ # For each date, add the view and download counts for this
46
+ # file to the view & download sub-totals for that day.
47
+ # The resulting hash will look something like this:
48
+ # {"2014-11-30 00:00:00 UTC" => {:views=>2, :downloads=>5},
49
+ # "2014-12-01 00:00:00 UTC" => {:views=>4, :downloads=>4}}
50
+ def tally_results(file_stats, stat_name, total_stats)
51
+ file_stats.each do |stats|
52
+ # Exclude the stats from today since it will only be a partial day's worth of data
53
+ break if stats.date == Date.today
54
+
55
+ date_key = stats.date.to_s
56
+ old_count = total_stats[date_key] ? total_stats[date_key].fetch(stat_name) { 0 } : 0
57
+ new_count = old_count + stats.method(stat_name).call
58
+
59
+ old_values = total_stats[date_key] || {}
60
+ total_stats.store(date_key, old_values)
61
+ total_stats[date_key].store(stat_name, new_count)
62
+ end
63
+ total_stats
64
+ end
65
+
66
+ def create_or_update_user_stats(stats, user)
67
+ stats.each do |date_string, data|
68
+ date = Time.zone.parse(date_string)
69
+
70
+ user_stat = UserStat.where(user_id: user.id).where(date: date).first
71
+ user_stat ||= UserStat.new(user_id: user.id, date: date)
72
+
73
+ user_stat.file_views = data[:views] || 0
74
+ user_stat.file_downloads = data[:downloads] || 0
75
+ user_stat.save!
76
+ end
77
+ end
78
+
79
+ def log_message(message)
80
+ puts message if @verbose
81
+ Rails.logger.info "#{self.class}: #{message}" if @logging
82
+ end
83
+
84
+ end
85
+ end
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "4.2.0"
3
+ VERSION = "4.3.1"
4
4
  end
5
5
  end
@@ -0,0 +1,12 @@
1
+ namespace :sufia do
2
+ namespace :stats do
3
+
4
+ desc "Cache file view & download stats for all users"
5
+ task :user_stats => :environment do
6
+ require 'sufia/models/stats/user_stat_importer'
7
+ importer = Sufia::UserStatImporter.new(verbose: true, logging: true)
8
+ importer.import
9
+ end
10
+
11
+ end
12
+ end
@@ -39,7 +39,6 @@ Gem::Specification.new do |gem|
39
39
  gem.add_dependency 'hydra-editor', '~> 0.3'
40
40
  gem.add_dependency 'hydra-collections', '~> 2.0'
41
41
  gem.add_dependency 'bootstrap_form', '~> 2.1'
42
- gem.add_dependency 'bootstrap-sass', '< 3.2'
43
42
  gem.add_dependency 'blacklight-gallery'
44
43
  gem.add_dependency 'breadcrumbs_on_rails', '~>2.3.0'
45
44
  gem.add_dependency 'select2-rails'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-25 00:00:00.000000000 Z
12
+ date: 2014-12-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sufia-models
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 4.2.0
20
+ version: 4.3.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 4.2.0
27
+ version: 4.3.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: blacklight_advanced_search
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -241,20 +241,6 @@ dependencies:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
243
  version: '2.1'
244
- - !ruby/object:Gem::Dependency
245
- name: bootstrap-sass
246
- requirement: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - "<"
249
- - !ruby/object:Gem::Version
250
- version: '3.2'
251
- type: :runtime
252
- prerelease: false
253
- version_requirements: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - "<"
256
- - !ruby/object:Gem::Version
257
- version: '3.2'
258
244
  - !ruby/object:Gem::Dependency
259
245
  name: blacklight-gallery
260
246
  requirement: !ruby/object:Gem::Requirement
@@ -462,6 +448,7 @@ files:
462
448
  - app/assets/images/missing_original.png
463
449
  - app/assets/images/missing_thumb.png
464
450
  - app/assets/images/old_main_tulips.jpg
451
+ - app/assets/images/orcid.png
465
452
  - app/assets/images/progressbar.gif
466
453
  - app/assets/images/site_images/bg_body.png
467
454
  - app/assets/images/site_images/bg_breadcrumbs.png
@@ -835,7 +822,6 @@ files:
835
822
  - app/views/users/_profile_tabs.html.erb
836
823
  - app/views/users/_proxies.html.erb
837
824
  - app/views/users/_search_form.html.erb
838
- - app/views/users/_social_media_info.html.erb
839
825
  - app/views/users/_trophy_edit.html.erb
840
826
  - app/views/users/_user_info.html.erb
841
827
  - app/views/users/_user_util_links_extra.html.erb
@@ -968,6 +954,7 @@ files:
968
954
  - spec/lib/sufia/messages_spec.rb
969
955
  - spec/lib/sufia/readable_permissions_spec.rb
970
956
  - spec/lib/sufia/upload_complete_behavior_spec.rb
957
+ - spec/lib/sufia/user_stat_importer_spec.rb
971
958
  - spec/lib/sufia/writable_permissions_spec.rb
972
959
  - spec/models/ability_spec.rb
973
960
  - spec/models/batch_spec.rb
@@ -996,6 +983,7 @@ files:
996
983
  - spec/models/solr_document_spec.rb
997
984
  - spec/models/trophy_spec.rb
998
985
  - spec/models/user_spec.rb
986
+ - spec/models/user_usage_stats_spec.rb
999
987
  - spec/routing/featured_works_route_spec.rb
1000
988
  - spec/routing/ownership_transfers_route_spec.rb
1001
989
  - spec/routing/route_spec.rb
@@ -1020,6 +1008,7 @@ files:
1020
1008
  - spec/views/collections/_form.html.erb_spec.rb
1021
1009
  - spec/views/collections/_show_descriptions.html.erb_spec.rb
1022
1010
  - spec/views/dashboard/index_spec.rb
1011
+ - spec/views/generic_file/_permission_form.html.erb_spec.rb
1023
1012
  - spec/views/generic_file/edit.html.erb_spec.rb
1024
1013
  - spec/views/generic_file/show.html.erb_spec.rb
1025
1014
  - spec/views/generic_file/stats.html.erb_spec.rb
@@ -1069,6 +1058,7 @@ files:
1069
1058
  - sufia-models/app/models/concerns/sufia/model_methods.rb
1070
1059
  - sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb
1071
1060
  - sufia-models/app/models/concerns/sufia/user.rb
1061
+ - sufia-models/app/models/concerns/sufia/user_usage_stats.rb
1072
1062
  - sufia-models/app/models/datastreams/batch_rdf_datastream.rb
1073
1063
  - sufia-models/app/models/datastreams/file_content_datastream.rb
1074
1064
  - sufia-models/app/models/datastreams/fits_datastream.rb
@@ -1093,16 +1083,20 @@ files:
1093
1083
  - sufia-models/app/models/sufia/avatar_uploader.rb
1094
1084
  - sufia-models/app/models/sufia/avatar_validator.rb
1095
1085
  - sufia-models/app/models/sufia/download.rb
1086
+ - sufia-models/app/models/sufia/orcid_validator.rb
1096
1087
  - sufia-models/app/models/sufia/pageview.rb
1097
1088
  - sufia-models/app/models/trophy.rb
1089
+ - sufia-models/app/models/user_stat.rb
1098
1090
  - sufia-models/app/models/version_committer.rb
1099
1091
  - sufia-models/app/services/sufia/analytics.rb
1100
1092
  - sufia-models/app/services/sufia/id_service.rb
1101
1093
  - sufia-models/app/services/sufia/noid.rb
1102
1094
  - sufia-models/config/locales/sufia.en.yml
1095
+ - sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb
1103
1096
  - sufia-models/lib/generators/sufia/models/cached_stats_generator.rb
1104
1097
  - sufia-models/lib/generators/sufia/models/fulltext_generator.rb
1105
1098
  - sufia-models/lib/generators/sufia/models/install_generator.rb
1099
+ - sufia-models/lib/generators/sufia/models/orcid_field_generator.rb
1106
1100
  - sufia-models/lib/generators/sufia/models/proxies_generator.rb
1107
1101
  - sufia-models/lib/generators/sufia/models/templates/config/analytics.yml
1108
1102
  - sufia-models/lib/generators/sufia/models/templates/config/clamav.rb
@@ -1121,6 +1115,7 @@ files:
1121
1115
  - sufia-models/lib/generators/sufia/models/templates/migrations/add_groups_to_users.rb
1122
1116
  - sufia-models/lib/generators/sufia/models/templates/migrations/add_ldap_attrs_to_user.rb
1123
1117
  - sufia-models/lib/generators/sufia/models/templates/migrations/add_linkedin_to_users.rb
1118
+ - sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb
1124
1119
  - sufia-models/lib/generators/sufia/models/templates/migrations/add_social_to_users.rb
1125
1120
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb
1126
1121
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb
@@ -1133,9 +1128,11 @@ files:
1133
1128
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb
1134
1129
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb
1135
1130
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb
1131
+ - sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb
1136
1132
  - sufia-models/lib/generators/sufia/models/templates/migrations/create_version_committers.rb
1137
1133
  - sufia-models/lib/generators/sufia/models/upgrade400_generator.rb
1138
1134
  - sufia-models/lib/generators/sufia/models/usagestats_generator.rb
1135
+ - sufia-models/lib/generators/sufia/models/user_stats_generator.rb
1139
1136
  - sufia-models/lib/sufia/messages.rb
1140
1137
  - sufia-models/lib/sufia/models.rb
1141
1138
  - sufia-models/lib/sufia/models/active_fedora/redis.rb
@@ -1144,6 +1141,7 @@ files:
1144
1141
  - sufia-models/lib/sufia/models/file_content.rb
1145
1142
  - sufia-models/lib/sufia/models/file_content/versions.rb
1146
1143
  - sufia-models/lib/sufia/models/resque.rb
1144
+ - sufia-models/lib/sufia/models/stats/user_stat_importer.rb
1147
1145
  - sufia-models/lib/sufia/models/user_local_directory_behavior.rb
1148
1146
  - sufia-models/lib/sufia/models/utils.rb
1149
1147
  - sufia-models/lib/sufia/models/version.rb
@@ -1152,6 +1150,7 @@ files:
1152
1150
  - sufia-models/lib/sufia/permissions/readable.rb
1153
1151
  - sufia-models/lib/sufia/permissions/writable.rb
1154
1152
  - sufia-models/lib/tasks/resque.rake
1153
+ - sufia-models/lib/tasks/stats_tasks.rake
1155
1154
  - sufia-models/lib/tasks/sufia-models_tasks.rake
1156
1155
  - sufia-models/sufia-models.gemspec
1157
1156
  - sufia.gemspec
@@ -1321,6 +1320,7 @@ test_files:
1321
1320
  - spec/lib/sufia/messages_spec.rb
1322
1321
  - spec/lib/sufia/readable_permissions_spec.rb
1323
1322
  - spec/lib/sufia/upload_complete_behavior_spec.rb
1323
+ - spec/lib/sufia/user_stat_importer_spec.rb
1324
1324
  - spec/lib/sufia/writable_permissions_spec.rb
1325
1325
  - spec/models/ability_spec.rb
1326
1326
  - spec/models/batch_spec.rb
@@ -1349,6 +1349,7 @@ test_files:
1349
1349
  - spec/models/solr_document_spec.rb
1350
1350
  - spec/models/trophy_spec.rb
1351
1351
  - spec/models/user_spec.rb
1352
+ - spec/models/user_usage_stats_spec.rb
1352
1353
  - spec/routing/featured_works_route_spec.rb
1353
1354
  - spec/routing/ownership_transfers_route_spec.rb
1354
1355
  - spec/routing/route_spec.rb
@@ -1373,6 +1374,7 @@ test_files:
1373
1374
  - spec/views/collections/_form.html.erb_spec.rb
1374
1375
  - spec/views/collections/_show_descriptions.html.erb_spec.rb
1375
1376
  - spec/views/dashboard/index_spec.rb
1377
+ - spec/views/generic_file/_permission_form.html.erb_spec.rb
1376
1378
  - spec/views/generic_file/edit.html.erb_spec.rb
1377
1379
  - spec/views/generic_file/show.html.erb_spec.rb
1378
1380
  - spec/views/generic_file/stats.html.erb_spec.rb