elabs 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +89 -0
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +7 -2
  5. data/README.md +24 -17
  6. data/ROADMAP.md +8 -7
  7. data/app/assets/javascripts/elabs/application.js.erb +42 -0
  8. data/app/assets/javascripts/elabs/forms.js +10 -0
  9. data/app/assets/javascripts/elabs/helpers-markdown.js +11 -33
  10. data/app/assets/javascripts/elabs/helpers.js +28 -0
  11. data/app/assets/javascripts/elabs/hljs.js +4 -0
  12. data/app/assets/stylesheets/elabs/_colors.scss +5 -0
  13. data/app/assets/stylesheets/elabs/_fixes.scss +6 -0
  14. data/app/assets/stylesheets/elabs/_icons.scss +4 -0
  15. data/app/assets/stylesheets/elabs/app/_acts.scss +11 -0
  16. data/app/assets/stylesheets/elabs/app/_buttons.scss +8 -0
  17. data/app/assets/stylesheets/elabs/app/_comments.scss +10 -1
  18. data/app/assets/stylesheets/elabs/app/_content.scss +15 -0
  19. data/app/assets/stylesheets/elabs/app/_content_statuses.scss +32 -0
  20. data/app/assets/stylesheets/elabs/app/_forms.scss +5 -0
  21. data/app/assets/stylesheets/elabs/app/_helpers.scss +10 -0
  22. data/app/assets/stylesheets/elabs/app/_layout.scss +4 -0
  23. data/app/assets/stylesheets/elabs/app/_modals.scss +4 -0
  24. data/app/assets/stylesheets/elabs/app/_tables.scss +31 -0
  25. data/app/assets/stylesheets/elabs/app/_typo.scss +14 -0
  26. data/app/assets/stylesheets/elabs/app/_users.scss +14 -6
  27. data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +8 -1
  28. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +1 -26
  29. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +11 -1
  30. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +26 -0
  31. data/app/assets/stylesheets/elabs/app/mixins/_content-inline.scss +7 -0
  32. data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +88 -0
  33. data/app/assets/stylesheets/elabs/lib/_hljs.scss +5 -0
  34. data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +11 -11
  35. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +10 -2
  36. data/app/assets/stylesheets/elabs/style.scss +11 -1
  37. data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
  38. data/app/controllers/elabs/admin/admin_content_application_controller.rb +2 -2
  39. data/app/controllers/elabs/admin/languages_controller.rb +1 -1
  40. data/app/controllers/elabs/admin/licenses_controller.rb +1 -1
  41. data/app/controllers/elabs/admin/tags_controller.rb +1 -1
  42. data/app/controllers/elabs/admin/users_controller.rb +1 -1
  43. data/app/controllers/elabs/albums_controller.rb +1 -1
  44. data/app/controllers/elabs/articles_controller.rb +1 -1
  45. data/app/controllers/elabs/content_application_controller.rb +2 -1
  46. data/app/controllers/elabs/elabs_public_controller.rb +28 -8
  47. data/app/controllers/elabs/languages_controller.rb +1 -1
  48. data/app/controllers/elabs/licenses_controller.rb +1 -1
  49. data/app/controllers/elabs/member/albums_controller.rb +1 -1
  50. data/app/controllers/elabs/member/articles_controller.rb +1 -1
  51. data/app/controllers/elabs/member/markdown_previewer_controller.rb +11 -0
  52. data/app/controllers/elabs/member/member_content_application_controller.rb +2 -2
  53. data/app/controllers/elabs/member/notes_controller.rb +1 -1
  54. data/app/controllers/elabs/member/projects_controller.rb +1 -1
  55. data/app/controllers/elabs/member/uploads_controller.rb +1 -1
  56. data/app/controllers/elabs/notes_controller.rb +1 -1
  57. data/app/controllers/elabs/projects_controller.rb +1 -1
  58. data/app/controllers/elabs/tags_controller.rb +1 -6
  59. data/app/controllers/elabs/uploads_controller.rb +1 -1
  60. data/app/controllers/elabs/users_controller.rb +1 -1
  61. data/app/helpers/elabs/acts_helper.rb +2 -2
  62. data/app/helpers/elabs/application_helper.rb +30 -3
  63. data/app/helpers/elabs/content_helper.rb +9 -3
  64. data/app/helpers/elabs/content_renderer_helper.rb +118 -8
  65. data/app/helpers/elabs/rss_helper.rb +9 -0
  66. data/app/helpers/elabs/thumbnails_helper.rb +24 -19
  67. data/app/helpers/elabs/time_helper.rb +7 -1
  68. data/app/models/elabs/album.rb +2 -0
  69. data/app/models/elabs/application_content_record.rb +3 -0
  70. data/app/models/elabs/article.rb +2 -0
  71. data/app/models/elabs/concerns/actable_entity.rb +17 -2
  72. data/app/models/elabs/concerns/content_entity.rb +2 -2
  73. data/app/models/elabs/concerns/sluggable.rb +40 -0
  74. data/app/models/elabs/language.rb +8 -0
  75. data/app/models/elabs/license.rb +5 -0
  76. data/app/models/elabs/note.rb +2 -0
  77. data/app/models/elabs/project.rb +3 -0
  78. data/app/models/elabs/tag.rb +5 -0
  79. data/app/models/elabs/upload.rb +2 -0
  80. data/app/models/elabs/user.rb +10 -2
  81. data/app/views/elabs/acts/_act.rss.builder +22 -0
  82. data/app/views/elabs/acts/index.html.haml +5 -1
  83. data/app/views/elabs/acts/index.rss.builder +15 -0
  84. data/app/views/elabs/admin/albums/index.html.haml +4 -4
  85. data/app/views/elabs/admin/articles/index.html.haml +4 -4
  86. data/app/views/elabs/admin/languages/_form.html.haml +2 -1
  87. data/app/views/elabs/admin/licenses/_form.html.haml +2 -1
  88. data/app/views/elabs/admin/notes/index.html.haml +5 -5
  89. data/app/views/elabs/admin/projects/index.html.haml +4 -4
  90. data/app/views/elabs/admin/reports/index.html.haml +2 -2
  91. data/app/views/elabs/admin/tags/_form.html.haml +2 -1
  92. data/app/views/elabs/admin/uploads/index.html.haml +4 -4
  93. data/app/views/elabs/admin/users/index.html.haml +3 -3
  94. data/app/views/elabs/admin/users/show.html.haml +2 -2
  95. data/app/views/elabs/albums/_album.html.haml +1 -1
  96. data/app/views/elabs/albums/_album.rss.builder +7 -0
  97. data/app/views/elabs/albums/_album_inline.html.haml +8 -0
  98. data/app/views/elabs/albums/index.rss.builder +14 -0
  99. data/app/views/elabs/albums/show.html.haml +3 -3
  100. data/app/views/elabs/articles/_article.html.haml +1 -1
  101. data/app/views/elabs/articles/_article.rss.builder +7 -0
  102. data/app/views/elabs/articles/_article_inline.html.haml +8 -0
  103. data/app/views/elabs/articles/index.rss.builder +14 -0
  104. data/app/views/elabs/articles/show.html.haml +4 -4
  105. data/app/views/elabs/comments/_comments.html.haml +4 -3
  106. data/app/views/elabs/comments/_form.html.haml +18 -6
  107. data/app/views/elabs/languages/_associations.html.haml +15 -5
  108. data/app/views/elabs/layouts/_footer.html.haml +8 -1
  109. data/app/views/elabs/layouts/_hidden_entry.html.haml +4 -4
  110. data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -4
  111. data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +6 -0
  112. data/app/views/elabs/layouts/_shortcode_infinite_loop.html.haml +2 -0
  113. data/app/views/elabs/layouts/_shortcode_infinite_loop_inline.html.haml +2 -0
  114. data/app/views/elabs/layouts/_shortcode_missing_content.html.haml +2 -0
  115. data/app/views/elabs/layouts/_shortcode_missing_content_inline.html.haml +2 -0
  116. data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +2 -0
  117. data/app/views/elabs/layouts/admin_application.html.haml +2 -2
  118. data/app/views/elabs/layouts/application.html.haml +11 -3
  119. data/app/views/elabs/layouts/member_application.html.haml +5 -2
  120. data/app/views/elabs/layouts/widgets/_github_repo_card.html.haml +12 -0
  121. data/app/views/elabs/layouts/widgets/_github_repo_inline.html.haml +8 -0
  122. data/app/views/elabs/layouts/widgets/_github_user_card.html.haml +7 -0
  123. data/app/views/elabs/layouts/widgets/_gitlab_group_card.html.haml +11 -0
  124. data/app/views/elabs/layouts/widgets/_gitlab_repo_card.html.haml +12 -0
  125. data/app/views/elabs/layouts/widgets/_gitlab_repo_inline.html.haml +8 -0
  126. data/app/views/elabs/layouts/widgets/_gitlab_user_card.html.haml +11 -0
  127. data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +5 -0
  128. data/app/views/elabs/layouts/widgets/vue/_github_repo_card_vue.html.haml +72 -0
  129. data/app/views/elabs/layouts/widgets/vue/_github_user_card_vue.html.haml +64 -0
  130. data/app/views/elabs/layouts/widgets/vue/_gitlab_group_card_vue.html.haml +64 -0
  131. data/app/views/elabs/layouts/widgets/vue/_gitlab_repo_card_vue.html.haml +69 -0
  132. data/app/views/elabs/layouts/widgets/vue/_gitlab_user_card_vue.html.haml +99 -0
  133. data/app/views/elabs/licenses/_associations.html.haml +15 -5
  134. data/app/views/elabs/licenses/show.json.jbuilder +1 -1
  135. data/app/views/elabs/member/albums/_form.html.haml +12 -1
  136. data/app/views/elabs/member/albums/index.html.haml +4 -4
  137. data/app/views/elabs/member/articles/_form.html.haml +12 -1
  138. data/app/views/elabs/member/articles/index.html.haml +4 -4
  139. data/app/views/elabs/member/markdown_previewer/preview.json.jbuilder +2 -0
  140. data/app/views/elabs/member/notes/_form.html.haml +12 -1
  141. data/app/views/elabs/member/notes/index.html.haml +4 -4
  142. data/app/views/elabs/member/notifications/index.html.haml +1 -1
  143. data/app/views/elabs/member/preferences/_form.html.haml +2 -1
  144. data/app/views/elabs/member/projects/_form.html.haml +18 -2
  145. data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
  146. data/app/views/elabs/member/projects/index.html.haml +4 -4
  147. data/app/views/elabs/member/uploads/_form.html.haml +12 -1
  148. data/app/views/elabs/member/uploads/index.html.haml +6 -9
  149. data/app/views/elabs/member/users/_form.html.haml +2 -1
  150. data/app/views/elabs/notes/_note.html.haml +2 -2
  151. data/app/views/elabs/notes/_note.rss.builder +7 -0
  152. data/app/views/elabs/notes/_note_inline.haml +8 -0
  153. data/app/views/elabs/notes/index.rss.builder +14 -0
  154. data/app/views/elabs/notes/show.html.haml +3 -3
  155. data/app/views/elabs/projects/_associations.html.haml +12 -4
  156. data/app/views/elabs/projects/_project.html.haml +1 -1
  157. data/app/views/elabs/projects/_project.json.jbuilder +2 -0
  158. data/app/views/elabs/projects/_project.rss.builder +7 -0
  159. data/app/views/elabs/projects/_project_inline.html.haml +9 -0
  160. data/app/views/elabs/projects/index.rss.builder +14 -0
  161. data/app/views/elabs/projects/show.html.haml +20 -9
  162. data/app/views/elabs/reports/_form.html.haml +2 -1
  163. data/app/views/elabs/tags/_associations.html.haml +15 -5
  164. data/app/views/elabs/tags/index.html.haml +2 -0
  165. data/app/views/elabs/uploads/_preview.html.haml +1 -6
  166. data/app/views/elabs/uploads/_upload.rss.builder +7 -0
  167. data/app/views/elabs/uploads/_upload_inline.html.haml +8 -0
  168. data/app/views/elabs/uploads/index.rss.builder +14 -0
  169. data/app/views/elabs/uploads/show.html.haml +7 -8
  170. data/app/views/elabs/users/_associations.html.haml +15 -5
  171. data/app/views/elabs/users/_user.html.haml +24 -18
  172. data/app/views/elabs/users/_user_inline.html.haml +7 -0
  173. data/app/views/elabs/users/show.html.haml +2 -2
  174. data/config/brakeman.ignore +13 -111
  175. data/config/locales/en.yml +6 -0
  176. data/config/locales/fr.yml +6 -0
  177. data/config/routes.rb +30 -28
  178. data/db/migrate/20180917133442_add_urls_to_projects.rb +6 -0
  179. data/db/migrate/20181005105642_add_reason_to_acts.rb +5 -0
  180. data/db/migrate/20181006073541_add_slugs.rb +39 -0
  181. data/docs/migrating.md +51 -0
  182. data/docs/setup.md +1 -0
  183. data/lib/elabs.rb +5 -0
  184. data/lib/elabs/version.rb +1 -1
  185. data/lib/generators/elabs/install_generator.rb +1 -0
  186. data/lib/generators/elabs/views_generator.rb +0 -1
  187. data/lib/generators/templates/elabs.rb +4 -0
  188. data/lib/generators/templates/user_model.rb +6 -0
  189. data/locale/app.pot +129 -9
  190. data/locale/en/app.edit.po +127 -7
  191. data/locale/en/app.po +127 -7
  192. data/locale/fr/app.edit.po +130 -10
  193. data/locale/fr/app.po +129 -9
  194. metadata +59 -5
  195. data/app/assets/javascripts/elabs/application.js +0 -27
  196. data/app/assets/stylesheets/elabs/app/_nsfw.scss +0 -5
  197. data/lib/assets/javascripts/markdown-it-8.4.2.min.js +0 -1
