knitkit 3.0.0 → 3.2.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 (203) hide show
  1. checksums.yaml +4 -4
  2. data/{public → app/assets}/images/check.png +0 -0
  3. data/{public → app/assets}/images/credit_card.png +0 -0
  4. data/{public → app/assets}/images/inline_edit/close.png +0 -0
  5. data/{public → app/assets}/images/knitkit/icons/document.png +0 -0
  6. data/{public → app/assets}/images/knitkit/icons/multi_doc.png +0 -0
  7. data/{public → app/assets}/images/knitkit/logo.png +0 -0
  8. data/{public → app/assets}/images/knitkit/splash/images/add-site.png +0 -0
  9. data/app/assets/images/knitkit/splash/images/add_website_105x105-active.png +0 -0
  10. data/app/assets/images/knitkit/splash/images/add_website_105x105.png +0 -0
  11. data/{public → app/assets}/images/knitkit/splash/images/adjust-site.png +0 -0
  12. data/{public → app/assets}/images/knitkit/splash/images/browse-site.png +0 -0
  13. data/app/assets/images/knitkit/splash/images/browse_db_105x105-active.png +0 -0
  14. data/app/assets/images/knitkit/splash/images/browse_db_105x105.png +0 -0
  15. data/app/assets/images/knitkit/splash/images/console_105x105-active.png +0 -0
  16. data/app/assets/images/knitkit/splash/images/console_105x105.png +0 -0
  17. data/{public → app/assets}/images/knitkit/splash/images/find-themes.png +0 -0
  18. data/app/assets/images/knitkit/splash/images/find_themes_105x105-active.png +0 -0
  19. data/app/assets/images/knitkit/splash/images/find_themes_105x105.png +0 -0
  20. data/app/assets/images/knitkit/splash/images/learn_more_105x105-active.png +0 -0
  21. data/app/assets/images/knitkit/splash/images/learn_more_105x105.png +0 -0
  22. data/{public → app/assets}/images/knitkit/splash/images/settings.png +0 -0
  23. data/{public → app/assets}/images/knitkit/splash/images/tutorials.png +0 -0
  24. data/app/assets/images/knitkit/splash/splash.png +0 -0
  25. data/app/assets/images/widgets/manage_profile/contact_information.png +0 -0
  26. data/app/assets/images/widgets/manage_profile/password.png +0 -0
  27. data/app/assets/images/widgets/manage_profile/user_information.png +0 -0
  28. data/app/assets/javascripts/erp_app/desktop/applications/knitkit/app.js +24 -0
  29. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +15 -12
  30. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/center_region.js +69 -48
  31. data/app/assets/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +214 -0
  32. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/east_region.js +0 -0
  33. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/file_assets_panel.js +17 -19
  34. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_data_view.js +13 -3
  35. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/image_assets_panel.js +59 -48
  36. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/east_region/widgets_panel.js +0 -0
  37. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +2 -2
  38. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/module.js +2 -2
  39. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +0 -0
  40. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +1 -1
  41. data/app/assets/javascripts/erp_app/desktop/applications/knitkit/splash_screen.js +268 -0
  42. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/top_menu/main_menu.js +85 -33
  43. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/top_menu/websites_combo.js +0 -0
  44. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +5 -28
  45. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/article.js +22 -8
  46. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/document.js +143 -25
  47. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/host.js +5 -1
  48. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/menu.js +2 -0
  49. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/section.js +181 -65
  50. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website_nav_items.js +0 -0
  51. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/hosts_tree_panel.js +0 -0
  52. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/menu_tree_panel.js +0 -0
  53. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/site_contents_tree_panel.js +121 -116
  54. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/themes_tree_panel.js +101 -10
  55. data/{public → app/assets}/javascripts/erp_app/desktop/applications/knitkit/west_region/west_region.js +9 -5
  56. data/app/assets/javascripts/knitkit-web.js +22 -0
  57. data/app/assets/javascripts/knitkit/additional-methods.min.js +4 -0
  58. data/app/assets/javascripts/knitkit/bootstrap.min.js +7 -0
  59. data/app/assets/javascripts/knitkit/captcha.js +154 -0
  60. data/{public → app/assets}/javascripts/knitkit/confirm-bootstrap.js +1 -1
  61. data/{public → app/assets}/javascripts/knitkit/inline_editing.js +1 -1
  62. data/{public → app/assets}/javascripts/knitkit/jquery.maskedinput.min.js +0 -0
  63. data/app/assets/javascripts/knitkit/jquery.validate.min.js +4 -0
  64. data/app/assets/javascripts/knitkit/js.cookie.js +145 -0
  65. data/{public → app/assets}/javascripts/knitkit/theme.js +0 -0
  66. data/app/assets/stylesheets/erp_app/desktop/applications/knitkit/app.css +12 -0
  67. data/{public → app/assets}/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +23 -33
  68. data/app/assets/stylesheets/erp_app/shared/knitkit_shared.css +21 -0
  69. data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.eot +0 -0
  70. data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.svg +288 -0
  71. data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.ttf +0 -0
  72. data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.woff +0 -0
  73. data/app/assets/stylesheets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  74. data/app/assets/stylesheets/knitkit-web.css +16 -0
  75. data/app/assets/stylesheets/knitkit/bootstrap.min.css +5 -0
  76. data/app/assets/stylesheets/knitkit/captcha.css +59 -0
  77. data/app/assets/stylesheets/knitkit/custom.css +144 -0
  78. data/{public → app/assets}/stylesheets/knitkit/inline_editing.css +0 -0
  79. data/app/assets/stylesheets/knitkit/submenu.css +93 -0
  80. data/app/controllers/api/v1/websites_controller.rb +14 -0
  81. data/app/controllers/captcha_controller.rb +53 -0
  82. data/app/controllers/knitkit/base_controller.rb +1 -5
  83. data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +2 -9
  84. data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +20 -7
  85. data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +38 -28
  86. data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +16 -9
  87. data/app/controllers/knitkit/erp_app/desktop/online_document_sections_controller.rb +69 -15
  88. data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +45 -58
  89. data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +64 -29
  90. data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +36 -13
  91. data/app/controllers/knitkit/erp_app/desktop/website_host_controller.rb +12 -0
  92. data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +4 -11
  93. data/app/controllers/knitkit/erp_app/desktop/website_nav_item_controller.rb +2 -9
  94. data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +56 -20
  95. data/app/controllers/knitkit/online_document_sections_controller.rb +9 -3
  96. data/app/mailers/website_inquiry_mailer.rb +11 -3
  97. data/app/models/content.rb +16 -6
  98. data/app/models/documented_item.rb +12 -1
  99. data/app/models/online_document_section.rb +54 -20
  100. data/app/models/published_website.rb +16 -0
  101. data/app/models/theme.rb +53 -47
  102. data/app/models/website.rb +172 -191
  103. data/app/models/website_section.rb +64 -30
  104. data/app/views/knitkit/blogs/show.html.erb +5 -2
  105. data/app/views/layouts/knitkit/base.html.erb +54 -51
  106. data/app/views/menus/knitkit/_default_menu.html.erb +11 -11
  107. data/app/views/menus/knitkit/_default_section_menu.html.erb +2 -2
  108. data/app/views/menus/knitkit/_default_sub_menu.erb +27 -0
  109. data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +30 -0
  110. data/app/views/website_inquiry_mailer/inquiry.html.erb +266 -0
  111. data/app/widgets/contact_us/base.rb +26 -16
  112. data/app/widgets/contact_us/javascript/contact_us.js +1 -1
  113. data/app/widgets/contact_us/views/error.html.erb +7 -3
  114. data/app/widgets/contact_us/views/index.html.erb +36 -28
  115. data/app/widgets/google_map/javascript/google_map.js +1 -1
  116. data/app/widgets/google_map/views/index.html.erb +1 -1
  117. data/app/widgets/login/javascript/login.js +1 -1
  118. data/app/widgets/login/views/index.html.erb +1 -1
  119. data/app/widgets/manage_profile/base.rb +141 -112
  120. data/app/widgets/manage_profile/javascript/manage_profile.js +2 -2
  121. data/app/widgets/manage_profile/views/_password_form.html.erb +1 -1
  122. data/app/widgets/manage_profile/views/_user_information_form.html.erb +1 -30
  123. data/app/widgets/manage_profile/views/index.html.erb +42 -40
  124. data/app/widgets/reset_password/base.rb +39 -8
  125. data/app/widgets/reset_password/javascript/reset_password.js +1 -1
  126. data/app/widgets/reset_password/views/index.html.erb +3 -3
  127. data/app/widgets/reset_password/views/invalid_reset_token.html.erb +7 -0
  128. data/app/widgets/reset_password/views/layouts/base.html.erb +1 -1
  129. data/app/widgets/reset_password/views/reset_password.html.erb +39 -0
  130. data/app/widgets/reset_password/views/reset_success.html.erb +5 -0
  131. data/app/widgets/search/base.rb +5 -5
  132. data/app/widgets/search/javascript/search.js +6 -6
  133. data/app/widgets/search/views/_inline_search_form.html.erb +23 -12
  134. data/app/widgets/search/views/_search_form.html.erb +34 -30
  135. data/app/widgets/search/views/layouts/base.html.erb +6 -1
  136. data/app/widgets/signup/base.rb +73 -30
  137. data/app/widgets/signup/javascript/signup.js +1 -1
  138. data/app/widgets/signup/views/_signup_form.html.erb +2 -1
  139. data/app/widgets/signup/views/layouts/base.html.erb +1 -1
  140. data/app/widgets/signup/views/success.html.erb +2 -3
  141. data/config/routes.rb +25 -4
  142. data/db/data_migrations/20110509223702_add_publisher_role.rb +0 -2
  143. data/db/data_migrations/20110816153456_add_knitkit_application.rb +7 -15
  144. data/db/data_migrations/20120127150505_create_website_default_configuration.rb +63 -3
  145. data/db/data_migrations/20150118180450_add_website_member_roles.rb +12 -0
  146. data/db/data_migrations/20150414150359_nest_knitkit_security_roles.rb +35 -0
  147. data/db/data_migrations/20150414173437_move_website_roles_under_website_builder.rb +19 -0
  148. data/db/migrate/20110211002317_setup_knitkit.rb +86 -39
  149. data/lib/knitkit.rb +8 -2
  150. data/lib/knitkit/config.rb +2 -3
  151. data/lib/knitkit/engine.rb +35 -4
  152. data/lib/knitkit/extensions.rb +2 -1
  153. data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +1 -1
  154. data/lib/knitkit/extensions/action_mailer/theme_support/acts_as_themed_mailer.rb +1 -1
  155. data/lib/knitkit/extensions/compass_ae/mailers/user_mailer.rb +31 -0
  156. data/lib/knitkit/extensions/compass_ae/widgets/base.rb +1 -1
  157. data/lib/knitkit/extensions/railties/action_controller/captcha_helper.rb +43 -0
  158. data/lib/knitkit/extensions/railties/action_view/helpers/content_helper.rb +1 -1
  159. data/lib/knitkit/extensions/railties/action_view/helpers/menu_helper.rb +11 -1
  160. data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +83 -0
  161. data/lib/knitkit/routing_filter/section_router.rb +24 -14
  162. data/lib/knitkit/version.rb +1 -1
  163. data/lib/tasks/knitkit_tasks.rake +89 -4
  164. data/lib/tasks/theme_parser.rake +85 -0
  165. data/public/fonts/glyphicons-halflings-regular.eot +0 -0
  166. data/public/fonts/glyphicons-halflings-regular.svg +288 -0
  167. data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  168. data/public/fonts/glyphicons-halflings-regular.woff +0 -0
  169. data/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
  170. data/public/paypal-button.min.js +7 -0
  171. metadata +161 -82
  172. data/app/assets/javascripts/knitkit/application.js +0 -9
  173. data/app/assets/stylesheets/knitkit/application.css +0 -7
  174. data/app/mailers/document_mailer.rb +0 -10
  175. data/app/views/document_mailer/email_document.html.erb +0 -12
  176. data/app/views/knitkit/mobile/index.html.erb +0 -162
  177. data/app/views/knitkit/online_document_sections/index.html.erb +0 -279
  178. data/app/views/layouts/knitkit/online_document_sections.html.erb +0 -80
  179. data/app/views/website_inquiry_mailer/inquiry.erb +0 -24
  180. data/db/data_migrations/20120127150506_add_primary_host_to_website_configuration.rb +0 -33
  181. data/db/data_migrations/20120316150424_add_is_template_to_default_website_config.rb +0 -16
  182. data/db/data_migrations/20120809020508_update_website_and_configuration.rb +0 -82
  183. data/db/data_migrations/20121129185611_upgrade_website_role_iid.rb +0 -20
  184. data/db/migrate/20130405184234_add_use_markdown_to_section.rb +0 -19
  185. data/db/migrate/20131112013052_add_knitkit_missing_indexes.rb +0 -33
  186. data/db/migrate/20140622212723_update_website_inquiries.rb +0 -22
  187. data/db/migrate/20140911185022_add_publishing_to_website.rb +0 -5
  188. data/db/migrate/20141013073349_add_custom_fields_to_documents.rb +0 -12
  189. data/db/migrate/20141016101936_upgrade_remove_dynamic_attributes.rb +0 -13
  190. data/lib/knitkit/extensions/railties/theme_support/theme_file_resolver.rb +0 -49
  191. data/public/images/knitkit/close_window.png +0 -0
  192. data/public/images/knitkit/splash/splash.png +0 -0
  193. data/public/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +0 -215
  194. data/public/javascripts/erp_app/desktop/applications/knitkit/select_roles_window.js +0 -108
  195. data/public/javascripts/erp_app/desktop/applications/knitkit/splash_screen.js +0 -170
  196. data/public/javascripts/knitkit/bootstrap-datepicker.js +0 -474
  197. data/public/javascripts/knitkit/bootstrap.min.js +0 -7
  198. data/public/javascripts/knitkit/mobile/app/view/Main.js +0 -108
  199. data/public/javascripts/knitkit/mobile/ux/slidenavigation/View.js +0 -734
  200. data/public/stylesheets/knitkit/bootstrap-responsive.min.css +0 -10
  201. data/public/stylesheets/knitkit/bootstrap.min.css +0 -7
  202. data/public/stylesheets/knitkit/custom.css +0 -122
  203. data/public/stylesheets/knitkit/datepicker.css +0 -182
