pages_core 3.4.3 → 3.7.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 (375) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +74 -15
  3. data/Rakefile +2 -0
  4. data/app/assets/javascripts/pages/admin.jsx +17 -0
  5. data/app/assets/javascripts/pages/admin/components.jsx +2 -0
  6. data/app/assets/javascripts/pages/admin/components/attachment.jsx +130 -0
  7. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +131 -0
  8. data/app/assets/javascripts/pages/admin/components/attachments.jsx +211 -0
  9. data/app/assets/javascripts/pages/admin/components/date_range_select.jsx +174 -0
  10. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +174 -0
  11. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +57 -0
  12. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +44 -0
  13. data/app/assets/javascripts/pages/admin/components/focal_point.jsx +82 -0
  14. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +124 -0
  15. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +496 -0
  16. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +306 -0
  17. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +176 -0
  18. data/app/assets/javascripts/pages/admin/components/modal.jsx +48 -0
  19. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +20 -0
  20. data/app/assets/javascripts/pages/admin/components/page_dates.jsx +58 -0
  21. data/app/assets/javascripts/pages/admin/components/page_files.jsx +14 -0
  22. data/app/assets/javascripts/pages/admin/components/page_images.jsx +16 -0
  23. data/app/assets/javascripts/pages/admin/components/page_tree.jsx +300 -0
  24. data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +396 -0
  25. data/app/assets/javascripts/pages/admin/components/page_tree_store.jsx +203 -0
  26. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +64 -0
  27. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +91 -0
  28. data/app/assets/javascripts/pages/admin/components/toast.jsx +34 -0
  29. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +52 -0
  30. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +72 -0
  31. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +97 -0
  32. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +14 -0
  33. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +160 -0
  34. data/app/assets/javascripts/pages/admin/lib/tree.jsx +294 -0
  35. data/app/assets/javascripts/pages/login_form.jsx +21 -0
  36. data/app/assets/stylesheets/pages/admin.scss +144 -0
  37. data/app/assets/stylesheets/pages/admin/components/archive.scss +6 -0
  38. data/app/assets/stylesheets/pages/admin/components/attachments.scss +130 -0
  39. data/app/assets/stylesheets/pages/admin/components/buttons.scss +23 -0
  40. data/app/assets/stylesheets/pages/admin/components/forms.scss +169 -0
  41. data/app/assets/stylesheets/pages/admin/components/header.scss +157 -0
  42. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +195 -0
  43. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +181 -0
  44. data/app/assets/stylesheets/pages/admin/components/image_uploader.scss +53 -0
  45. data/app/assets/stylesheets/pages/admin/components/layout.scss +44 -0
  46. data/app/assets/stylesheets/pages/admin/components/links.scss +43 -0
  47. data/app/assets/stylesheets/pages/admin/components/list_table.scss +61 -0
  48. data/app/assets/stylesheets/pages/admin/{login.css.scss.erb → components/login.scss} +3 -9
  49. data/app/assets/stylesheets/pages/admin/components/modal.scss +106 -0
  50. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +179 -0
  51. data/app/assets/stylesheets/pages/admin/components/pagination.scss +49 -0
  52. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +28 -0
  53. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +59 -0
  54. data/app/assets/stylesheets/pages/admin/components/textarea.scss +6 -0
  55. data/app/assets/stylesheets/pages/admin/components/toast.scss +51 -0
  56. data/app/assets/stylesheets/pages/admin/components/toolbar.scss +108 -0
  57. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +184 -0
  58. data/app/assets/stylesheets/pages/admin/controllers/{users.css.erb → users.scss} +2 -2
  59. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +21 -0
  60. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +7 -0
  61. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +7 -0
  62. data/app/assets/stylesheets/pages/admin/vars.scss +30 -0
  63. data/app/assets/stylesheets/pages/errors.css +2 -0
  64. data/app/controller_dummies/admin/admin_controller.rb +1 -1
  65. data/app/controller_dummies/application_controller.rb +3 -3
  66. data/app/controller_dummies/attachments_controller.rb +4 -0
  67. data/app/controller_dummies/frontend_controller.rb +1 -1
  68. data/app/controller_dummies/images_controller.rb +1 -1
  69. data/app/controller_dummies/page_files_controller.rb +1 -1
  70. data/app/controller_dummies/pages_controller.rb +1 -1
  71. data/app/controller_dummies/sitemaps_controller.rb +1 -1
  72. data/app/controllers/admin/attachments_controller.rb +50 -0
  73. data/app/controllers/admin/categories_controller.rb +3 -4
  74. data/app/controllers/admin/images_controller.rb +29 -18
  75. data/app/controllers/admin/invites_controller.rb +20 -23
  76. data/app/controllers/admin/pages_controller.rb +59 -111
  77. data/app/controllers/admin/password_resets_controller.rb +23 -21
  78. data/app/controllers/admin/users_controller.rb +23 -23
  79. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +67 -0
  80. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  81. data/app/controllers/concerns/pages_core/authentication.rb +4 -3
  82. data/app/controllers/concerns/pages_core/error_renderer.rb +36 -0
  83. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  84. data/app/controllers/concerns/pages_core/policies_helper.rb +16 -13
  85. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +44 -0
  86. data/app/controllers/concerns/pages_core/process_titler.rb +4 -4
  87. data/app/controllers/concerns/pages_core/rss_controller.rb +25 -0
  88. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  89. data/app/controllers/errors_controller.rb +20 -30
  90. data/app/controllers/pages_core/admin_controller.rb +21 -70
  91. data/app/controllers/pages_core/attachments_controller.rb +40 -0
  92. data/app/controllers/pages_core/{application_controller.rb → base_controller.rb} +13 -8
  93. data/app/controllers/pages_core/frontend/page_files_controller.rb +7 -24
  94. data/app/controllers/pages_core/frontend/pages_controller.rb +39 -228
  95. data/app/controllers/pages_core/frontend_controller.rb +10 -3
  96. data/app/controllers/pages_core/images_controller.rb +2 -2
  97. data/app/controllers/pages_core/sitemaps_controller.rb +15 -10
  98. data/app/controllers/sessions_controller.rb +4 -14
  99. data/app/formatters/pages_core/html_formatter.rb +52 -48
  100. data/app/formatters/pages_core/image_embedder.rb +79 -0
  101. data/app/formatters/pages_core/link_renderer.rb +17 -0
  102. data/app/helpers/admin/admin_helper.rb +1 -1
  103. data/app/helpers/admin/menu_helper.rb +19 -16
  104. data/app/helpers/admin/pages_helper.rb +27 -30
  105. data/app/helpers/application_helper.rb +1 -1
  106. data/app/helpers/frontend_helper.rb +1 -1
  107. data/app/helpers/pages_core/admin/admin_helper.rb +44 -71
  108. data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
  109. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  110. data/app/helpers/pages_core/admin/form_builder.rb +44 -0
  111. data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
  112. data/app/helpers/pages_core/admin/labelled_field_helper.rb +19 -19
  113. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  114. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  115. data/app/helpers/pages_core/admin/tag_editor_helper.rb +16 -14
  116. data/app/helpers/pages_core/application_helper.rb +15 -26
  117. data/app/helpers/pages_core/attachments_helper.rb +40 -0
  118. data/app/helpers/pages_core/form_builder.rb +71 -134
  119. data/app/helpers/pages_core/frontend_helper.rb +2 -8
  120. data/app/helpers/pages_core/head_tags_helper.rb +36 -169
  121. data/app/helpers/pages_core/images_helper.rb +5 -4
  122. data/app/helpers/pages_core/meta_tags_helper.rb +96 -0
  123. data/app/helpers/pages_core/open_graph_tags_helper.rb +51 -0
  124. data/app/helpers/pages_core/page_path_helper.rb +66 -0
  125. data/app/jobs/pages_core/autopublish_job.rb +2 -2
  126. data/app/jobs/pages_core/sweep_cache_job.rb +3 -3
  127. data/app/mailers/admin_mailer.rb +8 -31
  128. data/app/models/attachment.rb +78 -0
  129. data/app/models/autopublisher.rb +7 -4
  130. data/app/models/category.rb +10 -11
  131. data/app/models/concerns/pages_core/has_roles.rb +5 -4
  132. data/app/models/concerns/pages_core/humanizable_param.rb +11 -8
  133. data/app/models/concerns/pages_core/page_model/attachments.rb +41 -0
  134. data/app/models/concerns/pages_core/page_model/autopublishable.rb +25 -0
  135. data/app/models/concerns/pages_core/page_model/dated_page.rb +59 -0
  136. data/app/models/concerns/pages_core/page_model/images.rb +51 -0
  137. data/app/models/concerns/pages_core/page_model/localizable.rb +38 -0
  138. data/app/models/concerns/pages_core/page_model/pathable.rb +114 -0
  139. data/app/models/concerns/pages_core/page_model/redirectable.rb +36 -0
  140. data/app/models/concerns/pages_core/page_model/sortable.rb +53 -0
  141. data/app/models/concerns/pages_core/page_model/status.rb +50 -0
  142. data/app/models/concerns/pages_core/page_model/templateable.rb +85 -0
  143. data/app/models/concerns/pages_core/page_model/tree.rb +134 -0
  144. data/app/models/concerns/pages_core/sweepable.rb +3 -3
  145. data/app/models/concerns/pages_core/taggable.rb +11 -4
  146. data/app/models/image.rb +15 -1
  147. data/app/models/invite.rb +3 -11
  148. data/app/models/invite_role.rb +5 -3
  149. data/app/models/page.rb +49 -234
  150. data/app/models/page_builder.rb +5 -7
  151. data/app/models/page_category.rb +7 -0
  152. data/app/models/page_exporter.rb +100 -0
  153. data/app/models/page_file.rb +26 -50
  154. data/app/models/page_image.rb +7 -40
  155. data/app/models/page_path.rb +52 -0
  156. data/app/models/password_reset_token.rb +7 -9
  157. data/app/models/role.rb +23 -7
  158. data/app/models/tag.rb +28 -19
  159. data/app/models/tagging.rb +6 -5
  160. data/app/models/user.rb +38 -32
  161. data/app/policies/invite_policy.rb +2 -0
  162. data/app/policies/page_file_policy.rb +15 -17
  163. data/app/policies/page_image_policy.rb +15 -17
  164. data/app/policies/page_policy.rb +29 -23
  165. data/app/policies/policy.rb +4 -8
  166. data/app/policies/user_policy.rb +34 -32
  167. data/app/serializers/admin/attachment_serializer.rb +31 -0
  168. data/app/serializers/admin/image_serializer.rb +55 -6
  169. data/app/serializers/admin/page_file_serializer.rb +8 -0
  170. data/app/serializers/admin/page_image_serializer.rb +3 -1
  171. data/app/serializers/page_export_serializer.rb +32 -0
  172. data/app/serializers/page_file_export_serializer.rb +6 -0
  173. data/app/serializers/page_image_export_serializer.rb +42 -0
  174. data/app/serializers/page_image_serializer.rb +4 -0
  175. data/app/serializers/page_serializer.rb +2 -0
  176. data/app/services/pages_core/create_user_service.rb +39 -0
  177. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  178. data/app/services/pages_core/invite_service.rb +43 -0
  179. data/app/views/admin/images/show.json.jbuilder +8 -0
  180. data/app/views/admin/invites/new.html.erb +2 -1
  181. data/app/views/admin/invites/show.html.erb +3 -4
  182. data/app/views/admin/pages/_edit_content.html.erb +11 -2
  183. data/app/views/admin/pages/_edit_files.html.erb +8 -0
  184. data/app/views/admin/pages/_edit_images.html.erb +8 -84
  185. data/app/views/admin/pages/_edit_metadata.html.erb +23 -12
  186. data/app/views/admin/pages/_edit_options.html.erb +25 -25
  187. data/app/views/admin/pages/_list_item.html.erb +50 -0
  188. data/app/views/admin/pages/deleted.html.erb +42 -0
  189. data/app/views/admin/pages/edit.html.erb +11 -91
  190. data/app/views/admin/pages/index.html.erb +10 -54
  191. data/app/views/admin/pages/new.html.erb +5 -4
  192. data/app/views/admin/pages/news.html.erb +61 -47
  193. data/app/views/admin/password_resets/show.html.erb +6 -9
  194. data/app/views/admin/users/_access_control.html.erb +4 -1
  195. data/app/views/admin/users/_list.html.erb +12 -7
  196. data/app/views/admin/users/edit.html.erb +5 -11
  197. data/app/views/admin/users/login.html.erb +58 -15
  198. data/app/views/admin/users/show.html.erb +1 -1
  199. data/app/views/admin_mailer/invite.text.erb +1 -1
  200. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  201. data/app/views/errors/401.html.erb +6 -0
  202. data/app/views/errors/403.html.erb +1 -1
  203. data/app/views/errors/422.html.erb +7 -0
  204. data/app/views/errors/500.html.erb +2 -15
  205. data/app/views/errors/_generic_help.html.erb +1 -1
  206. data/app/views/feeds/pages.rss.builder +2 -2
  207. data/app/views/layouts/admin.html.erb +83 -79
  208. data/app/views/layouts/admin/_analytics.html.erb +1 -3
  209. data/app/views/layouts/admin/_header.html.erb +4 -4
  210. data/app/views/layouts/errors.html.erb +3 -7
  211. data/app/views/sitemaps/show.xml.builder +2 -0
  212. data/config/locales/en.yml +50 -1
  213. data/config/routes.rb +57 -58
  214. data/db/migrate/20111219033112_create_pages_tables.rb +191 -276
  215. data/lib/pages_core.rb +34 -32
  216. data/lib/pages_core/admin_menu_item.rb +18 -4
  217. data/lib/pages_core/archive_finder.rb +49 -20
  218. data/lib/pages_core/attachment_embedder.rb +36 -0
  219. data/lib/pages_core/cache_sweeper.rb +9 -89
  220. data/lib/pages_core/configuration.rb +3 -3
  221. data/lib/pages_core/configuration/base.rb +8 -9
  222. data/lib/pages_core/configuration/pages.rb +8 -9
  223. data/lib/pages_core/digest_verifier.rb +70 -0
  224. data/lib/pages_core/engine.rb +72 -5
  225. data/lib/pages_core/extensions.rb +2 -3
  226. data/lib/pages_core/extensions/string_extensions.rb +2 -2
  227. data/lib/pages_core/page_path_constraint.rb +23 -0
  228. data/lib/pages_core/pages_plugin.rb +13 -2
  229. data/lib/pages_core/plugin.rb +8 -52
  230. data/lib/pages_core/pub_sub.rb +38 -0
  231. data/lib/pages_core/static_cache.rb +26 -0
  232. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  233. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  234. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  235. data/lib/pages_core/templates.rb +10 -10
  236. data/lib/pages_core/templates/block_configuration.rb +4 -3
  237. data/lib/pages_core/templates/configuration.rb +115 -34
  238. data/lib/pages_core/templates/configuration_handler.rb +9 -5
  239. data/lib/pages_core/templates/configuration_proxy.rb +12 -12
  240. data/lib/pages_core/templates/controller_actions.rb +1 -1
  241. data/lib/pages_core/templates/template_configuration.rb +102 -98
  242. data/lib/pages_core/version.rb +2 -2
  243. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +11 -16
  244. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +1 -2
  245. data/lib/rails/generators/pages_core/frontend/templates/{application.css.scss.erb → application.scss.erb} +0 -0
  246. data/lib/rails/generators/pages_core/frontend/templates/{base.css.scss.erb → base.scss.erb} +0 -0
  247. data/lib/rails/generators/pages_core/frontend/templates/{breakpoints.css.scss.erb → breakpoints.scss.erb} +0 -0
  248. data/lib/rails/generators/pages_core/frontend/templates/clearfix.scss.erb +7 -0
  249. data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +0 -3
  250. data/lib/rails/generators/pages_core/install/install_generator.rb +25 -66
  251. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -2
  253. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +1 -1
  254. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  255. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +16 -1
  256. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +1 -1
  257. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +1 -1
  258. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  259. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +9 -15
  260. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +1 -1
  261. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +5 -23
  262. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +19 -14
  263. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  264. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  265. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  266. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  267. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -45
  268. data/lib/tasks/pages.rake +2 -63
  269. data/lib/tasks/pages/cache.rake +12 -5
  270. data/lib/tasks/pages/export.rake +11 -0
  271. data/lib/tasks/pages/page_paths.rake +12 -0
  272. data/template.rb +5 -3
  273. data/vendor/assets/javascripts/ReactCrop.min.js +1 -0
  274. data/vendor/assets/javascripts/reflux.min.js +1 -0
  275. data/vendor/assets/stylesheets/ReactCrop.css +167 -0
  276. metadata +356 -192
  277. data/app/assets/images/pages/admin/description-bg.gif +0 -0
  278. data/app/assets/images/pages/admin/drag-handle.gif +0 -0
  279. data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
  280. data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
  281. data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
  282. data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
  283. data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
  284. data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
  285. data/app/assets/javascripts/pages/admin.js.coffee +0 -54
  286. data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +0 -4
  287. data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +0 -139
  288. data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +0 -9
  289. data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +0 -47
  290. data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +0 -122
  291. data/app/assets/javascripts/pages/admin/features/modal.js.coffee +0 -66
  292. data/app/assets/javascripts/pages/admin/features/page_images.js +0 -329
  293. data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +0 -40
  294. data/app/assets/javascripts/pages/admin/features/tag_editor.js +0 -159
  295. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +0 -17
  296. data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +0 -21
  297. data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +0 -57
  298. data/app/assets/javascripts/pages/login_form.js.coffee +0 -17
  299. data/app/assets/stylesheets/pages/admin.css.erb +0 -404
  300. data/app/assets/stylesheets/pages/admin/buttons.css.erb +0 -5
  301. data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +0 -94
  302. data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +0 -58
  303. data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +0 -178
  304. data/app/assets/stylesheets/pages/admin/editable_image.css.erb +0 -19
  305. data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +0 -73
  306. data/app/assets/stylesheets/pages/admin/header.css.erb +0 -129
  307. data/app/assets/stylesheets/pages/admin/images.css.scss.erb +0 -160
  308. data/app/assets/stylesheets/pages/admin/links.css.erb +0 -34
  309. data/app/assets/stylesheets/pages/admin/list_table.css.erb +0 -56
  310. data/app/assets/stylesheets/pages/admin/modal.css.erb +0 -14
  311. data/app/assets/stylesheets/pages/admin/pagination.css.scss +0 -22
  312. data/app/assets/stylesheets/pages/admin/print.css.erb +0 -17
  313. data/app/assets/stylesheets/pages/admin/sidebar.css.erb +0 -39
  314. data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +0 -18
  315. data/app/assets/stylesheets/pages/admin/tag_editor.css.scss.erb +0 -48
  316. data/app/assets/stylesheets/pages/admin/textarea.css.erb +0 -55
  317. data/app/controllers/admin/page_comments_controller.rb +0 -61
  318. data/app/controllers/admin/page_files_controller.rb +0 -81
  319. data/app/controllers/admin/page_images_controller.rb +0 -116
  320. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -28
  321. data/app/controllers/concerns/pages_core/exception_handler.rb +0 -114
  322. data/app/helpers/pages_core/login_helper.rb +0 -14
  323. data/app/indices/page_file_index.rb +0 -9
  324. data/app/indices/page_index.rb +0 -29
  325. data/app/indices/user_index.rb +0 -11
  326. data/app/models/concerns/pages_core/page_tree.rb +0 -85
  327. data/app/models/concerns/pages_core/searchable_page.rb +0 -33
  328. data/app/models/concerns/pages_core/templateable.rb +0 -85
  329. data/app/models/localization.rb +0 -27
  330. data/app/models/page_comment.rb +0 -18
  331. data/app/views/admin/pages/_edit_comments.html.erb +0 -21
  332. data/app/views/admin/pages/_pagelisting.html.erb +0 -63
  333. data/app/views/admin/users/_login_form.html.erb +0 -47
  334. data/app/views/admin_mailer/comment_notification.text.erb +0 -7
  335. data/app/views/admin_mailer/error_report.html.erb +0 -70
  336. data/app/views/errors/500_critical.html.erb +0 -7
  337. data/app/views/errors/report.html.erb +0 -4
  338. data/config/removed_migrations.yml +0 -60
  339. data/db/migrate/20120627033112_rename_textbits.rb +0 -19
  340. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -83
  341. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -11
  342. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -11
  343. data/db/migrate/20130303160632_remove_imagesets.rb +0 -24
  344. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -16
  345. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -25
  346. data/db/migrate/20140203183900_create_roles.rb +0 -63
  347. data/db/migrate/20140414150500_change_locale_names.rb +0 -13
  348. data/db/migrate/20140515130100_remove_sphinx_deltas.rb +0 -15
  349. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  350. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -79
  351. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  352. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  353. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  354. data/db/migrate/20141007173000_create_invites.rb +0 -16
  355. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  356. data/db/migrate/20150401131300_localize_images.rb +0 -39
  357. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  358. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  359. data/lib/pages_core/extensions/hash_extensions.rb +0 -23
  360. data/lib/pages_core/localizable.rb +0 -49
  361. data/lib/pages_core/localizable/active_record_extension.rb +0 -41
  362. data/lib/pages_core/localizable/class_methods.rb +0 -51
  363. data/lib/pages_core/localizable/configuration.rb +0 -50
  364. data/lib/pages_core/localizable/instance_methods.rb +0 -130
  365. data/lib/pages_core/localizable/localizer.rb +0 -72
  366. data/lib/pages_core/localizable/scope_extension.rb +0 -22
  367. data/lib/pages_core/paginates.rb +0 -102
  368. data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +0 -8
  369. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -11
  370. data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +0 -12
  371. data/lib/tasks/db.rake +0 -96
  372. data/lib/tasks/pages/assets.rake +0 -65
  373. data/lib/tasks/pages/update.rake +0 -19
  374. data/vendor/assets/javascripts/jquery.dimscreen.js +0 -77
  375. data/vendor/assets/javascripts/jquery.fieldselection.js +0 -59
