sufia 4.2.0 → 4.3.1

Sign up to get free protection for your applications and to get access to all the features.
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