pages_core 3.5.1 → 3.6.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.
Files changed (312) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +7 -13
  3. data/app/assets/javascripts/pages/{admin.es6.jsx → admin.jsx} +2 -4
  4. data/app/assets/javascripts/pages/admin/components.jsx +2 -0
  5. data/app/assets/javascripts/pages/admin/components/attachment.jsx +130 -0
  6. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +131 -0
  7. data/app/assets/javascripts/pages/admin/components/attachments.jsx +211 -0
  8. data/app/assets/javascripts/pages/admin/components/date_range_select.jsx +174 -0
  9. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +174 -0
  10. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +57 -0
  11. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +44 -0
  12. data/app/assets/javascripts/pages/admin/components/focal_point.jsx +82 -0
  13. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +124 -0
  14. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +496 -0
  15. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +301 -0
  16. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +171 -0
  17. data/app/assets/javascripts/pages/admin/components/modal.jsx +48 -0
  18. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +20 -0
  19. data/app/assets/javascripts/pages/admin/components/page_dates.jsx +58 -0
  20. data/app/assets/javascripts/pages/admin/components/page_files.jsx +14 -0
  21. data/app/assets/javascripts/pages/admin/components/page_images.jsx +16 -0
  22. data/app/assets/javascripts/pages/admin/components/{page_tree.es6.jsx → page_tree.jsx} +7 -37
  23. data/app/assets/javascripts/pages/admin/components/{page_tree_node.es6.jsx → page_tree_node.jsx} +32 -10
  24. data/app/assets/javascripts/pages/admin/components/page_tree_store.jsx +203 -0
  25. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +63 -0
  26. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +58 -0
  27. data/app/assets/javascripts/pages/admin/components/toast.jsx +37 -0
  28. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +52 -0
  29. data/app/assets/javascripts/pages/admin/features/{content_tabs.es6.jsx → content_tabs.jsx} +11 -2
  30. data/app/assets/javascripts/pages/admin/features/{edit_page.es6.jsx → edit_page.jsx} +7 -51
  31. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +14 -0
  32. data/app/assets/javascripts/pages/admin/features/{tag_editor.es6.jsx → tag_editor.jsx} +0 -0
  33. data/app/assets/javascripts/pages/admin/lib/{tree.es6.jsx → tree.jsx} +0 -0
  34. data/app/assets/javascripts/pages/{login_form.es6.jsx → login_form.jsx} +0 -0
  35. data/app/assets/stylesheets/pages/admin.scss +9 -13
  36. data/app/assets/stylesheets/pages/admin/components/archive.scss +6 -0
  37. data/app/assets/stylesheets/pages/admin/components/attachments.scss +130 -0
  38. data/app/assets/stylesheets/pages/admin/components/buttons.scss +18 -0
  39. data/app/assets/stylesheets/pages/admin/components/forms.scss +99 -21
  40. data/app/assets/stylesheets/pages/admin/components/header.scss +16 -28
  41. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +195 -0
  42. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +181 -0
  43. data/app/assets/stylesheets/pages/admin/components/image_uploader.scss +53 -0
  44. data/app/assets/stylesheets/pages/admin/components/links.scss +1 -1
  45. data/app/assets/stylesheets/pages/admin/components/list_table.scss +8 -5
  46. data/app/assets/stylesheets/pages/admin/components/login.scss +2 -8
  47. data/app/assets/stylesheets/pages/admin/components/modal.scss +91 -0
  48. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +12 -6
  49. data/app/assets/stylesheets/pages/admin/components/pagination.scss +34 -16
  50. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +9 -6
  51. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +20 -15
  52. data/app/assets/stylesheets/pages/admin/components/textarea.scss +1 -71
  53. data/app/assets/stylesheets/pages/admin/components/toast.scss +51 -0
  54. data/app/assets/stylesheets/pages/admin/components/toolbar.scss +108 -0
  55. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +9 -21
  56. data/app/assets/stylesheets/pages/admin/controllers/users.scss +2 -2
  57. data/app/assets/stylesheets/pages/admin/vars.scss +26 -4
  58. data/app/controller_dummies/admin/admin_controller.rb +0 -2
  59. data/app/controller_dummies/application_controller.rb +2 -4
  60. data/app/controller_dummies/attachments_controller.rb +2 -0
  61. data/app/controller_dummies/frontend_controller.rb +0 -2
  62. data/app/controller_dummies/images_controller.rb +0 -2
  63. data/app/controller_dummies/page_files_controller.rb +0 -2
  64. data/app/controller_dummies/pages_controller.rb +0 -2
  65. data/app/controller_dummies/sitemaps_controller.rb +0 -2
  66. data/app/controllers/admin/attachments_controller.rb +48 -0
  67. data/app/controllers/admin/categories_controller.rb +2 -5
  68. data/app/controllers/admin/images_controller.rb +25 -19
  69. data/app/controllers/admin/invites_controller.rb +16 -26
  70. data/app/controllers/admin/pages_controller.rb +50 -32
  71. data/app/controllers/admin/password_resets_controller.rb +11 -18
  72. data/app/controllers/admin/users_controller.rb +16 -22
  73. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +21 -14
  74. data/app/controllers/concerns/pages_core/authentication.rb +0 -2
  75. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -2
  76. data/app/controllers/concerns/pages_core/error_renderer.rb +33 -0
  77. data/app/controllers/concerns/pages_core/policies_helper.rb +9 -13
  78. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -5
  79. data/app/controllers/concerns/pages_core/process_titler.rb +1 -3
  80. data/app/controllers/concerns/pages_core/rss_controller.rb +0 -2
  81. data/app/controllers/errors_controller.rb +52 -26
  82. data/app/controllers/pages_core/admin_controller.rb +22 -13
  83. data/app/controllers/pages_core/attachments_controller.rb +36 -0
  84. data/app/controllers/pages_core/{application_controller.rb → base_controller.rb} +16 -5
  85. data/app/controllers/pages_core/frontend/page_files_controller.rb +5 -24
  86. data/app/controllers/pages_core/frontend/pages_controller.rb +4 -8
  87. data/app/controllers/pages_core/frontend_controller.rb +0 -2
  88. data/app/controllers/pages_core/images_controller.rb +0 -2
  89. data/app/controllers/pages_core/sitemaps_controller.rb +3 -5
  90. data/app/controllers/sessions_controller.rb +3 -15
  91. data/app/formatters/pages_core/html_formatter.rb +60 -16
  92. data/app/formatters/pages_core/link_renderer.rb +15 -0
  93. data/app/helpers/admin/admin_helper.rb +0 -2
  94. data/app/helpers/admin/menu_helper.rb +2 -4
  95. data/app/helpers/admin/pages_helper.rb +47 -9
  96. data/app/helpers/application_helper.rb +0 -2
  97. data/app/helpers/frontend_helper.rb +0 -2
  98. data/app/helpers/pages_core/admin/admin_helper.rb +75 -20
  99. data/app/helpers/pages_core/admin/form_builder.rb +36 -0
  100. data/app/helpers/pages_core/admin/labelled_field_helper.rb +6 -8
  101. data/app/helpers/pages_core/admin/tag_editor_helper.rb +0 -2
  102. data/app/helpers/pages_core/application_helper.rb +1 -2
  103. data/app/helpers/pages_core/attachments_helper.rb +36 -0
  104. data/app/helpers/pages_core/form_builder.rb +7 -11
  105. data/app/helpers/pages_core/frontend_helper.rb +0 -6
  106. data/app/helpers/pages_core/head_tags_helper.rb +8 -4
  107. data/app/helpers/pages_core/images_helper.rb +0 -2
  108. data/app/helpers/pages_core/meta_tags_helper.rb +3 -5
  109. data/app/helpers/pages_core/open_graph_tags_helper.rb +1 -3
  110. data/app/helpers/pages_core/page_path_helper.rb +14 -9
  111. data/app/jobs/pages_core/autopublish_job.rb +0 -2
  112. data/app/jobs/pages_core/sweep_cache_job.rb +0 -2
  113. data/app/mailers/admin_mailer.rb +3 -16
  114. data/app/models/attachment.rb +76 -0
  115. data/app/models/autopublisher.rb +3 -3
  116. data/app/models/category.rb +0 -3
  117. data/app/models/concerns/pages_core/has_roles.rb +1 -2
  118. data/app/models/concerns/pages_core/humanizable_param.rb +4 -4
  119. data/app/models/concerns/pages_core/page_model/attachments.rb +39 -0
  120. data/app/models/concerns/pages_core/page_model/autopublishable.rb +0 -2
  121. data/app/models/concerns/pages_core/page_model/dated_page.rb +59 -0
  122. data/app/models/concerns/pages_core/page_model/images.rb +12 -15
  123. data/app/models/concerns/pages_core/page_model/localizable.rb +10 -3
  124. data/app/models/concerns/pages_core/page_model/pathable.rb +8 -10
  125. data/app/models/concerns/pages_core/page_model/redirectable.rb +0 -2
  126. data/app/models/concerns/pages_core/page_model/sortable.rb +1 -3
  127. data/app/models/concerns/pages_core/page_model/status.rb +1 -3
  128. data/app/models/concerns/pages_core/page_model/templateable.rb +2 -4
  129. data/app/models/concerns/pages_core/page_model/tree.rb +24 -5
  130. data/app/models/concerns/pages_core/sweepable.rb +0 -2
  131. data/app/models/concerns/pages_core/taggable.rb +4 -3
  132. data/app/models/image.rb +1 -0
  133. data/app/models/invite.rb +0 -10
  134. data/app/models/page.rb +17 -21
  135. data/app/models/page_builder.rb +0 -2
  136. data/app/models/page_category.rb +0 -2
  137. data/app/models/page_exporter.rb +87 -0
  138. data/app/models/page_file.rb +24 -48
  139. data/app/models/page_image.rb +3 -37
  140. data/app/models/page_path.rb +0 -2
  141. data/app/models/password_reset_token.rb +0 -4
  142. data/app/models/role.rb +15 -2
  143. data/app/models/tag.rb +15 -6
  144. data/app/models/tagging.rb +1 -3
  145. data/app/models/user.rb +29 -25
  146. data/app/policies/page_file_policy.rb +13 -17
  147. data/app/policies/page_image_policy.rb +13 -17
  148. data/app/policies/page_policy.rb +26 -26
  149. data/app/policies/policy.rb +2 -8
  150. data/app/policies/user_policy.rb +32 -32
  151. data/app/serializers/admin/attachment_serializer.rb +29 -0
  152. data/app/serializers/admin/image_serializer.rb +53 -6
  153. data/app/serializers/admin/page_file_serializer.rb +6 -0
  154. data/app/serializers/admin/page_image_serializer.rb +1 -1
  155. data/app/serializers/page_export_serializer.rb +30 -0
  156. data/app/serializers/page_file_export_serializer.rb +4 -0
  157. data/app/serializers/page_image_export_serializer.rb +40 -0
  158. data/app/serializers/page_image_serializer.rb +2 -0
  159. data/app/services/pages_core/create_user_service.rb +36 -0
  160. data/app/services/pages_core/invite_service.rb +41 -0
  161. data/app/views/admin/images/show.json.jbuilder +6 -0
  162. data/app/views/admin/pages/_edit_content.html.erb +7 -0
  163. data/app/views/admin/pages/_edit_files.html.erb +8 -0
  164. data/app/views/admin/pages/_edit_images.html.erb +8 -95
  165. data/app/views/admin/pages/_edit_options.html.erb +7 -15
  166. data/app/views/admin/pages/_list_item.html.erb +50 -0
  167. data/app/views/admin/pages/deleted.html.erb +42 -0
  168. data/app/views/admin/pages/edit.html.erb +9 -94
  169. data/app/views/admin/pages/index.html.erb +9 -12
  170. data/app/views/admin/pages/new.html.erb +2 -1
  171. data/app/views/admin/pages/news.html.erb +59 -45
  172. data/app/views/admin/password_resets/show.html.erb +6 -9
  173. data/app/views/admin/users/_access_control.html.erb +4 -1
  174. data/app/views/admin/users/_list.html.erb +12 -7
  175. data/app/views/admin/users/edit.html.erb +5 -11
  176. data/app/views/admin/users/login.html.erb +58 -15
  177. data/app/views/admin/users/show.html.erb +1 -1
  178. data/app/views/admin_mailer/invite.text.erb +1 -1
  179. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  180. data/app/views/errors/401.html.erb +6 -0
  181. data/app/views/errors/403.html.erb +1 -1
  182. data/app/views/errors/500.html.erb +11 -6
  183. data/app/views/errors/500_critical.html.erb +1 -1
  184. data/app/views/feeds/pages.rss.builder +1 -3
  185. data/app/views/layouts/admin.html.erb +83 -83
  186. data/app/views/layouts/admin/_analytics.html.erb +1 -3
  187. data/app/views/layouts/admin/_header.html.erb +2 -2
  188. data/app/views/layouts/errors.html.erb +3 -7
  189. data/config/locales/en.yml +12 -0
  190. data/config/routes.rb +38 -55
  191. data/db/migrate/20111219033112_create_pages_tables.rb +6 -8
  192. data/db/migrate/20120627033112_rename_textbits.rb +1 -3
  193. data/db/migrate/20121010055412_drop_removed_tables.rb +1 -3
  194. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +1 -3
  195. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +1 -3
  196. data/db/migrate/20130303160632_remove_imagesets.rb +1 -3
  197. data/db/migrate/20130303161732_remove_sms_subscribers.rb +1 -3
  198. data/db/migrate/20130823133208_update_page_redirect_to.rb +1 -3
  199. data/db/migrate/20140203183900_create_roles.rb +1 -1
  200. data/db/migrate/20140414150500_change_locale_names.rb +1 -3
  201. data/db/migrate/20140604142100_remove_openid_url.rb +1 -1
  202. data/db/migrate/20140920231700_convert_images_to_dis.rb +1 -1
  203. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +1 -1
  204. data/db/migrate/20141004003100_create_password_reset_tokens.rb +1 -1
  205. data/db/migrate/20141006181300_remove_user_cruft.rb +1 -1
  206. data/db/migrate/20141007173000_create_invites.rb +1 -1
  207. data/db/migrate/20150204130800_update_delayed_job_table.rb +1 -1
  208. data/db/migrate/20150401131300_localize_images.rb +1 -1
  209. data/db/migrate/20150520174300_add_meta_image_to_page.rb +1 -1
  210. data/db/migrate/20150904164200_add_pinned_to_tags.rb +1 -1
  211. data/db/migrate/20151002174800_create_page_paths.rb +2 -2
  212. data/db/migrate/20151021103400_drop_binaries_table.rb +1 -1
  213. data/db/migrate/20151204151000_remove_page_content_order.rb +1 -1
  214. data/db/migrate/20160330220900_rename_pages_categories.rb +1 -1
  215. data/db/migrate/20160405202700_change_localization_limit.rb +1 -1
  216. data/db/migrate/20170716040500_remove_page_comments.rb +23 -0
  217. data/db/migrate/20170716213400_remove_sessions.rb +15 -0
  218. data/db/migrate/20180207134000_add_dates_to_pages.rb +11 -0
  219. data/db/migrate/20190211154800_create_attachments.rb +73 -0
  220. data/lib/pages_core.rb +6 -9
  221. data/lib/pages_core/admin_menu_item.rb +0 -2
  222. data/lib/pages_core/archive_finder.rb +21 -15
  223. data/lib/pages_core/attachment_embedder.rb +38 -0
  224. data/lib/pages_core/cache_sweeper.rb +14 -23
  225. data/lib/pages_core/configuration.rb +0 -2
  226. data/lib/pages_core/configuration/base.rb +0 -2
  227. data/lib/pages_core/configuration/pages.rb +2 -8
  228. data/lib/pages_core/digest_verifier.rb +70 -0
  229. data/lib/pages_core/engine.rb +6 -13
  230. data/lib/pages_core/extensions.rb +0 -3
  231. data/lib/pages_core/extensions/string_extensions.rb +0 -2
  232. data/lib/pages_core/page_path_constraint.rb +0 -2
  233. data/lib/pages_core/pages_plugin.rb +0 -2
  234. data/lib/pages_core/plugin.rb +0 -2
  235. data/lib/pages_core/pub_sub.rb +36 -0
  236. data/lib/pages_core/templates.rb +0 -2
  237. data/lib/pages_core/templates/block_configuration.rb +1 -3
  238. data/lib/pages_core/templates/configuration.rb +88 -10
  239. data/lib/pages_core/templates/configuration_handler.rb +6 -4
  240. data/lib/pages_core/templates/configuration_proxy.rb +4 -2
  241. data/lib/pages_core/templates/controller_actions.rb +0 -2
  242. data/lib/pages_core/templates/template_configuration.rb +41 -37
  243. data/lib/pages_core/version.rb +1 -3
  244. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +10 -17
  245. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +1 -2
  246. data/lib/rails/generators/pages_core/frontend/templates/{application.css.scss.erb → application.scss.erb} +0 -0
  247. data/lib/rails/generators/pages_core/frontend/templates/{base.css.scss.erb → base.scss.erb} +0 -0
  248. data/lib/rails/generators/pages_core/frontend/templates/{breakpoints.css.scss.erb → breakpoints.scss.erb} +0 -0
  249. data/lib/rails/generators/pages_core/frontend/templates/clearfix.scss.erb +7 -0
  250. data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +0 -3
  251. data/lib/rails/generators/pages_core/install/install_generator.rb +4 -15
  252. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +1 -3
  253. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +0 -2
  254. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -5
  255. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +0 -2
  256. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +0 -2
  257. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +0 -2
  258. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +7 -15
  259. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +0 -2
  260. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -19
  261. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +2 -4
  262. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +1 -1
  263. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +4 -13
  264. data/lib/tasks/pages.rake +0 -62
  265. data/lib/tasks/pages/cache.rake +6 -2
  266. data/lib/tasks/pages/export.rake +9 -0
  267. data/lib/tasks/pages/page_paths.rake +0 -2
  268. data/lib/tasks/pages/update.rake +0 -2
  269. data/template.rb +3 -3
  270. data/vendor/assets/javascripts/ReactCrop.min.js +1 -0
  271. data/vendor/assets/javascripts/reflux.min.js +1 -1
  272. data/vendor/assets/stylesheets/ReactCrop.css +167 -0
  273. metadata +200 -175
  274. data/app/assets/javascripts/pages/admin/components.es6.jsx +0 -1
  275. data/app/assets/javascripts/pages/admin/components/page_tree_actions.es6.jsx +0 -8
  276. data/app/assets/javascripts/pages/admin/components/page_tree_store.es6.jsx +0 -161
  277. data/app/assets/javascripts/pages/admin/features/editable_image.es6.jsx +0 -145
  278. data/app/assets/javascripts/pages/admin/features/modal.es6.jsx +0 -90
  279. data/app/assets/javascripts/pages/admin/features/page_images.es6.jsx +0 -338
  280. data/app/assets/javascripts/pages/admin/features/rich_text.es6.jsx +0 -124
  281. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.es6.jsx +0 -21
  282. data/app/assets/javascripts/pages/admin/lib/center_on_screen.es6.jsx +0 -22
  283. data/app/assets/stylesheets/pages/admin/components/editable_image.scss +0 -18
  284. data/app/assets/stylesheets/pages/admin/components/images.scss +0 -155
  285. data/app/assets/stylesheets/pages/admin/print.scss +0 -17
  286. data/app/controllers/admin/page_comments_controller.rb +0 -61
  287. data/app/controllers/admin/page_files_controller.rb +0 -79
  288. data/app/controllers/admin/page_images_controller.rb +0 -111
  289. data/app/controllers/concerns/pages_core/add_comments_controller.rb +0 -67
  290. data/app/controllers/concerns/pages_core/exception_handler.rb +0 -137
  291. data/app/controllers/concerns/pages_core/search_pages_controller.rb +0 -40
  292. data/app/helpers/pages_core/login_helper.rb +0 -14
  293. data/app/indices/page_file_index.rb +0 -9
  294. data/app/indices/page_index.rb +0 -29
  295. data/app/indices/user_index.rb +0 -11
  296. data/app/models/concerns/pages_core/page_model/commentable.rb +0 -29
  297. data/app/models/concerns/pages_core/page_model/searchable.rb +0 -41
  298. data/app/models/page_comment.rb +0 -18
  299. data/app/serializers/page_tree_serializer.rb +0 -15
  300. data/app/views/admin/pages/_edit_comments.html.erb +0 -37
  301. data/app/views/admin/pages/_pagelisting.html.erb +0 -63
  302. data/app/views/admin/users/_login_form.html.erb +0 -47
  303. data/app/views/admin_mailer/comment_notification.text.erb +0 -7
  304. data/lib/pages_core/extensions/hash_extensions.rb +0 -23
  305. data/lib/pages_core/file_embedder.rb +0 -40
  306. data/lib/pages_core/paginates.rb +0 -102
  307. data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +0 -8
  308. data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +0 -12
  309. data/lib/tasks/db.rake +0 -96
  310. data/lib/tasks/pages/assets.rake +0 -65
  311. data/vendor/assets/javascripts/jquery.dimscreen.js +0 -77
  312. data/vendor/assets/javascripts/jquery.fieldselection.js +0 -59
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  class PagePath < ActiveRecord::Base
4
2
  class PageNotSavedError < StandardError; end
