elabs 2.0.0 → 3.0.0

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +83 -0
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +9 -2
  6. data/ROADMAP.md +6 -11
  7. data/app/assets/stylesheets/elabs/_icons.scss +8 -4
  8. data/app/assets/stylesheets/elabs/app/_badges.scss +11 -0
  9. data/app/assets/stylesheets/elabs/app/_layout.scss +10 -2
  10. data/app/assets/stylesheets/elabs/app/_users.scss +7 -0
  11. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +2 -1
  12. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +4 -0
  13. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +17 -5
  14. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +16 -15
  15. data/app/assets/stylesheets/elabs/lib/knacss/_knacss.scss +1 -1
  16. data/app/assets/stylesheets/elabs/style.scss +1 -0
  17. data/app/controllers/elabs/acts_controller.rb +1 -1
  18. data/app/controllers/elabs/admin/admin_content_application_controller.rb +13 -6
  19. data/app/controllers/elabs/admin/languages_controller.rb +4 -4
  20. data/app/controllers/elabs/admin/licenses_controller.rb +2 -2
  21. data/app/controllers/elabs/admin/tags_controller.rb +3 -3
  22. data/app/controllers/elabs/concerns/elabs_controller.rb +1 -0
  23. data/app/controllers/elabs/content_application_controller.rb +1 -1
  24. data/app/controllers/elabs/elabs_application_controller.rb +0 -73
  25. data/app/controllers/elabs/elabs_public_controller.rb +80 -0
  26. data/app/controllers/elabs/languages_controller.rb +3 -3
  27. data/app/controllers/elabs/licenses_controller.rb +3 -3
  28. data/app/controllers/elabs/member/member_content_application_controller.rb +24 -14
  29. data/app/controllers/elabs/member/notifications_controller.rb +30 -0
  30. data/app/controllers/elabs/member/preferences_controller.rb +1 -1
  31. data/app/controllers/elabs/member/users_controller.rb +8 -5
  32. data/app/controllers/elabs/reports_controller.rb +2 -2
  33. data/app/controllers/elabs/tags_controller.rb +2 -2
  34. data/app/controllers/elabs/users_controller.rb +3 -3
  35. data/app/helpers/elabs/admin_content_helper.rb +8 -24
  36. data/app/helpers/elabs/application_helper.rb +1 -1
  37. data/app/helpers/elabs/content_helper.rb +39 -0
  38. data/app/helpers/elabs/form_helper.rb +22 -10
  39. data/app/helpers/elabs/member_content_helper.rb +5 -22
  40. data/app/helpers/elabs/notification_helper.rb +69 -0
  41. data/app/helpers/elabs/thumbnails_helper.rb +15 -0
  42. data/app/helpers/elabs/time_helper.rb +7 -0
  43. data/app/models/elabs/application_content_record.rb +1 -0
  44. data/app/models/elabs/application_record.rb +2 -0
  45. data/app/models/elabs/comment.rb +14 -0
  46. data/app/models/elabs/concerns/actable_entity.rb +0 -12
  47. data/app/models/elabs/concerns/content_entity.rb +23 -0
  48. data/app/models/elabs/concerns/notifiable_entity.rb +46 -0
  49. data/app/models/elabs/notification.rb +10 -0
  50. data/app/models/elabs/preference.rb +2 -0
  51. data/app/models/elabs/report.rb +10 -0
  52. data/app/models/elabs/user.rb +26 -6
  53. data/app/views/elabs/acts/_act.json.jbuilder +7 -2
  54. data/app/views/elabs/acts/index.json.jbuilder +1 -1
  55. data/app/views/elabs/admin/albums/_album.json.jbuilder +15 -2
  56. data/app/views/elabs/admin/albums/index.html.haml +1 -1
  57. data/app/views/elabs/admin/albums/index.json.jbuilder +1 -1
  58. data/app/views/elabs/admin/articles/_article.json.jbuilder +15 -2
  59. data/app/views/elabs/admin/articles/index.html.haml +1 -1
  60. data/app/views/elabs/admin/articles/index.json.jbuilder +1 -1
  61. data/app/views/elabs/admin/languages/_language.json.jbuilder +9 -2
  62. data/app/views/elabs/admin/languages/index.html.haml +1 -1
  63. data/app/views/elabs/admin/languages/index.json.jbuilder +1 -1
  64. data/app/views/elabs/admin/licenses/_license.json.jbuilder +10 -2
  65. data/app/views/elabs/admin/licenses/index.html.haml +1 -1
  66. data/app/views/elabs/admin/licenses/index.json.jbuilder +1 -1
  67. data/app/views/elabs/admin/notes/_note.json.jbuilder +13 -2
  68. data/app/views/elabs/admin/notes/index.html.haml +1 -1
  69. data/app/views/elabs/admin/notes/index.json.jbuilder +1 -1
  70. data/app/views/elabs/admin/projects/_project.json.jbuilder +20 -2
  71. data/app/views/elabs/admin/projects/index.html.haml +1 -1
  72. data/app/views/elabs/admin/projects/index.json.jbuilder +1 -1
  73. data/app/views/elabs/admin/reports/_report.json.jbuilder +10 -0
  74. data/app/views/elabs/admin/reports/index.html.haml +1 -1
  75. data/app/views/elabs/admin/reports/index.json.jbuilder +1 -1
  76. data/app/views/elabs/admin/tags/_tag.json.jbuilder +8 -2
  77. data/app/views/elabs/admin/tags/index.html.haml +1 -1
  78. data/app/views/elabs/admin/tags/index.json.jbuilder +1 -1
  79. data/app/views/elabs/admin/uploads/_upload.json.jbuilder +17 -2
  80. data/app/views/elabs/admin/uploads/index.html.haml +1 -1
  81. data/app/views/elabs/admin/uploads/index.json.jbuilder +1 -1
  82. data/app/views/elabs/admin/users/_user.json.jbuilder +14 -0
  83. data/app/views/elabs/admin/users/index.html.haml +6 -2
  84. data/app/views/elabs/admin/users/index.json.jbuilder +1 -1
  85. data/app/views/elabs/admin/users/show.html.haml +1 -1
  86. data/app/views/elabs/admin/users/show.json.jbuilder +1 -1
  87. data/app/views/elabs/albums/_album.html.haml +2 -2
  88. data/app/views/elabs/albums/_album.json.jbuilder +12 -2
  89. data/app/views/elabs/albums/index.json.jbuilder +1 -1
  90. data/app/views/elabs/albums/show.html.haml +7 -7
  91. data/app/views/elabs/albums/show.json.jbuilder +1 -1
  92. data/app/views/elabs/articles/_article.html.haml +2 -2
  93. data/app/views/elabs/articles/_article.json.jbuilder +12 -2
  94. data/app/views/elabs/articles/index.json.jbuilder +1 -1
  95. data/app/views/elabs/articles/show.html.haml +6 -6
  96. data/app/views/elabs/articles/show.json.jbuilder +1 -1
  97. data/app/views/elabs/auth/registrations/edit.html.haml +8 -5
  98. data/app/views/elabs/comments/_comment.json.jbuilder +10 -2
  99. data/app/views/elabs/comments/_comments.html.haml +2 -2
  100. data/app/views/elabs/languages/_language.json.jbuilder +9 -2
  101. data/app/views/elabs/languages/index.json.jbuilder +1 -1
  102. data/app/views/elabs/languages/show.html.haml +1 -1
  103. data/app/views/elabs/languages/show.json.jbuilder +1 -1
  104. data/app/views/elabs/layouts/_menu.html.haml +10 -5
  105. data/app/views/elabs/licenses/_license.json.jbuilder +10 -2
  106. data/app/views/elabs/licenses/index.json.jbuilder +1 -1
  107. data/app/views/elabs/licenses/show.html.haml +2 -6
  108. data/app/views/elabs/member/albums/_album.json.jbuilder +15 -2
  109. data/app/views/elabs/member/albums/index.html.haml +1 -1
  110. data/app/views/elabs/member/albums/index.json.jbuilder +1 -1
  111. data/app/views/elabs/member/articles/_article.json.jbuilder +15 -2
  112. data/app/views/elabs/member/articles/index.html.haml +1 -1
  113. data/app/views/elabs/member/articles/index.json.jbuilder +1 -1
  114. data/app/views/elabs/member/layouts/_empty.html.haml +3 -2
  115. data/app/views/elabs/member/notes/_note.json.jbuilder +13 -2
  116. data/app/views/elabs/member/notes/index.html.haml +1 -1
  117. data/app/views/elabs/member/notes/index.json.jbuilder +1 -1
  118. data/app/views/elabs/member/notifications/_notification.json.jbuilder +8 -0
  119. data/app/views/elabs/member/notifications/index.html.haml +21 -0
  120. data/app/views/elabs/member/notifications/index.json.jbuilder +1 -0
  121. data/app/views/elabs/member/preferences/_form.html.haml +6 -0
  122. data/app/views/elabs/member/preferences/edit.html.haml +2 -1
  123. data/app/views/elabs/member/projects/_project.json.jbuilder +20 -2
  124. data/app/views/elabs/member/projects/index.html.haml +1 -1
  125. data/app/views/elabs/member/projects/index.json.jbuilder +1 -1
  126. data/app/views/elabs/member/uploads/_upload.json.jbuilder +17 -2
  127. data/app/views/elabs/member/uploads/index.html.haml +1 -1
  128. data/app/views/elabs/member/uploads/index.json.jbuilder +1 -1
  129. data/app/views/elabs/member/users/_form.html.haml +14 -9
  130. data/app/views/elabs/member/users/edit.html.haml +7 -0
  131. data/app/views/elabs/notes/_note.html.haml +2 -2
  132. data/app/views/elabs/notes/_note.json.jbuilder +10 -2
  133. data/app/views/elabs/notes/index.json.jbuilder +1 -1
  134. data/app/views/elabs/notes/show.html.haml +5 -5
  135. data/app/views/elabs/notes/show.json.jbuilder +1 -1
  136. data/app/views/elabs/projects/_project.html.haml +2 -2
  137. data/app/views/elabs/projects/_project.json.jbuilder +17 -0
  138. data/app/views/elabs/projects/index.json.jbuilder +1 -1
  139. data/app/views/elabs/projects/show.html.haml +14 -11
  140. data/app/views/elabs/projects/show.json.jbuilder +1 -1
  141. data/app/views/elabs/tags/_tag.json.jbuilder +8 -2
  142. data/app/views/elabs/tags/index.json.jbuilder +1 -1
  143. data/app/views/elabs/tags/show.json.jbuilder +1 -1
  144. data/app/views/elabs/uploads/_upload.html.haml +1 -1
  145. data/app/views/elabs/uploads/_upload.json.jbuilder +14 -2
  146. data/app/views/elabs/uploads/index.json.jbuilder +1 -1
  147. data/app/views/elabs/uploads/show.html.haml +12 -3
  148. data/app/views/elabs/uploads/show.json.jbuilder +1 -1
  149. data/app/views/elabs/users/_user.html.haml +10 -3
  150. data/app/views/elabs/users/_user.json.jbuilder +14 -2
  151. data/app/views/elabs/users/index.json.jbuilder +1 -1
  152. data/app/views/elabs/users/show.html.haml +15 -10
  153. data/app/views/elabs/users/show.json.jbuilder +1 -1
  154. data/config/routes.rb +21 -16
  155. data/db/migrate/20180910000015_remove_license_timestamps.rb +6 -0
  156. data/db/migrate/20180910175012_create_notifications.rb +13 -0
  157. data/db/migrate/20180913093027_add_fields_in_preferences.rb +6 -0
  158. data/docs/migrating.md +14 -0
  159. data/docs/setup.md +1 -0
  160. data/lib/elabs.rb +3 -0
  161. data/lib/elabs/version.rb +1 -1
  162. data/lib/generators/elabs/required_assets_generator.rb +1 -1
  163. data/lib/generators/templates/elabs.rb +6 -0
  164. data/locale/app.pot +73 -14
  165. data/locale/en/app.edit.po +71 -12
  166. data/locale/en/app.po +71 -12
  167. data/locale/fr/app.edit.po +76 -17
  168. data/locale/fr/app.po +75 -16
  169. data/package.json +4 -4
  170. metadata +19 -5
  171. data/app/assets/images/elabs/preview_placeholder.png +0 -0
  172. data/app/assets/images/elabs/preview_placeholder_nsfw.png +0 -0
  173. data/app/views/elabs/admin/users/_admin_user.json.jbuilder +0 -2
