pages_core 3.6.2 → 3.8.2

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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/Rakefile +3 -1
  4. data/app/assets/builds/pages_core/admin-dist.js +55 -0
  5. data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
  6. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
  7. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
  8. data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
  9. data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
  10. data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
  11. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
  12. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
  13. data/app/assets/stylesheets/pages/admin.scss +0 -1
  14. data/app/assets/stylesheets/pages/errors.css +2 -0
  15. data/app/controller_dummies/admin/admin_controller.rb +3 -1
  16. data/app/controller_dummies/application_controller.rb +3 -1
  17. data/app/controller_dummies/attachments_controller.rb +3 -1
  18. data/app/controller_dummies/frontend_controller.rb +3 -1
  19. data/app/controller_dummies/images_controller.rb +3 -1
  20. data/app/controller_dummies/page_files_controller.rb +3 -1
  21. data/app/controller_dummies/pages_controller.rb +3 -1
  22. data/app/controller_dummies/sitemaps_controller.rb +3 -1
  23. data/app/controllers/admin/attachments_controller.rb +5 -3
  24. data/app/controllers/admin/categories_controller.rb +2 -0
  25. data/app/controllers/admin/images_controller.rb +16 -8
  26. data/app/controllers/admin/invites_controller.rb +4 -1
  27. data/app/controllers/admin/pages_controller.rb +7 -19
  28. data/app/controllers/admin/password_resets_controller.rb +9 -5
  29. data/app/controllers/admin/users_controller.rb +10 -4
  30. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
  31. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  32. data/app/controllers/concerns/pages_core/authentication.rb +13 -5
  33. data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
  34. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  35. data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
  36. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +8 -0
  37. data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
  38. data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
  39. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  40. data/app/controllers/errors_controller.rb +5 -53
  41. data/app/controllers/pages_core/admin_controller.rb +7 -67
  42. data/app/controllers/pages_core/attachments_controller.rb +10 -6
  43. data/app/controllers/pages_core/base_controller.rb +11 -17
  44. data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
  45. data/app/controllers/pages_core/frontend/pages_controller.rb +14 -17
  46. data/app/controllers/pages_core/frontend_controller.rb +3 -0
  47. data/app/controllers/pages_core/images_controller.rb +3 -1
  48. data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
  49. data/app/controllers/sessions_controller.rb +3 -1
  50. data/app/formatters/pages_core/html_formatter.rb +13 -63
  51. data/app/formatters/pages_core/image_embedder.rb +79 -0
  52. data/app/formatters/pages_core/link_renderer.rb +4 -2
  53. data/app/helpers/admin/admin_helper.rb +2 -0
  54. data/app/helpers/admin/menu_helper.rb +6 -4
  55. data/app/helpers/admin/pages_helper.rb +4 -57
  56. data/app/helpers/application_helper.rb +3 -1
  57. data/app/helpers/frontend_helper.rb +3 -1
  58. data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
  59. data/app/helpers/pages_core/admin/content_tabs_helper.rb +31 -0
  60. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  61. data/app/helpers/pages_core/admin/form_builder.rb +8 -0
  62. data/app/helpers/pages_core/admin/image_uploads_helper.rb +47 -0
  63. data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
  64. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  65. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  66. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -39
  67. data/app/helpers/pages_core/application_helper.rb +3 -0
  68. data/app/helpers/pages_core/attachments_helper.rb +31 -27
  69. data/app/helpers/pages_core/form_builder.rb +17 -13
  70. data/app/helpers/pages_core/frontend_helper.rb +3 -3
  71. data/app/helpers/pages_core/head_tags_helper.rb +18 -22
  72. data/app/helpers/pages_core/images_helper.rb +3 -0
  73. data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
  74. data/app/helpers/pages_core/open_graph_tags_helper.rb +8 -6
  75. data/app/helpers/pages_core/page_path_helper.rb +24 -3
  76. data/app/javascript/admin-dist.js +2 -0
  77. data/app/javascript/components/Attachments/Attachment.jsx +121 -0
  78. data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
  79. data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
  80. data/app/javascript/components/Attachments.jsx +165 -0
  81. data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
  82. data/app/javascript/components/EditableImage.jsx +61 -0
  83. data/app/javascript/components/FileUploadButton.jsx +47 -0
  84. data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
  85. data/app/javascript/components/ImageCropper/Image.jsx +65 -0
  86. data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
  87. data/app/javascript/components/ImageCropper/useCrop.js +199 -0
  88. data/app/javascript/components/ImageCropper.jsx +90 -0
  89. data/app/javascript/components/ImageEditor/Form.jsx +98 -0
  90. data/app/javascript/components/ImageEditor.jsx +62 -0
  91. data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
  92. data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
  93. data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
  94. data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
  95. data/app/javascript/components/ImageGrid.jsx +257 -0
  96. data/app/javascript/components/ImageUploader.jsx +171 -0
  97. data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
  98. data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
  99. data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
  100. data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
  101. data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
  102. data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +44 -38
  103. data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +46 -31
  104. data/app/javascript/components/RichTextArea.jsx +213 -0
  105. data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
  106. data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
  107. data/app/javascript/components/TagEditor/Tag.jsx +32 -0
  108. data/app/javascript/components/TagEditor.jsx +61 -0
  109. data/app/javascript/components/Toast.jsx +72 -0
  110. data/app/javascript/components/drag/draggedOrder.js +51 -0
  111. data/app/javascript/components/drag/useDragCollection.js +84 -0
  112. data/app/javascript/components/drag/useDragUploader.js +112 -0
  113. data/app/javascript/components/drag/useDraggable.js +17 -0
  114. data/app/javascript/components/drag.js +6 -0
  115. data/app/javascript/components.js +15 -0
  116. data/app/javascript/controllers/EditPageController.js +20 -0
  117. data/app/javascript/controllers/LoginController.js +29 -0
  118. data/app/javascript/controllers/MainController.js +65 -0
  119. data/app/javascript/controllers/PageOptionsController.js +62 -0
  120. data/app/javascript/features/RichText.jsx +34 -0
  121. data/app/javascript/hooks.js +2 -0
  122. data/app/javascript/index.js +38 -0
  123. data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +64 -63
  124. data/app/javascript/lib/copyToClipboard.js +13 -0
  125. data/app/javascript/lib/readyHandler.js +22 -0
  126. data/app/javascript/lib/request.js +36 -0
  127. data/app/javascript/stores/ModalStore.jsx +12 -0
  128. data/app/javascript/stores/ToastStore.jsx +14 -0
  129. data/app/javascript/stores.js +2 -0
  130. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  131. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  132. data/app/mailers/admin_mailer.rb +4 -14
  133. data/app/models/attachment.rb +10 -8
  134. data/app/models/autopublisher.rb +3 -0
  135. data/app/models/category.rb +3 -1
  136. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  137. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  138. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  139. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  140. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  141. data/app/models/concerns/pages_core/page_model/images.rb +8 -2
  142. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  143. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  144. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  145. data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
  146. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  147. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  148. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  149. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  150. data/app/models/concerns/pages_core/searchable_document.rb +71 -0
  151. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  152. data/app/models/concerns/pages_core/taggable.rb +33 -12
  153. data/app/models/image.rb +14 -1
  154. data/app/models/invite.rb +3 -1
  155. data/app/models/invite_role.rb +5 -3
  156. data/app/models/page.rb +6 -3
  157. data/app/models/page_builder.rb +2 -0
  158. data/app/models/page_category.rb +3 -1
  159. data/app/models/page_exporter.rb +23 -10
  160. data/app/models/page_file.rb +3 -1
  161. data/app/models/page_image.rb +3 -3
  162. data/app/models/page_path.rb +13 -5
  163. data/app/models/password_reset_token.rb +3 -1
  164. data/app/models/role.rb +9 -6
  165. data/app/models/search_document.rb +72 -0
  166. data/app/models/tag.rb +9 -6
  167. data/app/models/tagging.rb +4 -2
  168. data/app/models/user.rb +8 -5
  169. data/app/policies/invite_policy.rb +2 -0
  170. data/app/policies/page_file_policy.rb +2 -0
  171. data/app/policies/page_image_policy.rb +2 -0
  172. data/app/policies/page_policy.rb +2 -0
  173. data/app/policies/policy.rb +2 -0
  174. data/app/policies/user_policy.rb +2 -0
  175. data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +10 -7
  176. data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +13 -11
  177. data/app/resources/admin/page_file_resource.rb +10 -0
  178. data/app/resources/admin/page_image_resource.rb +10 -0
  179. data/app/resources/export/attachment_resource.rb +10 -0
  180. data/app/resources/export/page_image_resource.rb +45 -0
  181. data/app/resources/export/page_resource.rb +42 -0
  182. data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +10 -16
  183. data/app/resources/page_resource.rb +33 -0
  184. data/app/services/pages_core/create_user_service.rb +5 -2
  185. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  186. data/app/services/pages_core/invite_service.rb +4 -2
  187. data/app/views/admin/images/show.json.jbuilder +2 -0
  188. data/app/views/admin/pages/_edit_content.html.erb +1 -1
  189. data/app/views/admin/pages/_edit_files.html.erb +1 -5
  190. data/app/views/admin/pages/_edit_images.html.erb +1 -5
  191. data/app/views/admin/pages/_edit_options.html.erb +74 -55
  192. data/app/views/admin/pages/_form.html.erb +19 -0
  193. data/app/views/admin/pages/edit.html.erb +35 -61
  194. data/app/views/admin/pages/index.html.erb +0 -1
  195. data/app/views/admin/pages/new.html.erb +32 -32
  196. data/app/views/admin/pages/news.html.erb +1 -1
  197. data/app/views/admin/users/_access_control.html.erb +5 -1
  198. data/app/views/admin/users/login.html.erb +12 -4
  199. data/app/views/errors/500.html.erb +2 -20
  200. data/app/views/errors/_generic_help.html.erb +1 -1
  201. data/app/views/feeds/pages.rss.builder +3 -2
  202. data/app/views/layouts/admin/_header.html.erb +1 -1
  203. data/app/views/layouts/admin/_page_header.html.erb +33 -0
  204. data/app/views/layouts/admin.html.erb +23 -42
  205. data/app/views/pages_core/_google_analytics.html.erb +8 -0
  206. data/app/views/sitemaps/show.xml.builder +2 -0
  207. data/config/routes.rb +5 -5
  208. data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
  209. data/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
  210. data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
  211. data/db/migrate/20210210235200_create_search_documents.rb +74 -0
  212. data/lib/pages_core/admin_menu_item.rb +3 -0
  213. data/lib/pages_core/archive_finder.rb +12 -16
  214. data/lib/pages_core/attachment_embedder.rb +4 -6
  215. data/lib/pages_core/cache_sweeper.rb +10 -108
  216. data/lib/pages_core/configuration/base.rb +5 -0
  217. data/lib/pages_core/configuration/pages.rb +4 -2
  218. data/lib/pages_core/configuration.rb +2 -0
  219. data/lib/pages_core/digest_verifier.rb +5 -5
  220. data/lib/pages_core/engine.rb +53 -5
  221. data/lib/pages_core/extensions/string_extensions.rb +3 -1
  222. data/lib/pages_core/extensions.rb +2 -0
  223. data/lib/pages_core/page_path_constraint.rb +2 -0
  224. data/lib/pages_core/pages_plugin.rb +3 -1
  225. data/lib/pages_core/plugin.rb +4 -52
  226. data/lib/pages_core/pub_sub.rb +2 -0
  227. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  228. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  229. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  230. data/lib/pages_core/static_cache.rb +26 -0
  231. data/lib/pages_core/templates/block_configuration.rb +4 -1
  232. data/lib/pages_core/templates/configuration.rb +5 -1
  233. data/lib/pages_core/templates/configuration_handler.rb +5 -3
  234. data/lib/pages_core/templates/configuration_proxy.rb +2 -0
  235. data/lib/pages_core/templates/controller_actions.rb +2 -0
  236. data/lib/pages_core/templates/template_configuration.rb +18 -13
  237. data/lib/pages_core/templates.rb +5 -3
  238. data/lib/pages_core/version.rb +3 -1
  239. data/lib/pages_core.rb +13 -5
  240. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -7
  241. data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
  242. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  243. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
  244. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
  245. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  246. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
  247. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
  248. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
  249. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  250. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +4 -2
  251. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
  253. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
  254. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  255. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  256. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  257. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  258. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
  259. data/lib/tasks/pages/cache.rake +8 -5
  260. data/lib/tasks/pages/export.rake +3 -1
  261. data/lib/tasks/pages/page_paths.rake +2 -0
  262. data/lib/tasks/pages.rake +3 -2
  263. data/template.rb +2 -0
  264. metadata +194 -157
  265. data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
  266. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
  267. data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
  268. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
  269. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
  270. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +0 -44
  271. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
  272. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
  273. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -301
  274. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -171
  275. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
  276. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -63
  277. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -58
  278. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -37
  279. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
  280. data/app/assets/javascripts/pages/admin/components.jsx +0 -2
  281. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
  282. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
  283. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
  284. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
  285. data/app/assets/javascripts/pages/admin.jsx +0 -17
  286. data/app/assets/javascripts/pages/login_form.jsx +0 -21
  287. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  288. data/app/serializers/admin/page_file_serializer.rb +0 -6
  289. data/app/serializers/admin/page_image_serializer.rb +0 -6
  290. data/app/serializers/page_export_serializer.rb +0 -30
  291. data/app/serializers/page_file_export_serializer.rb +0 -4
  292. data/app/serializers/page_image_export_serializer.rb +0 -40
  293. data/app/serializers/page_serializer.rb +0 -21
  294. data/app/views/admin_mailer/error_report.html.erb +0 -70
  295. data/app/views/errors/500_critical.html.erb +0 -7
  296. data/app/views/errors/report.html.erb +0 -4
  297. data/app/views/layouts/admin/_analytics.html.erb +0 -16
  298. data/config/removed_migrations.yml +0 -60
  299. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  300. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  301. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  302. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  303. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  304. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  305. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  306. data/db/migrate/20140203183900_create_roles.rb +0 -66
  307. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  308. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  309. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  310. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  311. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  312. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  313. data/db/migrate/20141007173000_create_invites.rb +0 -16
  314. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  315. data/db/migrate/20150401131300_localize_images.rb +0 -38
  316. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  317. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  318. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  319. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  320. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  321. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  322. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  323. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  324. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  325. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  326. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  327. data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
  328. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
  329. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  330. data/lib/tasks/pages/update.rake +0 -17
  331. data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
  332. data/vendor/assets/javascripts/reflux.min.js +0 -1
