pages_core 3.6.2 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/Rakefile +3 -1
  4. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +1 -1
  5. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +5 -5
  6. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +10 -5
  7. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +10 -5
  8. data/app/assets/javascripts/pages/admin/components/page_tree.jsx +9 -9
  9. data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +11 -11
  10. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +5 -4
  11. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +54 -21
  12. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -3
  13. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +1 -1
  14. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +3 -3
  15. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +1 -1
  16. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +28 -28
  17. data/app/assets/javascripts/pages/admin/lib/tree.jsx +9 -9
  18. data/app/assets/javascripts/pages/login_form.jsx +8 -8
  19. data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
  20. data/app/assets/stylesheets/pages/errors.css +2 -0
  21. data/app/controller_dummies/admin/admin_controller.rb +2 -0
  22. data/app/controller_dummies/application_controller.rb +2 -0
  23. data/app/controller_dummies/attachments_controller.rb +2 -0
  24. data/app/controller_dummies/frontend_controller.rb +2 -0
  25. data/app/controller_dummies/images_controller.rb +2 -0
  26. data/app/controller_dummies/page_files_controller.rb +2 -0
  27. data/app/controller_dummies/pages_controller.rb +2 -0
  28. data/app/controller_dummies/sitemaps_controller.rb +2 -0
  29. data/app/controllers/admin/attachments_controller.rb +4 -2
  30. data/app/controllers/admin/categories_controller.rb +2 -0
  31. data/app/controllers/admin/images_controller.rb +10 -5
  32. data/app/controllers/admin/invites_controller.rb +4 -1
  33. data/app/controllers/admin/pages_controller.rb +7 -19
  34. data/app/controllers/admin/password_resets_controller.rb +9 -5
  35. data/app/controllers/admin/users_controller.rb +10 -4
  36. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
  37. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  38. data/app/controllers/concerns/pages_core/authentication.rb +4 -1
  39. data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
  40. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  41. data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
  42. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -0
  43. data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
  44. data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
  45. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  46. data/app/controllers/errors_controller.rb +5 -53
  47. data/app/controllers/pages_core/admin_controller.rb +7 -67
  48. data/app/controllers/pages_core/attachments_controller.rb +10 -6
  49. data/app/controllers/pages_core/base_controller.rb +11 -17
  50. data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
  51. data/app/controllers/pages_core/frontend/pages_controller.rb +9 -15
  52. data/app/controllers/pages_core/frontend_controller.rb +3 -0
  53. data/app/controllers/pages_core/images_controller.rb +3 -1
  54. data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
  55. data/app/controllers/sessions_controller.rb +2 -0
  56. data/app/formatters/pages_core/html_formatter.rb +13 -63
  57. data/app/formatters/pages_core/image_embedder.rb +79 -0
  58. data/app/formatters/pages_core/link_renderer.rb +2 -0
  59. data/app/helpers/admin/admin_helper.rb +2 -0
  60. data/app/helpers/admin/menu_helper.rb +6 -4
  61. data/app/helpers/admin/pages_helper.rb +4 -57
  62. data/app/helpers/application_helper.rb +2 -0
  63. data/app/helpers/frontend_helper.rb +2 -0
  64. data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
  65. data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
  66. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  67. data/app/helpers/pages_core/admin/form_builder.rb +8 -0
  68. data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
  69. data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
  70. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  71. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  72. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
  73. data/app/helpers/pages_core/application_helper.rb +3 -0
  74. data/app/helpers/pages_core/attachments_helper.rb +31 -27
  75. data/app/helpers/pages_core/form_builder.rb +17 -13
  76. data/app/helpers/pages_core/frontend_helper.rb +3 -3
  77. data/app/helpers/pages_core/head_tags_helper.rb +7 -2
  78. data/app/helpers/pages_core/images_helper.rb +3 -0
  79. data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
  80. data/app/helpers/pages_core/open_graph_tags_helper.rb +7 -5
  81. data/app/helpers/pages_core/page_path_helper.rb +24 -3
  82. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  83. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  84. data/app/mailers/admin_mailer.rb +4 -14
  85. data/app/models/attachment.rb +10 -8
  86. data/app/models/autopublisher.rb +3 -0
  87. data/app/models/category.rb +3 -1
  88. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  89. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  90. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  91. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  92. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  93. data/app/models/concerns/pages_core/page_model/images.rb +5 -1
  94. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  95. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  96. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  97. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  98. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  99. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  100. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  101. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  102. data/app/models/concerns/pages_core/taggable.rb +8 -2
  103. data/app/models/image.rb +14 -1
  104. data/app/models/invite.rb +3 -1
  105. data/app/models/invite_role.rb +5 -3
  106. data/app/models/page.rb +4 -3
  107. data/app/models/page_builder.rb +2 -0
  108. data/app/models/page_category.rb +3 -1
  109. data/app/models/page_exporter.rb +22 -9
  110. data/app/models/page_file.rb +3 -1
  111. data/app/models/page_image.rb +3 -1
  112. data/app/models/page_path.rb +13 -5
  113. data/app/models/password_reset_token.rb +3 -1
  114. data/app/models/role.rb +8 -5
  115. data/app/models/tag.rb +8 -6
  116. data/app/models/tagging.rb +4 -2
  117. data/app/models/user.rb +7 -4
  118. data/app/policies/invite_policy.rb +2 -0
  119. data/app/policies/page_file_policy.rb +2 -0
  120. data/app/policies/page_image_policy.rb +2 -0
  121. data/app/policies/page_policy.rb +2 -0
  122. data/app/policies/policy.rb +2 -0
  123. data/app/policies/user_policy.rb +2 -0
  124. data/app/serializers/admin/attachment_serializer.rb +4 -2
  125. data/app/serializers/admin/image_serializer.rb +4 -2
  126. data/app/serializers/admin/page_file_serializer.rb +2 -0
  127. data/app/serializers/admin/page_image_serializer.rb +2 -0
  128. data/app/serializers/page_export_serializer.rb +2 -0
  129. data/app/serializers/page_file_export_serializer.rb +2 -0
  130. data/app/serializers/page_image_export_serializer.rb +2 -0
  131. data/app/serializers/page_image_serializer.rb +2 -0
  132. data/app/serializers/page_serializer.rb +2 -0
  133. data/app/services/pages_core/create_user_service.rb +5 -2
  134. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  135. data/app/services/pages_core/invite_service.rb +2 -0
  136. data/app/views/admin/images/show.json.jbuilder +2 -0
  137. data/app/views/admin/pages/news.html.erb +1 -1
  138. data/app/views/errors/500.html.erb +2 -20
  139. data/app/views/errors/_generic_help.html.erb +1 -1
  140. data/app/views/feeds/pages.rss.builder +2 -0
  141. data/app/views/sitemaps/show.xml.builder +2 -0
  142. data/config/routes.rb +5 -5
  143. data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
  144. data/lib/pages_core.rb +10 -0
  145. data/lib/pages_core/admin_menu_item.rb +3 -0
  146. data/lib/pages_core/archive_finder.rb +12 -16
  147. data/lib/pages_core/attachment_embedder.rb +4 -6
  148. data/lib/pages_core/cache_sweeper.rb +10 -108
  149. data/lib/pages_core/configuration.rb +2 -0
  150. data/lib/pages_core/configuration/base.rb +5 -0
  151. data/lib/pages_core/configuration/pages.rb +4 -2
  152. data/lib/pages_core/digest_verifier.rb +5 -5
  153. data/lib/pages_core/engine.rb +52 -0
  154. data/lib/pages_core/extensions.rb +2 -0
  155. data/lib/pages_core/extensions/string_extensions.rb +3 -1
  156. data/lib/pages_core/page_path_constraint.rb +2 -0
  157. data/lib/pages_core/pages_plugin.rb +3 -1
  158. data/lib/pages_core/plugin.rb +4 -52
  159. data/lib/pages_core/pub_sub.rb +2 -0
  160. data/lib/pages_core/static_cache.rb +26 -0
  161. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  162. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  163. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  164. data/lib/pages_core/templates.rb +5 -3
  165. data/lib/pages_core/templates/block_configuration.rb +3 -0
  166. data/lib/pages_core/templates/configuration.rb +5 -1
  167. data/lib/pages_core/templates/configuration_handler.rb +4 -2
  168. data/lib/pages_core/templates/configuration_proxy.rb +2 -0
  169. data/lib/pages_core/templates/controller_actions.rb +2 -0
  170. data/lib/pages_core/templates/template_configuration.rb +18 -13
  171. data/lib/pages_core/version.rb +3 -1
  172. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -0
  173. data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
  174. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  175. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
  176. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
  177. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  178. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
  179. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
  180. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
  181. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  182. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -0
  183. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
  184. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
  185. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
  186. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  187. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  188. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  189. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  190. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
  191. data/lib/tasks/pages.rake +3 -2
  192. data/lib/tasks/pages/cache.rake +8 -5
  193. data/lib/tasks/pages/export.rake +3 -1
  194. data/lib/tasks/pages/page_paths.rake +2 -0
  195. data/template.rb +2 -0
  196. metadata +127 -77
  197. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  198. data/app/views/admin_mailer/error_report.html.erb +0 -70
  199. data/app/views/errors/500_critical.html.erb +0 -7
  200. data/app/views/errors/report.html.erb +0 -4
  201. data/config/removed_migrations.yml +0 -60
  202. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  203. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  204. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  205. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  206. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  207. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  208. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  209. data/db/migrate/20140203183900_create_roles.rb +0 -66
  210. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  211. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  212. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  213. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  214. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  215. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  216. data/db/migrate/20141007173000_create_invites.rb +0 -16
  217. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  218. data/db/migrate/20150401131300_localize_images.rb +0 -38
  219. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  220. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  221. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  222. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  223. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  224. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  225. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  226. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  227. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  228. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  229. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  230. data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
  231. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  232. data/lib/tasks/pages/update.rake +0 -17