@@ -8,8 +8,8 @@ module Elabs
8
8
  # GET /admin/languages
9
9
  # GET /admin/languages.json
10
10
  def index
11
- order = params['order_by'] || self.class::DEFAULT_ORDER_FIELD
12
- direction = params['direction'] || 'desc'
11
+ order = params['order_by'] || self.class::DEFAULT_ORDER_FIELD
12
+ direction = params['direction'] || 'desc'
13
13
  @languages = Language.order(order => direction).page(params[:page]).per(self.class::MAX_ITEMS_PER_PAGE)
14
14
  end
15
15
 
@@ -29,7 +29,7 @@ module Elabs
29
29
  respond_to do |format|
30
30
  if @language.save
31
31
  format.html { redirect_to admin_languages_url, notice: _('Language was successfully created.') }
32
- format.json { render :show, status: :created, location: @language }
32
+ format.json { render '_language', status: :created, location: @language, locals: { language: @language } }
33
33
  else
34
34
  format.html { render :new }
35
35
  format.json { render json: @language.errors, status: :unprocessable_entity }
@@ -43,7 +43,7 @@ module Elabs
43
43
  respond_to do |format|
44
44
  if @language.update(language_params)
45
45
  format.html { redirect_to admin_languages_url, notice: _('Language was successfully updated.') }