@@ -1,275 +1,196 @@
1
- class CreatePagesTables < ActiveRecord::Migration[4.2]
2
- def change
3
- create_table "accounts" do |t|
4
- t.string "name"
5
- t.string "plan"
6
- t.string "key"
7
- t.text "billing_address"
8
- t.integer "account_holder_id"
9
- t.datetime "created_at"
10
- t.datetime "updated_at"
11
- t.datetime "last_billed_at"
12
- t.boolean "is_activated", default: true, null: false
13
- t.string "domain"
14
- end
15
-
16
- create_table "binaries" do |t|
17
- t.string "sha1_hash"
18
- end
19
-
20
- create_table "categories" do |t|
21
- t.string "name"
22
- t.string "slug"
23
- t.integer "position"
24
- t.datetime "created_at", null: false
25
- t.datetime "updated_at", null: false
26
- end
27
-
28
- add_index "categories", ["slug"]
29
-
30
- create_table "delayed_jobs" do |t|
31
- t.integer "priority", default: 0
32
- t.integer "attempts", default: 0
33
- t.text "handler"
34
- t.string "last_error"
35
- t.datetime "run_at"
36
- t.datetime "locked_at"
37
- t.datetime "failed_at"
38
- t.string "locked_by"
39
- t.datetime "created_at", null: false
40
- t.datetime "updated_at", null: false
41
- end
42
-
43
- create_table "feed_items" do |t|
44
- t.integer "feed_id"
45
- t.string "guid"
46
- t.string "title"
47
- t.string "link"
48
- t.text "description"
49
- t.datetime "pubdate"
50
- t.string "author"
51
- end
52
-
53
- add_index "feed_items", ["feed_id"]
54
-
55
- create_table "feeds" do |t|
56
- t.string "url"
57
- t.string "link"
58
- t.string "title"
59
- t.text "description"
60
- t.datetime "refreshed_at"
61
- end
62
-
63
- add_index "feeds", ["url"]
64
-
65
- create_table "images" do |t|
66
- t.string "name"
67
- t.string "byline"
68
- t.text "description"
69
- t.string "filename"
70
- t.string "content_type"
71
- t.integer "folder"
72
- t.integer "user_id"
73
- t.datetime "created_at"
74
- t.text "filters"
75
- t.string "original_size"
76
- t.string "hotspot"
77
- t.integer "binary_id"
78
- t.string "url"
79
- t.boolean "cropped", default: false, null: false
80
- t.string "crop_start"
81
- t.string "crop_size"
82
- t.integer "original_binary_id"
83
- t.datetime "updated_at"
84
- end
85
-
86
- create_table "images_imagesets" do |t|
87
- t.integer "relation_id"
88
- t.integer "imageset_id"
89
- t.integer "image_id"
90
- t.integer "position"
91
- end
92
-
93
- create_table "imagesets" do |t|
94
- t.string "name"
95
- t.text "description"
96
- t.datetime "created_at"
97
- t.integer "user_id"
98
- end
99
-
100
- create_table "mail_subscribers" do |t|
101
- t.string "email"
102
- t.datetime "created_at"
103
- t.string "group", default: "Default"
104
- end
105
-
106
- create_table "mailings" do |t|
107
- t.string "recipients"
108
- t.string "sender"
109
- t.string "subject"
110
- t.text "body"
111
- t.datetime "created_at"
112
- t.boolean "failed", default: false
113
- t.string "content_type"
114
- t.boolean "in_progress", default: false, null: false
115
- end
116
-
117
- create_table "mailouts" do |t|
118
- t.string "subject"
119
- t.string "sender"
120
- t.string "template"
121
- t.text "body"
122
- t.datetime "created_at"
123
- t.datetime "updated_at"
124
- t.integer "image_id"
125
- t.text "groups"
126
- t.string "host"
127
- end
128
-
129
- create_table "page_comments" do |t|
130
- t.integer "page_id"
131
- t.string "remote_ip"
132
- t.string "name"
133
- t.string "email"
134
- t.string "url"
135
- t.text "body"
136
- t.datetime "created_at"
137
- t.datetime "updated_at"
138
- end
139
-
140
- create_table "page_files" do |t|
141
- t.integer "page_id"
142
- t.integer "position"
143
- t.string "name"
144
- t.string "filename"
145
- t.string "content_type"
146
- t.integer "filesize"
147
- t.integer "binary_id"
148
- t.datetime "created_at"
149
- t.datetime "updated_at"
150
- end
151
-
152
- create_table "page_images" do |t|
153
- t.integer "page_id"
154
- t.integer "image_id"
155
- t.integer "position"
156
- t.boolean "primary", default: false, null: false
157
- end
158
-
159
- add_index "page_images", %w[page_id primary]
160
- add_index "page_images", ["page_id"]
161
-
162
- create_table "pages" do |t|
163
- t.integer "parent_page_id"
164
- t.integer "position"
165
- t.string "byline"
166
- t.string "template"
167
- t.datetime "created_at"
168
- t.datetime "updated_at"
169
- t.integer "user_id"
170
- t.integer "status", default: 0, null: false
171
- t.string "content_order"
172
- t.boolean "feed_enabled", default: false, null: false
173
- t.datetime "published_at"
174
- t.text "redirect_to"
175
- t.integer "image_id"
176
- t.boolean "comments_allowed", default: true, null: false
177
- t.string "image_link"
178
- t.boolean "news_page", default: false, null: false
179
- t.boolean "autopublish", default: false, null: false
180
- t.string "unique_name"
181
- t.integer "comments_count", default: 0, null: false
182
- t.datetime "last_comment_at"
183
- t.boolean "pinned", default: false, null: false
184
- end
185
-
186
- add_index "pages", ["parent_page_id"]
187
- add_index "pages", ["position"]
188
- add_index "pages", %w[status parent_page_id position]
189
- add_index "pages", ["status"]
190
- add_index "pages", ["user_id"]
191
-
192
- create_table "pages_categories", id: false do |t|
193
- t.integer "page_id"
194
- t.integer "category_id"
195
- end
196
-
197
- add_index "pages_categories", ["category_id"]
198
- add_index "pages_categories", ["page_id"]
199
-
200
- create_table "partials" do |t|
201
- t.string "name"
202
- t.datetime "created_at"
203
- t.datetime "updated_at"
204
- end
1
+ # frozen_string_literal: true
205
2
 
