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
  module PagesCore
4
2
  class AutopublishJob < ActiveJob::Base
5
3
  queue_as :pages_core
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  class SweepCacheJob < ActiveJob::Base
5
3
  queue_as :pages_core
@@ -1,7 +1,5 @@
1
- # encoding: utf-8
2
-
3
1
  class AdminMailer < ActionMailer::Base
4
- default from: proc { "\"Pages\" <support@kord.no>" }
2
+ default from: proc { "\"Pages\" <support@anyone.no>" }
5
3
 
6
4
  def error_report(error_report, from, description)
7
5
  @error_report = error_report
@@ -9,8 +7,8 @@ class AdminMailer < ActionMailer::Base
9
7
  @description = description
10
8
  short_message = @error_report[:message].gsub(/[\s\n]+/, " ")[0..80]
11
9
  mail(
12
- to: "system+error@kord.no",
13
- from: "\"Error reports\" <system+error@kord.no>",
10
+ to: "system+error@anyone.no",
11
+ from: "\"Error reports\" <system+error@anyone.no>",
14
12
  subject: "[#{PagesCore.config(:site_name)}] Error: #{short_message}"
15
13
  )
16
14
  end
@@ -24,17 +22,6 @@ class AdminMailer < ActionMailer::Base
24
22
  )
25
23
  end
26
24
 
27
- def comment_notification(recipient, page, comment, url)
28
- @recipient = recipient
29
- @page = page
30
- @comment = comment
31
- @url = url
32
- mail(
33
- to: recipient,
34
- subject: "[#{PagesCore.config(:site_name)}] New comment on #{@page.name}"
35
- )
36
- end
37
-
38
25
  def invite(invite, url)
39
26
  @invite = invite
40
27
  @url = url
@@ -0,0 +1,76 @@
1
+ class Attachment < ActiveRecord::Base
2
+ include Dis::Model
3
+ include PagesCore::Sweepable
4
+
5
+ belongs_to :user, optional: true
6
+
7
+ validates_data_presence
8
+ validates :content_type, presence: true
9
+ validates :filename, presence: true
10
+ validates :content_length, presence: true
11
+
12
+ localizable do
13
+ attribute :name
14
+ attribute :description
15
+ end
16
+
17
+ before_validation :set_name_from_filename
18
+
19
+ class << self
20
+ def verifier
21
+ @verifier ||= PagesCore::DigestVerifier.new(
22
+ Rails.application.key_generator.generate_key("attachments")
23
+ )
24
+ end
25
+
26
+ def formats
27
+ {
28
+ "audio/mpeg" => :mp3,
29
+ "image/gif" => :gif,
30
+ "image/jpeg" => :jpg,
31
+ "image/jpg" => :jpg,
32
+ "image/pjpeg" => :jpg,
33
+ "image/png" => :png,
34
+ "application/pdf" => :pdf
35
+ }
36
+ end
37
+ end
38
+
39
+ def digest
40
+ return unless id
41
+
42
+ self.class.verifier.generate(id.to_s)
43
+ end
44
+
45
+ def format?
46
+ content_type && self.class.formats.key?(content_type)
47
+ end
48
+
49
+ def format
50
+ self.class.formats[content_type]
51
+ end
52
+
53
+ def filename_extension
54
+ if filename_extension?
55
+ filename.match(/\.([^\.]+)$/)[1]
56
+ else
57
+ ""
58
+ end
59
+ end
60
+
61
+ def filename_extension?
62
+ filename =~ /\./
63
+ end
64
+
65
+ # Includes a timestamp fingerprint in the URL param, so
66
+ # that rendered images can be cached indefinitely.
67
+ def to_param
68
+ [id, updated_at.utc.to_s(cache_timestamp_format)].join("-")
69
+ end
70
+
71
+ private
72
+
73
+ def set_name_from_filename
74
+ self.name ||= File.basename(filename, ".*") if filename? && locale
75
+ end
76
+ end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  class Autopublisher
4
2
  class << self
5
3
  def run!(_options = {})
@@ -23,7 +21,9 @@ class Autopublisher
23
21
  protected
24
22
 
25
23
  def queued_pages
26
- Page.where(autopublish: true).order("published_at ASC")
24
+ Page.where(autopublish: true)
25
+ .order("published_at ASC")
26
+ .in_locale(I18n.default_locale)
27
27
  end
28
28
 