46
- format.json { render :show, status: :ok, location: admin_languages_url }
46
+ format.json { render '_language', status: :ok, location: @language, locals: { language: @language } }
47
47
  else
48
48
  format.html { render :edit }
49
49
  format.json { render json: @language.errors, status: :unprocessable_entity }
@@ -29,7 +29,7 @@ module Elabs
29
29
  respond_to do |format|
30
30
  if @license.save
31
31
  format.html { redirect_to admin_licenses_url, notice: _('License was successfully created.') }
32
- format.json { render :show, status: :created, location: @license }
32
+ format.json { render '_license', status: :created, location: @license, locals: { license: @license } }
33
33
  else
34
34
  format.html { render :new }
35
35
  format.json { render json: @license.errors, status: :unprocessable_entity }
@@ -43,7 +43,7 @@ module Elabs
43
43
  respond_to do |format|
44
44
  if @license.update(license_params)
45
45
  format.html { redirect_to admin_licenses_url, notice: _('License was successfully updated.') }
46
- format.json { render :show, status: :ok, location: @license }
46
+ format.json { render '_license', status: :ok, location: @license, locals: { license: @license } }
47
47
  else
48
48
  format.html { render :edit }
49
49
  format.json { render json: @license.errors, status: :unprocessable_entity }
@@ -10,7 +10,7 @@ module Elabs
10
10
  def index