206
- create_table "sessions" do |t|
207
- t.string "session_id"
208
- t.text "data"
209
- t.datetime "updated_at"
210
- end
211
-
212
- add_index "sessions", ["session_id"]
213
- add_index "sessions", ["updated_at"]
214
-
215
- create_table "sms_subscribers" do |t|
216
- t.string "msisdn"
217
- t.string "group", default: "Default"
218
- t.datetime "created_at"
219
- t.datetime "updated_at"
220
- end
221
-
222
- create_table "taggings" do |t|
223
- t.integer "tag_id"
224
- t.integer "taggable_id"
225
- t.string "taggable_type"
226
- end
227
-
228
- add_index "taggings", ["tag_id"]
229
- add_index "taggings", %w[taggable_type taggable_id]
230
-
231
- create_table "tags" do |t|
232
- t.string "name"
233
- end
234
-
235
- add_index "tags", ["name"]
236
-
237
- create_table "textbits" do |t|
238
- t.integer "textable_id"
239
- t.string "textable_type"
240
- t.string "name"
241
- t.string "language"
242
- t.string "filter"
243
- t.text "body"
244
- t.datetime "created_at"
245
- t.datetime "updated_at"
246
- t.index(%w[textable_id textable_type name language],
247
- unique: true,
248
- name: "index_textbits_on_locale")
249
- t.index %w[textable_id textable_type]
250
- end
251
-
252
- create_table "users" do |t|
253
- t.string "username"
254
- t.string "hashed_password"
255
- t.string "realname"
256
- t.string "email"
257
- t.datetime "last_login_at"
258
- t.integer "created_by"
259
- t.datetime "created_at"
260
- t.boolean "is_admin"
261
- t.text "persistent_data"
262
- t.boolean "sms_sender"
263
- t.boolean "is_activated", default: false, null: false
264
- t.boolean "is_deleted", default: false, null: false
265
- t.string "token"
266
- t.date "born_on"
267
- t.string "mobile"
268
- t.string "web_link"
269
- t.integer "image_id"
270
- t.boolean "is_reviewer", default: false, null: false
271
- t.boolean "is_super_admin", default: false, null: false
272
- t.string "openid_url"
3
+ class CreatePagesTables < ActiveRecord::Migration[5.0]
4
+ def change
5
+ create_table :attachments do |t|
6
+ t.string :filename, null: false
7
+ t.string :content_type, null: false
8
+ t.integer :content_length, null: false
9
+ t.datetime :created_at
10
+ t.datetime :updated_at
11
+ t.string :content_hash, null: false
12
+ t.integer :user_id
13
+ end
14
+
15
+ create_table :categories do |t|
16
+ t.string :name
17
+ t.string :slug
18
+ t.integer :position
19
+ t.datetime :created_at, null: false
20
+ t.datetime :updated_at, null: false
21
+ t.index :slug
22
+ end
23
+
24
+ create_table :delayed_jobs do |t|
25
+ t.integer :priority, default: 0
26
+ t.integer :attempts, default: 0
27
+ t.text :handler
28
+ t.text :last_error
29
+ t.datetime :run_at
30
+ t.datetime :locked_at
31
+ t.datetime :failed_at
32
+ t.string :locked_by
33
+ t.datetime :created_at, null: false
34
+ t.datetime :updated_at, null: false
35
+ t.string :queue
36
+ end
37
+
38
+ create_table :images do |t|
39
+ t.string :filename, null: false
40
+ t.string :content_type, null: false
41
+ t.datetime :created_at
42
+ t.datetime :updated_at
43
+ t.string :content_hash, null: false
44
+ t.integer :content_length, null: false
45
+ t.string :colorspace, null: false
46
+ t.integer :real_width, null: false
47
+ t.integer :real_height, null: false
48
+ t.integer :crop_width
49
+ t.integer :crop_height
50
+ t.integer :crop_start_x
51
+ t.integer :crop_start_y
52
+ t.integer :crop_gravity_x
53
+ t.integer :crop_gravity_y
54
+ end
55
+
56
+ create_table :invite_roles do |t|
57
+ t.integer :invite_id
58
+ t.string :name
59
+ t.datetime :created_at
60
+ t.datetime :updated_at
61
+ end
62
+
63
+ create_table :invites do |t|
64
+ t.integer :user_id
65
+ t.string :email
66
+ t.string :token
67
+ t.datetime :sent_at
68
+ t.datetime :created_at
69
+ t.datetime :updated_at
70
+ end
71
+
72
+ create_table :localizations do |t|
73
+ t.integer :localizable_id
74
+ t.string :localizable_type
75
+ t.string :name
76
+ t.string :locale
77
+ t.text :value
78
+ t.datetime :created_at
79
+ t.datetime :updated_at
80
+ t.index %i[localizable_id localizable_type name locale],
81
+ name: :index_textbits_on_locale,
82
+ unique: true
83
+ t.index %i[localizable_id localizable_type]
84
+ end
85
+
86
+ create_table :page_categories do |t|
87
+ t.integer :page_id
88
+ t.integer :category_id
89
+ t.index :category_id
90
+ t.index :page_id
91
+ end
92
+
93
+ create_table :page_files, force: :cascade do |t|
94
+ t.bigint :page_id
95
+ t.bigint :attachment_id
96
+ t.integer :position
97
+ t.datetime :created_at, null: false
98
+ t.datetime :updated_at, null: false
99
+ t.index :attachment_id
100
+ t.index :page_id
101
+ end
102
+
103
+ create_table :page_images do |t|
104
+ t.integer :page_id
105
+ t.integer :image_id
106
+ t.integer :position
107
+ t.boolean :primary, default: false, null: false
108
+ t.index %i[page_id primary]
109
+ t.index :page_id
110
+ end
111
+
112
+ create_table :page_paths do |t|
113
+ t.integer :page_id
114
+ t.string :locale
115
+ t.string :path
116
+ t.datetime :created_at, null: false
117
+ t.datetime :updated_at, null: false
118
+ t.index %i[locale path], unique: true
119
+ end
120
+
121
+ create_table :pages do |t|
122
+ t.integer :parent_page_id
123
+ t.integer :position
124
+ t.string :byline
125
+ t.string :template
126
+ t.datetime :created_at
127
+ t.datetime :updated_at
128
+ t.integer :user_id
129
+ t.integer :status, default: 0, null: false
130
+ t.boolean :feed_enabled, default: false, null: false
131
+ t.datetime :published_at
132
+ t.string :redirect_to
133
+ t.integer :image_id
134
+ t.string :image_link
135
+ t.boolean :news_page, default: false, null: false
136
+ t.boolean :autopublish, default: false, null: false
137
+ t.string :unique_name
138
+ t.datetime :last_comment_at
139
+ t.boolean :pinned, default: false, null: false
140
+ t.integer :meta_image_id
141
+ t.datetime :starts_at
142
+ t.datetime :ends_at
143
+ t.boolean :all_day, default: false, null: false
144
+ t.index :ends_at
145
+ t.index :parent_page_id
146
+ t.index :position
147
+ t.index :starts_at
148
+ t.index %i[status parent_page_id position]
149
+ t.index :status
150
+ t.index :user_id
151
+ end
152
+
153
+ create_table :password_reset_tokens do |t|
154
+ t.integer :user_id
155
+ t.string :token
156
+ t.datetime :expires_at
157
+ t.datetime :created_at
158
+ t.datetime :updated_at
159
+ end
160
+
161
+ create_table :roles do |t|
162
+ t.integer :user_id
163
+ t.string :name
164
+ t.datetime :created_at
165
+ t.datetime :updated_at
166
+ t.index :user_id
167
+ end
168
+
169
+ create_table :taggings do |t|
170
+ t.integer :tag_id
171
+ t.integer :taggable_id
172
+ t.string :taggable_type
173
+ t.index :tag_id
174
+ t.index %i[taggable_type taggable_id]
175
+ end
176
+
177
+ create_table :tags do |t|
178
+ t.string :name
179
+ t.boolean :pinned, default: false, null: false
180
+ t.index :name
181
+ end
182
+
183
+ create_table :users do |t|
184
+ t.string :username
185
+ t.string :hashed_password
186
+ t.string :name
187
+ t.string :email
188
+ t.datetime :last_login_at
189
+ t.integer :created_by
190
+ t.datetime :created_at
191
+ t.text :persistent_data
192
+ t.boolean :activated, default: false, null: false
193
+ t.integer :image_id
273
194
  end