@@ -1,124 +1,26 @@
1
1
  {
2
2
  "ignored_warnings": [
3
3
  {
4
- "warning_type": "Unscoped Find",
5
- "warning_code": 82,
6
- "fingerprint": "14eb16e2efd5474628f981fdff434cb13c73df4d17b93ceea6b82a8f99a09552",
7
- "check_name": "UnscopedFind",
8
- "message": "Unscoped call to Album#find",
9
- "file": "app/controllers/albums_controller.rb",
10
- "line": 18,
11
- "link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
12
- "code": "Album.find(params[:id])",
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": "AlbumsController",
17
- "method": "set_album"
16
+ "class": "Elabs::ElabsPublicController",
17
+ "method": "build_request_where"
18
18
  },
19
- "user_input": "params[:id]",
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-08-01 07:04:08 +0200",
24
+ "updated": "2018-10-09 00:22:09 +0200",
123
25
  "brakeman_version": "4.3.1"
124
26
  }
@@ -0,0 +1,6 @@
1
+ en:
2
+ # From rails-i18n:
3
+ # https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/
4
+ time:
5
+ formats:
6
+ medium: "%d %b %Y %I:%M %p"
@@ -0,0 +1,6 @@
1
+ fr:
2
+ # From rails-i18n:
3
+ # https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/
4
+ time:
5
+ formats:
6
+ medium: "%d %b %Y %H:%M"
@@ -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,6 @@
1
+ class AddUrlsToProjects < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :projects, :sources_url, :string
4
+ add_column :projects, :docs_url, :string
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddReasonToActs < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :acts, :reason, :string, default: nil, null: true
4
+ end
5
+ 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
@@ -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
@@ -37,6 +37,7 @@ gem 'elabs'
37
37
 
38
38
  # If you want to use the default views:
39
39
  gem 'active_link_to'
40
+ gem 'commonmarker'
40
41
  gem 'haml-rails'
41
42
  gem 'mini_magick'
42
43
  ```
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Elabs
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '4.0.0'.freeze
3
3
  end
@@ -18,6 +18,7 @@ module Elabs
18
18
 
19
19
  def copy_files
20
20
  template 'elabs.rb', 'config/initializers/elabs.rb'
21
+ template 'user_model.rb', 'app/models/user.rb'
21
22
  template 'fast_gettext.rb', 'config/initializers/fast_gettext.rb'
22
23
  directory 'locale'
23
24
  end
@@ -18,7 +18,6 @@ module Elabs
18
18
 
19
19
  def copy_views
20
20
  directory 'app/views/elabs'
21
- directory 'app/views/devise'
22
21
  end
23
22
  end
24
23
  end
@@ -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