11
11
  order = params['order_by'] || self.class::DEFAULT_ORDER_FIELD
12
12
  direction = params['direction'] || 'desc'
13
- @tags = Tag.order(order => direction).all
13
+ @tags = Tag.order(order => direction).all
14
14
  end
15
15
 
16
16
  # GET /tags/1/edit
@@ -22,9 +22,9 @@ module Elabs
22
22
  respond_to do |format|
23
23
  if @tag.update(tag_params)
24
24
  format.html { redirect_to admin_tags_url, notice: _('Tag was successfully updated.') }
25
- format.json { render :show, status: :ok, location: admin_tags_url }
25
+ format.json { render :_tag, status: :ok, location: admin_tags_url, locals: { tag: @tag } }
26
26
  else
27
- format.html { render :edit }
27
+ format.html { render :edit, tag: @tag }
28
28
  format.json { render json: @tag.errors, status: :unprocessable_entity }
29
29
  end
30
30
  end
@@ -10,6 +10,7 @@ module Elabs
10
10
  included do
11
11
  helper Elabs::ApplicationHelper
12
12
  helper Elabs::ContentFiltersHelper
13
+ helper Elabs::NotificationHelper
13
14
 
14
15
  layout 'elabs/layouts/application'
15
16
  end
@@ -1,5 +1,5 @@
1
1
  module Elabs