5
3
  class NoPathError < StandardError; end
@@ -16,10 +16,6 @@ class PasswordResetToken < ActiveRecord::Base
16
16
  def expire!
17
17
  expired.delete_all
18
18
  end
19
-
20
- def find_by_token(token)
21
- active.find_by(token: token)
22
- end
23
19
  end
24
20
 
25
21
  def expired?
data/app/models/role.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Role < ActiveRecord::Base
2
- belongs_to :user
2
+ belongs_to :user, touch: true
3
3
  validates :name,
4
4
  presence: true,
5
5
  uniqueness: { scope: :user_id },
@@ -20,7 +20,7 @@ class Role < ActiveRecord::Base
20
20
  end
21
21
 
22
22
  def roles
23
- @roles ||= default_roles
23
+ @roles ||= default_roles + config_roles
24
24
  end
25
25
 
26
26
  def names
@@ -29,6 +29,19 @@ class Role < ActiveRecord::Base
29
29
 
30
30
  protected
31
31
 
32
+ def config_file
33
+ Rails.root.join("config", "roles.yml")
34
+ end
35
+
36
+ def config_roles
37
+ return [] unless File.exist?(config_file)
38
+ YAML.load_file(config_file).map do |key, opts|
39
+ OpenStruct.new(name: key.to_s,
40
+ description: opts["description"],
41
+ default: opts["default"])
42
+ end
43
+ end
44
+
32
45
  def default_roles
