elabs 3.0.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +89 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +7 -2
- data/README.md +24 -17
- data/ROADMAP.md +8 -7
- data/app/assets/javascripts/elabs/application.js.erb +42 -0
- data/app/assets/javascripts/elabs/forms.js +10 -0
- data/app/assets/javascripts/elabs/helpers-markdown.js +11 -33
- data/app/assets/javascripts/elabs/helpers.js +28 -0
- data/app/assets/javascripts/elabs/hljs.js +4 -0
- data/app/assets/stylesheets/elabs/_colors.scss +5 -0
- data/app/assets/stylesheets/elabs/_fixes.scss +6 -0
- data/app/assets/stylesheets/elabs/_icons.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_acts.scss +11 -0
- data/app/assets/stylesheets/elabs/app/_buttons.scss +8 -0
- data/app/assets/stylesheets/elabs/app/_comments.scss +10 -1
- data/app/assets/stylesheets/elabs/app/_content.scss +15 -0
- data/app/assets/stylesheets/elabs/app/_content_statuses.scss +32 -0
- data/app/assets/stylesheets/elabs/app/_forms.scss +5 -0
- data/app/assets/stylesheets/elabs/app/_helpers.scss +10 -0
- data/app/assets/stylesheets/elabs/app/_layout.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_modals.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_tables.scss +31 -0
- data/app/assets/stylesheets/elabs/app/_typo.scss +14 -0
- data/app/assets/stylesheets/elabs/app/_users.scss +14 -6
- data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +8 -1
- data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +1 -26
- data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +11 -1
- data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +26 -0
- data/app/assets/stylesheets/elabs/app/mixins/_content-inline.scss +7 -0
- data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +88 -0
- data/app/assets/stylesheets/elabs/lib/_hljs.scss +5 -0
- data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +11 -11
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +10 -2
- data/app/assets/stylesheets/elabs/style.scss +11 -1
- data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
- data/app/controllers/elabs/admin/admin_content_application_controller.rb +2 -2
- data/app/controllers/elabs/admin/languages_controller.rb +1 -1
- data/app/controllers/elabs/admin/licenses_controller.rb +1 -1
- data/app/controllers/elabs/admin/tags_controller.rb +1 -1
- data/app/controllers/elabs/admin/users_controller.rb +1 -1
- data/app/controllers/elabs/albums_controller.rb +1 -1
- data/app/controllers/elabs/articles_controller.rb +1 -1
- data/app/controllers/elabs/content_application_controller.rb +2 -1
- data/app/controllers/elabs/elabs_public_controller.rb +28 -8
- data/app/controllers/elabs/languages_controller.rb +1 -1
- data/app/controllers/elabs/licenses_controller.rb +1 -1
- data/app/controllers/elabs/member/albums_controller.rb +1 -1
- data/app/controllers/elabs/member/articles_controller.rb +1 -1
- data/app/controllers/elabs/member/markdown_previewer_controller.rb +11 -0
- data/app/controllers/elabs/member/member_content_application_controller.rb +2 -2
- data/app/controllers/elabs/member/notes_controller.rb +1 -1
- data/app/controllers/elabs/member/projects_controller.rb +1 -1
- data/app/controllers/elabs/member/uploads_controller.rb +1 -1
- data/app/controllers/elabs/notes_controller.rb +1 -1
- data/app/controllers/elabs/projects_controller.rb +1 -1
- data/app/controllers/elabs/tags_controller.rb +1 -6
- data/app/controllers/elabs/uploads_controller.rb +1 -1
- data/app/controllers/elabs/users_controller.rb +1 -1
- data/app/helpers/elabs/acts_helper.rb +2 -2
- data/app/helpers/elabs/application_helper.rb +30 -3
- data/app/helpers/elabs/content_helper.rb +9 -3
- data/app/helpers/elabs/content_renderer_helper.rb +118 -8
- data/app/helpers/elabs/rss_helper.rb +9 -0
- data/app/helpers/elabs/thumbnails_helper.rb +24 -19
- data/app/helpers/elabs/time_helper.rb +7 -1
- data/app/models/elabs/album.rb +2 -0
- data/app/models/elabs/application_content_record.rb +3 -0
- data/app/models/elabs/article.rb +2 -0
- data/app/models/elabs/concerns/actable_entity.rb +17 -2
- data/app/models/elabs/concerns/content_entity.rb +2 -2
- data/app/models/elabs/concerns/sluggable.rb +40 -0
- data/app/models/elabs/language.rb +8 -0
- data/app/models/elabs/license.rb +5 -0
- data/app/models/elabs/note.rb +2 -0
- data/app/models/elabs/project.rb +3 -0
- data/app/models/elabs/tag.rb +5 -0
- data/app/models/elabs/upload.rb +2 -0
- data/app/models/elabs/user.rb +10 -2
- data/app/views/elabs/acts/_act.rss.builder +22 -0
- data/app/views/elabs/acts/index.html.haml +5 -1
- data/app/views/elabs/acts/index.rss.builder +15 -0
- data/app/views/elabs/admin/albums/index.html.haml +4 -4
- data/app/views/elabs/admin/articles/index.html.haml +4 -4
- data/app/views/elabs/admin/languages/_form.html.haml +2 -1
- data/app/views/elabs/admin/licenses/_form.html.haml +2 -1
- data/app/views/elabs/admin/notes/index.html.haml +5 -5
- data/app/views/elabs/admin/projects/index.html.haml +4 -4
- data/app/views/elabs/admin/reports/index.html.haml +2 -2
- data/app/views/elabs/admin/tags/_form.html.haml +2 -1
- data/app/views/elabs/admin/uploads/index.html.haml +4 -4
- data/app/views/elabs/admin/users/index.html.haml +3 -3
- data/app/views/elabs/admin/users/show.html.haml +2 -2
- data/app/views/elabs/albums/_album.html.haml +1 -1
- data/app/views/elabs/albums/_album.rss.builder +7 -0
- data/app/views/elabs/albums/_album_inline.html.haml +8 -0
- data/app/views/elabs/albums/index.rss.builder +14 -0
- data/app/views/elabs/albums/show.html.haml +3 -3
- data/app/views/elabs/articles/_article.html.haml +1 -1
- data/app/views/elabs/articles/_article.rss.builder +7 -0
- data/app/views/elabs/articles/_article_inline.html.haml +8 -0
- data/app/views/elabs/articles/index.rss.builder +14 -0
- data/app/views/elabs/articles/show.html.haml +4 -4
- data/app/views/elabs/comments/_comments.html.haml +4 -3
- data/app/views/elabs/comments/_form.html.haml +18 -6
- data/app/views/elabs/languages/_associations.html.haml +15 -5
- data/app/views/elabs/layouts/_footer.html.haml +8 -1
- data/app/views/elabs/layouts/_hidden_entry.html.haml +4 -4
- data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -4
- data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +6 -0
- data/app/views/elabs/layouts/_shortcode_infinite_loop.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_infinite_loop_inline.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_missing_content.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_missing_content_inline.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +2 -0
- data/app/views/elabs/layouts/admin_application.html.haml +2 -2
- data/app/views/elabs/layouts/application.html.haml +11 -3
- data/app/views/elabs/layouts/member_application.html.haml +5 -2
- data/app/views/elabs/layouts/widgets/_github_repo_card.html.haml +12 -0
- data/app/views/elabs/layouts/widgets/_github_repo_inline.html.haml +8 -0
- data/app/views/elabs/layouts/widgets/_github_user_card.html.haml +7 -0
- data/app/views/elabs/layouts/widgets/_gitlab_group_card.html.haml +11 -0
- data/app/views/elabs/layouts/widgets/_gitlab_repo_card.html.haml +12 -0
- data/app/views/elabs/layouts/widgets/_gitlab_repo_inline.html.haml +8 -0
- data/app/views/elabs/layouts/widgets/_gitlab_user_card.html.haml +11 -0
- data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +5 -0
- data/app/views/elabs/layouts/widgets/vue/_github_repo_card_vue.html.haml +72 -0
- data/app/views/elabs/layouts/widgets/vue/_github_user_card_vue.html.haml +64 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_group_card_vue.html.haml +64 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_repo_card_vue.html.haml +69 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_user_card_vue.html.haml +99 -0
- data/app/views/elabs/licenses/_associations.html.haml +15 -5
- data/app/views/elabs/licenses/show.json.jbuilder +1 -1
- data/app/views/elabs/member/albums/_form.html.haml +12 -1
- data/app/views/elabs/member/albums/index.html.haml +4 -4
- data/app/views/elabs/member/articles/_form.html.haml +12 -1
- data/app/views/elabs/member/articles/index.html.haml +4 -4
- data/app/views/elabs/member/markdown_previewer/preview.json.jbuilder +2 -0
- data/app/views/elabs/member/notes/_form.html.haml +12 -1
- data/app/views/elabs/member/notes/index.html.haml +4 -4
- data/app/views/elabs/member/notifications/index.html.haml +1 -1
- data/app/views/elabs/member/preferences/_form.html.haml +2 -1
- data/app/views/elabs/member/projects/_form.html.haml +18 -2
- data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
- data/app/views/elabs/member/projects/index.html.haml +4 -4
- data/app/views/elabs/member/uploads/_form.html.haml +12 -1
- data/app/views/elabs/member/uploads/index.html.haml +6 -9
- data/app/views/elabs/member/users/_form.html.haml +2 -1
- data/app/views/elabs/notes/_note.html.haml +2 -2
- data/app/views/elabs/notes/_note.rss.builder +7 -0
- data/app/views/elabs/notes/_note_inline.haml +8 -0
- data/app/views/elabs/notes/index.rss.builder +14 -0
- data/app/views/elabs/notes/show.html.haml +3 -3
- data/app/views/elabs/projects/_associations.html.haml +12 -4
- data/app/views/elabs/projects/_project.html.haml +1 -1
- data/app/views/elabs/projects/_project.json.jbuilder +2 -0
- data/app/views/elabs/projects/_project.rss.builder +7 -0
- data/app/views/elabs/projects/_project_inline.html.haml +9 -0
- data/app/views/elabs/projects/index.rss.builder +14 -0
- data/app/views/elabs/projects/show.html.haml +20 -9
- data/app/views/elabs/reports/_form.html.haml +2 -1
- data/app/views/elabs/tags/_associations.html.haml +15 -5
- data/app/views/elabs/tags/index.html.haml +2 -0
- data/app/views/elabs/uploads/_preview.html.haml +1 -6
- data/app/views/elabs/uploads/_upload.rss.builder +7 -0
- data/app/views/elabs/uploads/_upload_inline.html.haml +8 -0
- data/app/views/elabs/uploads/index.rss.builder +14 -0
- data/app/views/elabs/uploads/show.html.haml +7 -8
- data/app/views/elabs/users/_associations.html.haml +15 -5
- data/app/views/elabs/users/_user.html.haml +24 -18
- data/app/views/elabs/users/_user_inline.html.haml +7 -0
- data/app/views/elabs/users/show.html.haml +2 -2
- data/config/brakeman.ignore +13 -111
- data/config/locales/en.yml +6 -0
- data/config/locales/fr.yml +6 -0
- data/config/routes.rb +30 -28
- data/db/migrate/20180917133442_add_urls_to_projects.rb +6 -0
- data/db/migrate/20181005105642_add_reason_to_acts.rb +5 -0
- data/db/migrate/20181006073541_add_slugs.rb +39 -0
- data/docs/migrating.md +51 -0
- data/docs/setup.md +1 -0
- data/lib/elabs.rb +5 -0
- data/lib/elabs/version.rb +1 -1
- data/lib/generators/elabs/install_generator.rb +1 -0
- data/lib/generators/elabs/views_generator.rb +0 -1
- data/lib/generators/templates/elabs.rb +4 -0
- data/lib/generators/templates/user_model.rb +6 -0
- data/locale/app.pot +129 -9
- data/locale/en/app.edit.po +127 -7
- data/locale/en/app.po +127 -7
- data/locale/fr/app.edit.po +130 -10
- data/locale/fr/app.po +129 -9
- metadata +59 -5
- data/app/assets/javascripts/elabs/application.js +0 -27
- data/app/assets/stylesheets/elabs/app/_nsfw.scss +0 -5
- data/lib/assets/javascripts/markdown-it-8.4.2.min.js +0 -1
data/config/brakeman.ignore
CHANGED
@@ -1,124 +1,26 @@
|
|
1
1
|
{
|
2
2
|
"ignored_warnings": [
|
3
3
|
{
|
4
|
-
"warning_type": "
|
5
|
-
"warning_code":
|
6
|
-
"fingerprint": "
|
7
|
-
"check_name": "
|
8
|
-
"message": "
|
9
|
-
"file": "app/controllers/
|
10
|
-
"line":
|
11
|
-
"link": "https://brakemanscanner.org/docs/warning_types/
|
12
|
-
"code": "
|
4
|
+
"warning_type": "SQL Injection",
|
5
|
+
"warning_code": 0,
|
6
|
+
"fingerprint": "7d9b0d8fb977bbc2cf5fc42d0ad2c836141fa5ddba8c1ce84fb0dd2108cad6bd",
|
7
|
+
"check_name": "SQL",
|
8
|
+
"message": "Possible SQL injection",
|
9
|
+
"file": "app/controllers/elabs/elabs_public_controller.rb",
|
10
|
+
"line": 48,
|
11
|
+
"link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
|
12
|
+
"code": "orm_request.where(\"#{details[:type]}_id\" => find_related_id_by_slug(details[:type], details[:slug_field], params[field]))",
|
13
13
|
"render_path": null,
|
14
14
|
"location": {
|
15
15
|
"type": "method",
|
16
|
-
"class": "
|
17
|
-
"method": "
|
16
|
+
"class": "Elabs::ElabsPublicController",
|
17
|
+
"method": "build_request_where"
|
18
18
|
},
|
19
|
-
"user_input": "
|
19
|
+
"user_input": "details[:type]",
|
20
20
|
"confidence": "Weak",
|
21
21
|
"note": ""
|
22
|
-
},
|
23
|
-
{
|
24
|
-
"warning_type": "Cross-Site Scripting",
|
25
|
-
"warning_code": 4,
|
26
|
-
"fingerprint": "74d83c9e5d3fb98de33d9c690a9380c40f0e35f3b85f390e871858bb8d34c1fe",
|
27
|
-
"check_name": "LinkToHref",
|
28
|
-
"message": "Potentially unsafe model attribute in link_to href",
|
29
|
-
"file": "app/views/licenses/show.html.haml",
|
30
|
-
"line": 15,
|
31
|
-
"link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
|
32
|
-
"code": "link_to(_(\"TL; DR\"), License.find(params[:id]).tldr_url, :target => \"_blank\")",
|
33
|
-
"render_path": [{"type":"controller","class":"LicensesController","method":"show","line":18,"file":"app/controllers/licenses_controller.rb"}],
|
34
|
-
"location": {
|
35
|
-
"type": "template",
|
36
|
-
"template": "licenses/show"
|
37
|
-
},
|
38
|
-
"user_input": "License.find(params[:id]).tldr_url",
|
39
|
-
"confidence": "Weak",
|
40
|
-
"note": "URLS are set by admins only"
|
41
|
-
},
|
42
|
-
{
|
43
|
-
"warning_type": "Unscoped Find",
|
44
|
-
"warning_code": 82,
|
45
|
-
"fingerprint": "96f2f0238c7611c20a731155fa4ab107874326d762a84e9b1858c0801c10d741",
|
46
|
-
"check_name": "UnscopedFind",
|
47
|
-
"message": "Unscoped call to Note#find",
|
48
|
-
"file": "app/controllers/notes_controller.rb",
|
49
|
-
"line": 18,
|
50
|
-
"link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
|
51
|
-
"code": "Note.find(params[:id])",
|
52
|
-
"render_path": null,
|
53
|
-
"location": {
|
54
|
-
"type": "method",
|
55
|
-
"class": "NotesController",
|
56
|
-
"method": "set_note"
|
57
|
-
},
|
58
|
-
"user_input": "params[:id]",
|
59
|
-
"confidence": "Weak",
|
60
|
-
"note": ""
|
61
|
-
},
|
62
|
-
{
|
63
|
-
"warning_type": "Unscoped Find",
|
64
|
-
"warning_code": 82,
|
65
|
-
"fingerprint": "b65152f1b2c4e9e18bcc4a3fd637b7bd5dd4b79421460a2c764bc3ead2ad1aa0",
|
66
|
-
"check_name": "UnscopedFind",
|
67
|
-
"message": "Unscoped call to Project#find",
|
68
|
-
"file": "app/controllers/projects_controller.rb",
|
69
|
-
"line": 23,
|
70
|
-
"link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
|
71
|
-
"code": "Project.find(params[:id])",
|
72
|
-
"render_path": null,
|
73
|
-
"location": {
|
74
|
-
"type": "method",
|
75
|
-
"class": "ProjectsController",
|
76
|
-
"method": "set_project"
|
77
|
-
},
|
78
|
-
"user_input": "params[:id]",
|
79
|
-
"confidence": "Weak",
|
80
|
-
"note": ""
|
81
|
-
},
|
82
|
-
{
|
83
|
-
"warning_type": "Unscoped Find",
|
84
|
-
"warning_code": 82,
|
85
|
-
"fingerprint": "c03df681f497ea4ef182b6236295be2dd61879612b212e7a6ea3a1b2e6faf7d0",
|
86
|
-
"check_name": "UnscopedFind",
|
87
|
-
"message": "Unscoped call to Upload#find",
|
88
|
-
"file": "app/controllers/uploads_controller.rb",
|
89
|
-
"line": 17,
|
90
|
-
"link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
|
91
|
-
"code": "Upload.find(params[:id])",
|
92
|
-
"render_path": null,
|
93
|
-
"location": {
|
94
|
-
"type": "method",
|
95
|
-
"class": "UploadsController",
|
96
|
-
"method": "set_upload"
|
97
|
-
},
|
98
|
-
"user_input": "params[:id]",
|
99
|
-
"confidence": "Weak",
|
100
|
-
"note": ""
|
101
|
-
},
|
102
|
-
{
|
103
|
-
"warning_type": "Cross-Site Scripting",
|
104
|
-
"warning_code": 4,
|
105
|
-
"fingerprint": "c125f39a448be85c1445467afabaf1a1992e9e1bf59af040b0277b33fa708901",
|
106
|
-
"check_name": "LinkToHref",
|
107
|
-
"message": "Potentially unsafe model attribute in link_to href",
|
108
|
-
"file": "app/views/licenses/show.html.haml",
|
109
|
-
"line": 12,
|
110
|
-
"link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
|
111
|
-
"code": "link_to(_(\"Home page\"), License.find(params[:id]).url, :target => \"_blank\")",
|
112
|
-
"render_path": [{"type":"controller","class":"LicensesController","method":"show","line":18,"file":"app/controllers/licenses_controller.rb"}],
|
113
|
-
"location": {
|
114
|
-
"type": "template",
|
115
|
-
"template": "licenses/show"
|
116
|
-
},
|
117
|
-
"user_input": "License.find(params[:id]).url",
|
118
|
-
"confidence": "Weak",
|
119
|
-
"note": "URLS are set by admins only"
|
120
22
|
}
|
121
23
|
],
|
122
|
-
"updated": "2018-
|
24
|
+
"updated": "2018-10-09 00:22:09 +0200",
|
123
25
|
"brakeman_version": "4.3.1"
|
124
26
|
}
|
data/config/routes.rb
CHANGED
@@ -8,50 +8,50 @@ Elabs::Engine.routes.draw do
|
|
8
8
|
unlocks: 'elabs/auth/unlocks'
|
9
9
|
}
|
10
10
|
# Resources
|
11
|
-
resources :albums, only: %i[index show] do
|
11
|
+
resources :albums, only: %i[index show], param: :slug do
|
12
12
|
resources :uploads, only: %i[index]
|
13
|
-
post 'comment', to: 'albums#create_comment', as: 'create_comment'
|
13
|
+
post 'comment', to: 'albums#create_comment', as: 'create_comment', param: :slug
|
14
14
|
end
|
15
|
-
resources :articles, only: %i[index show] do
|
16
|
-
post 'comment', to: 'articles#create_comment', as: 'create_comment'
|
15
|
+
resources :articles, only: %i[index show], param: :slug do
|
16
|
+
post 'comment', to: 'articles#create_comment', as: 'create_comment', param: :slug
|
17
17
|
end
|
18
|
-
resources :notes, only: %i[index show] do
|
19
|
-
post 'comment', to: 'notes#create_comment', as: 'create_comment'
|
18
|
+
resources :notes, only: %i[index show], param: :slug do
|
19
|
+
post 'comment', to: 'notes#create_comment', as: 'create_comment', param: :slug
|
20
20
|
end
|
21
|
-
resources :projects, only: %i[index show] do
|
21
|
+
resources :projects, only: %i[index show], param: :slug do
|
22
22
|
resources :articles, only: %i[index]
|
23
23
|
resources :albums, only: %i[index]
|
24
24
|
resources :notes, only: %i[index]
|
25
25
|
resources :uploads, only: %i[index]
|
26
|
-
post 'comment', to: 'projects#create_comment', as: 'create_comment'
|
26
|
+
post 'comment', to: 'projects#create_comment', as: 'create_comment', param: :slug
|
27
27
|
end
|
28
|
-
resources :uploads, only: %i[index show] do
|
29
|
-
post 'comment', to: 'uploads#create_comment', as: 'create_comment'
|
28
|
+
resources :uploads, only: %i[index show], param: :slug do
|
29
|
+
post 'comment', to: 'uploads#create_comment', as: 'create_comment', param: :slug
|
30
30
|
end
|
31
31
|
|
32
32
|
# Classifiers
|
33
|
-
resources :languages, only: %i[index show] do
|
33
|
+
resources :languages, only: %i[index show], param: :iso639_1 do
|
34
34
|
resources :albums, only: %i[index]
|
35
35
|
resources :articles, only: %i[index]
|
36
36
|
resources :notes, only: %i[index]
|
37
37
|
resources :projects, only: %i[index]
|
38
38
|
resources :uploads, only: %i[index]
|
39
39
|
end
|
40
|
-
resources :licenses, only: %i[index show] do
|
40
|
+
resources :licenses, only: %i[index show], param: :slug do
|
41
41
|
resources :albums, only: %i[index]
|
42
42
|
resources :articles, only: %i[index]
|
43
43
|
resources :notes, only: %i[index]
|
44
44
|
resources :projects, only: %i[index]
|
45
45
|
resources :uploads, only: %i[index]
|
46
46
|
end
|
47
|
-
resources :tags, only: %i[index show] do
|
47
|
+
resources :tags, only: %i[index show], param: :slug do
|
48
48
|
resources :albums, only: %i[index]
|
49
49
|
resources :articles, only: %i[index]
|
50
50
|
resources :notes, only: %i[index]
|
51
51
|
resources :projects, only: %i[index]
|
52
52
|
resources :uploads, only: %i[index]
|
53
53
|
end
|
54
|
-
resources :users, only: %i[index show] do
|
54
|
+
resources :users, only: %i[index show], param: :username do
|
55
55
|
resources :albums, only: %i[index]
|
56
56
|
resources :articles, only: %i[index]
|
57
57
|
resources :notes, only: %i[index]
|
@@ -67,19 +67,19 @@ Elabs::Engine.routes.draw do
|
|
67
67
|
|
68
68
|
# Member
|
69
69
|
namespace :member do
|
70
|
-
resources :albums, except: %i[show] do
|
70
|
+
resources :albums, except: %i[show], param: :slug do
|
71
71
|
put 'toggle_publication', to: 'albums#toggle_publication', as: :toggle_publication
|
72
72
|
end
|
73
|
-
resources :articles, except: %i[show] do
|
73
|
+
resources :articles, except: %i[show], param: :slug do
|
74
74
|
put 'toggle_publication', to: 'articles#toggle_publication', as: :toggle_publication
|
75
75
|
end
|
76
|
-
resources :notes, except: %i[show] do
|
76
|
+
resources :notes, except: %i[show], param: :slug do
|
77
77
|
put 'toggle_publication', to: 'notes#toggle_publication', as: :toggle_publication
|
78
78
|
end
|
79
|
-
resources :projects, except: %i[show] do
|
79
|
+
resources :projects, except: %i[show], param: :slug do
|
80
80
|
put 'toggle_publication', to: 'projects#toggle_publication', as: :toggle_publication
|
81
81
|
end
|
82
|
-
resources :uploads, except: %i[show] do
|
82
|
+
resources :uploads, except: %i[show], param: :slug do
|
83
83
|
put 'toggle_publication', to: 'uploads#toggle_publication', as: :toggle_publication
|
84
84
|
end
|
85
85
|
|
@@ -90,32 +90,34 @@ Elabs::Engine.routes.draw do
|
|
90
90
|
|
91
91
|
get '/infos', to: 'users#edit', as: :edit_infos
|
92
92
|
patch '/infos', to: 'users#update', as: :update_infos
|
93
|
+
|
94
|
+
post '/markdown_previewer', to: 'markdown_previewer#preview', as: :markdown_preview
|
93
95
|
end
|
94
96
|
|
95
97
|
# Admin
|
96
98
|
namespace :admin do
|
97
99
|
# Content resources
|
98
|
-
resources :albums, only: %i[index destroy] do
|
100
|
+
resources :albums, only: %i[index destroy], param: :slug do
|
99
101
|
put 'toggle_lock', to: 'albums#toggle_lock', as: :toggle_lock
|
100
102
|
end
|
101
|
-
resources :articles, only: %i[index destroy] do
|
103
|
+
resources :articles, only: %i[index destroy], param: :slug do
|
102
104
|
put 'toggle_lock', to: 'articles#toggle_lock', as: :toggle_lock
|
103
105
|
end
|
104
|
-
resources :notes, only: %i[index destroy] do
|
106
|
+
resources :notes, only: %i[index destroy], param: :slug do
|
105
107
|
put 'toggle_lock', to: 'notes#toggle_lock', as: :toggle_lock
|
106
108
|
end
|
107
|
-
resources :projects, only: %i[index destroy] do
|
109
|
+
resources :projects, only: %i[index destroy], param: :slug do
|
108
110
|
put 'toggle_lock', to: 'projects#toggle_lock', as: :toggle_lock
|
109
111
|
end
|
110
|
-
resources :uploads, only: %i[index destroy] do
|
112
|
+
resources :uploads, only: %i[index destroy], param: :slug do
|
111
113
|
put 'toggle_lock', to: 'uploads#toggle_lock', as: :toggle_lock
|
112
114
|
end
|
113
115
|
|
114
116
|
# Basic resources
|
115
|
-
resources :languages, except: %i[show]
|
116
|
-
resources :licenses, except: %i[show]
|
117
|
+
resources :languages, except: %i[show], param: :iso639_1
|
118
|
+
resources :licenses, except: %i[show], param: :slug
|
117
119
|
resources :reports, only: %i[index destroy]
|
118
|
-
resources :tags, except: %i[create show]
|
119
|
-
resources :users, only: %i[index show destroy]
|
120
|
+
resources :tags, except: %i[create show], param: :slug
|
121
|
+
resources :users, only: %i[index show destroy], param: :username
|
120
122
|
end
|
121
123
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class AddSlugs < ActiveRecord::Migration[5.2]
|
2
|
+
def up
|
3
|
+
%i[licenses tags albums articles notes projects uploads].each do |table|
|
4
|
+
add_column table, :slug, :string, null: true
|
5
|
+
end
|
6
|
+
|
7
|
+
ActiveRecord::Base.record_timestamps = false
|
8
|
+
begin
|
9
|
+
[
|
10
|
+
{ model: Elabs::License, actable: false },
|
11
|
+
{ model: Elabs::Tag, actable: false },
|
12
|
+
{ model: Elabs::Album, actable: true },
|
13
|
+
{ model: Elabs::Article, actable: true },
|
14
|
+
{ model: Elabs::Note, actable: true },
|
15
|
+
{ model: Elabs::Project, actable: true },
|
16
|
+
{ model: Elabs::Upload, actable: true }
|
17
|
+
].each do |table|
|
18
|
+
table[:model].all.each do |record|
|
19
|
+
record.fill_slug
|
20
|
+
record.minor_update = true if table[:actable]
|
21
|
+
record.save!
|
22
|
+
end
|
23
|
+
end
|
24
|
+
ensure
|
25
|
+
ActiveRecord::Base.record_timestamps = true
|
26
|
+
end
|
27
|
+
|
28
|
+
%i[licenses tags albums articles notes projects uploads].each do |table|
|
29
|
+
change_column table, :slug, :string, null: false
|
30
|
+
add_index table, :slug, unique: true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def down
|
35
|
+
%i[licenses tags albums articles notes projects uploads].each do |table|
|
36
|
+
remove_column table, :slug
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/docs/migrating.md
CHANGED
@@ -1,5 +1,56 @@
|
|
1
1
|
# Migration guide
|
2
2
|
|
3
|
+
## From 3.x to 4.0.0
|
4
|
+
|
5
|
+
First of all, read the changelog for the 4.0.0 release.
|
6
|
+
|
7
|
+
Use a version control system to manage the changes and the overrides you
|
8
|
+
made in your own application.
|
9
|
+
|
10
|
+
- Add the Commonmarker gem: `gem 'commonmarker'` if you use the default
|
11
|
+
views
|
12
|
+
- Update the base configuration (initializer, languages, ...):
|
13
|
+
`rails g elabs:install` and accept to override everything. Then check
|
14
|
+
changes
|
15
|
+
- Apply the last migrations: `rake elabs:install:migrations` then
|
16
|
+
`rails db:migrate`
|
17
|
+
|
18
|
+
Don't forget to rebuild the assets...
|
19
|
+
|
20
|
+
If you have existing content you need to redirect you can use a runner
|
21
|
+
like this one:
|
22
|
+
|
23
|
+
```rb
|
24
|
+
# Example for Apache
|
25
|
+
# Uncomment if you need to enable RewriteEngine (mod_rewrite is required)
|
26
|
+
puts "# RewriteEngine on"
|
27
|
+
|
28
|
+
[
|
29
|
+
{ model: Elabs::Language, subs: %w[albums articles notes projects uploads] },
|
30
|
+
{ model: Elabs::License, subs: %w[albums articles notes projects uploads] },
|
31
|
+
{ model: Elabs::Tag, subs: %w[albums articles notes projects uploads] },
|
32
|
+
{ model: Elabs::User, subs: %w[albums articles notes projects uploads] },
|
33
|
+
{ model: Elabs::Album, subs: [] },
|
34
|
+
{ model: Elabs::Article, subs: [] },
|
35
|
+
{ model: Elabs::Note, subs: [] },
|
36
|
+
{ model: Elabs::Project, subs: %w[albums articles notes uploads] },
|
37
|
+
{ model: Elabs::Upload, subs: [] },
|
38
|
+
].each do |config|
|
39
|
+
slug_field = config[:model]::SLUG_FIELD
|
40
|
+
endpoint = config[:model].to_s.demodulize.tableize
|
41
|
+
puts '# Entities redirection'
|
42
|
+
config[:model].all.each do |record|
|
43
|
+
# Entity
|
44
|
+
puts "Redirect 301 /#{endpoint}/#{record.id} /#{endpoint}/#{record.send(slug_field)}"
|
45
|
+
|
46
|
+
# Nested resources
|
47
|
+
config[:subs].each do |sub|
|
48
|
+
puts "Redirect 301 /#{endpoint}/#{record.id}/#{sub} /#{endpoint}/#{record.send(slug_field)}/#{sub}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
3
54
|
## From 2.x to 3.0.0
|
4
55
|
|
5
56
|
First of all, read the changelog for the 3.0.0 release
|
data/docs/setup.md
CHANGED
data/lib/elabs.rb
CHANGED
@@ -34,9 +34,14 @@ module Elabs
|
|
34
34
|
mattr_accessor :av_formats_video
|
35
35
|
@@av_formats_video = ['video/mp4', 'video/webm', 'video/ogg']
|
36
36
|
|
37
|
+
# Whether or not to use avatars. This feature is experimental
|
37
38
|
mattr_accessor :use_avatars
|
38
39
|
@@use_avatars = false
|
39
40
|
|
41
|
+
# Close the registrations
|
42
|
+
mattr_accessor :users_can_register
|
43
|
+
@@users_can_register = true
|
44
|
+
|
40
45
|
def self.setup
|
41
46
|
yield self
|
42
47
|
end
|
data/lib/elabs/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# Don't forget to restart the server when you edit this file.
|
1
2
|
Elabs.setup do |config|
|
2
3
|
# Site name, used in menus and other places
|
3
4
|
config.site_name = 'A new app'
|
@@ -28,4 +29,7 @@ Elabs.setup do |config|
|
|
28
29
|
# attached file is deleted on failure, resulting on avatar suppression.
|
29
30
|
# Set this value to false to avoid using avatars
|
30
31
|
config.use_avatars = false
|
32
|
+
|
33
|
+
# Open/close the registrations
|
34
|
+
config.users_can_register = true
|
31
35
|
end
|