@@ -1,23 +1,23 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class PasswordResetsController < Admin::AdminController
5
- before_action :find_password_reset_token, only: [:show, :update]
6
- before_action :check_for_expired_token, only: [:show, :update]
7
- before_action :require_authentication, except: [:create, :show, :update]
5
+ before_action :find_password_reset_token, only: %i[show update]
6
+ before_action :check_for_expired_token, only: %i[show update]
7
+ before_action :require_authentication, except: %i[create show update]
8
8
 
9
9
  layout "admin"
10
10
 
11
11
  def create
12
- if params[:username] &&
13
- @user = User.find_by_username_or_email(params[:username])
12
+ @user = find_user_by_email(params[:username])
13
+ if @user
14
14
  @password_reset_token = @user.password_reset_tokens.create
15
15
  deliver_password_reset(@user, @password_reset_token)
16
16
  flash[:notice] = "An email with further instructions has been sent"
17
17
  else
18
18
  flash[:notice] = "Couldn't find a user with that email address"
19
19
  end
20
- redirect_to login_url
20
+ redirect_to login_admin_users_url
21
21
  end
22
22
 
23
23
  def show
@@ -26,11 +26,11 @@ module Admin
26
26
 
27
27
  def update
28
28
  @user = @password_reset_token.user
29
- if !user_params[:password].blank? && @user.update(user_params)
29
+ if user_params[:password].present? && @user.update(user_params)
30
30
  @password_reset_token.destroy