33
46
  [
34
47
  OpenStruct.new(
data/app/models/tag.rb CHANGED
@@ -1,8 +1,6 @@
1
- # encoding: utf-8
2
-
3
1
  class Tag < ActiveRecord::Base
4
2
  include PagesCore::HumanizableParam
5
- has_many :taggings
3
+ has_many :taggings, dependent: :destroy
6
4
 
7
5
  scope :pinned, -> { where(pinned: true) }
8
6
  scope :sorted, -> { order("pinned DESC, name ASC") }
@@ -13,7 +11,7 @@ class Tag < ActiveRecord::Base
13
11
  tags = (taggable.tags.sorted + pinned.sorted).uniq
14
12
 
15
13
  return tags unless tags.count < limit
16
- tags + suggestions(tags, limit)[0...(limit - tags.length)]
14
+ tags + suggestions(taggable, tags, limit)[0...(limit - tags.length)]
17
15
  end
18
16
 
19
17
  def parse(*tags)
@@ -26,13 +24,24 @@ class Tag < ActiveRecord::Base
26
24
 
27
25
  private
28
26
 
29
- def suggestions(tags, limit)
27
+ def suggestions(taggable, tags, limit)
28
+ suggestions = taggable_suggestions(taggable, limit).to_a
29
+ if suggestions.length < limit
30
+ suggestions += all_suggestions(limit)
31
+ end
32
+ suggestions.reject { |t| tags.include?(t) }.uniq[0...(limit)]
33
+ end
34
+
35
+ def taggable_suggestions(taggable, limit)
36
+ all_suggestions(limit).where("taggings.taggable_type = ?", taggable.class)
37
+ end
38
+
39
+ def all_suggestions(limit)
30
40
  Tag.joins(:taggings)
31
41
  .select("tags.*, COUNT(tags.id) AS counter")
32
42
  .group("tags.id")
33
43
  .order("counter DESC")
34
44
  .limit(limit)
35
- .reject { |t| tags.include?(t) }
36
45
  end
37
46
 
38
47
  def default_options
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  class Tagging < ActiveRecord::Base
4
2
  belongs_to :tag
5
3
  belongs_to :taggable, polymorphic: true
@@ -8,7 +6,7 @@ class Tagging < ActiveRecord::Base
8
6
  validates :taggable_type, presence: true
9
7
  validates :tag_id,
10
8
  presence: true,
11
- uniqueness: { scope: [:taggable_type, :taggable_id] }
9
+ uniqueness: { scope: %i[taggable_type taggable_id] }
12
10
 
13
11
  def self.tagged_class(taggable)
14
12
  ActiveRecord::Base.send(
data/app/models/user.rb CHANGED
@@ -1,17 +1,23 @@
1
- # encoding: utf-8
2
-
3
1
  class User < ActiveRecord::Base
4
2
  include PagesCore::HasRoles
5
3
 
6
4
  attr_accessor :password, :confirm_password
7
5
 
8
- belongs_to :creator, class_name: "User", foreign_key: "created_by"
9
- has_many :created_users, class_name: "User", foreign_key: "created_by"
10
- has_many :pages
6
+ belongs_to(:creator,
7
+ class_name: "User",
8
+ foreign_key: "created_by",
9
+ optional: true,
10
+ inverse_of: :created_users)
11
+ has_many(:created_users,
12
+ class_name: "User",
13
+ foreign_key: "created_by",
14
+ dependent: :nullify,
15
+ inverse_of: :creator)
16
+ has_many :pages, dependent: :nullify
11
17
  has_many :password_reset_tokens, dependent: :destroy
12
18
  has_many :roles, dependent: :destroy
13
19
  has_many :invites, dependent: :destroy
14
- belongs_to_image :image, foreign_key: :image_id
20
+ belongs_to_image :image, foreign_key: :image_id, optional: true
15
21
 
16
22
  serialize :persistent_data
17
23
 
@@ -19,8 +25,7 @@ class User < ActiveRecord::Base
19
25
  presence: true,
20
26
  uniqueness: { case_sensitive: false }
21
27
 
22
- validates :name,
23
- presence: true
28
+ validates :name, presence: true
24
29
 
25
30
  validates :email,
26
31
  presence: true,
@@ -36,32 +41,30 @@ class User < ActiveRecord::Base
36
41
  before_validation :hash_password
37
42
  before_create :ensure_first_user_has_all_roles
38
43
 
39
- after_save ThinkingSphinx::RealTime.callback_for(:user)
40
-
41
44
  scope :by_name, -> { order("name ASC") }
42
45
  scope :activated, -> { by_name.includes(:roles).where(activated: true) }
43
46
  scope :deactivated, -> { by_name.includes(:roles).where(activated: false) }
44
47
 
45
48
  class << self
46
49
  def authenticate(email, password:)
47
- user = User.find_by_username_or_email(email)
50
+ user = User.login_name(email)
48
51
  user if user.try { |u| u.authenticate!(password) }
49
52
  end
50
53
 
54
+ def find_by_email(str)
55
+ find_by("LOWER(email) = ?", str.to_s.downcase)
56
+ end
57
+
51
58
  # Finds a user by either username or email address.
52
- def find_by_username_or_email(string)
53
- find_by(username: string.to_s) ||
54
- find_by(email: string.to_s)
59
+ def login_name(string)
60
+ find_by(username: string.to_s) || find_by_email(string)
55
61
  end
56
62
  end
57
63
 
58
64
  def authenticate!(password)
59
- if can_login? && valid_password?(password)
60
- rehash_password!(password) if password_needs_rehash?
61
- true
62
- else
63
- false
64
- end
65
+ return false unless can_login? && valid_password?(password)
66
+ rehash_password!(password) if password_needs_rehash?
67
+ true
65
68
  end
66
69
 
67
70
  def can_login?
@@ -70,7 +73,7 @@ class User < ActiveRecord::Base
70
73
 
71
74
  def mark_active!
72
75
  return if last_login_at && last_login_at > 10.minutes.ago
73
- update_columns(last_login_at: Time.now.utc)
76
+ update(last_login_at: Time.now.utc)
74
77
  end
75
78
 
76
79
  def name_and_email
@@ -78,7 +81,7 @@ class User < ActiveRecord::Base
78
81
  end
79
82
 
80
83
  def online?
81
- (last_login_at && last_login_at > 15.minutes.ago) ? true : false
84
+ last_login_at && last_login_at > 15.minutes.ago ? true : false
82
85
  end
83
86
 
84
87
  def realname
@@ -102,14 +105,15 @@ class User < ActiveRecord::Base
102
105
 
103
106
  def ensure_first_user_has_all_roles
104
107
  return if User.any?
108
+
105
109
  self.activated = true
106
- Role.roles.each do |role|
107
- roles.new(name: role.name)
110
+ Role.roles.each do |r|
111
+ roles.new(name: r.name) unless role?(r.name)
108
112
  end
109
113
  end
110
114
 
111
115
  def hash_password
112
- self.hashed_password = encrypt_password(password) unless password.blank?
116
+ self.hashed_password = encrypt_password(password) if password.present?
113
117
  end
114
118
 
115
119
  def password_needs_rehash?
@@ -1,25 +1,21 @@
1
1
  class PageFilePolicy < Policy
2
- module Collection
3
- def index?
4
- true
5
- end
2
+ def index?
3
+ true
4
+ end
6
5
 
7
- def reorder?
8
- user.role?(:pages)
9
- end
6
+ def reorder?
7
+ user.role?(:pages)
8
+ end
10
9
 
11
- def new?
12
- user.role?(:pages)
13
- end
10
+ def new?
11
+ user.role?(:pages)
14
12
  end
15
13
 
16
- module Member
17
- def show?
18
- true
19
- end
14
+ def show?
15
+ true
16
+ end
20
17
 
21
- def edit?
22
- user.role?(:pages)
23
- end
18
+ def edit?
19
+ user.role?(:pages)
24
20
  end
25
21
  end
@@ -1,25 +1,21 @@
1
1
  class PageImagePolicy < Policy
2
- module Collection
3
- def index?
4
- true
5
- end
2
+ def index?
3
+ true
4
+ end
6
5
 
7
- def reorder?
8
- user.role?(:pages)
9
- end
6
+ def reorder?
7
+ user.role?(:pages)
8
+ end
10
9
 
11
- def new?
12
- user.role?(:pages)
13
- end
10
+ def new?
11
+ user.role?(:pages)
14
12
  end
15
13
 
16
- module Member
17
- def show?
18
- true
19
- end
14
+ def show?
15
+ true
16
+ end
20
17
 
21
- def edit?
22
- user.role?(:pages)
23
- end
18
+ def edit?
19
+ user.role?(:pages)
24
20
  end
25
21
  end
@@ -1,37 +1,37 @@
1
1
  class PagePolicy < Policy
2
- module Collection
3
- def index?
4
- true
5
- end
2
+ def index?
3
+ true
4
+ end
5
+
6
+ def news?
7
+ true
8
+ end
6
9
 
7
- def news?
8
- true
9
- end
10
+ def deleted?
11
+ index?
12
+ end
10
13
 
11
- def new?
12
- user.role?(:pages)
13
- end
14
+ def new?
15
+ user.role?(:pages)
16
+ end
14
17
 
15
- def new_news?
16
- create?
17
- end
18
+ def new_news?
19
+ create?
18
20
  end
19
21
 
20
- module Member
21
- def show?
22
- true
23
- end
22
+ def show?
23
+ true
24
+ end
24
25
 
25
- def edit?
26
- user.role?(:pages)
27
- end
26
+ def edit?
27
+ user.role?(:pages)
28
+ end
28
29
 
29
- def move?
30
- edit?
31
- end
30
+ def move?
31
+ edit?
32
+ end
32
33
 
33
- def delete_meta_image?
34
- edit?
35
- end
34
+ def delete_meta_image?
35
+ edit?
36
36
  end
37
37
  end
@@ -48,17 +48,11 @@ class Policy
48
48
  end
49
49
 
50
50
  def collection(user)
51
- policy = new(user)
52
- const_defined?(:Collection) &&
53
- policy.extend(const_get(:Collection))
54
- policy
51
+ new(user)
55
52
  end
56
53
 
57
54
  def member(user, record)
58
- policy = new(user, record)
59
- const_defined?(:Member) &&
60
- policy.extend(const_get(:Member))
61
- policy
55
+ new(user, record)
62
56
  end
63
57
  end
64
58
  end
@@ -1,46 +1,46 @@
1
1
  class UserPolicy < Policy
2
- module Collection
3
- def index?
4
- true
5
- end
2
+ def index?
3
+ true
4
+ end
6
5
 
7
- def deactivated?
8
- index?
9
- end
6
+ def deactivated?
7
+ index?
8
+ end
10
9
 
11
- def new?
12
- !User.any? || user.role?(:users)
13
- end
10
+ def new?
11
+ User.none? || user.role?(:users)
12
+ end
13
+
14
+ def create?
15
+ new?
16
+ end
14
17
 
15
- def create?
16
- new?
17
- end
18
+ def login?
19
+ true
20
+ end
18
21
 
19
- def manage?
20
- new?
21
- end
22
+ def manage?
23
+ new?
22
24
  end
23
25
 
24
- module Member
25
- def edit?
26
- user == record || user.role?(:users)
27
- end
26
+ def edit?
27
+ user == record || user.role?(:users)
28
+ end
28
29
 
29
- def show?
30
- edit?
31
- end
30
+ def show?
31
+ edit?
32
+ end
32
33
 
33
- def delete_image?
34
- edit?
35
- end
34
+ def delete_image?
35
+ edit?
36
+ end
36
37
 
37
- def policies?
38
- user.role?(:users)
39
- end
38
+ def policies?
39
+ user.role?(:users)
40
+ end
40
41
 
41
- def destroy?
42
- user.role?(:users)
43
- end
42
+ def destroy?
43
+ user.role?(:users)
44
44
  end
45
45
 
46
46
  def change_password?