hancock_cms_faq 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +55 -0
  9. data/Rakefile +1 -0
  10. data/app/assets/javascripts/hancock/faq.coffee +6 -0
  11. data/app/assets/javascripts/hancock/faq/form.coffee +9 -0
  12. data/app/assets/javascripts/hancock/faq/init.coffee +2 -0
  13. data/app/assets/stylesheets/hancock/faq.sass +0 -0
  14. data/app/controllers/concerns/hancock/faq/decorators/categories.rb +17 -0
  15. data/app/controllers/concerns/hancock/faq/decorators/questions.rb +71 -0
  16. data/app/controllers/hancock/faq/categories_controller.rb +7 -0
  17. data/app/controllers/hancock/faq/questions_controller.rb +7 -0
  18. data/app/models/concerns/hancock/faq/decorators/category.rb +36 -0
  19. data/app/models/concerns/hancock/faq/decorators/question.rb +48 -0
  20. data/app/models/hancock/faq/category.rb +11 -0
  21. data/app/models/hancock/faq/question.rb +11 -0
  22. data/app/views/hancock/faq/categories/index.html.slim +10 -0
  23. data/app/views/hancock/faq/categories/show.html.slim +8 -0
  24. data/app/views/hancock/faq/questions/_fields.html.slim +11 -0
  25. data/app/views/hancock/faq/questions/_fields_with_settings.html.slim +20 -0
  26. data/app/views/hancock/faq/questions/_form.html.slim +66 -0
  27. data/app/views/hancock/faq/questions/_form_with_wrapper.html.slim +2 -0
  28. data/app/views/hancock/faq/questions/_question_block.html.slim +33 -0
  29. data/app/views/hancock/faq/questions/_simple_captcha.html.slim +16 -0
  30. data/app/views/hancock/faq/questions/_success.html.slim +3 -0
  31. data/app/views/hancock/faq/questions/create.html.slim +1 -0
  32. data/app/views/hancock/faq/questions/index.html.slim +11 -0
  33. data/app/views/hancock/faq/questions/new.html.slim +6 -0
  34. data/app/views/hancock/faq/questions/show.html.slim +8 -0
  35. data/app/views/hancock/faq/questions/update_captcha.html.slim +16 -0
  36. data/bin/console +14 -0
  37. data/bin/setup +7 -0
  38. data/config/locales/hancock.faq.ru.yml +64 -0
  39. data/hancock_cms_faq.gemspec +36 -0
  40. data/lib/generators/hancock/faq/config/config_generator.rb +13 -0
  41. data/lib/generators/hancock/faq/config/templates/hancock_faq.erb +23 -0
  42. data/lib/generators/hancock/faq/controllers/all_generator.rb +28 -0
  43. data/lib/generators/hancock/faq/controllers/category_generator.rb +43 -0
  44. data/lib/generators/hancock/faq/controllers/decorators_generator.rb +24 -0
  45. data/lib/generators/hancock/faq/controllers/question_generator.rb +43 -0
  46. data/lib/generators/hancock/faq/controllers/templates/categories_controller.erb +10 -0
  47. data/lib/generators/hancock/faq/controllers/templates/questions_controller.erb +10 -0
  48. data/lib/generators/hancock/faq/models/all_generator.rb +28 -0
  49. data/lib/generators/hancock/faq/models/category_generator.rb +43 -0
  50. data/lib/generators/hancock/faq/models/decorators_generator.rb +24 -0
  51. data/lib/generators/hancock/faq/models/question_generator.rb +34 -0
  52. data/lib/generators/hancock/faq/models/templates/category.erb +36 -0
  53. data/lib/generators/hancock/faq/models/templates/question.erb +37 -0
  54. data/lib/hancock/faq/admin.rb +6 -0
  55. data/lib/hancock/faq/admin/category.rb +128 -0
  56. data/lib/hancock/faq/admin/question.rb +104 -0
  57. data/lib/hancock/faq/configuration.rb +53 -0
  58. data/lib/hancock/faq/controllers/categories.rb +88 -0
  59. data/lib/hancock/faq/controllers/questions.rb +174 -0
  60. data/lib/hancock/faq/engine.rb +7 -0
  61. data/lib/hancock/faq/models/category.rb +50 -0
  62. data/lib/hancock/faq/models/mongoid/category.rb +33 -0
  63. data/lib/hancock/faq/models/mongoid/question.rb +72 -0
  64. data/lib/hancock/faq/models/question.rb +85 -0
  65. data/lib/hancock/faq/routes.rb +83 -0
  66. data/lib/hancock/faq/version.rb +5 -0
  67. data/lib/hancock_cms_faq.rb +31 -0
  68. data/release.sh +6 -0
  69. metadata +159 -0