@@ -26,6 +26,11 @@ module Knitkit
26
26
  begin
27
27
  current_user.with_capability('create', 'WebsiteHost') do
28
28
  website = Website.find(params[:website_id])
29
+ existing_website_host = WebsiteHost.find_by_host(params[:host])
30
+ if existing_website_host
31
+ website_name = existing_website_host.website.name
32
+ raise "Host #{existing_website_host.host} already used by #{website_name}"
33
+ end
29
34
  website_host = WebsiteHost.create(:host => params[:host])
30
35
  website.hosts << website_host
31
36
  website.save
@@ -51,6 +56,11 @@ module Knitkit
51
56
  begin
52
57
  current_user.with_capability('edit', 'WebsiteHost') do
53
58
  website_host = WebsiteHost.find(params[:id])
59
+ existing_website_host = WebsiteHost.find_by_host(params[:host])
60
+ if existing_website_host
61
+ website_name = existing_website_host.website.name
62
+ raise "Host #{existing_website_host.host} already used by #{website_name}"
63
+ end
54
64
  website_host.host = params[:host]
55
65
  website_host.save
56
66
 
@@ -58,6 +68,8 @@ module Knitkit
58
68
  end
59
69
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
60
70
  render :json => {:success => false, :message => ex.message}
71
+ rescue => ex
72
+ render :json => {:success => false, :message => ex.message}
61
73
  end