29
29
  def due_pages
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  class Category < ActiveRecord::Base
4
2
  has_many :page_categories, dependent: :destroy
5
3
  has_many :pages, through: :page_categories
@@ -7,7 +5,6 @@ class Category < ActiveRecord::Base
7
5
  acts_as_list
8
6
 
9
7
  before_save :set_slug
10
- after_save ThinkingSphinx::RealTime.callback_for(:pages, [:page])
11
8
 
12
9
  scope :by_name, -> { order("name ASC") }
13
10
 
@@ -12,14 +12,13 @@ module PagesCore
12
12
  end
13
13
 
14
14
  def role_names=(names)
15
- new_roles = names.map do |name|
15
+ self.roles = names.map do |name|
16
16
  if role?(name)
17
17
  roles.find_by(name: name)
18
18
  else
19
19
  roles.new(name: name)
20
20
  end
21
21
  end
22
- self.roles = new_roles
23
22
  end
24
23
  end
25
24
  end
@@ -1,12 +1,12 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module HumanizableParam
3
+ include ActiveSupport::Inflector
5
4
  extend ActiveSupport::Concern
6
5
 
7
6
  def humanized_param(slug)
8
- return id.to_s unless slug && !slug.blank?
9
- "#{id}-" + slug
7
+ return id.to_s unless slug && slug.present?
8
+ "#{id}-" + transliterate(slug)
9
+ .downcase
10
10
  .gsub(/[\[\{]/, "(")
11
11
  .gsub(/[\]\}]/, ")")
12
12
  .gsub(/[^[[:alnum:]]()\-]+/, "-")
@@ -0,0 +1,39 @@
1
+ module PagesCore
2
+ module PageModel
3
+ module Attachments
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_many :page_files,
8
+ -> { order("position ASC") },
9
+ class_name: "PageFile",
10
+ dependent: :destroy,
11
+ inverse_of: :page
12
+
13
+ has_many :attachments, through: :page_files
14
+
15
+ accepts_nested_attributes_for(
16
+ :page_files,
17
+ reject_if: proc { |a| a["attachment_id"].blank? },
18
+ allow_destroy: true
19
+ )
20
+ end
21
+
22
+ def attachments
23
+ super.in_locale(locale)
24
+ end
25
+
26
+ def attachments?
27
+ attachments.any?
28
+ end
29
+
30
+ def page_files
31
+ super.in_locale(locale)
32
+ end
33
+
34
+ def files
35
+ page_files
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  module Autopublishable
@@ -0,0 +1,59 @@
1
+ module PagesCore
2
+ module PageModel
3
+ module DatedPage
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_validation :set_all_day_dates
8
+ before_validation :ensure_ends_at
9
+
10
+ scope :upcoming, -> { where("ends_at > ?", Time.zone.now) }
11
+ scope :past, -> { where("ends_at <= ?", Time.zone.now) }
12
+ end
13
+
14
+ module ClassMethods
15
+ end
16
+
17
+ # Finds the page's next sibling by date. Returns nil if there isn't one.
18
+ def next_sibling_by_date
19
+ siblings = siblings_by_date
20
+ return unless siblings.any?
21
+
22
+ siblings[(siblings.to_a.index(self) + 1)...siblings.length]
23
+ .try(&:first)
24
+ end
25
+
26
+ # Finds the page's previous sibling by date. Returns nil if there isn't one.
27
+ def previous_sibling_by_date
28
+ siblings = siblings_by_date
29
+ return unless siblings.any?
30
+
31
+ siblings[0...siblings.to_a.index(self)].try(&:last)
32
+ end
33
+
34
+ def upcoming?
35
+ return false unless ends_at?
36
+ ends_at > Time.zone.now
37
+ end
38
+
39
+ private
40
+
41
+ def ensure_ends_at
42
+ return unless starts_at?
43
+
44
+ self.ends_at = starts_at if !ends_at? || ends_at < starts_at
45
+ end
46
+
47
+ def set_all_day_dates
48
+ return unless all_day?
49
+
50
+ self.starts_at = starts_at.beginning_of_day if starts_at?
51
+ self.ends_at = ends_at.end_of_day if ends_at?
52
+ end
53
+
54
+ def siblings_by_date
55
+ siblings.reorder("starts_at ASC, pages.id DESC")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,21 +1,23 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  module Images
6
4
  extend ActiveSupport::Concern