31
31
  authenticate!(@user)
32
32
  flash[:notice] = "Your password has been changed"
33
- redirect_to login_url
33
+ redirect_to login_admin_users_url
34
34
  else
35
35
  render action: :show
36
36
  end
@@ -44,40 +44,42 @@ module Admin
44
44
  admin_password_reset_with_token_url(
45
45
  password_reset, password_reset.token
46
46
  )
47
- ).deliver_now
47
+ ).deliver_later
48
48
  end
49
49
 
50
- def login_url
51
- # TODO: Validate URL
52
- params[:login_url] || login_admin_users_url
50
+ def find_user_by_email(email)
51
+ return unless email
52
+
53
+ User.login_name(params[:username])
53
54
  end
54
55
 
55
56
  def user_params
56
57
  params.require(:user).permit(:password, :confirm_password)
57
58
  end
58
59
 
59
- def valid_token?(pr)
60
- pr && secure_compare(pr.token, params[:token])
60
+ def valid_token?(reset)
61
+ reset && secure_compare(reset.token, params[:token])
61
62
  end
62
63
 
63
64
  def find_password_reset_token
64
65
  @password_reset_token = begin
65
- PasswordResetToken.find(params[:id])
66
- rescue ActiveRecord::RecordNotFound
67
- nil
68
- end
66
+ PasswordResetToken.find(params[:id])
67
+ rescue ActiveRecord::RecordNotFound
68
+ nil
69
+ end
69
70
 