data/app/models/tag.rb CHANGED
@@ -1,4 +1,6 @@
1
- class Tag < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Tag < ApplicationRecord
2
4
  include PagesCore::HumanizableParam
3
5
  has_many :taggings, dependent: :destroy
4
6
 
@@ -11,6 +13,7 @@ class Tag < ActiveRecord::Base
11
13
  tags = (taggable.tags.sorted + pinned.sorted).uniq
12
14
 
13
15
  return tags unless tags.count < limit
16
+
14
17
  tags + suggestions(taggable, tags, limit)[0...(limit - tags.length)]
15
18
  end
16
19
 
@@ -26,14 +29,13 @@ class Tag < ActiveRecord::Base
26
29
 
27
30
  def suggestions(taggable, tags, limit)
28
31
  suggestions = taggable_suggestions(taggable, limit).to_a
29
- if suggestions.length < limit
30
- suggestions += all_suggestions(limit)
31
- end
32
- suggestions.reject { |t| tags.include?(t) }.uniq[0...(limit)]
32
+ suggestions += all_suggestions(limit) if suggestions.length < limit
33
+ suggestions.reject { |t| tags.include?(t) }.uniq[0...limit]
33
34
  end
34
35
 
35
36
  def taggable_suggestions(taggable, limit)
36
- all_suggestions(limit).where("taggings.taggable_type = ?", taggable.class)
37
+ all_suggestions(limit)
38
+ .where(taggings: { taggable_type: taggable.class.to_s })
37
39
  end
