ack_rocket_cms 0.7.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +45 -45
  3. data/README.md +64 -5
  4. data/app/assets/javascripts/{rocket_cms.js.coffee → rocket_cms.coffee} +0 -3
  5. data/app/controllers/concerns/rs_errors.rb +8 -4
  6. data/app/controllers/concerns/rs_localizeable.rb +26 -0
  7. data/app/controllers/concerns/rs_menu.rb +9 -2
  8. data/app/controllers/concerns/rs_pages.rb +14 -3
  9. data/app/helpers/gzip_helper.rb +27 -0
  10. data/app/models/concerns/seoable.rb +19 -30
  11. data/app/models/seo.rb +16 -0
  12. data/app/views/devise/registrations/edit.html.slim +21 -0
  13. data/app/views/devise/registrations/new.html.slim +21 -0
  14. data/app/views/devise/sessions/new.html.slim +18 -19
  15. data/app/views/devise/shared/_links.html.slim +4 -18
  16. data/app/views/news/show.html.slim +1 -1
  17. data/config/locales/en.rs.yml +1 -1
  18. data/config/locales/ru.rs.yml +11 -1
  19. data/lib/generators/rocket_cms/migration_generator.rb +1 -1
  20. data/lib/generators/rocket_cms/templates/admin.erb +8 -0
  21. data/lib/generators/rocket_cms/templates/migration_news.rb +10 -5
  22. data/lib/generators/rocket_cms/templates/migration_pages.rb +14 -5
  23. data/lib/generators/rocket_cms/templates/migration_seos.rb +14 -0
  24. data/lib/rocket_cms.rb +4 -0
  25. data/lib/rocket_cms/admin.rb +35 -8
  26. data/lib/rocket_cms/configuration.rb +7 -1
  27. data/lib/rocket_cms/controllers/contacts.rb +2 -2
  28. data/lib/rocket_cms/controllers/news.rb +1 -1
  29. data/lib/rocket_cms/controllers/search.rb +17 -0
  30. data/lib/rocket_cms/engine.rb +3 -3
  31. data/lib/rocket_cms/migration.rb +14 -11
  32. data/lib/rocket_cms/models/active_record/menu.rb +3 -0
  33. data/lib/rocket_cms/models/active_record/news.rb +6 -3
  34. data/lib/rocket_cms/models/active_record/page.rb +3 -0
  35. data/lib/rocket_cms/models/active_record/seo.rb +17 -0
  36. data/lib/rocket_cms/models/contact_message.rb +1 -1
  37. data/lib/rocket_cms/models/embedded_gallery_image.rb +4 -0
  38. data/lib/rocket_cms/models/gallery.rb +2 -0
  39. data/lib/rocket_cms/models/gallery_image.rb +2 -0
  40. data/lib/rocket_cms/models/mongoid/contact_message.rb +5 -5
  41. data/lib/rocket_cms/models/mongoid/embedded_gallery_image.rb +0 -1
  42. data/lib/rocket_cms/models/mongoid/gallery.rb +0 -1
  43. data/lib/rocket_cms/models/mongoid/gallery_image.rb +0 -1
  44. data/lib/rocket_cms/models/mongoid/news.rb +3 -4
  45. data/lib/rocket_cms/models/mongoid/page.rb +3 -2
  46. data/lib/rocket_cms/models/mongoid/seo.rb +23 -0
  47. data/lib/rocket_cms/models/news.rb +13 -5
  48. data/lib/rocket_cms/models/page.rb +7 -3
  49. data/lib/rocket_cms/models/seo.rb +17 -0
  50. data/lib/rocket_cms/seo_helpers.rb +13 -0
  51. data/lib/rocket_cms/version.rb +1 -1
  52. data/template.rb +4 -7
  53. metadata +13 -3
@@ -14,6 +14,7 @@ module RocketCMS
14
14
  attr_accessor :news_image_styles
15
15
  attr_accessor :news_per_page
16
16
  attr_accessor :news_excerpt