70
71
  return if valid_token?(@password_reset_token)
71
72
 
72
73
  flash[:notice] = "Invalid password reset request"
73
- redirect_to(login_url) && return
74
+ redirect_to(login_admin_users_url) && return
74
75
  end
75
76
 
76
77
  def check_for_expired_token
77
78
  return unless @password_reset_token.expired?
79
+
78
80
  @password_reset_token.destroy
79
81
  flash[:notice] = "Your password reset link has expired"
80
- redirect_to(login_url)
82
+ redirect_to(login_admin_users_url)
81
83
  end
82
84
  end
83
85
  end
@@ -1,19 +1,12 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class UsersController < Admin::AdminController
5
- before_action :require_authentication, except: [:new, :create, :login]
6
- before_action :require_no_users, only: [:new, :create]
5
+ before_action :require_authentication, except: %i[new create login]
6
+ before_action :require_no_users, only: %i[new create]
7
7
  before_action(
8
8
  :find_user,
9
- only: [:edit, :update, :show, :destroy, :delete_image]
10
- )
11
-
12
- require_authorization(
13
- User,
14
- proc { @user },
15
- member: [:delete_image, :update, :destroy, :edit],
16
- collection: [:index, :deactivated, :new, :create]
9
+ only: %i[edit update show destroy delete_image]
17
10
  )
