Commit 98ece6552749c10eb7098574019e3a05a305dac1

Authored by Andrey Karpikov
1 parent 36568436

add 404 page and robots txt

1 1 PATH
2 2 remote: .
3 3 specs:
4   - kanjai (0.0.290)
  4 + kanjai (0.0.342)
5 5 acts-as-taggable-on (~> 6.5)
6 6 acts_as_list
7 7 acts_as_tree
... ... @@ -1194,7 +1194,7 @@ GEM
1194 1194 aws-sigv2 (1.1.0)
1195 1195 aws-sigv4 (1.4.0)
1196 1196 aws-eventstream (~> 1, >= 1.0.2)
1197   - bcrypt (3.1.16)
  1197 + bcrypt (3.1.18)
1198 1198 builder (3.2.4)
1199 1199 concurrent-ruby (1.1.9)
1200 1200 crass (1.0.6)
... ...
... ... @@ -45,7 +45,7 @@ module Kanjai
45 45 private
46 46
47 47 def permitted_params
48   - params.permit(:domain => [:title, :default_lang_id, language_domains_attributes: [:id, :title, :page_lang_id, :_destroy], page_lang_ids: []])
  48 + params.permit(:domain => [:title, :default_lang_id, :robots, :page_404_id, language_domains_attributes: [:id, :title, :page_lang_id, :_destroy], page_lang_ids: []])
49 49 end
50 50
51 51 end
... ...
... ... @@ -7,6 +7,9 @@ module Kanjai
7 7
8 8
9 9 def show
  10 + render_status = @page_data.page == @page_data.page.domain.page_404 ? 401 : 200
  11 + domain = @page_data.page.domain
  12 +
10 13 if @page_data.page.block?
11 14 render :template => 'kanjai/shared/401', status: 401, layout: false and return
12 15 end
... ... @@ -15,7 +18,11 @@ module Kanjai
15 18 if @page_data.page.private_flag == true
16 19 if defined?(warden).to_s == 'method'
17 20 if warden.user.nil?
18   - render :template => 'kanjai/shared/401', status: 401, layout: false and return
  21 + if domain.page_404.present?
  22 + redirect_to domain.page_404.menu_url(session[:scheme]) and return
  23 + else
  24 + render :template => 'kanjai/shared/401', status: 401, layout: false and return
  25 + end
19 26 end
20 27 end
21 28 end
... ... @@ -35,7 +42,7 @@ module Kanjai
35 42 content_for_render = setTemplateContent(@page_data.page.domain, @page_data.page.page_template, layer, @page_data)
36 43
37 44 respond_to do |format|
38   - format.html{render :plain => content_for_render}
  45 + format.html{render :plain => content_for_render, status: render_status}
39 46 end
40 47
41 48 #render :text => content_for_render and return
... ... @@ -44,18 +51,22 @@ module Kanjai
44 51 layer = @page_data.page.page_template.get_html_content
45 52 content_for_render = setTemplateContent(@page_data.page.domain, @page_data.page.page_template, layer, @page_data)
46 53 respond_to do |format|
47   - format.html{render :plain => content_for_render}
  54 + format.html{render :plain => content_for_render, status: render_status}
48 55 end
49 56 end
50 57 end
51 58 else
52 59 page_content = get_html_by_json_client(@page_data, session)
53   - render :html => page_content.html_safe and return
  60 + render :html => page_content.html_safe, status: render_status and return
54 61 end
55 62
56 63
57 64 else
58   - render :template => 'kanjai/shared/404', status: 404, layout: false and return
  65 + if domain.page_404.present?
  66 + redirect_to domain.page_404.menu_url(session[:scheme]) and return
  67 + else
  68 + render :template => 'kanjai/shared/404', status: 404, layout: false and return
  69 + end
59 70 end
60 71 end
61 72
... ...
... ... @@ -57,7 +57,7 @@ module Kanjai
57 57 lang = domain.default_lang.try(:code)
58 58 end
59 59 else
60   - render plain: "Domain #{domain_title} Not Exist" and return
  60 + render plain: "Domain #{domain_title} Not Exist", status: 404 and return
