elabs 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +6 -0
- data/CHANGELOG.md +83 -0
- data/Gemfile +3 -1
- data/Gemfile.lock +9 -2
- data/ROADMAP.md +6 -11
- data/app/assets/stylesheets/elabs/_icons.scss +8 -4
- data/app/assets/stylesheets/elabs/app/_badges.scss +11 -0
- data/app/assets/stylesheets/elabs/app/_layout.scss +10 -2
- data/app/assets/stylesheets/elabs/app/_users.scss +7 -0
- data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +2 -1
- data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +4 -0
- data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +17 -5
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +16 -15
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss.scss +1 -1
- data/app/assets/stylesheets/elabs/style.scss +1 -0
- data/app/controllers/elabs/acts_controller.rb +1 -1
- data/app/controllers/elabs/admin/admin_content_application_controller.rb +13 -6
- data/app/controllers/elabs/admin/languages_controller.rb +4 -4
- data/app/controllers/elabs/admin/licenses_controller.rb +2 -2
- data/app/controllers/elabs/admin/tags_controller.rb +3 -3
- data/app/controllers/elabs/concerns/elabs_controller.rb +1 -0
- data/app/controllers/elabs/content_application_controller.rb +1 -1
- data/app/controllers/elabs/elabs_application_controller.rb +0 -73
- data/app/controllers/elabs/elabs_public_controller.rb +80 -0
- data/app/controllers/elabs/languages_controller.rb +3 -3
- data/app/controllers/elabs/licenses_controller.rb +3 -3
- data/app/controllers/elabs/member/member_content_application_controller.rb +24 -14
- data/app/controllers/elabs/member/notifications_controller.rb +30 -0
- data/app/controllers/elabs/member/preferences_controller.rb +1 -1
- data/app/controllers/elabs/member/users_controller.rb +8 -5
- data/app/controllers/elabs/reports_controller.rb +2 -2
- data/app/controllers/elabs/tags_controller.rb +2 -2
- data/app/controllers/elabs/users_controller.rb +3 -3
- data/app/helpers/elabs/admin_content_helper.rb +8 -24
- data/app/helpers/elabs/application_helper.rb +1 -1
- data/app/helpers/elabs/content_helper.rb +39 -0
- data/app/helpers/elabs/form_helper.rb +22 -10
- data/app/helpers/elabs/member_content_helper.rb +5 -22
- data/app/helpers/elabs/notification_helper.rb +69 -0
- data/app/helpers/elabs/thumbnails_helper.rb +15 -0
- data/app/helpers/elabs/time_helper.rb +7 -0
- data/app/models/elabs/application_content_record.rb +1 -0
- data/app/models/elabs/application_record.rb +2 -0
- data/app/models/elabs/comment.rb +14 -0
- data/app/models/elabs/concerns/actable_entity.rb +0 -12
- data/app/models/elabs/concerns/content_entity.rb +23 -0
- data/app/models/elabs/concerns/notifiable_entity.rb +46 -0
- data/app/models/elabs/notification.rb +10 -0
- data/app/models/elabs/preference.rb +2 -0
- data/app/models/elabs/report.rb +10 -0
- data/app/models/elabs/user.rb +26 -6
- data/app/views/elabs/acts/_act.json.jbuilder +7 -2
- data/app/views/elabs/acts/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/albums/_album.json.jbuilder +15 -2
- data/app/views/elabs/admin/albums/index.html.haml +1 -1
- data/app/views/elabs/admin/albums/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/articles/_article.json.jbuilder +15 -2
- data/app/views/elabs/admin/articles/index.html.haml +1 -1
- data/app/views/elabs/admin/articles/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/languages/_language.json.jbuilder +9 -2
- data/app/views/elabs/admin/languages/index.html.haml +1 -1
- data/app/views/elabs/admin/languages/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/licenses/_license.json.jbuilder +10 -2
- data/app/views/elabs/admin/licenses/index.html.haml +1 -1
- data/app/views/elabs/admin/licenses/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/notes/_note.json.jbuilder +13 -2
- data/app/views/elabs/admin/notes/index.html.haml +1 -1
- data/app/views/elabs/admin/notes/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/projects/_project.json.jbuilder +20 -2
- data/app/views/elabs/admin/projects/index.html.haml +1 -1
- data/app/views/elabs/admin/projects/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/reports/_report.json.jbuilder +10 -0
- data/app/views/elabs/admin/reports/index.html.haml +1 -1
- data/app/views/elabs/admin/reports/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/tags/_tag.json.jbuilder +8 -2
- data/app/views/elabs/admin/tags/index.html.haml +1 -1
- data/app/views/elabs/admin/tags/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/uploads/_upload.json.jbuilder +17 -2
- data/app/views/elabs/admin/uploads/index.html.haml +1 -1
- data/app/views/elabs/admin/uploads/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/users/_user.json.jbuilder +14 -0
- data/app/views/elabs/admin/users/index.html.haml +6 -2
- data/app/views/elabs/admin/users/index.json.jbuilder +1 -1
- data/app/views/elabs/admin/users/show.html.haml +1 -1
- data/app/views/elabs/admin/users/show.json.jbuilder +1 -1
- data/app/views/elabs/albums/_album.html.haml +2 -2
- data/app/views/elabs/albums/_album.json.jbuilder +12 -2
- data/app/views/elabs/albums/index.json.jbuilder +1 -1
- data/app/views/elabs/albums/show.html.haml +7 -7
- data/app/views/elabs/albums/show.json.jbuilder +1 -1
- data/app/views/elabs/articles/_article.html.haml +2 -2
- data/app/views/elabs/articles/_article.json.jbuilder +12 -2
- data/app/views/elabs/articles/index.json.jbuilder +1 -1
- data/app/views/elabs/articles/show.html.haml +6 -6
- data/app/views/elabs/articles/show.json.jbuilder +1 -1
- data/app/views/elabs/auth/registrations/edit.html.haml +8 -5
- data/app/views/elabs/comments/_comment.json.jbuilder +10 -2
- data/app/views/elabs/comments/_comments.html.haml +2 -2
- data/app/views/elabs/languages/_language.json.jbuilder +9 -2
- data/app/views/elabs/languages/index.json.jbuilder +1 -1
- data/app/views/elabs/languages/show.html.haml +1 -1
- data/app/views/elabs/languages/show.json.jbuilder +1 -1
- data/app/views/elabs/layouts/_menu.html.haml +10 -5
- data/app/views/elabs/licenses/_license.json.jbuilder +10 -2
- data/app/views/elabs/licenses/index.json.jbuilder +1 -1
- data/app/views/elabs/licenses/show.html.haml +2 -6
- data/app/views/elabs/member/albums/_album.json.jbuilder +15 -2
- data/app/views/elabs/member/albums/index.html.haml +1 -1
- data/app/views/elabs/member/albums/index.json.jbuilder +1 -1
- data/app/views/elabs/member/articles/_article.json.jbuilder +15 -2
- data/app/views/elabs/member/articles/index.html.haml +1 -1
- data/app/views/elabs/member/articles/index.json.jbuilder +1 -1
- data/app/views/elabs/member/layouts/_empty.html.haml +3 -2
- data/app/views/elabs/member/notes/_note.json.jbuilder +13 -2
- data/app/views/elabs/member/notes/index.html.haml +1 -1
- data/app/views/elabs/member/notes/index.json.jbuilder +1 -1
- data/app/views/elabs/member/notifications/_notification.json.jbuilder +8 -0
- data/app/views/elabs/member/notifications/index.html.haml +21 -0
- data/app/views/elabs/member/notifications/index.json.jbuilder +1 -0
- data/app/views/elabs/member/preferences/_form.html.haml +6 -0
- data/app/views/elabs/member/preferences/edit.html.haml +2 -1
- data/app/views/elabs/member/projects/_project.json.jbuilder +20 -2
- data/app/views/elabs/member/projects/index.html.haml +1 -1
- data/app/views/elabs/member/projects/index.json.jbuilder +1 -1
- data/app/views/elabs/member/uploads/_upload.json.jbuilder +17 -2
- data/app/views/elabs/member/uploads/index.html.haml +1 -1
- data/app/views/elabs/member/uploads/index.json.jbuilder +1 -1
- data/app/views/elabs/member/users/_form.html.haml +14 -9
- data/app/views/elabs/member/users/edit.html.haml +7 -0
- data/app/views/elabs/notes/_note.html.haml +2 -2
- data/app/views/elabs/notes/_note.json.jbuilder +10 -2
- data/app/views/elabs/notes/index.json.jbuilder +1 -1
- data/app/views/elabs/notes/show.html.haml +5 -5
- data/app/views/elabs/notes/show.json.jbuilder +1 -1
- data/app/views/elabs/projects/_project.html.haml +2 -2
- data/app/views/elabs/projects/_project.json.jbuilder +17 -0
- data/app/views/elabs/projects/index.json.jbuilder +1 -1
- data/app/views/elabs/projects/show.html.haml +14 -11
- data/app/views/elabs/projects/show.json.jbuilder +1 -1
- data/app/views/elabs/tags/_tag.json.jbuilder +8 -2
- data/app/views/elabs/tags/index.json.jbuilder +1 -1
- data/app/views/elabs/tags/show.json.jbuilder +1 -1
- data/app/views/elabs/uploads/_upload.html.haml +1 -1
- data/app/views/elabs/uploads/_upload.json.jbuilder +14 -2
- data/app/views/elabs/uploads/index.json.jbuilder +1 -1
- data/app/views/elabs/uploads/show.html.haml +12 -3
- data/app/views/elabs/uploads/show.json.jbuilder +1 -1
- data/app/views/elabs/users/_user.html.haml +10 -3
- data/app/views/elabs/users/_user.json.jbuilder +14 -2
- data/app/views/elabs/users/index.json.jbuilder +1 -1
- data/app/views/elabs/users/show.html.haml +15 -10
- data/app/views/elabs/users/show.json.jbuilder +1 -1
- data/config/routes.rb +21 -16
- data/db/migrate/20180910000015_remove_license_timestamps.rb +6 -0
- data/db/migrate/20180910175012_create_notifications.rb +13 -0
- data/db/migrate/20180913093027_add_fields_in_preferences.rb +6 -0
- data/docs/migrating.md +14 -0
- data/docs/setup.md +1 -0
- data/lib/elabs.rb +3 -0
- data/lib/elabs/version.rb +1 -1
- data/lib/generators/elabs/required_assets_generator.rb +1 -1
- data/lib/generators/templates/elabs.rb +6 -0
- data/locale/app.pot +73 -14
- data/locale/en/app.edit.po +71 -12
- data/locale/en/app.po +71 -12
- data/locale/fr/app.edit.po +76 -17
- data/locale/fr/app.po +75 -16
- data/package.json +4 -4
- metadata +19 -5
- data/app/assets/images/elabs/preview_placeholder.png +0 -0
- data/app/assets/images/elabs/preview_placeholder_nsfw.png +0 -0
- 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
|
12
|
-
direction
|
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
|
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
|
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
|
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
|
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
|
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 :
|
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
|
@@ -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 <
|
2
|
+
class LanguagesController < ElabsPublicController
|
3
3
|
ALLOWED_ORDER_FROM = %w[name].freeze
|
4
|
-
DEFAULT_ORDER = { name: :
|
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 <
|
2
|
+
class LicensesController < ElabsPublicController
|
3
3
|
ALLOWED_ORDER_FROM = %w[name].freeze
|
4
|
-
DEFAULT_ORDER = { name: :
|
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
|
5
|
-
ALLOWED_RELATIONS
|
4
|
+
ALLOWED_FIELDS = [].freeze
|
5
|
+
ALLOWED_RELATIONS = {}.freeze
|
6
6
|
DEFAULT_ORDER_FIELD = 'updated_at'.freeze
|
7
|
-
MODEL
|
8
|
-
PLURAL_NAME
|
9
|
-
SINGULAR_NAME
|
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
|
-
|
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 "
|
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 "
|
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
|
-
|
78
|
-
|
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
|
81
|
-
|
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 <
|
4
|
-
before_action :set_user, only: [
|
3
|
+
class UsersController < MemberApplicationController
|
4
|
+
before_action :set_user, only: %i[edit update]
|
5
5
|
|
6
|
-
#
|
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
|
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
|