18
11
 
19
12
  def index
@@ -28,6 +21,7 @@ module Admin
28
21
 
29
22
  def login
30
23
  return unless logged_in?
24
+
31
25
  redirect_to admin_default_url
32
26
  end
33
27
 
@@ -36,7 +30,7 @@ module Admin
36
30
  end
37
31
 
38
32
  def create
39
- @user = User.create(user_params)
33
+ @user = PagesCore::CreateUserService.call(user_params)
40
34
  if @user.valid?
41
35
  authenticate!(@user)
42
36
  redirect_to admin_default_url
@@ -45,14 +39,12 @@ module Admin
45
39
  end
46
40
  end
47
41
 
48
- def show
49
- end
42
+ def show; end
50
43
 
51
- def edit
52
- end
44
+ def edit; end
53
45
 
54
46
  def update
55
- if @user.update(user_params)
47
+ if @user.update(user_params_with_roles)
56
48
  flash[:notice] = "Your changed to #{@user.name} were saved."
57
49
  redirect_to admin_users_url
58
50
  else
@@ -83,18 +75,26 @@ module Admin
83
75
  end
84
76
 
85
77
  def user_params
86
- permitted_params = [
87
- :name, :email, :image
88
- ]
89
- permitted_params += [:activated, role_names: []] if policy(User).manage?
90
- if !User.any? || (@user && policy(@user).change_password?)
91
- permitted_params += [:password, :confirm_password]
78
+ permitted_params = %i[name email image image_id]
79
+ if policy(User).manage?
80
+ permitted_params += [:activated,
81
+ { role_names: [] }]
82
+ end
83
+ if User.none? || (@user && policy(@user).change_password?)
84
+ permitted_params += %i[password confirm_password]
92
85
  end