17
+ attr_accessor :news_content_required
17
18
 
18
19
  attr_accessor :error_layout
19
20
  attr_accessor :menu_max_depth
@@ -27,6 +28,8 @@ module RocketCMS
27
28
  attr_accessor :contacts_message_required
28
29
  attr_accessor :contacts_captcha_error_message
29
30
 
31
+ attr_accessor :separate_seo_table
32
+
30
33
  attr_accessor :localize
31
34
 
32
35
  attr_accessor :recreate_contact_message_action
@@ -38,6 +41,7 @@ module RocketCMS
38
41
  }
39
42
  @news_per_page = 10
40
43
  @news_excerpt = 12
44
+ @news_content_required = true
41
45
 
42
46
  @error_layout = 'application'
43
47
  @menu_max_depth = 2
@@ -54,6 +58,8 @@ module RocketCMS
54
58
  @recreate_contact_message_action = "new"
55
59
 
56
60
  @localize = false
61
+
62
+ @separate_seo_table = false
57
63
  end
58
64
 
59
65
  def search_enabled=(val)
@@ -64,4 +70,4 @@ module RocketCMS
64
70
  end
65
71
  end
66
72
  end
67
- end
73
+ end
@@ -15,7 +15,7 @@ module RocketCMS
15
15
  def create
16
16
  @contact_message = model.new(message_params)
17
17
  after_initialize
18
- if RocketCMS.configuration.contacts_captcha
18
+ if RocketCMS.config.contacts_captcha
19
19
  meth = :save_with_captcha
20
20
  else
21
21
  meth = :save
@@ -63,7 +63,7 @@ module RocketCMS
63
63
  ContactMessage
64
64
  end
65
65
  def message_params
