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,111 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Admin
4
- class PageImagesController < Admin::AdminController
5
- before_action :find_page
6
- before_action :find_page_image, only: [:show, :edit, :update, :destroy]
7
-
8
- require_authorization(
9
- PageImage,
10
- proc { @page_image },
11
- collection: [:index, :reorder, :new, :create]
12
- )
13
-
14
- def index
15
- @page_images = @page.page_images
16
- respond_to do |format|
17
- format.json do
18
- render json: @page_images, each_serializer: Admin::PageImageSerializer
19
- end
20
- end
21
- end
22
-
23
- def reorder
24
- @page_images = params[:ids].map { |id| PageImage.find(id) }
25
- @page_images.each_with_index do |pi, i|
26
- pi.update_column(:position, i)
27
- end
28
- respond_to do |format|
29
- format.json do
30
- render json: @page_images, each_serializer: Admin::PageImageSerializer
31
- end
32
- end
33
- end
34
-
35
- def show
36
- end
37
-
38
- def new
39
- @page_image = @page.page_images.new
40
- end
41
-
42
- def create
43
- if page_images_params?
44
- page_images_params.each do |_index, attributes|
45
- if attributes[:image]
46
- @page.page_images.create(attributes.merge(locale: @locale))
47
- end
48
- end
49
- else
50
- @page.page_images.create(page_image_params.merge(locale: @locale))
51
- end
52
- respond_with_page_image(@page_image)
53
- end
54
-
55
- def update
56
- if @page_image.update(page_image_params)
57
- respond_with_page_image(@page_image)
58
- else
59
- render action: :edit
60
- end
61
- end
62
-
63
- def destroy
64
- @page_image.destroy
65
- respond_with_page_image(@page_image)
66
- end
67
-
68
- protected
69
-
70
- def find_page
71
- @page = Page.find(params[:page_id]).localize(@locale)
72
- end
73
-
74
- def find_page_image
75
- @page_image = @page.page_images.find(params[:id]).localize(@locale)
76
- end
77
-
78
- def page_image_params
79
- params.require(:page_image).permit(
80
- :image, :primary,
81
- image_attributes: [
82
- :id, :alternative, :caption,
83
- :crop_start_x, :crop_start_y, :crop_width, :crop_height
84
- ]
85
- )
86
- end
87
-
88
- def page_images_params
89
- params.permit(
90
- page_images: [:image, :primary, {
91
- image_attributes: [:alternative, :caption]
92
- }]
93
- )[:page_images]
94
- end
95
-
96
- def page_images_params?
97
- params[:page_images] ? true : false
98
- end
99
-
100
- def respond_with_page_image(page_image)
101
- respond_to do |format|
102
- format.html do
103
- redirect_to(admin_page_path(@locale, @page, anchor: "images"))
104
- end
105
- format.json do
106
- render json: page_image.to_json
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module AddCommentsController
5
- extend ActiveSupport::Concern
6
-
7
- # Add a comment to a page. Recaptcha is performed if
8
- # PagesCore.config(:recaptcha) is set.
9
- def add_comment
10
- @comment = new_comment(@page)
11
-
12
- unless captcha_verified?
13
- @comment.invalid_captcha = true
14
- render_page
15
- return
16
- end
17
-
18
- return unless @page.comments_allowed? && !honeypot_triggered?
19
-
20
- @comment.save
21
- deliver_comment_notifications(@page, @comment)
22
- redirect_to(page_url(@locale, @page))
23
- end
24
-
25
- private
26
-
27
- def captcha_verified?
28
- !PagesCore.config(:recaptcha) || verify_recaptcha
29
- end
30
-
31
- def comment_recipients(page)
32
- PagesCore.config(:comment_notifications)
33
- .map { |r| r == :author ? page.author.name_and_email : r }
34
- .uniq
35
- end
36
-
37
- def deliver_comment_notifications(page, comment)
38
- return unless PagesCore.config(:comment_notifications)
39
- comment_recipients(page).each do |r|
40
- AdminMailer.comment_notification(
41
- r,
42
- page,
43
- comment,
44
- page_url(locale, page)
45
- ).deliver_now
46
- end
47
- end
48
-
49
- def honeypot_triggered?
50
- PagesCore.config(:comment_honeypot) && !params[:email].to_s.empty?
51
- end
52
-
53
- def new_comment(page)
54
- PageComment.new(
55
- page_comment_params.merge(remote_ip: remote_ip, page_id: page.id)
56
- )
57
- end
58
-
59
- def page_comment_params
60
- params.require(:page_comment).permit(:name, :email, :url, :body)
61
- end
62
-
63
- def remote_ip
64
- request.env["REMOTE_ADDR"]
65
- end
66
- end
67
- end
@@ -1,137 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module ExceptionHandler
5
- module Rescues
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- rescue_from Exception, with: :handle_exception
10
- rescue_from PagesCore::NotAuthorized, with: :handle_exception
11
- rescue_from ActiveRecord::RecordNotFound, with: :handle_exception
12
- rescue_from ActionController::RoutingError, with: :handle_exception
13
- rescue_from ActionController::UnknownController, with: :handle_exception
14
- rescue_from AbstractController::ActionNotFound, with: :handle_exception
15
- end
16
- end
17
-
18
- extend ActiveSupport::Concern
19
-
20
- included do
21
- unless Rails.application.config.consider_all_requests_local
22
- include PagesCore::ExceptionHandler::Rescues
23
- end
24
- end
25
-
26
- # Renders a fancy error page from app/views/errors. If the error name
27
- # is numeric, it will also be set as the response status. Example:
28
- #
29
- # render_error 404
30
- #
31
- def render_error(error, options = {})
32
- options[:status] ||= error if error.is_a? Numeric
33
- options[:template] ||= "errors/#{error}"
34
- options[:layout] = error_layout(error) unless options.key?(:layout)
35
- @email = logged_in? ? current_user.email : ""
36
- render options
37
- true
38
- end
39
-
40
- protected
41
-
42
- def error_layout(error)
43
- if error == 404 && PagesCore.config.error_404_layout?
44
- PagesCore.config.error_404_layout
45
- else
46
- "errors"
47
- end
48
- end
49
-
50
- def log_error(exception)
51
- trace = exception.backtrace
52
- ActiveSupport::Deprecation.silence do
53
- message = "\n#{exception.class} (#{exception.message}):\n"
54
- if exception.respond_to?(:annoted_source_code)
55
- message << exception.annoted_source_code.to_s
56
- end
57
- message << " " << trace.join("\n ")
58
- logger.fatal("#{message}\n\n")
59
- end
60
- end
61
-
62
- def env_as_object
63
- request.env.each_with_object({}) do |hash, value|
64
- if value.first.is_a?(String) && value.last.is_a?(String)
65
- hash[value.first] = value.last
66
- end
67
- end
68
- end
69
-
70
- def filtered_backtrace(exception)
71
- Rails.backtrace_cleaner.send(:filter, exception.backtrace)
72
- end
73
-
74
- def exception_url
75
- [
76
- "http://", request.env["HTTP_HOST"], request.env["REQUEST_URI"]
77
- ].compact.join
78
- end
79
-
80
- def error_report(exception)
81
- {
82
- message: exception.to_s,
83
- url: exception_url,
84
- params: params,
85
- env: env_as_object,
86
- session: session.to_hash,
87
- backtrace: filtered_backtrace(exception),
88
- timestamp: Time.now.utc,
89
- user_id: logged_in? ? current_user.id : nil
90
- }
91
- end
92
-
93
- def write_error(str)
94
- sha1_hash = Digest::SHA1.hexdigest(str)
95
- error_report_dir = Rails.root.join("log", "error_reports")
96
- error_report_file = error_report_dir.join("#{sha1_hash}.yml")
97
- `mkdir -p #{error_report_dir}` unless File.exist?(error_report_dir)
98
-
99
- unless File.exist?(error_report_file)
100
- File.open(error_report_file, "w") do |fh|
101
- fh.write str
102
- end
103
- end
104
- sha1_hash
105
- end
106
-
107
- def handle_critical_exception(exception)
108
- logger.fatal "Error in handle_exception"
109
- log_error(exception)
110
- render(template: "errors/500_critical", status: 500, layout: false)
111
- end
112
-
113
- def handle_exception(exception)
114
- log_error(exception)
115
- return if handle_40x(exception)
116
- @error_id = write_error(error_report(exception).to_yaml)
117
- session[:error_report] = @error_id
118
- logger.error "Logged error #{@error_id}"
119
- render_error 500
120
- rescue => error
121
- handle_critical_exception(error)
122
- end
123
-
124
- private
125
-
126
- def handle_40x(exception)
127
- if exception.is_a?(ActionController::RoutingError) ||
128
- exception.is_a?(ActiveRecord::RecordNotFound)
129
- render_error 404
130
- elsif exception.is_a?(PagesCore::NotAuthorized)
131
- render_error 403
132
- else
133
- false
134
- end
135
- end
136
- end
137
- end
@@ -1,40 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module SearchPagesController
5
- extend ActiveSupport::Concern
6
-
7
- def search
8
- @search_query = params[:q] || params[:query] || ""
9
- @search_category_id = params[:category_id]
10
-
11
- @pages = Page.search(
12
- normalize_search_query(@search_query),
13
- search_options(category_id: @search_category_id)
14
- )
15
- @pages.each { |p| p.localize!(locale) }
16
- @pages
17
- end
18
-
19
- private
20
-
21
- def normalize_search_query(str)
22
- str.split(/\s+/)
23
- .map { |p| "#{p}*" }
24
- .join(" ")
25
- end
26
-
27
- def search_options(category_id: nil)
28
- options = {
29
- page: (params[:page] || 1).to_i,
30
- per_page: 20,
31
- include: [:localizations, :categories, :image, :author],
32
- order: :published_at,
33
- sort_mode: :desc,
34
- with: { status: 2, autopublish: 0 }
35
- }
36
- options[:with][:category_ids] = category_id unless category_id.blank?
37
- options
38
- end
39
- end
40
- end
@@ -1,14 +0,0 @@
1
- module PagesCore
2
- module LoginHelper
3
- def login_form(success_url:, login_url:)
4
- render(
5
- partial: "admin/users/login_form",
6
- locals: { success_url: success_url, login_url: login_url }
7
- )
8
- end
9
-
10
- def logout_link(name, login_url:)
11
- link_to name, session_path(login_url: login_url), method: "delete"
12
- end
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- ThinkingSphinx::Index.define :page_file, with: :real_time do
2
- indexes name
3
- indexes filename
4
-
5
- has page_id, type: :integer
6
- has created_at, type: :timestamp
7
- has updated_at, type: :timestamp
8
- has published, type: :boolean
9
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ThinkingSphinx::Index.define :page, with: :real_time do
4
- indexes localization_values
5
- indexes category_names
6
- indexes tag_list
7
- indexes author.name, as: :author_name
8
- indexes author.email, as: :author_email
9
- indexes comment_names
10
- indexes comment_bodies
11
- indexes file_names
12
- indexes file_filenames
13
-
14
- has category_ids, type: :integer, multi: true
15
- has tag_ids, type: :integer, multi: true
16
-
17
- has published_at, type: :timestamp
18
- has created_at, type: :timestamp
19
- has updated_at, type: :timestamp
20
- has user_id, type: :integer
21
- has parent_page_id, type: :integer
22
- has status, type: :integer
23
- has template, type: :string
24
- has autopublish, type: :boolean
25
- has feed_enabled, type: :boolean
26
- has published, type: :boolean
27
-
28
- set_property group_concat_max_len: 16.megabytes
29
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ThinkingSphinx::Index.define :user, with: :real_time do
4
- indexes username
5
- indexes name
6
- indexes email
7
-
8
- has last_login_at, type: :timestamp
9
- has created_at, type: :timestamp
10
- has activated, type: :boolean
11
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module PageModel
5
- module Commentable
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- has_many :comments, class_name: "PageComment", dependent: :destroy
10
- end
11
-
12
- def comments_closed_after_time?
13
- if PagesCore.config.close_comments_after.nil?
14
- false
15
- else
16
- (Time.now.utc - published_at) > PagesCore.config.close_comments_after
17
- end
18
- end
19
-
20
- def comments_allowed?
21
- if comments_closed_after_time?
22
- false
23
- else
24
- self[:comments_allowed]
25
- end
26
- end
27
- end
28
- end
29
- end