93
86
  params.require(:user).permit(permitted_params)
94
87
  end
95
88
 
89
+ def user_params_with_roles
90
+ return user_params unless policy(User).manage?
91
+
92
+ { role_names: [] }.merge(user_params)
93
+ end
94
+
96
95
  def require_no_users
97
96
  return unless User.any?
97
+
98
98
  flash[:error] = "Account holder already exists"
99
99
  redirect_to(admin_users_url)
100
100
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module NewsPageController
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ before_action :require_news_pages, only: [:news]
10
+ before_action :find_news_pages, only: %i[news new_news]
11
+ before_action :find_year_and_month, only: %i[news]
12
+ end
13
+
14
+ def news
15
+ @archive_finder = archive_finder(@news_pages, @locale)
16
+ unless @year
17
+ redirect_to(news_admin_pages_path(@locale,
18
+ (@archive_finder.latest_year ||
19
+ Time.zone.now.year)))
20
+ return
21
+ end
22
+ @pages = @archive_finder.by_year_and_maybe_month(@year, @month)
23
+ .paginate(per_page: 50, page: params[:page])
24
+ end
25
+
26
+ def new_news
27
+ new
28
+ render action: :new
29
+ end
30
+
31
+ private
32
+
33
+ def archive_finder(parents, locale)
34
+ Page.where(parent_page_id: parents)
35
+ .visible
36
+ .order("published_at DESC")
37
+ .in_locale(locale)
38
+ .archive_finder
39
+ end
40
+
41
+ def find_news_pages
42
+ @news_pages = Page.news_pages
43
+ .in_locale(@locale)
44
+ .reorder("parent_page_id ASC, position ASC")
45
+ return if @news_pages.any?
46
+
47
+ redirect_to(admin_pages_url(@locale))
48
+ end
49
+
50
+ def find_year_and_month
51
+ @year = params[:year]&.to_i
52
+ @month = params[:month]&.to_i
53
+ end
54
+
55
+ # Redirect away if no news pages has been configured
56
+ def require_news_pages
57
+ return if Page.news_pages.any?
58
+
59
+ redirect_to(admin_pages_url(@locale))
60
+ end
61
+
62
+ def latest_year
63
+ archive_finder.latest_year_and_month.first || Time.zone.now.year
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module PersistentParams
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ before_action :restore_persistent_params
10
+ after_action :save_persistent_params
11
+ end
12
+
13
+ protected
14
+
15
+ # Loads persistent params from user model and merges with session.
16
+ def restore_persistent_params
17
+ return unless current_user&.persistent_data?
18
+
19
+ session[:persistent_params] ||= {}
20
+ session[:persistent_params] = current_user.persistent_data.merge(
21
+ session[:persistent_params]
22
+ )
23
+ end
24
+
25
+ # Saves persistent params from session to User model if applicable.
26
+ def save_persistent_params
27
+ return unless current_user && session[:persistent_params]
28
+
29
+ current_user.persistent_data = session[:persistent_params]
30
+ current_user.save
31
+ end
32
+
33
+ def persistent_params(namespace)
34
+ session[:persistent_params] ||= {}
35
+ session[:persistent_params][namespace] ||= {}
36
+ session[:persistent_params][namespace]
37
+ end
38
+
39
+ def coerce_persistent_param(value)
40
+ case value
41
+ when "true"
42
+ true
43
+ when "false"
44
+ false
45
+ else
46
+ value
47
+ end
48
+ end
49
+
50
+ def get_persistent_param(namespace, key, default)
51
+ if params.key?(key)
52
+ params[key]
53
+ elsif persistent_params(namespace).key?(key)
54
+ persistent_params(namespace)[key]
55
+ else
56
+ default
57
+ end
58
+ end
59
+
60
+ # Get a persistent param
61
+ def persistent_param(key, default = nil, options = {})
62
+ key = key.to_s
63
+ namespace = options[:namespace] || self.class.to_s
64
+
65
+ value = coerce_persistent_param(
66
+ get_persistent_param(namespace, key, default)
67
+ )
68
+
69
+ persistent_params(namespace)[key] = value unless value.nil?
70
+
71
+ value
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Authentication
@@ -24,7 +24,7 @@ module PagesCore
24
24
  end