66
- params.require(:contact_message).permit(RocketCMS.configuration.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
66
+ params.require(:contact_message).permit(RocketCMS.config.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
67
67
  end
68
68
  end
69
69
  end
@@ -6,7 +6,7 @@ module RocketCMS
6
6
  def index
7
7
  @news = model.enabled.after_now.by_date
8
8
 
9
- unless RocketCMS.configuration.news_per_page.nil?
9
+ unless RocketCMS.config.news_per_page.nil?
10
10
  @news = @news.page(params[:page])
11
11
  end
12
12
  end
@@ -38,6 +38,23 @@ module RocketCMS
38
38
  page: params[:page],
39
39
  per_page: RocketCMS.configuration.search_per_page
40
40
  )
41
+ # @results = Mongoid::Elasticsearch.search({
42
+ # body: {
43
+ # query: {
44
+ # query_string: {
45
+ # query: Mongoid::Elasticsearch::Utils.clean(params[:query])
46
+ # }
47
+ # },
48
+ # highlight: {
49
+ # fields: {
50
+ # name: {},
51
+ # content: {}
52
+ # }
53
+ # }
54
+ # }},
55
+ # page: params[:page],
56
+ # per_page: RocketCMS.config.search_per_page,
57
+ # )
41
58
  end
42
59
  end
43
60
  end
@@ -31,12 +31,12 @@ module RocketCMS
31
31
 
32
32
  config.after_initialize do
33
33
  # trigger autoload so models are registered in Mongoid::Elasticearch
34
- RocketCMS.configuration.search_models.map(&:constantize)
34
+ RocketCMS.config.search_models.map(&:constantize)
35
35
 
36
36
  # Write default email settings to DB so they can be changed.
37
37
  if Settings.table_exists?
38
- Settings.default_email_from(default: 'noreply@rscx.ru')
39
- Settings.form_email(default: 'glebtv@ya.ru')
38
+ Settings.default_email_from(default: 'noreply@site.domain')
39
+ Settings.form_email(default: 'admin@site.domain')
40
40
  Settings.email_topic(default: 'с сайта')
41
41
  end
42
42
  end
@@ -3,19 +3,21 @@ module RocketCMS
3
3
  extend self
4
4
 
5
5
  def seo_fields(t)
6
- t.string :name, null: false
7
- t.string :h1
8
- t.string :title
9
- t.text :keywords
10
- t.text :description
6
+ if RocketCMS.config.localize
7
+ t.column :h1_translations, 'hstore', default: {}
8
+ t.column :title_translations, 'hstore', default: {}
9
+ t.column :keywords_translations, 'hstore', default: {}
10
+ t.column :description_translations, 'hstore', default: {}
11
+ t.column :og_title_translations, 'hstore', default: {}
12
+ else
13
+ t.string :h1
14
+ t.string :title
15
+ t.text :keywords
16
+ t.text :description
17
+ t.string :og_title
18
+ end
11
19
  t.string :robots
12
- t.string :og_title
13
20
  t.attachment :og_image
14
-
15
- #if RocketCMS.localize
16
- #t.column :name_translations, 'hstore'
17
- #t.column :name_translations, 'hstore'
18
- #end
19
21
  end
20
22
 
21
23
  def map_fields(t)
@@ -29,3 +31,4 @@ module RocketCMS
29
31
  end
30
32
  end
31
33
  end
34
+
@@ -6,6 +6,9 @@ module RocketCMS
6
6
  included do
7
7
  has_paper_trail
8
8
  validates_lengths_from_database
9
+ if RocketCMS.config.localize
10
+ translates :name
11
+ end
9
12
  end
10
13
  end
11
14
  end
@@ -4,9 +4,8 @@ module RocketCMS
4
4
  module News
5
5
  extend ActiveSupport::Concern
6
6
  included do
7
- unless RocketCMS.configuration.news_image_styles.nil?
8
- has_attached_file :image, styles: RocketCMS.configuration.news_image_styles
9
- validates_attachment_content_type :image, content_type: %w(image/gif image/jpeg image/jpg image/png), if: :image?
7
+ unless RocketCMS.config.news_image_styles.nil?
8
+ has_attached_file :image, styles: RocketCMS.config.news_image_styles
10
9
  end
11
10
 
12
11
  has_paper_trail
@@ -15,6 +14,10 @@ module RocketCMS
15
14
 
16
15
  scope :after_now, -> { where("time < ?", Time.now) }
17
16
  scope :by_date, -> { order(time: :desc) }
17
+
18
+ if RocketCMS.config.localize
19
+ translates :name, :excerpt, :content
20
+ end
18
21
  end
19
22
  end
20
23
  end
@@ -9,6 +9,9 @@ module RocketCMS
9
9
  has_paper_trail
10
10
  validates_lengths_from_database only: [:name, :title, :content, :excerpt, :h1, :keywords, :robots, :og_title, :regexp, :redirect, :fullpath]
11
11
  scope :sorted, -> { order(lft: :asc) }
12
+ if RocketCMS.config.localize
13
+ translates :name, :content
14
+ end
12
15
  end
13
16
  end
14
17
  end
@@ -0,0 +1,17 @@
1
+ module RocketCMS
2
+ module Models
3
+ module ActiveRecord
4
+ module Seo
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_attached_file :og_image, styles: {thumb: "800x600>"}
8
+ if RocketCMS.config.localize
9
+ translates :h1, :title, :keywords, :description, :og_title
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+
@@ -10,7 +10,7 @@ module RocketCMS
10
10
  apply_simple_captcha message: RocketCMS.configuration.contacts_captcha_error_message
11
11
 
12
12
  validates_email_format_of :email, unless: 'email.blank?'
13
- if RocketCMS.configuration.contacts_message_required
13
+ if RocketCMS.config.contacts_message_required
14
14
  validates_presence_of :content
15
15
  end
16
16
  validate do
@@ -6,6 +6,10 @@ module RocketCMS
6
6
  include Enableable
7
7
  include Sortable
8
8
  include RocketCMS.orm_specific('EmbeddedGalleryImage')
9
+
10
+ included do
11
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -11,6 +11,8 @@ module RocketCMS
11
11
  included do
12
12
  has_many :gallery_images
13
13
  field :name, type: String, localize: RocketCMS.configuration.localize
14
+
15
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
14
16
  end
15
17
  end
16
18
  end
@@ -9,6 +9,8 @@ module RocketCMS
9
9
  included do
10
10
  belongs_to :gallery
11
11
  field :name, type: String, localize: RocketCMS.configuration.localize
12
+
13
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
12
14
  end
13
15
  end
14
16
  end
@@ -4,11 +4,11 @@ module RocketCMS
4
4
  module ContactMessage
5
5
  extend ActiveSupport::Concern
6
6
  included do
7
- field :name, type: String, default: ""
8
- field :email, type: String, default: ""
9
- field :phone, type: String, default: ""
10
- field :content, type: String, default: ""
11
- RocketCMS.configuration.contacts_fields.each_pair do |fn, ft|
7
+ field :name, type: String
8
+ field :email, type: String
9
+ field :phone, type: String
10
+ field :content, type: String
11
+ RocketCMS.config.contacts_fields.each_pair do |fn, ft|
12
12
  next if ft.nil?
13
13
  field fn, type: ft
14
14
  end
@@ -11,7 +11,6 @@ module RocketCMS
11
11
  include EmbeddedElement
12
12
 
13
13
  has_mongoid_attached_file :image # need to override
14
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
15
14
 
16
15
  def image_file_name=(val)
17
16
  return self[:image_file_name] = "" if val == ""
@@ -12,7 +12,6 @@ module RocketCMS
12
12
  scope :sorted, -> { order_by([:lft, :asc]) }
13
13
 
14
14
  has_mongoid_attached_file :image # need to override
15
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
16
15
 
17
16
  def image_file_name=(val)
18
17
  return self[:image_file_name] = "" if val == ""
@@ -10,7 +10,6 @@ module RocketCMS
10
10
  scope :sorted, -> { order_by([:lft, :asc]) }
11
11
 
12
12
  has_mongoid_attached_file :image # need to override
13
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
14
13
 
15
14
  def image_file_name=(val)
16
15
  return self[:image_file_name] = "" if val == ""
@@ -3,15 +3,14 @@ module RocketCMS
3
3
  module Mongoid
4
4
  module News
5
5
  extend ActiveSupport::Concern
6
- unless RocketCMS.configuration.news_image_styles.nil?
6
+ unless RocketCMS.config.news_image_styles.nil?
7
7
  include ::Mongoid::Paperclip
8
8
  end
9
9
  included do
10
10
  field :time, type: Time
11
11
  index({enabled: 1, time: 1})
12
- unless RocketCMS.configuration.news_image_styles.nil?
13
- has_mongoid_attached_file :image, styles: RocketCMS.configuration.news_image_styles
14
- validates_attachment_content_type :image, content_type: %w(image/gif image/jpeg image/jpg image/png), if: :image?
12
+ unless RocketCMS.config.news_image_styles.nil?
13
+ has_mongoid_attached_file :image, styles: RocketCMS.config.news_image_styles
15
14
 
16
15
  def image_file_name=(val)
17
16
  return self[:image_file_name] = "" if val == ""
@@ -6,9 +6,10 @@ module RocketCMS
6
6
  included do
7
7
  field :regexp, type: String, default: ""
8
8
  field :redirect, type: String, default: ""
9
- field :excerpt, type: String, localize: RocketCMS.configuration.localize, default: ""
10
- field :content, type: String, localize: RocketCMS.configuration.localize, default: ""
9
+ field :excerpt, type: String, localize: RocketCMS.config.localize, default: ""
10
+ field :content, type: String, localize: RocketCMS.config.localize, default: ""
11
11
  field :fullpath, type: String, default: ""
12
+
12
13
  has_and_belongs_to_many :menus, inverse_of: :pages
13
14
  acts_as_nested_set
14
15
 
@@ -0,0 +1,23 @@
1
+ module RocketCMS
2
+ module Models
3
+ module Mongoid
4
+ module Seo
5
+ extend ActiveSupport::Concern
6
+ include ::Mongoid::Paperclip
7
+ included do
8
+ field :name, type: String, localize: RocketCMS.config.localize
9
+ field :h1, type: String, localize: RocketCMS.config.localize
10
+
11
+ field :title, type: String, localize: RocketCMS.config.localize
12
+ field :keywords, type: String, localize: RocketCMS.config.localize
13
+ field :description, type: String, localize: RocketCMS.config.localize
14
+ field :robots, type: String, localize: RocketCMS.config.localize
15
+
16
+ field :og_title, type: String, localize: RocketCMS.config.localize
17
+ has_mongoid_attached_file :og_image, styles: {thumb: "800x600>"}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -9,21 +9,29 @@ module RocketCMS
9
9
  include SitemapData
10
10
  include RocketCMS.orm_specific('News')
11
11
 
12
- if RocketCMS.configuration.search_enabled
12
+ if RocketCMS.config.search_enabled
13
13
  include RocketCMS::ElasticSearch
14
14
  end
15
15
 
16
16
  included do
17
17
 
18
- validates_presence_of :name, :content
18
+ unless RocketCMS.config.news_image_styles.nil?
19
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
20
+ end
21
+
22
+ validates_presence_of :name
23
+ if RocketCMS.config.news_content_required
24
+ validates_presence_of :content
25
+ end
26
+
19
27
  before_validation do
20
28
  self.time = Time.now if self.time.blank?
21
29
  end
22
30
  scope :recent, ->(count = 5) { enabled.after_now.by_date.limit(count) }
23
- unless RocketCMS.configuration.news_per_page.nil?
24
- paginates_per RocketCMS.configuration.news_per_page
31
+ unless RocketCMS.config.news_per_page.nil?
32
+ paginates_per RocketCMS.config.news_per_page
25
33
  end
26
- smart_excerpt :excerpt, :content, RocketCMS.configuration.news_excerpt
34
+ smart_excerpt :excerpt, :content, RocketCMS.config.news_excerpt
27
35
  manual_slug :report_slug
28
36
 
29
37
  RocketCMS.apply_patches self
@@ -10,7 +10,7 @@ module RocketCMS
10
10
 
11
11
  include RocketCMS.orm_specific('Page')
12
12
 
13
- if RocketCMS.configuration.search_enabled
13
+ if RocketCMS.config.search_enabled
14
14
  include RocketCMS::ElasticSearch
15
15
  end
16
16
 
@@ -54,10 +54,14 @@ module RocketCMS
54
54
  url.match(clean_regexp)
55
55
  end
56
56
  end
57
-
57
+
58
+ def regexp_prefix
59
+ ""
60
+ end
61
+
58
62
  def clean_regexp
59
63
  if regexp.blank?
60
- /^#{Regexp.escape(fullpath)}$/
64
+ /^#{regexp_prefix}#{Regexp.escape(fullpath)}$/
61
65
  else
62
66
  begin
63
67
  /#{regexp}/
@@ -0,0 +1,17 @@
1
+ module RocketCMS
2
+ module Models
3
+ module Seo
4
+ extend ActiveSupport::Concern
5
+ include RocketCMS::Model
6
+ include Enableable
7
+ include RocketCMS.orm_specific('Seo')
8
+ include RocketCMS::SeoHelpers
9
+
10
+ included do
11
+ RocketCMS.apply_patches self
12
+ validates_attachment_content_type :og_image, content_type: /\Aimage\/.*\Z/, if: :og_image?
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,13 @@
1
+ module RocketCMS
2
+ module SeoHelpers
3
+ extend ActiveSupport::Concern
4
+ def page_title
5
+ title.blank? ? name : title
6
+ end
7
+
8
+ def get_og_title
9
+ og_title.blank? ? name : og_title
10
+ end
11
+ end
12
+ end
13
+