voluntary_music_metadata_enrichment 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +23 -0
  4. data/app/assets/javascripts/voluntary_music_metadata_enrichment/application.js +5 -0
  5. data/app/assets/javascripts/voluntary_music_metadata_enrichment/groups/show.js.coffee +14 -0
  6. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/index.js.coffee +19 -0
  7. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_releases/index_view.js.coffee +32 -0
  8. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_releases/new_view.js.coffee +31 -0
  9. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_tracks/index_view.js.coffee +32 -0
  10. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/year_in_review_tracks/new_view.js.coffee +31 -0
  11. data/app/assets/javascripts/voluntary_music_metadata_enrichment/library/years_in_review/index_view.js.coffee +36 -0
  12. data/app/assets/javascripts/voluntary_music_metadata_enrichment/tracks/show.js.coffee +2 -0
  13. data/app/assets/javascripts/voluntary_music_metadata_enrichment/videos/metadata.js.coffee +6 -0
  14. data/app/controllers/concerns/music_metadata_enrichment/artist_confirmation.rb +207 -0
  15. data/app/controllers/concerns/music_metadata_enrichment/base_controller.rb +17 -0
  16. data/app/controllers/concerns/music_metadata_enrichment/track_confirmation.rb +57 -0
  17. data/app/controllers/library/music/artists_controller.rb +26 -0
  18. data/app/controllers/library/music/year_in_review_releases_controller.rb +110 -0
  19. data/app/controllers/library/music/year_in_review_tracks_controller.rb +110 -0
  20. data/app/controllers/library/music/years_in_review_controller.rb +41 -0
  21. data/app/controllers/library/music_controller.rb +14 -0
  22. data/app/controllers/music_metadata_enrichment/application_controller.rb +11 -0
  23. data/app/controllers/music_metadata_enrichment/artists_controller.rb +93 -0
  24. data/app/controllers/music_metadata_enrichment/group_artist_connections_controller.rb +63 -0
  25. data/app/controllers/music_metadata_enrichment/groups_controller.rb +40 -0
  26. data/app/controllers/music_metadata_enrichment/releases_controller.rb +207 -0
  27. data/app/controllers/music_metadata_enrichment/tracks_controller.rb +82 -0
  28. data/app/controllers/music_metadata_enrichment/videos_controller.rb +133 -0
  29. data/app/controllers/product/music_metadata_enrichment_controller.rb +6 -0
  30. data/app/models/concerns/year_in_review_music_entry.rb +12 -0
  31. data/app/models/music_artist.rb +155 -0
  32. data/app/models/music_library_artist.rb +10 -0
  33. data/app/models/music_metadata_enrichment/group.rb +136 -0
  34. data/app/models/music_metadata_enrichment/group_artist_connection.rb +15 -0
  35. data/app/models/music_release.rb +278 -0
  36. data/app/models/music_track.rb +255 -0
  37. data/app/models/music_video.rb +87 -0
  38. data/app/models/product/music_metadata_enrichment.rb +2 -0
  39. data/app/models/year_in_review_music.rb +233 -0
  40. data/app/models/year_in_review_music_release.rb +24 -0
  41. data/app/models/year_in_review_music_track.rb +28 -0
  42. data/app/views/library/music/artists/destroy.js.erb +1 -0
  43. data/app/views/library/music/index.html.erb +46 -0
  44. data/app/views/library/music/year_in_review_releases/_collection.html.erb +51 -0
  45. data/app/views/library/music/year_in_review_releases/_form.html.erb +18 -0
  46. data/app/views/library/music/year_in_review_releases/_multiple_form.html.erb +44 -0
  47. data/app/views/library/music/year_in_review_releases/create.js.erb +11 -0
  48. data/app/views/library/music/year_in_review_releases/destroy.js.erb +2 -0
  49. data/app/views/library/music/year_in_review_releases/export.html.erb +13 -0
  50. data/app/views/library/music/year_in_review_releases/index.html.erb +22 -0
  51. data/app/views/library/music/year_in_review_releases/multiple_new.html.erb +1 -0
  52. data/app/views/library/music/year_in_review_releases/multiple_new.js.erb +7 -0
  53. data/app/views/library/music/year_in_review_releases/new.html.erb +1 -0
  54. data/app/views/library/music/year_in_review_tracks/_collection.html.erb +52 -0
  55. data/app/views/library/music/year_in_review_tracks/_form.html.erb +18 -0
  56. data/app/views/library/music/year_in_review_tracks/_multiple_form.html.erb +46 -0
  57. data/app/views/library/music/year_in_review_tracks/create.js.erb +11 -0
  58. data/app/views/library/music/year_in_review_tracks/destroy.js.erb +2 -0
  59. data/app/views/library/music/year_in_review_tracks/export.html.erb +13 -0
  60. data/app/views/library/music/year_in_review_tracks/index.html.erb +22 -0
  61. data/app/views/library/music/year_in_review_tracks/multiple_new.html.erb +1 -0
  62. data/app/views/library/music/year_in_review_tracks/multiple_new.js.erb +7 -0
  63. data/app/views/library/music/year_in_review_tracks/new.html.erb +1 -0
  64. data/app/views/library/music/years_in_review/_collection.html.erb +52 -0
  65. data/app/views/library/music/years_in_review/create.js.erb +6 -0
  66. data/app/views/library/music/years_in_review/index.html.erb +18 -0
  67. data/app/views/library/music/years_in_review/show.html.erb +20 -0
  68. data/app/views/music_metadata_enrichment/artists/_collection.html.erb +68 -0
  69. data/app/views/music_metadata_enrichment/artists/by_name.html.erb +3 -0
  70. data/app/views/music_metadata_enrichment/artists/index.html.erb +7 -0
  71. data/app/views/music_metadata_enrichment/artists/name_confirmation.html.erb +1 -0
  72. data/app/views/music_metadata_enrichment/artists/new.html.erb +1 -0
  73. data/app/views/music_metadata_enrichment/artists/show.html.erb +24 -0
  74. data/app/views/music_metadata_enrichment/group_artist_connections/import.html.erb +6 -0
  75. data/app/views/music_metadata_enrichment/group_artist_connections/index.html.erb +0 -0
  76. data/app/views/music_metadata_enrichment/group_artist_connections/name_confirmation.html.erb +1 -0
  77. data/app/views/music_metadata_enrichment/group_artist_connections/new.html.erb +1 -0
  78. data/app/views/music_metadata_enrichment/groups/index.html.erb +0 -0
  79. data/app/views/music_metadata_enrichment/groups/new.html.erb +7 -0
  80. data/app/views/music_metadata_enrichment/groups/show.html.erb +31 -0
  81. data/app/views/music_metadata_enrichment/releases/_collection.html.erb +53 -0
  82. data/app/views/music_metadata_enrichment/releases/announce.html.erb +10 -0
  83. data/app/views/music_metadata_enrichment/releases/artist_confirmation.html.erb +1 -0
  84. data/app/views/music_metadata_enrichment/releases/by_name.html.erb +24 -0
  85. data/app/views/music_metadata_enrichment/releases/export.html.erb +17 -0
  86. data/app/views/music_metadata_enrichment/releases/index.html.erb +8 -0
  87. data/app/views/music_metadata_enrichment/releases/name.html.erb +9 -0
  88. data/app/views/music_metadata_enrichment/releases/name_confirmation.html.erb +33 -0
  89. data/app/views/music_metadata_enrichment/releases/new.html.erb +1 -0
  90. data/app/views/music_metadata_enrichment/releases/show.html.erb +50 -0
  91. data/app/views/music_metadata_enrichment/shared/_artist_confirmation_form.html.erb +41 -0
  92. data/app/views/music_metadata_enrichment/shared/_new_artist_form.html.erb +10 -0
  93. data/app/views/music_metadata_enrichment/shared/_new_track_form.html.erb +9 -0
  94. data/app/views/music_metadata_enrichment/shared/_track_confirmation_form.html.erb +29 -0
  95. data/app/views/music_metadata_enrichment/tracks/_spotify_track_player.html.erb +3 -0
  96. data/app/views/music_metadata_enrichment/tracks/artist_confirmation.html.erb +1 -0
  97. data/app/views/music_metadata_enrichment/tracks/by_name.html.erb +26 -0
  98. data/app/views/music_metadata_enrichment/tracks/index.html.erb +8 -0
  99. data/app/views/music_metadata_enrichment/tracks/name.html.erb +1 -0
  100. data/app/views/music_metadata_enrichment/tracks/name_confirmation.html.erb +1 -0
  101. data/app/views/music_metadata_enrichment/tracks/new.html.erb +1 -0
  102. data/app/views/music_metadata_enrichment/tracks/show.html.erb +21 -0
  103. data/app/views/music_metadata_enrichment/videos/_collection.html.erb +25 -0
  104. data/app/views/music_metadata_enrichment/videos/artist_confirmation.html.erb +1 -0
  105. data/app/views/music_metadata_enrichment/videos/by_name.html.erb +3 -0
  106. data/app/views/music_metadata_enrichment/videos/index.html.erb +8 -0
  107. data/app/views/music_metadata_enrichment/videos/metadata.html.erb +25 -0
  108. data/app/views/music_metadata_enrichment/videos/new.html.erb +1 -0
  109. data/app/views/music_metadata_enrichment/videos/show.html.erb +9 -0
  110. data/app/views/music_metadata_enrichment/videos/track_confirmation.html.erb +1 -0
  111. data/app/views/music_metadata_enrichment/videos/track_name.html.erb +1 -0
  112. data/app/views/product/music_metadata_enrichment/index.html.erb +6 -0
  113. data/config/locales/en.yml +16 -0
  114. data/config/locales/resources/music_artists/en.yml +43 -0
  115. data/config/locales/resources/music_library/en.yml +8 -0
  116. data/config/locales/resources/music_metadata_enrichment_group_artist_connections/en.yml +19 -0
  117. data/config/locales/resources/music_metadata_enrichment_groups/en.yml +25 -0
  118. data/config/locales/resources/music_releases/en.yml +67 -0
  119. data/config/locales/resources/music_tracks/en.yml +45 -0
  120. data/config/locales/resources/music_videos/en.yml +56 -0
  121. data/config/locales/resources/year_in_review_music_releases/en.yml +19 -0
  122. data/config/locales/resources/year_in_review_music_tracks/en.yml +19 -0
  123. data/config/locales/resources/years_in_review_music/en.yml +21 -0
  124. data/config/main_music_metadata_enrichment_navigation.rb +3 -0
  125. data/config/routes.rb +121 -0
  126. data/db/migrate/20150106183434_add_product_music_metadata_enrichment.rb +96 -0
  127. data/db/migrate/20150120091801_create_music_metadata_enrichment_groups.rb +28 -0
  128. data/db/migrate/20150120221419_create_music_library_artists.rb +12 -0
  129. data/db/migrate/20150123082224_year_in_review_music_entries.rb +53 -0
  130. data/lib/tasks/voluntary_music_metadata_enrichment_tasks.rake +4 -0
  131. data/lib/voluntary_music_metadata_enrichment/ability.rb +27 -0
  132. data/lib/voluntary_music_metadata_enrichment/concerns/model/user/has_music_library.rb +101 -0
  133. data/lib/voluntary_music_metadata_enrichment/engine.rb +20 -0
  134. data/lib/voluntary_music_metadata_enrichment/navigation.rb +49 -0
  135. data/lib/voluntary_music_metadata_enrichment/version.rb +3 -0
  136. data/lib/voluntary_music_metadata_enrichment.rb +13 -0
  137. metadata +525 -0