2
- class ContentApplicationController < ElabsApplicationController
2
+ class ContentApplicationController < ElabsPublicController
3
3
  DEFAULT_ORDER = { published_at: :desc }.freeze
4
4
  IS_NSFW_FILTERABLE = true
5
5
 
@@ -1,85 +1,12 @@
1
1
  module Elabs
2
2
  class ElabsApplicationController < ActionController::Base
3
- include Elabs::Concerns::Reportable
4
3
  include Elabs::Concerns::Localizable
5
4
 
6
- ALLOWED_NESTED_FROM = [].freeze
7
- ALLOWED_ORDER_FROM = [].freeze
8
- DEFAULT_ORDER = { id: :desc }.freeze
9
- IS_NSFW_FILTERABLE = false
10
- MAX_ITEMS_PER_PAGE = Elabs.max_items_per_page
11
-
12
5
  before_action :set_nsfw_option
13
6
  protect_from_forgery with: :exception
14
7
 
15
- layout 'elabs/layouts/application'
16
-
17
8
  private
18
9
 
19
- def scope_request(orm_request)
20
- orm_request = build_request_nested orm_request
21
- orm_request = build_request_where orm_request
22
- orm_request = build_request_nsfw orm_request if self.class::IS_NSFW_FILTERABLE
23
-
24
- build_request_order orm_request
25
- end
26
-
27
- def build_request_nested(orm_request)
28
- where_clauses = {}
29
-
30
- params.each do |p|
31
- # No need to do this with "album_id" as there is no action requiring it (as for a /albums/xxx/uploads)
32
- next unless %w[tag_id project_id].include? p[0]
33
- foreign_table = p[0].chomp('_id').pluralize.to_sym
34
- orm_request = orm_request.joins(foreign_table)
35
- where_clauses[foreign_table] = { id: p[1] }
36
- next
37
- end
38
-
39
- orm_request.where(where_clauses)
40
- end
41
-
42
- def build_request_where(orm_request)
43
- allowed_scopes_ids = self.class::ALLOWED_NESTED_FROM.map { |n| "#{n}_id" }
44
- clean_list = allowed_scopes_ids.reject { |s| %w[tag_id project_id].include? s }
45
-
46
- params.each do |p|
47
- orm_request = orm_request.where(p[0] => p[1]) if clean_list.include? p[0]
48
- end
49
-
50
- orm_request
51
- end
52
-
53
- def build_request_order(orm_request)
54
- allowed_order_fields = self.class::ALLOWED_ORDER_FROM.map { |n| "order_by_#{n}" }
55
- orders = 0
56
-
57
- params.each do |p|
58
- next unless allowed_order_fields.include? p[0]
59
- field = p[0].gsub(/^order_by_/, '')
60
- orm_request = orm_request.order "#{field}_id" => p[1]
61
- orders += 1
62
- end
63
-
64
- orm_request = orm_request.order(self.class::DEFAULT_ORDER) if orders.zero?
65
-
66
- orm_request
67
- end
68
-
69
- def build_request_nsfw(orm_request)
70
- if params['sfw_status']
71
- return case params['sfw_status']
72
- when 'sfw_only'
73
- orm_request.where(sfw: true)
74
- when 'nsfw_only'
75
- orm_request.where(sfw: false)
76
- else
77
- orm_request
78
- end
79
- end
80
- orm_request
81
- end
82
-
83
10
  def set_nsfw_option
84
11
  session[:show_nsfw] ||= false
85
12
  session[:show_nsfw] = params['show_nsfw'] == 'true' if params['show_nsfw']
