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.
- 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
|