38
40
 
39
41
  def all_suggestions(limit)
@@ -1,6 +1,8 @@
1
- class Tagging < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Tagging < ApplicationRecord
2
4
  belongs_to :tag
3
- belongs_to :taggable, polymorphic: true
5
+ belongs_to :taggable, polymorphic: true, touch: true
4
6
 
5
7
  validates :taggable_id, presence: true
6
8
  validates :taggable_type, presence: true
data/app/models/user.rb CHANGED
@@ -1,4 +1,6 @@
1
- class User < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class User < ApplicationRecord
2
4
  include PagesCore::HasRoles
3
5
 
4
6
  attr_accessor :password, :confirm_password
@@ -21,9 +23,7 @@ class User < ActiveRecord::Base
21
23
 
22
24
  serialize :persistent_data
23
25
 
24
- validates :username,
25
- presence: true,
26
- uniqueness: { case_sensitive: false }
26
+ validates :username, presence: true, uniqueness: { case_sensitive: false }
27
27
 
28
28
  validates :name, presence: true
29
29
 
@@ -63,6 +63,7 @@ class User < ActiveRecord::Base
63
63
 
64
64
  def authenticate!(password)
65
65
  return false unless can_login? && valid_password?(password)
66
+
66
67
  rehash_password!(password) if password_needs_rehash?