25
25
 
26
26
  def deauthenticate!
27
- @current_user = nil
27
+ @current_user = nil
28
28
  session[:current_user_id] = nil
29
29
  end
30
30
 
@@ -35,13 +35,14 @@ module PagesCore
35
35
  user = User.where(id: session[:current_user_id]).first
36
36
  end
37
37
 
38
- return unless user && user.can_login?
38
+ return unless user&.can_login?
39
39
 
40
40
  authenticate!(user)
41
41
  end
42
42
 
43
43
  def finalize_authenticated_session
44
44
  return unless current_user
45
+
45
46
  session[:current_user_id] = current_user.id
46
47
  end
47
48
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module ErrorRenderer
5
+ extend ActiveSupport::Concern
6
+ # Renders a fancy error page from app/views/errors. If the error name
7
+ # is numeric, it will also be set as the response status. Example:
8
+ #
9
+ # render_error 404
10
+ #
11
+ def render_error(error, options = {})
12
+ options[:status] ||= error if error.is_a? Numeric
13
+ respond_to do |format|
14
+ format.html do
15
+ options[:layout] = error_layout(error, options)
16
+ @email = current_user.try(&:email) || ""
17
+ render({ template: "errors/#{error}" }.merge(options))
18
+ end
19
+ format.any { head options[:status] }
20
+ end
21
+ true
22
+ end
23
+
24
+ protected
25
+
26
+ def error_layout(error, options = {})
27
+ return options[:layout] if options.key?(:layout)
28
+
29
+ if error == 404 && PagesCore.config.error_404_layout?
30
+ PagesCore.config.error_404_layout
31
+ else
32
+ "errors"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module ErrorReporting
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_action :configure_sentry_context
9
+ end
10
+
11
+ protected
12
+
13
+ def configure_sentry_context
14
+ if Object.const_defined?("Sentry")
15
+ Sentry.set_user(current_user_context)
16
+ Sentry.set_tags(locale: params[:locale] || I18n.default_locale.to_s)
17
+ Sentry.set_extras(params: params.to_unsafe_h)
18
+ elsif Object.const_defined?("Raven")
19
+ configure_legacy_sentry_context
20
+ end
21
+ end
22
+
23
+ def configure_legacy_sentry_context
24
+ Raven.user_context(current_user_context)
25
+ Raven.tags_context(locale: params[:locale] || I18n.default_locale.to_s)
26
+ Raven.extra_context(params: params.to_unsafe_h)
27
+ end
28
+
29
+ def current_user_context
30
+ return { user_id: :guest } unless logged_in?
31
+
32
+ { user_id: current_user.id,
33
+ user_email: current_user.email }
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module PoliciesHelper
3
5
  extend ActiveSupport::Concern