@@ -0,0 +1,28 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class AllGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+ argument :category_class_name_arg, type: :string, default: ""
8
+
9
+ desc 'Hancock::Faq Models generator'
10
+ def all
11
+ generate "hancock:faq:models:question #{camelcased_class_name}"
12
+ generate "hancock:faq:models:category #{category_class_name}"
13
+ end
14
+
15
+ private
16
+ def capitalized_class_name
17
+ class_name.capitalize
18
+ end
19
+ def camelcased_class_name
20
+ class_name.camelcase
21
+ end
22
+
23
+ def category_class_name
24
+ category_class_name_arg.blank? ? "#{camelcased_class_name}Category" : category_class_name_arg
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,43 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class CategoryGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+ argument :question_class_name_arg, type: :string, default: ""
8
+
9
+ desc 'Hancock::Faq Category Model generator'
10
+ def category
11
+ template 'category.erb', "app/models/#{file_name}.rb"
12
+ end
13
+
14
+ private
15
+ def capitalized_class_name
16
+ class_name.capitalize
17
+ end
18
+
19
+ def camelcased_class_name
20
+ class_name.camelcase
21
+ end
22
+
23
+ def file_name
24
+ underscored_class_name
25
+ end
26
+
27
+ def underscored_class_name
28
+ camelcased_class_name.underscore
29
+ end
30
+
31
+ def underscored_pluralized_class_name
32
+ underscored_class_name.pluralize
33
+ end
34
+
35
+ def camelcased_question_class_name
36
+ question_class_name.camelcase
37
+ end
38
+
39
+ def question_class_name
40
+ question_class_name_arg.blank? ? camelcased_class_name.sub(/Category$/i, "") : question_class_name_arg
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class DecoratorsGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../../../../../../app/models/concerns/hancock/faq/decorators', __FILE__)
6
+ argument :models, type: :array, default: []
7
+
8
+ desc 'Hancock::Faq Models generator'
9
+ def decorators
10
+ copied = false
11
+ (models == ['all'] ? permitted_models : models & permitted_models).each do |m|
12
+ copied = true
13
+ copy_file "#{m}.rb", "app/models/concerns/hancock/faq/decorators/#{m}.rb"
14
+ end
15
+ puts "U need to set models`s name. One of this: #{permitted_models.join(", ")}." unless copied
16
+ end
17
+
18
+ private
19
+ def permitted_models
20
+ ['category', 'question']
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class QuestionGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+
8
+ desc 'Hancock::Faq Question Model generator'
9
+ def question
10
+ template 'question.erb', "app/models/#{file_name}.rb"
11
+ end
12
+
13
+ private
14
+ def capitalized_class_name
15
+ class_name.capitalize
16
+ end
17
+
18
+ def camelcased_class_name
19
+ class_name.camelcase
20
+ end
21
+
22
+ def file_name
23
+ underscored_class_name
24
+ end
25
+
26
+ def underscored_class_name
27
+ camelcased_class_name.underscore
28
+ end
29
+
30
+ def underscored_pluralized_class_name
31
+ underscored_class_name.pluralize
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ class <%= camelcased_class_name %> < Hancock::Faq::Category
2
+
3
+ def self.question_class
4
+ <%= camelcased_question_class_name %>
5
+ end
6
+
7
+
8
+ ############# rails_admin ##############
9
+ def self.rails_admin_add_fields
10
+ [] #super
11
+ end
12
+
13
+ def self.rails_admin_add_config(config)
14
+ #super(config)
15
+ end
16
+
17
+ def self.admin_can_user_defined_actions
18
+ [].freeze
19
+ end
20
+ def self.admin_cannot_user_defined_actions
21
+ [].freeze
22
+ end
23
+ def self.manager_can_user_defined_actions
24
+ [].freeze
25
+ end
26
+ def self.manager_cannot_user_defined_actions
27
+ [].freeze
28
+ end
29
+ def self.rails_admin_user_defined_visible_actions
30
+ [].freeze
31
+ end
32
+
33
+ rails_admin(&Hancock::Faq::Admin::Category.config(rails_admin_add_fields) { |config|
34
+ rails_admin_add_config(config)
35
+ })
36
+ end
@@ -0,0 +1,37 @@
1
+ class <%= camelcased_class_name %> < Hancock::Faq::Question
2
+
3
+ has_and_belongs_to_many :categories, class_name: "<%= camelcased_class_name %>Category", inverse_of: nil
4
+ alias :<%= underscored_class_name %>_categories :categories
5
+
6
+ has_and_belongs_to_many :related_questions, :class_name => "<%= camelcased_class_name %>", :inverse_of => :related_questions
7
+ alias :related_<%= underscored_pluralized_class_name %> :related_questions
8
+
9
+ ############# rails_admin ##############
10
+ def self.rails_admin_add_fields
11
+ [] #super
12
+ end
13
+
14
+ def self.rails_admin_add_config(config)
15
+ #super(config)
16
+ end
17
+
18
+ def self.admin_can_user_defined_actions
19
+ [].freeze
20
+ end
21
+ def self.admin_cannot_user_defined_actions
22
+ [].freeze
23
+ end
24
+ def self.manager_can_user_defined_actions
25
+ [].freeze
26
+ end
27
+ def self.manager_cannot_user_defined_actions
28
+ [].freeze
29
+ end
30
+ def self.rails_admin_user_defined_visible_actions
31
+ [].freeze
32
+ end
33
+
34
+ rails_admin(&Hancock::Faq::Admin::Question.config(rails_admin_add_fields) { |config|
35
+ rails_admin_add_config(config)
36
+ })
37
+ end
@@ -0,0 +1,6 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ class << self
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,128 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ module Category
4
+ def self.config(nav_label = nil, fields = {})
5
+ if nav_label.is_a?(Hash)
6
+ nav_label, fields = nav_label[:nav_label], nav_label
7
+ elsif nav_label.is_a?(Array)
8
+ nav_label, fields = nil, nav_label
9
+ end
10
+
11
+ Proc.new {
12
+ navigation_label(!nav_label.blank? ? nav_label : "FAQ")
13
+
14
+ list do
15
+ scopes [:sorted, :enabled, nil]
16
+
17
+ field :enabled, :toggle
18
+ field :name do
19
+ searchable true
20
+ end
21
+ # field :image
22
+
23
+ field :questions do
24
+ read_only true
25
+
26
+ pretty_value do
27
+ bindings[:object].questions.to_a.map { |q|
28
+ route = bindings[:view] || bindings[:controller]
29
+ model_name = q.rails_admin_model
30
+ route.link_to(q.full_name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.name)
31
+ }.join("<br>").html_safe
32
+ end
33
+ end
34
+
35
+ field :text_slug do
36
+ searchable true
37
+ end
38
+ group :content, &Hancock::Admin.content_block
39
+ end
40
+
41
+ edit do
42
+ field :enabled, :toggle
43
+ field :name
44
+ # field :sidebar_title, :string
45
+
46
+ group :URL, &Hancock::Admin.url_block
47
+ # group :URL do
48
+ # active false
49
+ # field :slugs, :hancock_slugs
50
+ # field :text_slug
51
+ # end
52
+ # field :image, :hancock_image
53
+
54
+ group :content, &Hancock::Admin.content_block
55
+ # group :content do
56
+ # active false
57
+ # field :excerpt, :hancock_html
58
+ # field :content, :hancock_html
59
+ # end
60
+
61
+ if Hancock::Faq.config.seo_support
62
+ group :seo_n_sitemap, &Hancock::Seo::Admin.seo_n_sitemap_block
63
+ # group :seo do
64
+ # active false
65
+ # field :seo
66
+ # end
67
+ # group :sitemap_data do
68
+ # active false
69
+ # field :sitemap_data
70
+ # end
71
+ end
72
+
73
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
74
+
75
+
76
+ group :questions do
77
+ active false
78
+ field :questions do
79
+ read_only true
80
+ help 'Список вопросов'
81
+
82
+ pretty_value do
83
+ bindings[:object].questions.to_a.map { |q|
84
+ route = (bindings[:view] || bindings[:controller])
85
+ model_name = q.rails_admin_model
86
+ route.link_to(q.name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.full_name)
87
+ }.join("<br>").html_safe
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ show do
94
+ field :name
95
+ # field :sidebar_title
96
+ field :slugs, :hancock_slugs
97
+ field :text_slug
98
+ field :enabled
99
+ # field :image
100
+ field :excerpt
101
+ field :content
102
+
103
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
104
+
105
+ field :questions do
106
+ read_only true
107
+
108
+ pretty_value do
109
+ bindings[:object].questions.to_a.map { |q|
110
+ route = (bindings[:view] || bindings[:controller])
111
+ model_name = q.rails_admin_model
112
+ route.link_to(i.full_name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.name)
113
+ }.join("<br>").html_safe
114
+ end
115
+ end
116
+ end
117
+
118
+ nested_set({max_depth: 2, scopes: []})
119
+
120
+ if block_given?
121
+ yield self
122
+ end
123
+
124
+ }
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,104 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ module Question
4
+ def self.config(nav_label = nil, fields = {})
5
+ if nav_label.is_a?(Hash)
6
+ nav_label, fields = nav_label[:nav_label], nav_label
7
+ elsif nav_label.is_a?(Array)
8
+ nav_label, fields = nil, nav_label
9
+ end
10
+
11
+ Proc.new {
12
+ navigation_label(!nav_label.blank? ? nav_label : "FAQ")
13
+
14
+ list do
15
+ scopes [:by_date, :by_answered_date, :answered, :not_answered, :enabled, nil]
16
+
17
+ field :enabled, :toggle
18
+ field :main_category
19
+ field :categories
20
+ field :full_name do
21
+ searchable true
22
+ end
23
+
24
+ field :question_text do
25
+ searchable true
26
+ end
27
+ field :question_text_after_editing do
28
+ searchable true
29
+ end
30
+ field :author_name do
31
+ searchable true
32
+ end
33
+ field :author_name_text_after_editing do
34
+ searchable true
35
+ end
36
+ field :author_email do
37
+ searchable true
38
+ end
39
+
40
+ field :answer_text do
41
+ searchable true
42
+ end
43
+ field :answer_author_name do
44
+ searchable true
45
+ end
46
+ end
47
+
48
+ edit do
49
+ group :categories, &Hancock::Admin.categories_block
50
+ # group :categories do
51
+ # active false
52
+ # field :main_category
53
+ # field :categories
54
+ # end
55
+ field :enabled, :toggle
56
+
57
+ group :URL, &Hancock::Admin.url_block
58
+ # group :URL do
59
+ # active false
60
+ # field :slugs, :hancock_slugs
61
+ # field :text_slug
62
+ # end
63
+
64
+ group 'Данные вопроса' do
65
+ active false
66
+ field :question_text, :text
67
+ field :question_text_after_editing, :hancock_html
68
+ field :author_name, :string
69
+ field :author_name_text_after_editing, :string
70
+ field :author_email, :string
71
+ end
72
+
73
+ group 'Данные ответа' do
74
+ active false
75
+ field :answered, :toggle
76
+ field :answer_text, :hancock_html
77
+ field :answered_time
78
+ field :answer_author_name, :string
79
+ end
80
+
81
+ if Hancock::Faq.config.seo_support
82
+ group :seo_n_sitemap, &Hancock::Seo::Admin.seo_n_sitemap_block
83
+ # group :seo do
84
+ # active false
85
+ # field :seo
86
+ # end
87
+ # group :sitemap_data do
88
+ # active false
89
+ # field :sitemap_data
90
+ # end
91
+ end
92
+
93
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
94
+
95
+ end
96
+
97
+ if block_given?
98
+ yield self
99
+ end
100
+ }
101
+ end
102
+ end
103
+ end
104
+ end