67
68
  true
68
69
  end
@@ -73,6 +74,7 @@ class User < ActiveRecord::Base
73
74
 
74
75
  def mark_active!
75
76
  return if last_login_at && last_login_at > 10.minutes.ago
77
+
76
78
  update(last_login_at: Time.now.utc)
77
79
  end
78
80
 
@@ -92,6 +94,7 @@ class User < ActiveRecord::Base
92
94
 
93
95
  def confirm_password_must_match
94
96
  return if password.blank? || password == confirm_password
97
+
95
98
  errors.add(:confirm_password, "does not match")
96
99
  end
97
100
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class InvitePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageFilePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageImagePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PagePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Policy
2
4
  module DefaultPolicy
3
5
  def index
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UserPolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class AttachmentSerializer < ActiveModel::Serializer
3
5
  include Rails.application.routes.url_helpers
@@ -21,8 +23,8 @@ module Admin
21
23
  private
22
24
 
23
25
  def localized_attribute(attr)
24
- object.locales.each_with_object({}) do |locale, hash|
25
- hash[locale] = object.localize(locale).send(attr)
26
+ object.locales.index_with do |locale|
27
+ object.localize(locale).send(attr)
26
28
  end
27
29
  end
28
30
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class ImageSerializer < ActiveModel::Serializer
3
5
  include Rails.application.routes.url_helpers
@@ -49,8 +51,8 @@ module Admin
49
51
  private
50
52
 
51
53
  def localized_attribute(attr)
52
- object.locales.each_with_object({}) do |locale, hash|
53
- hash[locale] = object.localize(locale).send(attr)
54
+ object.locales.index_with do |locale|
55
+ object.localize(locale).send(attr)
54
56
  end
55
57
  end
56
58
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class PageFileSerializer < ActiveModel::Serializer
3
5
  attributes :id, :page_id, :attachment_id, :position
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class PageImageSerializer < ActiveModel::Serializer
3
5
  attributes :id, :page_id, :image_id, :position, :primary
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageExportSerializer < ActiveModel::Serializer
2
4
  attributes :id, :path, :locale, :author_name, :status
3
5
  attributes(*PagesCore::Templates::TemplateConfiguration.all_blocks)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageFileExportSerializer < ActiveModel::Serializer
2
4
  attributes :id, :filename, :name, :description, :content_hash, :content_type,
3
5
  :position, :created_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageImageExportSerializer < ActiveModel::Serializer
2
4
  attributes :id, :primary, :content_hash, :content_type, :filename,
3
5
  :alternative, :caption, :created_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageImageSerializer < ActiveModel::Serializer
2
4
  include Rails.application.routes.url_helpers
3
5
  include DynamicImage::Helper
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageSerializer < ActiveModel::Serializer
2
4
  attributes :id, :param, :parent_page_id, :locale
3
5
  attributes(*PagesCore::Templates::TemplateConfiguration.all_blocks)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class CreateUserService