@@ -0,0 +1,80 @@
1
+ module Elabs
2
+ class ElabsPublicController < ElabsApplicationController
3
+ include Elabs::Concerns::Reportable
4
+
5
+ ALLOWED_NESTED_FROM = [].freeze
6
+ ALLOWED_ORDER_FROM = [].freeze
7
+ DEFAULT_ORDER = { id: :desc }.freeze
8
+ IS_NSFW_FILTERABLE = false
9
+ MAX_ITEMS_PER_PAGE = Elabs.max_items_per_page
10
+
11
+ layout 'elabs/layouts/application'
12
+
13
+ private
14
+
15
+ def scope_request(orm_request)
16
+ orm_request = build_request_nested orm_request
17
+ orm_request = build_request_where orm_request
18
+ orm_request = build_request_nsfw orm_request if self.class::IS_NSFW_FILTERABLE
19
+
20
+ build_request_order orm_request
21
+ end
22
+
23
+ def build_request_nested(orm_request)
24
+ where_clauses = {}
25
+
26
+ params.each do |p|
27
+ # No need to do this with "album_id" as there is no action requiring it (as for a /albums/xxx/uploads)
28
+ next unless %w[tag_id project_id].include? p[0]
29
+
30
+ foreign_table = p[0].chomp('_id').pluralize.to_sym
31
+ orm_request = orm_request.joins(foreign_table)
32
+ where_clauses[foreign_table] = { id: p[1] }
33
+ next
34
+ end
35
+
36
+ orm_request.where(where_clauses)
37
+ end
38
+
39
+ def build_request_where(orm_request)
40
+ allowed_scopes_ids = self.class::ALLOWED_NESTED_FROM.map { |n| "#{n}_id" }
41
+ clean_list = allowed_scopes_ids.reject { |s| %w[tag_id project_id].include? s }
42
+
43
+ params.each do |p|
44
+ orm_request = orm_request.where(p[0] => p[1]) if clean_list.include? p[0]
45
+ end
46
+
47
+ orm_request
48
+ end
49
+
50
+ def build_request_order(orm_request)
51
+ allowed_order_fields = self.class::ALLOWED_ORDER_FROM.map { |n| "order_by_#{n}" }
52
+ orders = 0
53
+
54
+ params.each do |p|
55
+ next unless allowed_order_fields.include? p[0]
56
+
57
+ field = p[0].gsub(/^order_by_/, '')
58
+ orm_request = orm_request.order field => p[1]
59
+ orders += 1
60
+ end
61
+
62
+ orm_request = orm_request.order(self.class::DEFAULT_ORDER) if orders.zero?
63
+ orm_request
64
+ end
65
+
66
+ def build_request_nsfw(orm_request)
67
+ if params['sfw_status']
68
+ return case params['sfw_status']
69
+ when 'sfw_only'
70
+ orm_request.where(sfw: true)
71
+ when 'nsfw_only'
72
+ orm_request.where(sfw: false)
73
+ else
74
+ orm_request
75
+ end
76
+ end
77
+ orm_request
78
+ end
79
+ end
80
+ end
@@ -1,14 +1,14 @@
1
1
  module Elabs
2
- class LanguagesController < ElabsApplicationController
2
+ class LanguagesController < ElabsPublicController
3
3
  ALLOWED_ORDER_FROM = %w[name].freeze
4
- DEFAULT_ORDER = { name: :desc }.freeze
4
+ DEFAULT_ORDER = { name: :asc }.freeze
5
5
 
6
6
  before_action :set_language, only: %i[show edit]
7
7
 
8
8
  # GET /languages
9
9
  # GET /languages.json
10
10
  def index
11
- languages = Language.page(params[:page]).per(self.class::MAX_ITEMS_PER_PAGE)
11
+ languages = scope_request Language.page(params[:page]).per(self.class::MAX_ITEMS_PER_PAGE)
12
12
  @languages = if params['with_content_only'] && params['with_content_only'] == 'false'
13
13
  languages
14
14
  else
@@ -1,14 +1,14 @@
1
1
  module Elabs
2
- class LicensesController < ElabsApplicationController
2
+ class LicensesController < ElabsPublicController
3
3
  ALLOWED_ORDER_FROM = %w[name].freeze
4
- DEFAULT_ORDER = { name: :desc }.freeze
4
+ DEFAULT_ORDER = { name: :asc }.freeze
5
5
 
6
6
  before_action :set_license, only: [:show]
