knitkit 2.1.9 → 2.1.10
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.
- data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +2 -2
- data/app/controllers/knitkit/online_document_sections_controller.rb +26 -16
- data/app/models/content.rb +52 -42
- data/app/models/documented_content.rb +57 -3
- data/app/models/online_document_section.rb +1 -1
- data/app/views/knitkit/online_document_sections/index.html.erb +175 -85
- data/app/views/layouts/knitkit/online_document_sections.html.erb +1 -1
- data/lib/knitkit/config.rb +3 -2
- data/lib/knitkit/version.rb +1 -1
- metadata +3 -123
- data/spec/dummy/db/data_migrations/20110109173616_create_capability_scope_types.erp_tech_svcs.rb +0 -15
- data/spec/dummy/db/data_migrations/20110509223702_add_publisher_role.knitkit.rb +0 -22
- data/spec/dummy/db/data_migrations/20110525001935_add_usd_currency.erp_base_erp_svcs.rb +0 -12
- data/spec/dummy/db/data_migrations/20110608185830_create_default_dynamic_models_and_forms.erp_forms.rb +0 -33
- data/spec/dummy/db/data_migrations/20110609150135_add_iso_codes.erp_base_erp_svcs.rb +0 -19
- data/spec/dummy/db/data_migrations/20110728201729_erp_app_setup.erp_app.rb +0 -252
- data/spec/dummy/db/data_migrations/20110728201733_update_preferences.erp_app.rb +0 -53
- data/spec/dummy/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.erp_tech_svcs.rb +0 -16
- data/spec/dummy/db/data_migrations/20110816153456_add_knitkit_application.knitkit.rb +0 -32
- data/spec/dummy/db/data_migrations/20110816161238_create_desktop_app_audit_log_viewer.erp_app.rb +0 -21
- data/spec/dummy/db/data_migrations/20110817160743_add_file_manager_application.erp_app.rb +0 -32
- data/spec/dummy/db/data_migrations/20110828190913_create_desktop_app_dynamic_forms.erp_forms.rb +0 -19
- data/spec/dummy/db/data_migrations/20110913145838_setup_compass_ae_instance.erp_base_erp_svcs.rb +0 -12
- data/spec/dummy/db/data_migrations/20111108183739_add_default_capabilities.erp_app.rb +0 -23
- data/spec/dummy/db/data_migrations/20111108183740_add_new_contact_widgets.erp_app.rb +0 -42
- data/spec/dummy/db/data_migrations/20111111144706_setup_audit_log_types.erp_tech_svcs.rb +0 -22
- data/spec/dummy/db/data_migrations/20111118182910_setup_knitkit_capabilities.knitkit.rb +0 -128
- data/spec/dummy/db/data_migrations/20120127144444_create_website_role_types.knitkit.rb +0 -14
- data/spec/dummy/db/data_migrations/20120127150505_create_website_default_configuration.knitkit.rb +0 -73
- data/spec/dummy/db/data_migrations/20120127150506_add_primary_host_to_website_configuration.knitkit.rb +0 -34
- data/spec/dummy/db/data_migrations/20120229160222_add_userinfo_widget.erp_app.rb +0 -29
- data/spec/dummy/db/data_migrations/20120316150424_add_is_template_to_default_website_config.knitkit.rb +0 -17
- data/spec/dummy/db/data_migrations/20120405193721_create_party_and_role_type_for_communication_events.erp_app.rb +0 -11
- data/spec/dummy/db/data_migrations/20120411180756_create_user_management_mobile_application.erp_app.rb +0 -19
- data/spec/dummy/db/data_migrations/20120418164215_create_configuration_management_desktop_application.erp_app.rb +0 -23
- data/spec/dummy/db/data_migrations/20120809020508_update_website_and_configuration.knitkit.rb +0 -78
- data/spec/dummy/db/data_migrations/20120824013449_create_ticket_form.erp_forms.rb +0 -67
- data/spec/dummy/db/data_migrations/20121026013449_update_ticket_form.erp_forms.rb +0 -65
- data/spec/dummy/db/data_migrations/20121026191738_update_contact_form.erp_forms.rb +0 -27
- data/spec/dummy/db/data_migrations/20121116155018_create_group_relationship_and_role_types.erp_tech_svcs.rb +0 -20
- data/spec/dummy/db/data_migrations/20121129185611_upgrade_website_role_iid.knitkit.rb +0 -21
- data/spec/dummy/db/data_migrations/20121130201859_upgrade_remove_system_mgmt_app.erp_app.rb +0 -16
- data/spec/dummy/db/data_migrations/20121130212146_note_capabilities.erp_tech_svcs.rb +0 -24
- data/spec/dummy/db/data_migrations/20121218175028_create_security_management_desktop_application.erp_app.rb +0 -23
- data/spec/dummy/db/data_migrations/20130422154409_upgrade_compass_ae_instances_data.erp_base_erp_svcs.rb +0 -19
- data/spec/dummy/db/data_migrations/20130422154410_add_guid_to_instances.erp_base_erp_svcs.rb +0 -10
- data/spec/dummy/db/data_migrations/20130422154411_create_job_tracker_desktop_application.erp_app.rb +0 -23
- data/spec/dummy/db/data_migrations/20130422154412_created_tracked_jobs.erp_app.rb +0 -15
- data/spec/dummy/db/data_migrations/20130422154413_add_job_tracker_mobile_app.erp_app.rb +0 -17
- data/spec/dummy/db/migrate/20130107153232_base_erp_services.erp_base_erp_svcs.rb +0 -461
- data/spec/dummy/db/migrate/20130107153233_base_tech_services.erp_tech_svcs.rb +0 -271
- data/spec/dummy/db/migrate/20130107153234_create_has_attribute_tables.erp_tech_svcs.rb +0 -39
- data/spec/dummy/db/migrate/20130107153235_create_groups.erp_tech_svcs.rb +0 -19
- data/spec/dummy/db/migrate/20130107153236_upgrade_security.erp_tech_svcs.rb +0 -54
- data/spec/dummy/db/migrate/20130107153237_upgrade_security2.erp_tech_svcs.rb +0 -270
- data/spec/dummy/db/migrate/20130107153238_base_app_framework.erp_app.rb +0 -276
- data/spec/dummy/db/migrate/20130107153239_dynamic_forms.erp_forms.rb +0 -95
- data/spec/dummy/db/migrate/20130107153240_create_tickets.erp_forms.rb +0 -19
- data/spec/dummy/db/migrate/20130107153241_upgrade_dynamic_forms_table.erp_forms.rb +0 -32
- data/spec/dummy/db/migrate/20130107153242_setup_knitkit.knitkit.rb +0 -316
- data/spec/dummy/db/migrate/20130422154401_add_txn_status.erp_base_erp_svcs.rb +0 -37
- data/spec/dummy/db/migrate/20130422154402_upgrade_compass_ae_instances.erp_base_erp_svcs.rb +0 -34
- data/spec/dummy/db/migrate/20130422154403_add_uuid_compass_ae_instance.erp_base_erp_svcs.rb +0 -17
- data/spec/dummy/db/migrate/20130422154404_add_long_lat_to_address.erp_base_erp_svcs.rb +0 -16
- data/spec/dummy/db/migrate/20130422154405_add_queue_to_delayed_jobs.erp_tech_svcs.rb +0 -14
- data/spec/dummy/db/migrate/20130422154406_add_job_tracker.erp_app.rb +0 -20
- data/spec/dummy/db/migrate/20130422154407_update_mobile_application.erp_app.rb +0 -28
- data/spec/dummy/db/migrate/20130422154408_add_use_markdown_to_section.knitkit.rb +0 -20
- data/spec/dummy/db/schema.rb +0 -1248
- data/spec/dummy/db/spec.sqlite3 +0 -0
|
@@ -94,9 +94,9 @@ module Knitkit
|
|
|
94
94
|
@root_node = nil
|
|
95
95
|
|
|
96
96
|
if @context == :website
|
|
97
|
-
@root_node = File.join(
|
|
97
|
+
@root_node = File.join(Rails.application.config.knitkit.images_path, "sites", @assets_model.iid, "images") unless @assets_model.nil?
|
|
98
98
|
else
|
|
99
|
-
@root_node = File.join(
|
|
99
|
+
@root_node = File.join(Rails.application.config.knitkit.images_base_path, 'images')
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
@root_node
|
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
module Knitkit
|
|
2
2
|
class OnlineDocumentSectionsController < BaseController
|
|
3
|
+
include ActionView::Helpers::SanitizeHelper
|
|
4
|
+
|
|
3
5
|
layout 'knitkit/online_document_sections'
|
|
4
6
|
|
|
5
7
|
before_filter :find_root
|
|
6
8
|
before_filter :find_document_sections, :only => :build_tree
|
|
7
9
|
|
|
8
10
|
def index
|
|
11
|
+
@online_document = OnlineDocumentSection.find(params[:section_id])
|
|
12
|
+
@online_document = nil if @online_document.id == find_root.id
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def search
|
|
16
|
+
html = ''
|
|
17
|
+
results = DocumentedContent.search({:query => params[:query].strip,
|
|
18
|
+
:content_type => 'OnlineDocumentSection',
|
|
19
|
+
:parent_id => params[:section_id],
|
|
20
|
+
:website_id => @website.id})
|
|
21
|
+
|
|
22
|
+
DocumentedContent.build_search_results(results).each do |result|
|
|
23
|
+
html << "<p><a href=\"javascript:findShowAndExpandNode('#{result[:internal_identifier]}');\">#{result[:title]}</a><p style='border:solid 2px #CCC;padding:2px;'>#{strip_tags(result[:content].body_html[0..500])}...</p></p>"
|
|
24
|
+
end
|
|
9
25
|
|
|
26
|
+
render :json => {:success => true, :html => html}
|
|
10
27
|
end
|
|
11
28
|
|
|
12
29
|
def build_tree
|
|
13
|
-
render :
|
|
30
|
+
render :json => @document_sections.collect { |document| build_document_hash(document) }
|
|
14
31
|
end
|
|
15
32
|
|
|
16
33
|
def get_content
|
|
@@ -27,27 +44,20 @@ module Knitkit
|
|
|
27
44
|
|
|
28
45
|
protected
|
|
29
46
|
|
|
30
|
-
def id_or_node
|
|
31
|
-
(params[:node].to_i == 0) ? params[:section_id] : params[:node]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
47
|
def find_root
|
|
35
|
-
@root = OnlineDocumentSection.find(params[:section_id])
|
|
48
|
+
@root = OnlineDocumentSection.find(params[:section_id]).root
|
|
36
49
|
end
|
|
37
50
|
|
|
38
51
|
def find_document_sections
|
|
39
|
-
@document_sections =
|
|
52
|
+
@document_sections = find_root.positioned_children
|
|
40
53
|
end
|
|
41
54
|
|
|
42
|
-
def build_document_hash
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
:iconCls => (section.leaf ? 'icon-documentation-document' : 'icon-documentation-multi-document')}
|
|
49
|
-
end
|
|
50
|
-
end
|
|
55
|
+
def build_document_hash(document_section)
|
|
56
|
+
{:id => document_section.internal_identifier,
|
|
57
|
+
:title => document_section.title,
|
|
58
|
+
:leaf => document_section.leaf,
|
|
59
|
+
:iconCls => (document_section.leaf ? 'icon-documentation-document' : 'icon-documentation-multi-document'),
|
|
60
|
+
:children => document_section.positioned_children.collect { |child_document_section| build_document_hash(child_document_section) }}
|
|
51
61
|
end
|
|
52
62
|
|
|
53
63
|
end
|
data/app/models/content.rb
CHANGED
|
@@ -5,6 +5,7 @@ class Content < ActiveRecord::Base
|
|
|
5
5
|
|
|
6
6
|
extend FriendlyId
|
|
7
7
|
friendly_id :title, :use => [:slugged], :slug_column => :permalink
|
|
8
|
+
|
|
8
9
|
def should_generate_new_friendly_id?
|
|
9
10
|
new_record?
|
|
10
11
|
end
|
|
@@ -13,7 +14,7 @@ class Content < ActiveRecord::Base
|
|
|
13
14
|
|
|
14
15
|
acts_as_taggable
|
|
15
16
|
acts_as_commentable
|
|
16
|
-
acts_as_versioned
|
|
17
|
+
acts_as_versioned :table_name => :content_versions
|
|
17
18
|
can_be_published
|
|
18
19
|
has_relational_dynamic_attributes
|
|
19
20
|
|
|
@@ -21,53 +22,62 @@ class Content < ActiveRecord::Base
|
|
|
21
22
|
has_many :website_sections, :through => :website_section_contents
|
|
22
23
|
belongs_to :created_by, :class_name => "User"
|
|
23
24
|
belongs_to :updated_by, :class_name => "User"
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
validates :type, :presence => {:message => 'Type cannot be blank'}
|
|
26
27
|
validates_uniqueness_of :internal_identifier, :case_sensitive => false
|
|
27
28
|
|
|
28
29
|
def self.search(options = {})
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
predicate = Content.includes([:website_sections])
|
|
31
|
+
|
|
32
|
+
if options[:section_unique_name]
|
|
33
|
+
predicate = predicate.where("website_sections.internal_identifier = ?", options[:section_unique_name])
|
|
33
34
|
end
|
|
34
35
|
|
|
35
|
-
if options[:
|
|
36
|
-
|
|
37
|
-
else
|
|
38
|
-
content_type_scope = "website_sections.type = '#{options[:content_type]}' AND"
|
|
36
|
+
if options[:parent_id]
|
|
37
|
+
predicate = predicate.where("website_sections.id" => WebsiteSection.find(options[:parent_id]).self_and_descendants.collect(&:id))
|
|
39
38
|
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
|
|
40
|
+
if options[:content_type]
|
|
41
|
+
predicate = predicate.where("website_sections.type = ?", options[:content_type])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
if options[:website_id]
|
|
45
|
+
predicate = predicate.where("website_sections.website_id = ?", options[:website_id])
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
predicate = predicate.where("(UPPER(contents.title) LIKE UPPER('%#{options[:query]}%')
|
|
44
49
|
OR UPPER(contents.excerpt_html) LIKE UPPER('%#{options[:query]}%')
|
|
45
|
-
OR UPPER(contents.body_html) LIKE UPPER('%#{options[:query]}%') )").order("contents.created_at DESC")
|
|
50
|
+
OR UPPER(contents.body_html) LIKE UPPER('%#{options[:query]}%') )").order("contents.created_at DESC")
|
|
51
|
+
if options[:page]
|
|
52
|
+
predicate.paginate(:page => options[:page], :per_page => options[:per_page])
|
|
53
|
+
else
|
|
54
|
+
predicate.all
|
|
55
|
+
end
|
|
46
56
|
end
|
|
47
57
|
|
|
48
|
-
def self.do_search(options = {})
|
|
58
|
+
def self.do_search(options = {})
|
|
49
59
|
@results = Content.search(options)
|
|
50
60
|
|
|
51
|
-
@search_results = build_search_results(@results)
|
|
52
|
-
|
|
61
|
+
@search_results = build_search_results(@results)
|
|
62
|
+
|
|
53
63
|
@page_results = WillPaginate::Collection.create(options[:page], options[:per_page], @results.total_entries) do |pager|
|
|
54
64
|
pager.replace(@search_results)
|
|
55
65
|
end
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
|
|
67
|
+
@page_results
|
|
58
68
|
end
|
|
59
|
-
|
|
60
|
-
def self.find_by_section_id(
|
|
69
|
+
|
|
70
|
+
def self.find_by_section_id(website_section_id)
|
|
61
71
|
Content.joins(:website_section_contents).where('website_section_id = ?', website_section_id).order("website_section_contents.position ASC, website_section_contents.created_at DESC").all
|
|
62
72
|
end
|
|
63
73
|
|
|
64
|
-
def self.find_by_section_id_filtered_by_id(
|
|
74
|
+
def self.find_by_section_id_filtered_by_id(website_section_id, id_filter_list)
|
|
65
75
|
Content.joins(:website_section_contents).where("website_section_id = ? AND contents.id IN (#{id_filter_list.join(',')})", website_section_id).all
|
|
66
76
|
end
|
|
67
77
|
|
|
68
78
|
def self.find_published_by_section(active_publication, website_section)
|
|
69
79
|
published_content = []
|
|
70
|
-
contents = self.find_by_section_id(
|
|
80
|
+
contents = self.find_by_section_id(website_section.id)
|
|
71
81
|
contents.each do |content|
|
|
72
82
|
content = get_published_version(active_publication, content)
|
|
73
83
|
published_content << content unless content.nil?
|
|
@@ -77,9 +87,9 @@ class Content < ActiveRecord::Base
|
|
|
77
87
|
end
|
|
78
88
|
|
|
79
89
|
def self.find_published_by_section_with_tag(active_publication, website_section, tag)
|
|
80
|
-
published_content = []
|
|
81
|
-
id_filter_list = self.tagged_with(tag.name).collect{|t| t.id }
|
|
82
|
-
contents = self.find_by_section_id_filtered_by_id(
|
|
90
|
+
published_content = []
|
|
91
|
+
id_filter_list = self.tagged_with(tag.name).collect { |t| t.id }
|
|
92
|
+
contents = self.find_by_section_id_filtered_by_id(website_section.id, id_filter_list)
|
|
83
93
|
contents.each do |content|
|
|
84
94
|
content = get_published_version(active_publication, content)
|
|
85
95
|
published_content << content unless content.nil?
|
|
@@ -88,11 +98,11 @@ class Content < ActiveRecord::Base
|
|
|
88
98
|
published_content
|
|
89
99
|
end
|
|
90
100
|
|
|
91
|
-
def find_website_sections_by_site_id(
|
|
92
|
-
self.website_sections.where('website_id = ?',website_id).all
|
|
101
|
+
def find_website_sections_by_site_id(website_id)
|
|
102
|
+
self.website_sections.where('website_id = ?', website_id).all
|
|
93
103
|
end
|
|
94
104
|
|
|
95
|
-
def position(
|
|
105
|
+
def position(website_section_id)
|
|
96
106
|
position = self.website_section_contents.find_by_website_section_id(website_section_id).position
|
|
97
107
|
position
|
|
98
108
|
end
|
|
@@ -102,7 +112,7 @@ class Content < ActiveRecord::Base
|
|
|
102
112
|
end
|
|
103
113
|
|
|
104
114
|
def update_content_area_and_position_by_section(section, content_area, position)
|
|
105
|
-
website_section_content = WebsiteSectionContent.where('content_id = ? and website_section_id = ?',self.id, section.id).first
|
|
115
|
+
website_section_content = WebsiteSectionContent.where('content_id = ? and website_section_id = ?', self.id, section.id).first
|
|
106
116
|
unless website_section_content.nil?
|
|
107
117
|
website_section_content.content_area = content_area
|
|
108
118
|
website_section_content.position = position
|
|
@@ -112,16 +122,16 @@ class Content < ActiveRecord::Base
|
|
|
112
122
|
|
|
113
123
|
def content_area_by_website_section(section)
|
|
114
124
|
content_area = nil
|
|
115
|
-
unless WebsiteSectionContent.where('content_id = ? and website_section_id = ?',self.id, section.id).first.nil?
|
|
116
|
-
content_area = WebsiteSectionContent.where('content_id = ? and website_section_id = ?',self.id, section.id).first.content_area
|
|
125
|
+
unless WebsiteSectionContent.where('content_id = ? and website_section_id = ?', self.id, section.id).first.nil?
|
|
126
|
+
content_area = WebsiteSectionContent.where('content_id = ? and website_section_id = ?', self.id, section.id).first.content_area
|
|
117
127
|
end
|
|
118
128
|
content_area
|
|
119
129
|
end
|
|
120
130
|
|
|
121
131
|
def position_by_website_section(section)
|
|
122
132
|
position = nil
|
|
123
|
-
unless WebsiteSectionContent.where('content_id = ? and website_section_id = ?',self.id, section.id).first.nil?
|
|
124
|
-
position = WebsiteSectionContent.where('content_id = ? and website_section_id = ?',self.id, section.id).first.position
|
|
133
|
+
unless WebsiteSectionContent.where('content_id = ? and website_section_id = ?', self.id, section.id).first.nil?
|
|
134
|
+
position = WebsiteSectionContent.where('content_id = ? and website_section_id = ?', self.id, section.id).first.position
|
|
125
135
|
end
|
|
126
136
|
position
|
|
127
137
|
end
|
|
@@ -129,18 +139,18 @@ class Content < ActiveRecord::Base
|
|
|
129
139
|
def assign_attribute_on_save
|
|
130
140
|
super
|
|
131
141
|
|
|
132
|
-
Article.find_by_internal_identifier(self.internal_identifier) ? attribute_type_description = "updated_by_role"
|
|
142
|
+
Article.find_by_internal_identifier(self.internal_identifier) ? attribute_type_description = "updated_by_role" : attribute_type_description = "created_by_role"
|
|
133
143
|
|
|
134
144
|
if attribute_type_description == "created_by_role"
|
|
135
145
|
user = self.created_by
|
|
136
146
|
else
|
|
137
|
-
user = User.find(self.versions.sort_by {|version| version.version}.reverse[0].created_by_id)
|
|
147
|
+
user = User.find(self.versions.sort_by { |version| version.version }.reverse[0].created_by_id)
|
|
138
148
|
end
|
|
139
|
-
|
|
149
|
+
|
|
140
150
|
if user
|
|
141
151
|
#keep only the attributes related to the most recent change for each attribute_type
|
|
142
152
|
self.destroy_values_of_type attribute_type_description
|
|
143
|
-
|
|
153
|
+
|
|
144
154
|
attribute_type = AttributeType.find_by_internal_identifier(attribute_type_description)
|
|
145
155
|
attribute_type = AttributeType.create(:description => attribute_type_description, :data_type => "Text") unless attribute_type
|
|
146
156
|
|
|
@@ -156,9 +166,9 @@ class Content < ActiveRecord::Base
|
|
|
156
166
|
def is_published?
|
|
157
167
|
!PublishedElement.where('published_element_record_id = ? and published_element_record_type = ? and published_elements.version = ?', self.id, 'Content', self.version).first.nil?
|
|
158
168
|
end
|
|
159
|
-
|
|
169
|
+
|
|
160
170
|
protected
|
|
161
|
-
|
|
171
|
+
|
|
162
172
|
def self.build_search_results(results)
|
|
163
173
|
# and if it is a blog get the article link and title
|
|
164
174
|
results_array = []
|
|
@@ -178,7 +188,7 @@ class Content < ActiveRecord::Base
|
|
|
178
188
|
|
|
179
189
|
results_array << results_hash
|
|
180
190
|
end
|
|
181
|
-
|
|
191
|
+
|
|
182
192
|
results_array
|
|
183
193
|
end
|
|
184
194
|
|
|
@@ -9,11 +9,11 @@ class DocumentedContent < Content
|
|
|
9
9
|
def check_internal_identifier
|
|
10
10
|
self.internal_identifier = self.permalink if self.internal_identifier.blank?
|
|
11
11
|
end
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
def content_hash
|
|
14
14
|
{:id => self.id, :title => self.title, :body_html => self.body_html}
|
|
15
15
|
end
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
def self.find_published_by_section(active_publication, website_section)
|
|
18
18
|
published_content = []
|
|
19
19
|
documented_item = DocumentedItem.where(["online_document_section_id = ?", website_section.id]).first
|
|
@@ -25,5 +25,59 @@ class DocumentedContent < Content
|
|
|
25
25
|
|
|
26
26
|
published_content.first
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
def self.search(options = {})
|
|
30
|
+
predicate = self.joins('inner join documented_items on documented_items.documented_content_id = contents.id')
|
|
31
|
+
.joins('inner join website_sections on website_sections.id = documented_items.online_document_section_id')
|
|
32
|
+
|
|
33
|
+
if options[:section_unique_name]
|
|
34
|
+
predicate = predicate.where("website_sections.internal_identifier = ?", options[:section_unique_name])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
if options[:parent_id]
|
|
38
|
+
predicate = predicate.where("website_sections.id" => WebsiteSection.find(options[:parent_id]).descendants.collect(&:id))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if options[:content_type]
|
|
42
|
+
predicate = predicate.where("website_sections.type = ?", options[:content_type])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if options[:website_id]
|
|
46
|
+
predicate = predicate.where("website_sections.website_id = ?", options[:website_id])
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
predicate = predicate.where("(UPPER(contents.title) LIKE UPPER('%#{options[:query]}%')
|
|
50
|
+
OR UPPER(contents.excerpt_html) LIKE UPPER('%#{options[:query]}%')
|
|
51
|
+
OR UPPER(contents.body_html) LIKE UPPER('%#{options[:query]}%') )").order("contents.created_at DESC")
|
|
52
|
+
if options[:page]
|
|
53
|
+
predicate.paginate(:page => options[:page], :per_page => options[:per_page])
|
|
54
|
+
else
|
|
55
|
+
predicate.all
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.build_search_results(results)
|
|
60
|
+
# and if it is a blog get the article link and title
|
|
61
|
+
results_array = []
|
|
62
|
+
results.each do |content|
|
|
63
|
+
section = DocumentedItem.find_by_documented_content_id(content.id).online_document_section
|
|
64
|
+
|
|
65
|
+
results_hash = {}
|
|
66
|
+
results_hash[:internal_identifier] = section.internal_identifier
|
|
67
|
+
if section.attributes['type'] == 'Blog'
|
|
68
|
+
results_hash[:link] = section.path + '/' + content.permalink
|
|
69
|
+
results_hash[:title] = content.title
|
|
70
|
+
else
|
|
71
|
+
results_hash[:link] = section.path
|
|
72
|
+
results_hash[:title] = section.title
|
|
73
|
+
end
|
|
74
|
+
results_hash[:section] = section
|
|
75
|
+
results_hash[:content] = content
|
|
76
|
+
|
|
77
|
+
results_array << results_hash
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
results_array
|
|
81
|
+
end
|
|
82
|
+
|
|
29
83
|
end
|
|
@@ -2,7 +2,7 @@ class OnlineDocumentSection < WebsiteSection
|
|
|
2
2
|
has_one :documented_item, :dependent => :destroy
|
|
3
3
|
delegate :content, :to => :documented_item, :prefix => true
|
|
4
4
|
delegate :published_content, :to => :documented_item, :prefix => true
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
def documented_item_content_html
|
|
7
7
|
documented_item_content.body_html
|
|
8
8
|
rescue
|