3
5
  attr_reader :attributes, :invite
@@ -8,8 +10,8 @@ module PagesCore
8
10
  end
9
11
 
10
12
  class << self
11
- def call(*attrs)
12
- new(*attrs).call
13
+ def call(attrs, invite: nil)
14
+ new(attrs, invite: invite).call
13
15
  end
14
16
  end
15
17
 
@@ -28,6 +30,7 @@ module PagesCore
28
30
 
29
31
  def invite_attributes
30
32
  return {} unless invite
33
+
31
34
  { role_names: invite.role_names,
32
35
  creator: invite.user,
33
36
  activated: true }
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class DestroyInviteService
5
+ attr_reader :invite
6
+
7
+ def initialize(invite:)
8
+ @invite = invite
9
+ end
10
+
11
+ class << self
12
+ def call(*attrs)
13
+ new(*attrs).call
14
+ end
15
+ end
16
+
17
+ def call
18
+ Invite.transaction do
19
+ invite.destroy
20
+ PagesCore::PubSub.publish(:destroy_invite, invite: invite)
21
+ invite
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class InviteService
3
5
  include Rails.application.routes.url_helpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  json.extract!(
2
4
  @image, :id, :filename, :content_type, :content_hash,
3
5
  :content_length, :colorspace, :real_width, :real_height, :crop_width,
@@ -59,7 +59,7 @@
59
59
  </div>
60
60
  <% end %>
61
61
 
62
- <% if @pages.any? %>
62
+ <% if @pages.length > 0 %>
63
63
  <table class="list news-item-list">
64
64
  <tr>
65
65
  <th>Name</th>
@@ -1,24 +1,6 @@
1
1
  <%
2
- @page_title = "Oh dear..."
2
+ @page_title = "500 Internal Server Error"
3
3
  %>
4
4
  <p>
5
- Something went terribly wrong. Of course, this shouldn't happen, and
6
- we'd really appreciate it if you could click the button below to
7
- notify us about the problem.
5
+ We're experiencing an internal server problem. Please try again later.
8
6
  </p>
9
- <p>
10
- Please include your email address if you'd like to hear back from us.
11
- </p>
12
-
13
- <%= form_tag report_errors_path, method: 'post' do %>
14
- <%= hidden_field_tag :error_report, @report %>
15
- <p>
16
- <input name="email" type="text" class="text" value="<%= @email %>"
17
- placeholder="Your email (optional)" />
18
- </p>
19
- <p>
20
- <button type="submit" class="clean-gray">
21
- Report error
22
- </button>
23
- </p>
24
- <% end %>
@@ -6,7 +6,7 @@
6
6
  <li>Try searching this site using <%= link_to "Google", "http://www.google.com/" %> for the information you want:</li>
7
7
  </ul>
8
8
 
9
- <form action="http://www.google.com/search" method="get" onSubmit="googleSearch( this );">
9
+ <form action="https://www.google.com/search" method="get" onSubmit="googleSearch( this );">
10
10
  <input name="q" type="hidden" />
11
11
  <input name="qinput" type="text" class="text with_button" />
12
12
  <button type="submit" class="clean-gray">Search</button>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  xml << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2
4
  xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do
3
5
  xml.channel do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  xml.instruct!
2
4
  xml.urlset xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9" do |urlset|
3
5
  @entries.each do |entry|
data/config/routes.rb CHANGED
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
4
+ Healthcheck.routes(self)
5
+
2
6
  image_resources :images, path: "dynamic_images/:digest(/:size)"
3
7
 
4
8
  # Attachment
@@ -97,11 +101,7 @@ Rails.application.routes.draw do
97
101
  as: "admin_default")
98
102
 
99
103
  # Errors
100
- resources :errors do
101
- collection do
102
- post "report"
103
- end
104
- end
104
+ resources :errors
105
105
 
106
106
  # Page path routing
107
107
  get ":locale/*path/page/:page" => "pages#show",
@@ -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