7
7
 
8
8
  # GET /licenses
9
9
  # GET /licenses.json
10
10
  def index
11
- @licenses = License.all
11
+ @licenses = scope_request License.all
12
12
  end
13
13
 
14
14
  # GET /licenses/1
@@ -1,12 +1,12 @@
1
1
  module Elabs
2
2
  module Member
3
3
  class MemberContentApplicationController < MemberApplicationController
4
- ALLOWED_FIELDS = [].freeze
5
- ALLOWED_RELATIONS = {}.freeze
4
+ ALLOWED_FIELDS = [].freeze
5
+ ALLOWED_RELATIONS = {}.freeze
6
6
  DEFAULT_ORDER_FIELD = 'updated_at'.freeze
7
- MODEL = nil
8
- PLURAL_NAME = nil
9
- SINGULAR_NAME = nil
7
+ MODEL = nil
8
+ PLURAL_NAME = nil
9
+ SINGULAR_NAME = nil
10
10
 
11
11
  before_action :set_entity, only: %i[edit update destroy toggle_publication]
12
12
 
@@ -18,11 +18,15 @@ module Elabs
18
18
  direction = params['direction'] || 'desc'
19
19
  create_instance_variable self.class::PLURAL_NAME, self.class::MODEL.by_member(current_user.id).order(order => direction).page(params[:page]).per(self.class::MAX_ITEMS_PER_PAGE)
20
20
  end
21
+
21
22
  # rubocop: enable Metrics/AbcSize
22
23
 
23
24
  # GET /articles/new
24
25
  def new
25
- create_instance_variable self.class::SINGULAR_NAME, self.class::MODEL.new
26
+ entity = self.class::MODEL.new
27
+ entity.language_id = current_user.preference.writing_language_id if current_user.preference.writing_language_id
28
+ entity.license_id = current_user.preference.writing_license_id if current_user.preference.writing_license_id
29
+ create_instance_variable self.class::SINGULAR_NAME, entity
26
30
  end
27
31
 
28
32
  # GET /articles/1/edit
@@ -37,34 +41,38 @@ module Elabs
37
41
  respond_to do |format|
38
42
  if @entity.save entity_params
39
43
  format.html { redirect_to_index_with_notice :notice, format(_('%<model_name>s was successfully created.'), model_name: self.class::SINGULAR_NAME.capitalize) }
40
- format.json { render "member/#{self.class::PLURAL_NAME}/#{self.class::SINGULAR_NAME}", status: :created }
44
+ format.json { render partial_name, status: :created, locals: { "#{self.class::SINGULAR_NAME}": @entity } }
41
45
  else
42
46
  format.html { render :new }
43
47
  format.json { render json: @entity.errors, status: :unprocessable_entity }
44
48
  end
45
49
  end
46
50
  end
51
+
47
52
  # rubocop: enable Metrics/AbcSize
48
53
 
49
54
  # PATCH/PUT /articles/1
50
55
  # PATCH/PUT /articles/1.json
51
56
  # rubocop: disable Metrics/AbcSize
52
57
  def update
58
+ @entity.changed_by = current_user
53
59
  respond_to do |format|
54
60
  if @entity.update entity_params
55
61
  format.html { redirect_to_index_with_notice :notice, format(_('%<model_name>s was successfully updated.'), model_name: self.class::SINGULAR_NAME.capitalize) }
56
- format.json { render "member/#{self.class::PLURAL_NAME}/#{self.class::SINGULAR_NAME}", status: :ok }
62
+ format.json { render partial_name, status: :ok, locals: { "#{self.class::SINGULAR_NAME}": @entity } }
57
63
  else
58
64
  format.html { render :edit }
59
65
  format.json { render json: @entity.errors, status: :unprocessable_entity }
60
66
  end
61
67
  end
62
68
  end
69
+
63
70
  # rubocop: enable Metrics/AbcSize
64
71
 
65
72
  # DELETE /articles/1
66
73
  # DELETE /articles/1.json
67
74
  def destroy
75
+ @entity.changed_by = current_user
68
76
  @entity.destroy
69
77
  respond_to do |format|
