elabs 2.0.0 → 3.0.0

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