@@ -7,20 +9,20 @@ module PagesCore
7
9
  end
8
10
 
9
11
  module ClassMethods
10
- def require_authorization(collection, member, options = {})
11
- options = {
12
- collection: [:index, :new, :create],
13
- member: [:show, :edit, :update, :destroy]
14
- }.merge(options)
12
+ def require_authorization(object: nil, instance: nil)
13
+ object ||= inferred_policy_class
14
+
15
15
  before_action do |controller|
16
- action = params[:action].to_sym
17
- if options[:collection].include?(action)
18
- verify_policy_with_proc(controller, collection)
19
- elsif options[:member].include?(action)
20
- verify_policy_with_proc(controller, member)
21
- end
16
+ instance_name = "@#{object.name.underscore}"
17
+ record = instance || controller.instance_variable_get(instance_name)
18
+
19
+ verify_policy_with_proc(controller, record || object)
22
20
  end
23
21
  end
22
+
23
+ def inferred_policy_class
24
+ const_get(name.demodulize.gsub(/Controller$/, "").singularize)
25
+ end
24
26
  end
25
27
 
26
28
  def policy(object)
@@ -33,8 +35,9 @@ module PagesCore
33
35
  end
34
36
 
35
37
  def verify_policy(record)
36
- return true if policy(record).public_send(params[:action] + "?")
37
- fail PagesCore::NotAuthorized
38
+ return true if policy(record).public_send("#{action_name}?")
39
+
40
+ raise PagesCore::NotAuthorized
38
41
  end
39
42
  end
40
43
  end