70
78
  format.html { redirect_to index_url, notice: format(_('%<model_name>s was successfully destroyed.'), model_name: self.class::SINGULAR_NAME.capitalize) }
@@ -74,13 +82,11 @@ module Elabs
74
82
 
75
83
  # PUT /<entity>/1/toggle_publication
76
84
  def toggle_publication
77
- if @entity.toggle(:published).save
78
- respond_to do |format|
85
+ respond_to do |format|
86
+ if @entity.toggle(:published).save
79
87
  format.html { redirect_to_index_with_notice :notice, publication_message(@entity) }
80
- format.json { render :show, status: :ok }
81
- end
82
- else
83
- respond_to do |format|
88
+ format.json { render partial_name, status: :ok, locals: { "#{self.class::SINGULAR_NAME}": @entity } }
89
+ else
84
90
  format.html { redirect_to_index_with_notice :error, 'An error prevented to update this entity' }
85
91
  format.json { render json: @entity.errors, status: :unprocessable_entity }
86
92
  end
@@ -106,6 +112,10 @@ module Elabs
106
112
  "member_#{self.class::PLURAL_NAME}".to_sym
107
113
  end
108
114
 
115
+ def partial_name
116
+ "_#{self.class::SINGULAR_NAME}".to_sym
117
+ end
118
+
109
119
  def redirect_to_index_with_notice(type, notice)
110
120
  redirect_to "member_#{self.class::PLURAL_NAME}".to_sym, "#{type}": notice
111
121
  end
@@ -0,0 +1,30 @@
1
+ module Elabs
2
+ module Member
3
+ class NotificationsController < MemberApplicationController
4
+ MAX_ITEMS_PER_PAGE = Elabs.max_members_items_per_page
5
+ DEFAULT_ORDER_FIELD = 'created_at'.freeze
6
+
7
+ before_action :set_notification, only: [:destroy]
8
+
9
+ # GET /notifications
10
+ def index
11
+ order = params['order_by'] || self.class::DEFAULT_ORDER_FIELD
12
+ direction = params['direction'] || 'desc'
13
+ @notifications = Notification.for_user(current_user).order(order => direction).page(params[:page]).per(self.class::MAX_ITEMS_PER_PAGE)
14
+ end
15
+
16
+ # DELETE /notifications/1
17
+ def destroy
18
+ @notification.destroy
19
+ redirect_to member_notifications_url, notice: _('Notification was successfully destroyed.')
20
+ end
21
+
22
+ private
23
+
24
+ # Use callbacks to share common setup or constraints between actions.
25
+ def set_notification
26
+ @notification = Notification.find(params[:id])
27
+ end
28
+ end
29
+ end
30
+ end
@@ -29,7 +29,7 @@ module Elabs
29
29
 
30
30
  # Never trust parameters from the scary internet, only allow the white list through.
31
31
  def preference_params
32
- params.require(:preference).permit(:show_nsfw, :locale)
32
+ params.require(:preference).permit(:show_nsfw, :locale, :writing_language_id, :writing_license_id)
33
33
  end
34
34
  end
35
35
  end
@@ -1,14 +1,17 @@
1
1
  module Elabs
2
2
  module Member
3
- class UsersController < ElabsApplicationController
4
- before_action :set_user, only: [:update]
3
+ class UsersController < MemberApplicationController
4
+ before_action :set_user, only: %i[edit update]
5
5
 
6
- # PATCH/PUT /member/users/1
6
+ # GET /member/infos
7
+ def edit; end
8
+
9
+ # PATCH/PUT /member/infos
7
10
  def update
8
11
  if @user.update(user_params)
9
12
  redirect_to @user, notice: _('Your infos were successfully saved')
10
13
  else
11
- render edit_user_registration_path
14
+ render :edit
12
15
  end
13
16
  end
14
17
 
@@ -21,7 +24,7 @@ module Elabs
21
24
 
22
25
  # Only allow a trusted parameter "white list" through.
23
26
  def user_params
24
- params.require(:user).permit(:real_name, :biography)
27
+ params.require(:user).permit(:real_name, :biography, :avatar)
25
28
  end
26
29
  end
27
30
  end