61 61 end
62 62 else
63 63 lang = domain.default_lang.try(:code)
... ... @@ -91,10 +91,18 @@ module Kanjai
91 91 if root_page
92 92 redirect_to root_page.menu_url(session[:scheme])
93 93 else
94   - render plain: "1. Can not found page #{@url} for domain #{domain_title} for lang #{I18n.locale}", status: 404 and return
  94 + if domain.page_404.present?
  95 + redirect_to domain.page_404.menu_url(session[:scheme]) and return
  96 + else
  97 + render plain: "1. Can not found page #{@url} for domain #{domain_title} for lang #{I18n.locale}", status: 404 and return
  98 + end
95 99 end
96 100 else
97   - render plain: "2. Can not found page #{@url} for domain #{domain_title} for lang #{I18n.locale}", status: 404 and return
  101 + if domain.page_404.present?
  102 + redirect_to domain.page_404.menu_url(session[:scheme]) and return
  103 + else
  104 + render plain: "2. Can not found page #{@url} for domain #{domain_title} for lang #{I18n.locale}", status: 404 and return
  105 + end
98 106 end
99 107 end
100 108 session[:url] = @url
... ...
1 1 module Kanjai
2 2 class Domain < ApplicationRecord
  3 + after_save :generate_robots_file
  4 +
3 5 validates :title, presence: true
4 6
5 7 belongs_to :default_lang, class_name: 'Kanjai::PageLang', optional: true
... ... @@ -8,5 +10,17 @@ module Kanjai
8 10 has_and_belongs_to_many :page_langs
9 11 has_many :language_domains, dependent: :destroy
10 12 accepts_nested_attributes_for :language_domains, reject_if: :all_blank, allow_destroy: true
  13 +
  14 + belongs_to :page_404, class_name: "Kanjai::Page", optional: true
  15 +
  16 +
  17 + private
  18 +
  19 + def generate_robots_file
  20 + if saved_change_to_robots?
  21 + File.open("#{Rails.root}/public/robots.txt", 'w') { |file| file.write(robots) }
  22 + end
  23 + end
  24 +
11 25 end
12 26 end
... ...
... ... @@ -30,6 +30,18 @@
30 30 </div>
31 31 </div>
32 32
  33 + <div class="form-group">
  34 + <%= f.label :robots, Kanjai::Domain.human_attribute_name(:robots), class: 'col-form-label' %>
  35 + <%= f.text_area :robots, class: "form-control #{@domain.errors.include?(:robots) ? 'parsley-error' : ''} ", rows: 10 %>
  36 + <%= error_messages(@domain, :robots) %>
  37 + </div>
  38 +
  39 + <div class="form-group">
  40 + <%= f.label :page_404_id, Kanjai::Domain.human_attribute_name(:page_404_id), class: 'col-form-label' %>
  41 + <%= f.select :page_404_id, Kanjai::Page.pages_for_choose(@domain).collect{|p| ["-" * p[:level]*2 + p[:title], p[:id]] }, {:include_blank => true}, :class => "form-control" %>
  42 + </div>
  43 +
  44 +
33 45
34 46 <div class="card-footer mt-20">
35 47 <div class="clearfix">
... ...
... ... @@ -105,6 +105,8 @@ en:
105 105 kanjai/domain:
106 106 page_lang_ids: "Languages"
107 107 default_lang_id: "Default Language"
  108 + robots: "robots.txt"
  109 + page_404_id: "Page 404"
108 110
109 111
110 112 actions:
... ...
  1 +class AddRobotsToDomain < ActiveRecord::Migration[5.2]
  2 + def change
  3 + add_column :kanjai_domains, :robots, :text
  4 + end
  5 +end
... ...
  1 +class AddPage404IdToDomain < ActiveRecord::Migration[5.2]
  2 + def change
  3 + add_column :kanjai_domains, :page_404_id, :integer, index: true
  4 + end
  5 +end
... ...
1 1 module Kanjai
2   - VERSION = "0.0.342"
  2 + VERSION = "0.0.343"
3 3 end
... ...