274
195
  end
275
196
  end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class EnableSearchExtensions < ActiveRecord::Migration[5.2]
4
+ def change
5
+ ActiveRecord::Base.connection.execute <<-SQL.squish
6
+ CREATE EXTENSION IF NOT EXISTS unaccent;
7
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
8
+ SQL
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSearchConfigurations < ActiveRecord::Migration[5.2]
4
+ def up
5
+ dictionaries.each do |dict|
6
+ stem = dict == "simple" ? "simple" : "#{dict}_stem"
7
+
8
+ ActiveRecord::Base.connection.execute <<-SQL.squish
9
+ DROP TEXT SEARCH CONFIGURATION IF EXISTS #{dict}_unaccent;
10
+ CREATE TEXT SEARCH CONFIGURATION #{dict}_unaccent
11
+ (COPY = pg_catalog.#{dict});
12
+ ALTER TEXT SEARCH CONFIGURATION #{dict}_unaccent
13
+ ALTER MAPPING FOR hword, hword_part, word
14
+ WITH unaccent, #{stem};
15
+ SQL
16
+ end
17
+ end
18
+
19
+ def down
20
+ dictionaries.each do |dict|
21
+ ActiveRecord::Base.connection.execute <<-SQL.squish
22
+ DROP TEXT SEARCH CONFIGURATION IF EXISTS #{dict}_unaccent;
23
+ SQL
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def dictionaries
30
+ %w[arabic danish dutch english finnish french german
31
+ hungarian indonesian irish italian lithuanian nepali
32
+ norwegian portuguese romanian russian spanish swedish
33
+ tamil turkish simple]
34
+ end
35
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateSearchDocuments < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :search_documents do |t|
6
+ t.references :searchable, polymorphic: true, index: true, null: false
7
+ t.string :locale, null: false
8
+
9
+ t.text :name
10
+ t.text :description
11
+ t.text :content
12
+ t.text :tags
13
+ t.boolean :published, null: false, default: true
14
+ t.timestamps
15
+ t.datetime :record_updated_at, null: false
16
+
17
+ t.index %i[searchable_type searchable_id locale],
18
+ name: :search_documents_unique_index,
19
+ unique: true
20
+
21
+ # Tsvector index
22
+ t.string :tsv_config, null: false, default: "simple_unaccent"
23
+ t.tsvector :tsv
24
+ t.index :tsv, using: :gin
25
+
26
+ # Trigram index
27
+ t.index :name,
28
+ name: :search_documents_trgm_idx,
29
+ using: :gin,
30
+ opclass: { title: :gin_trgm_ops }
31
+ end
32
+
33
+ reversible do |dir|
34
+ dir.up do
35
+ ActiveRecord::Base.connection.execute <<-SQL.squish
36
+ DROP FUNCTION IF EXISTS tsvector_search_documents_trigger;
37
+ CREATE FUNCTION tsvector_search_documents_trigger()
38
+ RETURNS trigger AS $$
39
+ begin
40
+ new.tsv :=
41
+ setweight(to_tsvector(new.tsv_config::regconfig,
42
+ coalesce(new.name, '')), 'A') ||
43
+ setweight(to_tsvector(new.tsv_config::regconfig,
44
+ coalesce(new.description, '')), 'B') ||
45
+ setweight(to_tsvector(new.tsv_config::regconfig,
46
+ coalesce(new.content, '')), 'C') ||
47
+ setweight(to_tsvector(new.tsv_config::regconfig,
48
+ coalesce(new.tags, '')), 'B');
49
+ return new;
50
+ end
51
+ $$ LANGUAGE plpgsql;
52
+
53
+ DROP TRIGGER IF EXISTS tsvector_search_documents_update
54
+ ON search_documents;
55
+
56
+ CREATE TRIGGER tsvector_search_documents_update
57
+ BEFORE INSERT OR UPDATE
58
+ ON search_documents FOR EACH ROW EXECUTE PROCEDURE
59
+ tsvector_search_documents_trigger();
60
+ SQL
61
+
62
+ # Index all pages
63
+ PagesCore::SearchableDocument::Indexer.index_all!(Page)
64
+ end
65
+ dir.down do
66
+ ActiveRecord::Base.connection.execute <<-SQL.squish
67
+ DROP TRIGGER IF EXISTS tsvector_search_documents_update
68
+ ON search_documents;
69
+ DROP FUNCTION IF EXISTS tsvector_search_documents_trigger;
70
+ SQL
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class AdminMenuItem
3
5
  attr_reader :label, :path, :group, :options
@@ -5,6 +7,7 @@ module PagesCore
5
7
  class << self
6
8
  def items
7
9
  return [] unless @menu_items
10
+
8
11
  @menu_items.map { |_, v| v }
9
12
  end
10
13
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class ArchiveFinder
3
5
  def initialize(relation, options = {})
@@ -9,6 +11,12 @@ module PagesCore
9
11
  filter_by_time(range_for_year(year))
10
12
  end
11
13
 
14
+ def by_year_and_maybe_month(year, month = nil)
15
+ return by_year(year) unless month
16
+
17
+ by_year_and_month(year, month)
18
+ end
19
+
12
20
  def by_year_and_month(year, month)
13
21
  filter_by_time(range_for_year_and_month(year, month))
14
22
  end
@@ -62,25 +70,17 @@ module PagesCore
62
70
  end
63
71
 
64
72
  def month_part
65
- if mysql?
66
- "MONTH(#{timestamp_attribute})"
67
- else
68
- "date_part('month', #{timestamp_attribute})::integer"
69
- end
70
- end
71
-
72
- def mysql?
73
- ActiveRecord::Base.connection.adapter_name.downcase.starts_with?("mysql")
73
+ "date_part('month', #{timestamp_attribute})::integer"
74
74
  end
75
75
 
76
76
  def range_for_year(year)
77
- start_time = Time.new(year.to_i, 1, 1)
77
+ start_time = Time.zone.local(year.to_i, 1, 1)
78
78
  end_time = start_time.end_of_year
79
79
  (start_time.in_time_zone)..(end_time.in_time_zone)
80
80
  end
81
81
 
82
82
  def range_for_year_and_month(year, month)
83
- start_time = Time.new(year.to_i, month, 1)
83
+ start_time = Time.zone.local(year.to_i, month, 1)
84
84
  end_time = start_time.end_of_month
85
85
  (start_time.in_time_zone)..(end_time.in_time_zone)
86
86
  end
@@ -98,11 +98,7 @@ module PagesCore
98
98
  end
99
99
 
100
100
  def year_part
101
- if mysql?
102
- "YEAR(#{timestamp_attribute})"
103
- else
104
- "date_part('year', #{timestamp_attribute})"
105
- end
101
+ "date_part('year', #{timestamp_attribute})"
106
102
  end
107
103
  end
108
104
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class AttachmentEmbedder
3
5
  include ActionView::Helpers::AssetTagHelper
@@ -17,12 +19,8 @@ module PagesCore
17
19
  end
18
20
 
19
21
  def embed_attachment(attachment)
20
- content_tag(
21
- :a,
22
- attachment.name,
23
- class: "file",
24
- href: attachment_path(attachment)
25
- )
22
+ tag.a(attachment.name, class: "file",
23
+ href: attachment_path(attachment))
26
24
  end
27
25
 
28
26
  private