7
5
 
8
6
  included do
9
- belongs_to_image :image
10
- belongs_to_image :meta_image, class_name: "Image"
11
- has_many :page_images, -> { order("position") }
7
+ belongs_to_image :image, optional: true
8
+ belongs_to_image :meta_image, class_name: "Image", optional: true
9
+ has_many :page_images, -> { order("position") }, inverse_of: :page
12
10
  has_many(
13
11
  :images,
14
- -> { where("`page_images`.`primary` = ?", false).order("position") },
12
+ -> { where(page_images: { primary: false }).order("position") },
15
13
  through: :page_images
16
14
  )
17
15
 
18
- after_save :ensure_page_images_contains_primary_image
16
+ after_save :update_primary_image
17
+
18
+ accepts_nested_attributes_for :page_images,
19
+ reject_if: proc { |a| a["image_id"].blank? },
20
+ allow_destroy: true
19
21
  end
20
22
 
21
23
  def image?
@@ -36,14 +38,9 @@ module PagesCore
36
38
 
37
39
  private
38
40
 
39
- def ensure_page_images_contains_primary_image
40
- return if !image_id? || !image_id_changed?
41
- page_image = page_images.find_by(image_id: image_id)
42
- if page_image
43
- page_image.update(primary: true)
44
- else
45
- page_images.create(image_id: image_id, primary: true)
46
- end
41
+ def update_primary_image
42
+ new_id = page_images.find_by(primary: true)&.image_id
43
+ update(image_id: new_id) if new_id != image_id
47
44
  end
48
45
  end
49
46
  end
@@ -1,8 +1,7 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  module Localizable
4
+ include ActiveSupport::Inflector
6
5
  extend ActiveSupport::Concern
7
6
 
8
7
  included do
@@ -20,10 +19,18 @@ module PagesCore
20
19
  attribute :open_graph_description
21
20
 
22
21
  dictionary(lambda do
23
- PagesCore::Templates::TemplateConfiguration.all_blocks
22
+ PagesCore::Templates::TemplateConfiguration.localized_blocks
24
23
  end)
25
24
  end
26
25
  end
26
+
27
+ def transliterated_name
28
+ prev_locale = I18n.locale
29
+ I18n.locale = locale.to_sym if locale
30
+ transliterated = transliterate(name)
31
+ I18n.locale = prev_locale
32
+ transliterated
33
+ end
27
34
  end
28
35
  end
29
36
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  module Pathable
@@ -28,9 +26,9 @@ module PagesCore
28
26
  def full_path?(last_segment = nil)
29
27
  last_segment ||= path_segment
30
28
  if parent
31
- parent.full_path? && !last_segment.blank?
29
+ parent.full_path? && last_segment.present?
32
30
  else
33
- !last_segment.blank?
31
+ last_segment.present?
34
32
  end
35
33
  end
36
34
 
@@ -61,11 +59,11 @@ module PagesCore
61
59
  end
62
60
 
63
61
  def generated_path_segment
64
- name.gsub(/[^[[:alnum:]]\-_]+/, "-")
65
- .gsub(/[\-]{2,}/, "-")
66
- .gsub(/(^\-|\-$)/, "")
67
- .mb_chars
68
- .downcase
62
+ transliterated_name.gsub(/[^[[:alnum:]]\-_]+/, "-")
63
+ .gsub(/[\-]{2,}/, "-")
64
+ .gsub(/(^\-|\-$)/, "")
65
+ .mb_chars
66
+ .downcase
69
67
  end
70
68
 
71
69
  def page_path_matches_routes?(page_path)
@@ -78,7 +76,7 @@ module PagesCore
78
76
  def page_path_route?(route)
79
77
  route[:controller] == "pages" &&
80
78
  route[:action] == "show" &&
81
- !route[:path].blank?
79
+ route[:path].present?
82
80
  end
83
81
 
84
82
  def path_collision?(path_segment)
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  class InvalidRedirectUrl < StandardError; end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PageModel
5
3
  module Sortable
@@ -20,7 +18,7 @@ module PagesCore
20
18
  ")"
21
19
  )
22
20
  .group("pages.id, localizations.id")
23
- .reorder("COUNT(tags.id) DESC, position ASC")
21
+ .reorder(Arel.sql("COUNT(tags.id) DESC, position ASC"))
24
22
  end
25
23
  end
26
24