@@ -0,0 +1,110 @@
1
+ class Library::Music::YearInReviewReleasesController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+
5
+ before_action :find_resource, only: [:move, :destroy]
6
+ authorize_resource class: 'YearInReviewMusicRelease'
7
+
8
+ def index
9
+ @user = User.find(params[:user_id])
10
+ find_year_in_review
11
+ get_year_in_review_releases
12
+
13
+ render partial: 'library/music/year_in_review_releases/collection' if request.xhr?
14
+ end
15
+
16
+ def new
17
+ build_resource
18
+ render layout: false
19
+ end
20
+
21
+ def multiple_new
22
+ @user = current_user
23
+ find_year_in_review
24
+ @releases = current_user.music_releases.for_year_in_review(@year_in_review)
25
+ @releases = @releases.where('music_releases.id > ?', params[:last_id]) if params[:last_id].present?
26
+ @releases_left = @releases.count
27
+ @releases = @releases.order('music_releases.id ASC').limit(10)
28
+ params[:last_id] = params[:commit] == I18n.t('general.close') || @releases.none? ? nil : @releases.last.id
29
+
30
+ if params[:commit] != I18n.t('general.close') && params[:year_in_review_music_releases].present?
31
+ params[:year_in_review_music_releases].each do |release_id, checked|
32
+ next unless checked == '1'
33
+
34
+ @year_in_review_release = @year_in_review.releases.create(release_id: release_id)
35
+
36
+ next unless @year_in_review_release.persisted?
37
+
38
+ MusicLibraryArtist.create(user_id: current_user.id, artist_id: @year_in_review_release.artist_id)
39
+ end
40
+ end
41
+
42
+ if params[:commit] == I18n.t('general.close') || @releases.none?
43
+ get_year_in_review_releases
44
+ params[:user_id] = current_user.id
45
+ end
46
+
47
+ render layout: false
48
+ end
49
+
50
+ def create
51
+ build_resource
52
+
53
+ if @year_in_review_release.save
54
+ MusicLibraryArtist.create(user_id: current_user.id, artist_id: @year_in_review_release.artist_id)
55
+ @notice = I18n.t('year_in_review_music_releases.create.successful')
56
+ get_year_in_review_releases
57
+ end
58
+
59
+ render layout: false
60
+ end
61
+
62
+ def move
63
+ @year_in_review_release.insert_at(params[:position].to_i)
64
+
65
+ render nothing: true
66
+ end
67
+
68
+ def destroy
69
+ @year_in_review_release.destroy!
70
+ @user = current_user
71
+ params[:user_id], params[:year] = current_user.id, @year_in_review_release.year
72
+ find_year_in_review
73
+ get_year_in_review_releases
74
+
75
+ render layout: false
76
+ end
77
+
78
+ def export
79
+ @user = current_user
80
+ find_year_in_review
81
+ get_year_in_review_releases
82
+
83
+ render layout: false
84
+ end
85
+
86
+ def resource
87
+ @year_in_review_release
88
+ end
89
+
90
+ private
91
+
92
+ def find_year_in_review
93
+ @year_in_review = @user.years_in_review_music.where(year: params[:year]).first
94
+ end
95
+
96
+ def build_resource
97
+ @user = current_user
98
+ find_year_in_review
99
+ params[:year_in_review_music_release] ||= {}
100
+ @year_in_review_release = @year_in_review.releases.new(release_id: params[:year_in_review_music_release][:release_id])
101
+ end
102
+
103
+ def find_resource
104
+ @year_in_review_release = YearInReviewMusicRelease.find(params[:id])
105
+ end
106
+
107
+ def get_year_in_review_releases
108
+ @year_in_review_releases = @year_in_review.releases.order('position ASC')
109
+ end
110
+ end
@@ -0,0 +1,110 @@
1
+ class Library::Music::YearInReviewTracksController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+
5
+ before_action :find_resource, only: [:move, :destroy]
6
+ authorize_resource class: 'YearInReviewMusicTrack'
7
+
8
+ def index
9
+ @user = User.find(params[:user_id])
10
+ find_year_in_review
11
+ get_year_in_review_tracks
12
+
13
+ render partial: 'library/music/year_in_review_tracks/collection' if request.xhr?
14
+ end
15
+
16
+ def new
17
+ build_resource
18
+ render layout: false
19
+ end
20
+
21
+ def multiple_new
22
+ @user = current_user
23
+ find_year_in_review
24
+ @tracks = current_user.music_tracks.for_year_in_review(@year_in_review)
25
+ @tracks = @tracks.where('music_tracks.id > ?', params[:last_id]) if params[:last_id].present?
26
+ @tracks_left = @tracks.count
27
+ @tracks = @tracks.order('music_tracks.id ASC').limit(10)
28
+ params[:last_id] = params[:commit] == I18n.t('general.close') || @tracks.none? ? nil : @tracks.last.id
29
+
30
+ if params[:commit] != I18n.t('general.close') && params[:year_in_review_music_tracks].present?
31
+ params[:year_in_review_music_tracks].each do |track_id, checked|
32
+ next unless checked == '1'
33
+
34
+ @year_in_review_track = @year_in_review.tracks.create(track_id: track_id)
35
+
36
+ next unless @year_in_review_track.persisted?
37
+
38
+ MusicLibraryArtist.create(user_id: current_user.id, artist_id: @year_in_review_track.artist_id)
39
+ end
40
+ end
41
+
42
+ if params[:commit] == I18n.t('general.close') || @tracks.none?
43
+ get_year_in_review_tracks
44
+ params[:user_id] = current_user.id
45
+ end
46
+
47
+ render layout: false
48
+ end
49
+
50
+ def create
51
+ build_resource
52
+
53
+ if @year_in_review_track.save
54
+ MusicLibraryArtist.create(user_id: current_user.id, artist_id: @year_in_review_track.artist_id)
55
+ @notice = I18n.t('year_in_review_music_tracks.create.successful')
56
+ get_year_in_review_tracks
57
+ end
58
+
59
+ render layout: false
60
+ end
61
+
62
+ def move
63
+ @year_in_review_track.insert_at(params[:position].to_i)
64
+
65
+ render nothing: true
66
+ end
67
+
68
+ def destroy
69
+ @year_in_review_track.destroy!
70
+ @user = current_user
71
+ params[:user_id], params[:year] = current_user.id, @year_in_review_track.year
72
+ find_year_in_review
73
+ get_year_in_review_tracks
74
+
75
+ render layout: false
76
+ end
77
+
78
+ def export
79
+ @user = current_user
80
+ find_year_in_review
81
+ get_year_in_review_tracks
82
+
83
+ render layout: false
84
+ end
85
+
86
+ def resource
87
+ @year_in_review_track
88
+ end
89
+
90
+ private
91
+
92
+ def find_year_in_review
93
+ @year_in_review = @user.years_in_review_music.where(year: params[:year]).first
94
+ end
95
+
96
+ def build_resource
97
+ @user = current_user
98
+ find_year_in_review
99
+ params[:year_in_review_music_track] ||= {}
100
+ @year_in_review_track = @year_in_review.tracks.new(track_id: params[:year_in_review_music_track][:track_id])
101
+ end
102
+
103
+ def find_resource
104
+ @year_in_review_track = YearInReviewMusicTrack.find(params[:id])
105
+ end
106
+
107
+ def get_year_in_review_tracks
108
+ @year_in_review_tracks = @year_in_review.tracks.order('position ASC')
109
+ end
110
+ end
@@ -0,0 +1,41 @@
1
+ class Library::Music::YearsInReviewController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+
5
+ authorize_resource class: 'YearInReviewMusic'
6
+
7
+ def index
8
+ get_years_in_review
9
+ build_year_in_review if user_signed_in?
10
+
11
+ render layout: false if request.xhr?
12
+ end
13
+
14
+ def create
15
+ build_year_in_review
16
+ get_years_in_review
17
+ @notice = I18n.t('years_in_review_music.create.successful') if @year_in_review.save
18
+ render layout: false
19
+ end
20
+
21
+ def show
22
+ @user = User.find(params[:user_id])
23
+ @year_in_review = @user.years_in_review_music.where(year: params[:year]).first
24
+ end
25
+
26
+ def resource
27
+ @year_in_review
28
+ end
29
+
30
+ private
31
+
32
+ def build_year_in_review
33
+ params[:year_in_review] ||= {}
34
+ @year_in_review = current_user.years_in_review_music.new(year: params[:year_in_review][:year])
35
+ end
36
+
37
+ def get_years_in_review
38
+ @user = User.find(params[:user_id])
39
+ @years_in_review = @user.years_in_review_music.order('year DESC').paginate(per_page: 10, page: params[:page] || 1)
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ class Library::MusicController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+
5
+ def index
6
+ @year = Time.now.strftime('%Y')
7
+ @user = User.find(params[:user_id])
8
+ @releases = @user.music_releases.released_in_year(@year).order('released_at DESC')
9
+ end
10
+
11
+ def resource
12
+ nil
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class MusicMetadataEnrichment::ApplicationController < ::ApplicationController
2
+ protected
3
+
4
+ def voluntary_application_stylesheets
5
+ ['voluntary/application', 'application']
6
+ end
7
+
8
+ def voluntary_application_javascripts
9
+ ['voluntary/application', 'voluntary_music_metadata_enrichment/application', 'application']
10
+ end
11
+ end
@@ -0,0 +1,93 @@
1
+ class MusicMetadataEnrichment::ArtistsController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+ include ::MusicMetadataEnrichment::ArtistConfirmation
5
+
6
+ authorize_resource class: 'MusicArtist', except: [:by_name]
7
+
8
+ before_action :delete_user_id_which_is_not_from_current_user
9
+
10
+ def index
11
+ if request.xhr?
12
+ if request.original_url.match('/groups/') && params[:id]
13
+ @group = MusicMetadataEnrichment::Group.find(params[:id])
14
+ @artists = @group.artists
15
+ elsif params[:user_id].present?
16
+ @artists = User.find(params[:user_id]).music_artists
17
+ end
18
+
19
+ @artists = @artists.order('name ASC').paginate(per_page: 10, page: params[:page] || 1)
20
+
21
+ if request.original_url.match('/groups/') && params[:id] && @artists.any?
22
+ @group_artist_connections = @group.artist_connections.where('music_metadata_enrichment_group_artist_connections.artist_id IN(?)', @artists.map(&:id))
23
+
24
+ if user_signed_in?
25
+ @group_artist_connection_likes = current_user.likes_or_dislikes.for_targets('MusicMetadataEnrichment::GroupArtistConnection', @group_artist_connections.map(&:id)).index_by(&:target_id)
26
+ end
27
+
28
+ @group_artist_connections = @group_artist_connections.index_by(&:artist_id)
29
+ elsif params[:user_id].present? && current_user.try(:id) == params[:user_id].to_i && @artists.any?
30
+ @music_library_artists = current_user.music_library_artists.where('music_library_artists.artist_id IN(?)', @artists.map(&:id)).index_by(&:artist_id)
31
+ end
32
+
33
+ render partial: 'music_metadata_enrichment/artists/collection', layout: false, locals: { title: I18n.t("music_metadata_enrichment_group_artist_connections.index.empty_collection"), paginate: true }
34
+ end
35
+ end
36
+
37
+ def autocomplete
38
+ render json: (
39
+ MusicArtist.select('id, name').where("name LIKE ?", "#{params[:term]}%").order(:name).limit(10).map{|a| { id: a.id, value: a.name } }
40
+ ), root: false
41
+ end
42
+
43
+ def new
44
+ build_artist
45
+ end
46
+
47
+ def name_confirmation
48
+ confirm_artist('new_artist')
49
+ end
50
+
51
+ def create
52
+ params[:music_artist] ||= {}
53
+ name_and_mbid = params[:music_artist].delete(:name_and_mbid)
54
+ create_artist('new_artist', name_and_mbid)
55
+ end
56
+
57
+ def show
58
+ @artist = MusicArtist.find(params[:id])
59
+ get_variables_for_show
60
+ end
61
+
62
+ def by_name
63
+ if params[:name].blank?
64
+ flash[:alert] = I18n.t('music_artists.by_name.name_blank')
65
+ redirect_to music_artists_path and return
66
+ end
67
+
68
+ @artists = MusicArtist.where("LOWER(name) = ?", params[:name].downcase.strip)
69
+ @artist = @artists.first if params[:page].blank? && @artists.count == 1
70
+
71
+ if @artist
72
+ get_variables_for_show
73
+ render :show
74
+ else
75
+ @artists = MusicArtist.name_like(params[:name]) if @artists.nil? || @artists.count == 0
76
+ @artists = @artists.paginate(per_page: 10, page: params[:page] || 1)
77
+ end
78
+ end
79
+
80
+ def resource
81
+ @artist
82
+ end
83
+
84
+ private
85
+
86
+ def delete_user_id_which_is_not_from_current_user
87
+ params.delete(:user_id) if action_name != 'index' && params[:user_id].present? && params[:user_id].to_i != current_user.try(:id)
88
+ end
89
+
90
+ def get_variables_for_show
91
+ @releases = @artist.releases.order('released_at ASC')
92
+ end
93
+ end
@@ -0,0 +1,63 @@
1
+ class MusicMetadataEnrichment::GroupArtistConnectionsController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+ include ::MusicMetadataEnrichment::ArtistConfirmation
5
+
6
+ authorize_resource class: 'MusicMetadataEnrichment::GroupArtistConnection'
7
+
8
+ def import
9
+ @group = MusicMetadataEnrichment::Group.find(params[:group_id])
10
+
11
+ if params[:music_metadata_enrichment_group].present?
12
+ @group.artist_connections_text = params[:music_metadata_enrichment_group][:artist_connections_text]
13
+ artist_names_without_mbid = @group.import_artist_connections
14
+
15
+ if artist_names_without_mbid.any?
16
+ flash[:notice] = I18n.t(
17
+ 'music_metadata_enrichment_group_artist_connections.import.success_with_missing_artist_mbids', artist_names: artist_names_without_mbid.join(', ')
18
+ )
19
+ else
20
+ flash[:notice] = I18n.t('music_metadata_enrichment_group_artist_connections.import.success')
21
+ end
22
+
23
+ redirect_to music_group_path(@group.id)
24
+ end
25
+ end
26
+
27
+ def new
28
+ build_artist
29
+ end
30
+
31
+ def name_confirmation
32
+ confirm_artist('new_group_artist_connection')
33
+ end
34
+
35
+ def select_artist
36
+ artist_selection('new_group_artist_connection')
37
+ end
38
+
39
+ def creation
40
+ if MusicMetadataEnrichment::GroupArtistConnection.where(
41
+ group_id: params[:group_artist_connection][:group_id], artist_id: params[:group_artist_connection][:artist_id]
42
+ ).any?
43
+ flash[:alert] = I18n.t('music_metadata_enrichment_group_artist_connections.creation.already_created')
44
+ redirect_to music_group_path(params[:group_artist_connection][:group_id])
45
+ else
46
+ @group_artist_connection = MusicMetadataEnrichment::GroupArtistConnection.new(
47
+ group_id: params[:group_artist_connection][:group_id], artist_id: params[:group_artist_connection][:artist_id]
48
+ )
49
+
50
+ if @group_artist_connection.save
51
+ flash[:notice] = I18n.t('music_metadata_enrichment_group_artist_connections.creation.success')
52
+ else
53
+ flash[:alert] = @group_artist_connection.errors.full_messages.join('. ')
54
+ end
55
+
56
+ redirect_to music_group_path(@group_artist_connection.group_id)
57
+ end
58
+ end
59
+
60
+ def resource
61
+ @group_artist_connection
62
+ end
63
+ end
@@ -0,0 +1,40 @@
1
+ class MusicMetadataEnrichment::GroupsController < ::MusicMetadataEnrichment::ApplicationController
2
+ include ::MusicMetadataEnrichment::BaseController
3
+ include Applicat::Mvc::Controller::Resource
4
+
5
+ authorize_resource
6
+
7
+ def index
8
+ end
9
+
10
+ def new
11
+ build_group
12
+ end
13
+
14
+ def create
15
+ build_group
16
+
17
+ if @group.save
18
+ flash[:notice] = I18n.t('music_metadata_enrichment_groups.create.successful')
19
+ redirect_to music_group_path(@group)
20
+ else
21
+ render :new
22
+ end
23
+ end
24
+
25
+ def show
26
+ @group = MusicMetadataEnrichment::Group.find(params[:id])
27
+ @year = Time.now.strftime('%Y')
28
+ @releases = @group.releases.released_in_year(@year).order('released_at DESC')
29
+ end
30
+
31
+ def resource
32
+ @group
33
+ end
34
+
35
+ private
36
+
37
+ def build_group
38
+ @group = MusicMetadataEnrichment::Group.new(params[:music_metadata_enrichment_group])
39
+ end
40
+ end
@@ -0,0 +1,207 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class MusicMetadataEnrichment::ReleasesController < ::MusicMetadataEnrichment::ApplicationController
3
+ include ::MusicMetadataEnrichment::BaseController
4
+ include Applicat::Mvc::Controller::Resource
5
+ include ::MusicMetadataEnrichment::ArtistConfirmation
6
+
7
+ authorize_resource class: 'MusicRelease', except: [:by_name, :export]
8
+
9
+ def index
10
+ if request.xhr?
11
+ @year = params[:year]
12
+
13
+ if request.original_url.match('/groups/') && params[:id]
14
+ @group = MusicMetadataEnrichment::Group.find(params[:id])
15
+ @releases = @group.releases
16
+ elsif params[:user_id].present?
17
+ @user = User.find(params[:user_id])
18
+ @releases = @user.music_releases
19
+ end
20
+
21
+ @releases = @releases.released_in_year(params[:year]).order('released_at DESC').paginate(per_page: 25, page: params[:page] || 1)
22
+
23
+ render partial: 'music_metadata_enrichment/releases/collection', locals: { paginate: true, with_artist: true }, layout: false
24
+ end
25
+ end
26
+
27
+ def autocomplete
28
+ artist = MusicArtist.find(params[:artist_id])
29
+ render json: (
30
+ artist.releases.select('id, name').where("name LIKE ?", "#{params[:term]}%").order(:name).limit(10).map{|r| { id: r.id, value: r.name } }
31
+ ), root: false
32
+ end
33
+
34
+ def new
35
+ if params[:artist_id].present?
36
+ redirect_to name_music_releases_path(music_release: { artist_id: params[:artist_id]})
37
+ else
38
+ build_artist
39
+ end
40
+ end
41
+
42
+ def artist_confirmation
43
+ confirm_artist('new_release')
44
+ end
45
+
46
+ def select_artist
47
+ artist_selection('new_release')
48
+ end
49
+
50
+ def name
51
+ build_release
52
+ end
53
+
54
+ def name_confirmation
55
+ build_release
56
+ @release_groups = @release.groups
57
+
58
+ if @release_groups.none? && @release.groups_without_limitation.none?
59
+ flash[:notice] = I18n.t('music_releases.name_confirmation.release_not_found')
60
+ redirect_to announce_music_releases_path(
61
+ (params[:group_id].present? ? {group_id: params[:group_id]} : {}).merge(
62
+ music_release: { artist_id: params[:music_release][:artist_id], name: params[:music_release][:name] }
63
+ )
64
+ )
65
+ end
66
+ end
67
+
68
+ def create
69
+ params[:music_release] ||= {}
70
+ name_and_mbid = params[:music_release].delete(:name_and_mbid)
71
+ artist = MusicArtist.find(params[:music_release][:artist_id])
72
+ release = MusicRelease.where(artist_id: artist.id, name: name_and_mbid.split(';').first).first
73
+
74
+ if release
75
+ flash[:alert] = I18n.t('music_releases.create.release_already_imported')
76
+ else
77
+ release = MusicRelease.create(
78
+ artist_id: params[:music_release][:artist_id], artist_name: artist.name,
79
+ name: name_and_mbid.split(';').first
80
+ )
81
+
82
+ if release.valid?
83
+ flash[:notice] = I18n.t('music_releases.create.scheduled_release_for_import')
84
+ else
85
+ flash[:alert] = release.errors.full_messages.join('. ')
86
+ end
87
+ end
88
+
89
+ if params[:group_id].present?
90
+ redirect_to music_group_path(params[:group_id])
91
+ else
92
+ redirect_to music_path
93
+ end
94
+ end
95
+
96
+ def announce
97
+ build_release
98
+
99
+ if MusicRelease.where(artist_id: @release.artist_id, name: @release.name).first
100
+ flash[:alert] = I18n.t('music_releases.create.release_already_imported')
101
+
102
+ if params[:group_id].present?
103
+ redirect_to music_group_path(params[:group_id])
104
+ else
105
+ redirect_to music_path
106
+ end
107
+ elsif @release.groups.any?
108
+ flash[:notice] = I18n.t('music_releases.announce.please_select_existing_release')
109
+ redirect_to name_confirmation_music_releases_path(
110
+ (params[:group_id].present? ? {group_id: params[:group_id]} : {}).merge(
111
+ music_release: { artist_id: params[:music_release][:artist_id], name: params[:music_release][:name] }
112
+ )
113
+ )
114
+ end
115
+ end
116
+
117
+ def create_announcement
118
+ build_release
119
+
120
+ if MusicRelease.where(artist_id: @release.artist_id, name: @release.name).first
121
+ flash[:alert] = I18n.t('music_releases.create.release_already_imported')
122
+
123
+ if params[:group_id].present?
124
+ redirect_to music_group_path(params[:group_id])
125
+ else
126
+ redirect_to music_path
127
+ end
128
+ elsif @release.groups.any?
129
+ flash[:notice] = I18n.t('music_releases.announce.please_select_existing_release')
130
+ redirect_to name_confirmation_music_releases_path(
131
+ (params[:group_id].present? ? {group_id: params[:group_id]} : {}).merge(
132
+ music_release: { artist_id: params[:music_release][:artist_id], name: params[:music_release][:name] }
133
+ )
134
+ )
135
+ elsif @release.future_release_date.blank? || !@release.valid?
136
+ if @release.future_release_date.blank?
137
+ @release.errors[:future_release_date] << I18n.t('errors.messages.blank')
138
+ end
139
+
140
+ render :announce
141
+ else
142
+ @release.save!
143
+ flash[:notice] = I18n.t('music_releases.create_announcement.success')
144
+
145
+ if params[:group_id].present?
146
+ redirect_to music_group_path(params[:group_id])
147
+ else
148
+ redirect_to music_path
149
+ end
150
+ end
151
+ end
152
+
153
+ def show
154
+ @release = MusicRelease.find(params[:id])
155
+ get_variables_for_show
156
+ end
157
+
158
+ def by_name
159
+ if params[:artist_name].blank? || params[:name].blank?
160
+ flash[:alert] = I18n.t('music_releases.by_name.artist_name_or_name_blank')
161
+ redirect_to music_releases_path(artist_name: params[:artist_name], name: params[:name]) and return
162
+ end
163
+
164
+ @releases = MusicRelease.by_artist_and_name(params[:artist_name], params[:name])
165
+ @release = @releases.first if params[:page].blank? && @releases.count == 1
166
+
167
+ if @release
168
+ get_variables_for_show
169
+ render :show
170
+ else
171
+ @releases = MusicRelease.artist_and_name_like(params[:artist_name], params[:name]) if @releases.nil? || @releases.count == 0
172
+ @releases = @releases.paginate(per_page: 10, page: params[:page] || 1)
173
+ end
174
+ end
175
+
176
+ def export
177
+ @group = MusicMetadataEnrichment::Group.find(params[:id])
178
+ @current_releases = @group.releases.released_in_year(Time.now.strftime('%Y')).order('released_at ASC')
179
+ @future_releases = @group.releases.released_in_year(Time.now.strftime('%Y').to_i + 1).order('released_at ASC')
180
+
181
+ render layout: false
182
+ end
183
+
184
+ def resource
185
+ @release
186
+ end
187
+
188
+ private
189
+
190
+ def build_release
191
+ params[:music_release] ||= {}
192
+ @release = MusicRelease.new
193
+ @release.name = params[:music_release][:name]
194
+ @release.mbid = params[:music_release][:mbid] unless ['announce', 'create_announcement'].include? action_name
195
+ @release.artist_id = params[:music_release][:artist_id]
196
+ @release.future_release_date = params[:music_release][:future_release_date] if ['announce', 'create_announcement'].include? action_name
197
+ @release.user_id = current_user.id
198
+ end
199
+
200
+ def get_variables_for_show
201
+ if @release.name == '[Bonus Tracks]'
202
+ @tracks = @release.tracks.order('released_at ASC')
203
+ else
204
+ @tracks = @release.tracks.order('nr ASC')
205
+ end
206
+ end
207
+ end