62
74
  end
63
75
 
@@ -11,7 +11,7 @@ module Knitkit
11
11
  if @website
12
12
  @website.website_navs.each do |website_nav|
13
13
  menu_hash = {:text => website_nav.name, :websiteNavId => website_nav.id, :canAddMenuItems => true,
14
- :iconCls => 'icon-index', :isWebsiteNav => true, :leaf => false, :children => []}
14
+ :iconCls => 'icon-folder', :isWebsiteNav => true, :leaf => false, :children => []}
15
15
 
16
16
  menu_hash[:children] = website_nav.website_nav_items.positioned.map { |item| build_menu_item_hash(item) }
17
17
 
@@ -35,7 +35,7 @@ module Knitkit
35
35
  result[:success] = true
36
36
  result[:node] = {:text => params[:name],
37
37
  :websiteNavId => website_nav.id,
38
- :iconCls => 'icon-index',
38
+ :iconCls => 'icon-folder',
39
39
  :canAddMenuItems => true,
40
40
  :isWebsiteNav => true,
41
41
  :leaf => false,
@@ -186,16 +186,9 @@ module Knitkit
186
186
  if current_user.has_capability?('secure', 'WebsiteNavItem') or current_user.has_capability?('unsecure', 'WebsiteNavItem')
187
187
  website_nav_item = WebsiteNavItem.find(params[:id])
188
188
 
189
- roles = []
189
+ roles = JSON.parse(params[:security])
190
190
 
191
- #get roles
192
- params.each do |k, v|
193
- if v == 'on'
194
- roles.push(k)
195
- end
196
- end
197
-
198
- if roles.empty?
191
+ if roles.blank? || roles.empty?
199
192
  website_nav_item.remove_capability(:view)
200
193
  else
201
194
  capability = website_nav_item.add_capability(:view)
@@ -115,16 +115,9 @@ module Knitkit
115
115
  if current_user.has_capability?('secure', 'WebsiteNavItem') or current_user.has_capability?('unsecure', 'WebsiteNavItem')
116
116
  website_nav_item = WebsiteNavItem.find(params[:id])
117
117
 
118
- roles = []
118
+ roles = JSON.parse(params[:security])
119
119
 
120
- #get roles
121
- params.each do |k, v|
122
- if v == 'on'
123
- roles.push(k)
124
- end
125
- end
126
-
127
- if roles.empty?
120
+ if roles.blank? || roles.empty?
128
121
  website_nav_item.remove_capability(:view)
129
122
  else
130
123
  capability = website_nav_item.add_capability(:view)
@@ -19,6 +19,7 @@ module Knitkit
19
19
  result = {:success => false, :message => 'Blog can not be the title of a Blog'}
20
20
  else
21
21
  website_section = WebsiteSection.new
22
+ website_section.parent_id = params[:website_section_id] if params[:website_section_id]
22
23
  website_section.website_id = @website.id
23
24
  website_section.in_menu = params[:in_menu] == 'yes'
24
25
  website_section.title = params[:title]
@@ -34,8 +35,11 @@ module Knitkit
34
35
  end
35
36
 
36
37
  if params[:type] == "OnlineDocumentSection"
37
- documented_content = DocumentedContent.create(:title => website_section.title, :created_by => current_user, :body_html => website_section.title)
38
- DocumentedItem.create(:documented_content_id => documented_content.id, :online_document_section_id => website_section.id)
38
+ documented_content = DocumentedContent.create(:title => website_section.title,
39
+ :created_by => current_user,
40
+ :body_html => website_section.title)
41
+ DocumentedItem.create(:documented_content_id => documented_content.id,
42
+ :online_document_section_id => website_section.id)
39
43
  end
40
44
 
41
45
  website_section.update_path!
@@ -52,9 +56,11 @@ module Knitkit
52
56
  end
53
57
  end
54
58
  rescue => ex
55
- # TODO send error notification
56
59
  Rails.logger.error ex.message
57
60
  Rails.logger.error ex.backtrace.join("\n")
61
+
62
+ ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
63
+
58
64
  result = {:success => false, :message => 'Could not create Section'}
59
65
  end
60
66
 
@@ -65,17 +71,46 @@ module Knitkit
65
71
  end
66
72
  end
67
73
 
74
+ def copy
75
+ begin
76
+
77
+ @website = Website.find(params[:website_id])
78
+ parent_section = WebsiteSection.where('id = ?', params[:parent_section_id]).first
79
+ section_to_copy = WebsiteSection.find(params[:id])
80
+
81
+ new_section = section_to_copy.copy(params[:title].strip, true, true)
82
+
83
+ if parent_section
84
+ new_section.move_to_child_of(parent_section)
85
+ new_section.save
86
+ end
87
+
88
+ # update all children paths after all are saved.
89
+ new_section.self_and_descendants.each do |section|
90
+ section.update_path!
91
+ end
92
+
93
+ result = {:success => true, :parentNodeId => params[:parent_section_id], :node => build_section_hash(new_section)}
94
+
95
+ rescue => ex
96
+ # TODO send error notification
97
+ Rails.logger.error ex.message
98
+ Rails.logger.error ex.backtrace.join("\n")
99
+
100
+ ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
101
+
102
+ result = {:success => false, :message => 'Could not copy Section'}
103
+ end
104
+
105
+ render :json => result
106
+ end
107
+
68
108
  def delete
69
109
  begin
70
110
  ActiveRecord::Base.transaction do
71
111
  current_user.with_capability('delete', 'WebsiteSection') do
72
112
  section = WebsiteSection.find(params[:id])
73
113
 
74
- # we need to remove any content related to this section if it is an OnlineDocumentSection
75
- if section.type == 'OnlineDocumentSection'
76
- section.website_section_contents.destroy_all
77
- end
78
-
79
114
  render :json => section.destroy ? {:success => true} : {:success => false}
80
115
  end
81
116
  end
@@ -91,16 +126,9 @@ module Knitkit
91
126
 
92
127
  def update_security
93
128
  if current_user.has_capability?('secure', 'WebsiteSection') or current_user.has_capability?('unsecure', 'WebsiteSection')
94
- roles = []
129
+ roles = JSON.parse(params[:security])
95
130
 
96
- #get roles
97
- params.each do |k, v|
98
- if v == 'on'
99
- roles.push(k)
100
- end
101
- end
102
-
103
- if roles.empty?
131
+ if roles.blank? || roles.empty?
104
132
  @website_section.remove_capability(:view)
105
133
  else
106
134
  capability = @website_section.add_capability(:view)
@@ -201,7 +229,9 @@ module Knitkit
201
229
 
202
230
  def available_articles_filter
203
231
  menu = []
204
- websites = Website.all
232
+ websites = Website.joins(:website_party_roles)
233
+ .where('website_party_roles.party_id = ?', current_user.party.dba_organization.id)
234
+ .where('website_party_roles.role_type_id = ?', RoleType.iid('dba_org')).all
205
235
  all_articles = [{:name => 'All Articles', :id => 0}]
206
236
  orphaned_articles = [{:name => 'Orphaned Articles Only', :id => -1}]
207
237
 
@@ -220,7 +250,8 @@ module Knitkit
220
250
  current_articles = Article.joins(:website_section_contents).where("website_section_id = #{params[:section_id]}").all
221
251
 
222
252
  # Defaults to retrieving all articles
223
- available_articles = Article.order('LOWER(contents.internal_identifier) ASC')
253
+ available_articles = Article.with_party_role(current_user.party.dba_organization,
254
+ RoleType.iid('dba_org')).order('LOWER(contents.internal_identifier) ASC')
224
255
 
225
256
  # Orphaned Articles
226
257
  if !website_id.blank? and website_id.to_i == -1
@@ -244,7 +275,12 @@ module Knitkit
244
275
  "#{self.title} - #{self.path}"
245
276
  end
246
277
  end
247
- render :inline => website.sections.to_json(:only => [:id], :methods => [:title_permalink])
278
+
279
+ if params[:exclude_document_sections].present?
280
+ render :inline => website.sections.where('type is null').to_json(:only => [:id], :methods => [:title_permalink])
281
+ else
282
+ render :inline => website.sections.to_json(:only => [:id], :methods => [:title_permalink])
283
+ end
248
284
  end
249
285
 
250
286
  protected
@@ -9,7 +9,13 @@ module Knitkit
9
9
 
10
10
  def index
11
11
  @online_document = OnlineDocumentSection.find(params[:section_id])
12
+ end
13
+
14
+ def show
15
+ @online_document = OnlineDocumentSection.find(params[:section_id])
12
16
  @online_document = nil if @online_document.id == find_root.id
17
+
18
+ render :show, :layout => false
13
19
  end
14
20
 
15
21
  def search
@@ -31,8 +37,7 @@ module Knitkit
31
37
  end
32
38
 
33
39
  def get_content
34
- document_section = OnlineDocumentSection.where(:internal_identifier => params[:document_section_id])
35
- .where(:website_id => @website.id).first
40
+ document_section = OnlineDocumentSection.find(params[:document_section_id])
36
41
  content = document_section.documented_item_published_content(@active_publication) unless @active_publication.nil?
37
42
  content = document_section.documented_item.content if @active_publication.nil? or content.nil?
38
43
 
@@ -56,7 +61,8 @@ module Knitkit
56
61
  end
57
62
 
58
63
  def build_document_hash(document_section)
59
- {:id => document_section.internal_identifier,
64
+ {:id => document_section.id,
65
+ :internalIdentifier => document_section.internal_identifier,
60
66
  :title => document_section.title,
61
67
  :leaf => document_section.leaf,
62
68
  :iconCls => (document_section.leaf ? 'icon-documentation-document' : 'icon-documentation-multi-document'),
@@ -1,11 +1,19 @@
1
+
1
2
  class WebsiteInquiryMailer < ActionMailer::Base
3
+ acts_as_themed_mailer
4
+
5
+ default :from => ErpTechSvcs::Config.email_notifications_from
6
+
7
+ def inquiry(website_inquiry, dba_organization=nil)
8
+ # add theme paths if a website is present
9
+ if website_inquiry.website
10
+ add_theme_view_paths(website_inquiry.website)
11
+ end
2
12
 
3
- def inquiry(website_inquiry)
4
13
  subject = "#{website_inquiry.website.title} Inquiry"
5
14
  @website_inquiry = website_inquiry
6
-
15
+
7
16
  mail(:to => website_inquiry.website.configurations.first.get_item(ConfigurationItemType.find_by_internal_identifier('contact_us_email_address')).options.first.value,
8
- :from => website_inquiry.email,
9
17
  :subject => subject,
10
18
  :content_type => 'text/html'
11
19
  )
@@ -3,6 +3,8 @@ require 'will_paginate/array'
3
3
  class Content < ActiveRecord::Base
4
4
  attr_protected :created_at, :updated_at
5
5
 
6
+ has_party_roles
7
+
6
8
  extend FriendlyId
7
9
  friendly_id :title, :use => [:slugged], :slug_column => :permalink
8
10
 
@@ -14,7 +16,16 @@ class Content < ActiveRecord::Base
14
16
 
15
17
  acts_as_taggable
16
18
  acts_as_commentable
17
- acts_as_versioned :table_name => :content_versions
19
+ acts_as_versioned :table_name => :content_versions do
20
+ def excerpt_html
21
+ if attributes['excerpt_html'].blank?
22
+ HTML_Truncator.truncate(attributes['body_html'], 25)
23
+ else
24
+ attributes['excerpt_html']
25
+ end
26
+ end
27
+ end
28
+
18
29
  can_be_published
19
30
 
20
31
  has_many :website_section_contents, :dependent => :destroy
@@ -45,7 +56,7 @@ class Content < ActiveRecord::Base
45
56
  end
46
57
 
47
58
  predicate = predicate.where("(UPPER(contents.title) LIKE UPPER('%#{options[:query]}%')
48
- OR UPPER(contents.excerpt_html) LIKE UPPER('%#{options[:query]}%')
59
+ OR UPPER(contents.excerpt_html) LIKE UPPER('%#{options[:query]}%')
49
60
  OR UPPER(contents.body_html) LIKE UPPER('%#{options[:query]}%') )").order("contents.created_at DESC")
50
61
 
51
62
  if options[:page]
@@ -68,11 +79,11 @@ class Content < ActiveRecord::Base
68
79
  end
69
80
 
70
81
  def self.find_by_section_id(website_section_id)
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
82
+ Content.joins(:website_section_contents).where('website_section_id = ?', website_section_id).order("website_section_contents.position ASC, website_section_contents.created_at DESC")
72
83
  end
73
84
 
74
85
  def self.find_by_section_id_filtered_by_id(website_section_id, id_filter_list)
75
- Content.joins(:website_section_contents).where("website_section_id = ? AND contents.id IN (#{id_filter_list.join(',')})", website_section_id).all
86
+ Content.joins(:website_section_contents).where("website_section_id = ? AND contents.id IN (#{id_filter_list.join(',')})", website_section_id)
76
87
  end
77
88
 
78
89
  def self.find_published_by_section(active_publication, website_section)
@@ -103,8 +114,7 @@ class Content < ActiveRecord::Base
103
114
  end
104
115
 
105
116
  def position(website_section_id)
106
- position = self.website_section_contents.find_by_website_section_id(website_section_id).position
107
- position
117
+ self.website_section_contents.find_by_website_section_id(website_section_id).position
108
118
  end
109
119
 
110
120
  def get_comments(limit)
@@ -2,7 +2,9 @@ class DocumentedItem < ActiveRecord::Base
2
2
  attr_protected :created_at, :updated_at
3
3
 
4
4
  belongs_to :online_document_section
5
-
5
+
6
+ before_destroy :destroy_content
7
+
6
8
  def content
7
9
  if content?
8
10
  Content.find(documented_content_id)
@@ -30,4 +32,13 @@ class DocumentedItem < ActiveRecord::Base
30
32
  def self.find_by_section_id( website_section_id )
31
33
  DocumentedItem.where(["online_document_section_id = ?", website_section_id]).first
32
34
  end
35
+
36
+ private
37
+
38
+ def destroy_content
39
+ if content?
40
+ Content.find(documented_content_id).destroy
41
+ end
42
+ end
43
+
33
44
  end
@@ -8,32 +8,66 @@ class OnlineDocumentSection < WebsiteSection
8
8
  rescue
9
9
  nil
10
10
  end
11
-
11
+
12
12
  def documented_item_published_content_html(active_publication)
13
13
  documented_item_published_content(active_publication).body_html
14
14
  rescue
15
15
  nil
16
16
  end
17
-
17
+
18
+ def copy(title=nil, copy_children=false, created_by=nil)
19
+ new_section = OnlineDocumentSection.new
20
+
21
+ new_section.title = title.nil? ? self.title : title
22
+ new_section.layout = self.layout
23
+ new_section.in_menu = self.in_menu
24
+ new_section.use_markdown = self.use_markdown
25
+ new_section.render_base_layout = self.render_base_layout
26
+ new_section.website_id = self.website_id
27
+
28
+ new_section.save!
29
+
30
+ # copy documented content
31
+ documented_item = DocumentedItem.where('online_document_section_id = ?', self.id).first
32
+ documented_content = DocumentedContent.find(documented_item.documented_content_id)
33
+ new_documented_content = documented_content.dup
34
+
35
+ # clear out internal identifier
36
+ new_documented_content.internal_identifier = nil
37
+
38
+ new_documented_content.created_by = created_by
39
+ new_documented_content.save!
40
+ DocumentedItem.create!(:documented_content_id => new_documented_content.id, :online_document_section_id => new_section.id)
41
+
42
+ if copy_children
43
+ self.children.each do |child_section|
44
+ new_child_section = child_section.copy(nil, copy_children, created_by)
45
+ new_child_section.move_to_child_of(new_section)
46
+ end
47
+ end
48
+
49
+ new_section
50
+ end
51
+
18
52
  def build_section_hash
19
- section_hash = {
20
- :name => self.title,
21
- :has_layout => false,
22
- :use_markdown => self.use_markdown,
23
- :type => self.class.to_s,
24
- :in_menu => self.in_menu,
25
- :path => self.path,
26
- :permalink => self.permalink,
27
- :internal_identifier => self.internal_identifier,
28
- :position => self.position,
29
- :online_document_sections => self.children.each.map{|child| child.build_section_hash},
30
- :articles => [],
31
- :documented_item => {
32
- :name => documented_item_content.title,
33
- :display_title => documented_item_content.display_title,
34
- :internal_identifier => documented_item_content.internal_identifier
35
- }
53
+ {
54
+ :name => self.title,
55
+ :has_layout => false,
56
+ :use_markdown => self.use_markdown,
57
+ :type => self.class.to_s,
58
+ :in_menu => self.in_menu,
59
+ :path => self.path,
60
+ :permalink => self.permalink,
61
+ :internal_identifier => self.internal_identifier,
62
+ :position => self.position,
63
+ :online_document_sections => self.children.each.map { |child| child.build_section_hash },
64
+ :articles => [],
65
+ :documented_item => {
66
+ :name => documented_item_content.title,
67
+ :display_title => documented_item_content.display_title,
68
+ :internal_identifier => documented_item_content.internal_identifier
69
+ }
36
70
  }
37
- section_hash
38
71
  end
72
+
39
73
  end