knitkit 2.0.0 → 2.0.1

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 (185) hide show
  1. data/README.md +22 -0
  2. data/app/controllers/knitkit/base_controller.rb +15 -2
  3. data/app/controllers/knitkit/blogs_controller.rb +4 -4
  4. data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +16 -2
  5. data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +198 -57
  6. data/app/controllers/knitkit/erp_app/desktop/content_controller.rb +25 -11
  7. data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +123 -44
  8. data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +83 -9
  9. data/app/controllers/knitkit/erp_app/desktop/online_document_sections_controller.rb +38 -0
  10. data/app/controllers/knitkit/erp_app/desktop/position_controller.rb +15 -6
  11. data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +185 -98
  12. data/app/controllers/knitkit/erp_app/desktop/versions_controller.rb +38 -16
  13. data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +126 -68
  14. data/app/controllers/knitkit/erp_app/desktop/website_nav_controller.rb +154 -107
  15. data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +113 -54
  16. data/app/controllers/knitkit/online_document_sections_controller.rb +45 -0
  17. data/app/controllers/knitkit/unauthorized_controller.rb +5 -0
  18. data/app/controllers/knitkit/website_sections_controller.rb +8 -9
  19. data/app/mailers/document_mailer.rb +10 -0
  20. data/app/models/article.rb +1 -1
  21. data/app/models/content.rb +35 -3
  22. data/app/models/document.rb +8 -0
  23. data/app/models/document_type.rb +3 -0
  24. data/app/models/documented_content.rb +29 -0
  25. data/app/models/documented_item.rb +31 -0
  26. data/app/models/extensions/configuration.rb +5 -0
  27. data/app/models/extensions/party.rb +13 -0
  28. data/app/models/online_document_section.rb +40 -0
  29. data/app/models/theme.rb +22 -26
  30. data/app/models/valid_document.rb +4 -0
  31. data/app/models/website.rb +158 -119
  32. data/app/models/website_inquiry.rb +7 -2
  33. data/app/models/website_inquiry_mailer.rb +4 -3
  34. data/app/models/website_party_role.rb +5 -0
  35. data/app/models/website_section.rb +76 -38
  36. data/app/views/document_mailer/email_document.html.erb +12 -0
  37. data/app/views/knitkit/blogs/_add_comment.html.erb +2 -2
  38. data/app/views/knitkit/online_document_sections/index.html.erb +149 -0
  39. data/app/views/knitkit/website_sections/index.html.erb +0 -1
  40. data/app/views/layouts/knitkit/base.html.erb +4 -2
  41. data/app/views/layouts/knitkit/online_document_sections.html.erb +59 -0
  42. data/app/views/menus/knitkit/_default_menu.html.erb +1 -1
  43. data/app/views/menus/knitkit/_default_section_menu.html.erb +1 -1
  44. data/app/views/menus/knitkit/_default_sub_menu.html.erb +2 -2
  45. data/app/views/menus/knitkit/_default_sub_section_menu.html.erb +1 -1
  46. data/app/widgets/contact_us/base.rb +5 -5
  47. data/app/widgets/contact_us/javascript/contact_us.js +2 -1
  48. data/app/widgets/google_map/base.rb +0 -4
  49. data/app/widgets/google_map/javascript/google_map.js +4 -3
  50. data/app/widgets/login/base.rb +0 -5
  51. data/app/widgets/login/javascript/login.js +155 -153
  52. data/app/widgets/login/views/index.html.erb +3 -3
  53. data/app/widgets/login/views/reset_password.html.erb +2 -2
  54. data/app/widgets/manage_profile/base.rb +46 -67
  55. data/app/widgets/manage_profile/javascript/manage_profile.js +2 -1
  56. data/app/widgets/manage_profile/views/_user_information_form.html.erb +5 -1
  57. data/app/widgets/reset_password/base.rb +4 -6
  58. data/app/widgets/reset_password/javascript/reset_password.js +2 -1
  59. data/app/widgets/reset_password/views/index.html.erb +4 -3
  60. data/app/widgets/search/base.rb +1 -5
  61. data/app/widgets/search/javascript/search.js +2 -1
  62. data/app/widgets/search/views/show.html.erb +2 -2
  63. data/app/widgets/signup/base.rb +7 -6
  64. data/app/widgets/signup/javascript/signup.js +2 -1
  65. data/app/widgets/signup/views/error.html.erb +1 -1
  66. data/config/routes.rb +6 -2
  67. data/db/data_migrations/20110509223702_add_publisher_role.rb +10 -0
  68. data/db/data_migrations/20111118182910_setup_knitkit_capabilities.rb +84 -0
  69. data/db/data_migrations/20120127144444_create_website_role_types.rb +13 -0
  70. data/db/data_migrations/20120127150505_create_website_default_configuration.rb +72 -0
  71. data/db/data_migrations/20120127150506_add_primary_host_to_website_configuration.rb +33 -0
  72. data/db/data_migrations/20120316150424_add_is_template_to_default_website_config.rb +16 -0
  73. data/db/data_migrations/upgrade/20120210195616_add_website_configs.rb +19 -0
  74. data/db/data_migrations/upgrade/20120213205519_populate_website_iids.rb +17 -0
  75. data/db/migrate/20110211002317_setup_knitkit.rb +22 -5
  76. data/db/migrate/20111207161928_create_documented_items_table.rb +13 -0
  77. data/db/migrate/20111208180539_add_document_id_to_documented_item.rb +9 -0
  78. data/db/migrate/20120315163736_add_document.rb +32 -0
  79. data/db/migrate/20120503183431_create_valid_documents.rb +16 -0
  80. data/db/migrate/upgrade/20120116201510_add_render_base_layout_flag.rb +13 -0
  81. data/db/migrate/upgrade/20120127143745_create_website_party_roles.rb +24 -0
  82. data/db/migrate/upgrade/20120213184509_add_iid_to_websites.rb +14 -0
  83. data/lib/knitkit.rb +2 -0
  84. data/lib/knitkit/config.rb +31 -0
  85. data/lib/knitkit/engine.rb +12 -3
  86. data/lib/knitkit/extensions.rb +1 -3
  87. data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +2 -3
  88. data/lib/knitkit/extensions/active_record/acts_as_document.rb +63 -0
  89. data/lib/knitkit/extensions/active_record/acts_as_publishable.rb +5 -4
  90. data/lib/knitkit/extensions/compass_ae/widgets/base.rb +70 -0
  91. data/lib/knitkit/extensions/railties/action_view.rb +22 -10
  92. data/lib/knitkit/extensions/railties/theme_support/asset_tag_helper.rb +3 -3
  93. data/lib/knitkit/extensions/railties/theme_support/theme_file_resolver.rb +8 -3
  94. data/lib/knitkit/routing_filter/section_router.rb +16 -6
  95. data/lib/knitkit/version.rb +7 -1
  96. data/public/images/check.png +0 -0
  97. data/public/images/credit_card.png +0 -0
  98. data/public/images/knitkit/tooltip.gif +0 -0
  99. data/public/javascripts/ajax_pagination.js +33 -0
  100. data/public/javascripts/datepicker.js +6 -1
  101. data/public/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +731 -258
  102. data/public/javascripts/erp_app/desktop/applications/knitkit/center_region.js +289 -238
  103. data/public/javascripts/erp_app/desktop/applications/knitkit/comments_grid_panel.js +2 -4
  104. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region.js +29 -3
  105. data/public/javascripts/erp_app/desktop/applications/knitkit/file_assets_panel.js +193 -21
  106. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_data_view.js +27 -26
  107. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_panel.js +167 -20
  108. data/public/javascripts/erp_app/desktop/applications/knitkit/inquiries_grid_panel.js +1 -2
  109. data/public/javascripts/erp_app/desktop/applications/knitkit/module.js +5 -1
  110. data/public/javascripts/erp_app/desktop/applications/knitkit/publish_window.js +2 -2
  111. data/public/javascripts/erp_app/desktop/applications/knitkit/published_grid_panel.js +20 -11
  112. data/public/javascripts/erp_app/desktop/applications/knitkit/section_articles_grid_panel.js +279 -228
  113. data/public/javascripts/erp_app/desktop/applications/knitkit/themes_tree_panel.js +40 -40
  114. data/public/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +83 -76
  115. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region.js +1961 -1397
  116. data/public/javascripts/erp_app/desktop/applications/knitkit/widgets_panel.js +47 -43
  117. data/public/javascripts/knitkit/helpers.js +26 -0
  118. data/public/stylesheets/erp_app/desktop/applications/knitkit/knitkit.css +1 -2
  119. data/public/stylesheets/knitkit/documentation.css +50 -0
  120. data/public/stylesheets/knitkit/style.css +23 -1
  121. data/spec/controllers/knitkit/erp_app/desktop/articles_controller_spec.rb +8 -0
  122. data/spec/controllers/knitkit/erp_app/desktop/website_controller_spec.rb +396 -0
  123. data/spec/controllers/knitkit/erp_app/desktop/website_nav_controller_spec.rb +260 -0
  124. data/spec/controllers/knitkit/erp_app/desktop/website_section_controller_spec.rb +222 -0
  125. data/spec/dummy/Rakefile +7 -0
  126. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  127. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  128. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  129. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  130. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  131. data/spec/dummy/config.ru +4 -0
  132. data/spec/dummy/config/application.rb +43 -0
  133. data/spec/dummy/config/boot.rb +10 -0
  134. data/spec/dummy/config/database.yml +8 -0
  135. data/spec/dummy/config/environment.rb +5 -0
  136. data/spec/dummy/config/environments/spec.rb +27 -0
  137. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  138. data/spec/dummy/config/initializers/inflections.rb +10 -0
  139. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  140. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  141. data/spec/dummy/config/initializers/session_store.rb +8 -0
  142. data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
  143. data/spec/dummy/config/locales/en.yml +5 -0
  144. data/spec/dummy/config/routes.rb +4 -0
  145. data/spec/dummy/config/workflow.yml +1 -0
  146. data/spec/dummy/public/404.html +26 -0
  147. data/spec/dummy/public/422.html +26 -0
  148. data/spec/dummy/public/500.html +26 -0
  149. data/spec/dummy/public/favicon.ico +0 -0
  150. data/spec/dummy/script/rails +6 -0
  151. data/spec/factories/article.rb +4 -0
  152. data/spec/factories/basic.rb +3 -0
  153. data/spec/factories/blog.rb +5 -0
  154. data/spec/factories/documented_content.rb +4 -0
  155. data/spec/factories/documented_item.rb +4 -0
  156. data/spec/factories/online_document_section.rb +6 -0
  157. data/spec/factories/published_website.rb +4 -0
  158. data/spec/factories/theme.rb +6 -0
  159. data/spec/factories/website.rb +5 -0
  160. data/spec/factories/website_host.rb +4 -0
  161. data/spec/factories/website_nav.rb +5 -0
  162. data/spec/factories/website_nav_item.rb +4 -0
  163. data/spec/factories/website_section.rb +5 -0
  164. data/spec/models/article_spec.rb +35 -0
  165. data/spec/models/attribute_type_spec.rb +55 -0
  166. data/spec/models/attribute_value_spec.rb +114 -0
  167. data/spec/models/blog_spec.rb +16 -0
  168. data/spec/models/comment_spec.rb +11 -0
  169. data/spec/models/content_spec.rb +187 -0
  170. data/spec/models/documented_item_spec.rb +29 -0
  171. data/spec/models/online_document_section_spec.rb +34 -0
  172. data/spec/models/published_element_spec.rb +11 -0
  173. data/spec/models/published_website_spec.rb +11 -0
  174. data/spec/models/theme_spec.rb +12 -0
  175. data/spec/models/website_host_spec.rb +11 -0
  176. data/spec/models/website_inquiry_spec.rb +24 -0
  177. data/spec/models/website_nav_item_spec.rb +11 -0
  178. data/spec/models/website_nav_spec.rb +11 -0
  179. data/spec/models/website_section_content_spec.rb +11 -0
  180. data/spec/models/website_section_spec.rb +49 -0
  181. data/spec/models/website_spec.rb +146 -0
  182. data/spec/spec_helper.rb +61 -0
  183. metadata +391 -154
  184. data/app/controllers/knitkit/articles_controller.rb +0 -7
  185. data/lib/knitkit/extensions/compass/widgets/base.rb +0 -53
@@ -2,94 +2,153 @@ module Knitkit
2
2
  module ErpApp
3
3
  module Desktop
4
4
  class WebsiteSectionController < Knitkit::ErpApp::Desktop::AppController
5
- before_filter :set_website_section, :only => [:update, :update_security, :add_layout, :get_layout, :save_layout]
5
+ before_filter :set_website_section, :only => [:detach_article, :update, :update_security, :add_layout, :get_layout, :save_layout]
6
6
 
7
7
  def new
8
- website = Website.find(params[:website_id])
9
- website_section = nil
8
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
9
+ begin
10
+ current_user.with_capability(model, 'create', 'Section') do
11
+ website = Website.find(params[:website_id])
12
+ website_section = nil
13
+
14
+ if params[:title].to_s.downcase == 'blog' && params[:type] == 'Blog'
15
+ result = {:success => false, :message => 'Blog can not be the title of a Blog'}
16
+ else
17
+ website_section = WebsiteSection.new
18
+ website_section.website_id = website.id
19
+ website_section.in_menu = params[:in_menu] == 'yes'
20
+ website_section.title = params[:title]
21
+ website_section.render_base_layout = params[:render_with_base_layout] == 'yes'
22
+ website_section.type = params[:type] unless params[:type] == 'Page'
23
+ website_section.internal_identifier = params[:internal_identifier]
24
+
25
+ if website_section.save
26
+ if params[:website_section_id]
27
+ parent_website_section = WebsiteSection.find(params[:website_section_id])
28
+ website_section.move_to_child_of(parent_website_section)
29
+ end
30
+
31
+ if params[:type] == "OnlineDocumentSection"
32
+ documented_content = DocumentedContent.create(:title => website_section.title, :created_by => current_user, :body_html => website_section.title)
33
+ DocumentedItem.create(:documented_content_id => documented_content.id, :online_document_section_id => website_section.id)
34
+ end
35
+
36
+ website_section.update_path!
37
+ result = {:success => true, :node => build_section_hash(website_section, website_section.website)}
38
+ else
39
+ message = "<ul>"
40
+ website_section.errors.collect do |e, m|
41
+ message << "<li>#{e} #{m}</li>"
42
+ end
43
+ message << "</ul>"
44
+ result = {:success => false, :message => message}
45
+ end
10
46
 
11
- if params[:title].to_s.downcase == 'blog' && params[:type] == 'Blog'
12
- result = {:success => false, :message => 'Blog can not be the title of a Blog'}
13
- else
14
- website_section = WebsiteSection.new
15
- website_section.website_id = website.id
16
- website_section.in_menu = params[:in_menu] == 'yes'
17
- website_section.title = params[:title]
18
- website_section.type = params[:type] unless params[:type] == 'Page'
19
- website_section.internal_identifier = params[:internal_identifier]
20
-
21
- if website_section.save
22
- if params[:website_section_id]
23
- parent_website_section = WebsiteSection.find(params[:website_section_id])
24
- website_section.move_to_child_of(parent_website_section)
25
- end
26
-
27
- website_section.update_path!
28
- result = {:success => true, :node => build_section_hash(website_section, website_section.website)}
29
- else
30
- message = "<ul>"
31
- website_section.errors.collect do |e, m|
32
- message << "<li>#{e} #{m}</li>"
33
47
  end
34
- message << "</ul>"
35
- result = {:success => false, :message => message}
36
- end
37
48
 
49
+ render :json => result
50
+ end
51
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
52
+ render :json => {:success => false, :message => ex.message}
38
53
  end
39
-
40
- render :json => result
41
54
  end
42
55
 
43
56
  def delete
44
- render :json => WebsiteSection.destroy(params[:id]) ? {:success => true} : {:success => false}
57
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
58
+ begin
59
+ current_user.with_capability(model, 'delete', 'Section') do
60
+ render :json => WebsiteSection.destroy(params[:id]) ? {:success => true} : {:success => false}
61
+ end
62
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
63
+ render :json => {:success => false, :message => ex.message}
64
+ end
65
+ end
66
+
67
+ def detach_article
68
+ success = WebsiteSectionContent.where(:website_section_id => @website_section.id, :content_id => params[:article_id]).first.destroy
69
+ render :json => success ? {:success => true} : {:success => false}
45
70
  end
46
71
 
47
72
  def update_security
48
- website = Website.find(params[:site_id])
49
- if(params[:secure] == "true")
50
- @website_section.add_role(website.role)
73
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
74
+ if current_user.has_capability?(model, 'secure', 'Section') or current_user.has_capability?(model, 'unsecure', 'Section')
75
+ website = Website.find(params[:site_id])
76
+ if(params[:secure] == "true")
77
+ @website_section.add_role(website.role)
78
+ else
79
+ @website_section.remove_role(website.role)
80
+ end
81
+
82
+ render :json => {:success => true}
51
83
  else
52
- @website_section.remove_role(website.role)
84
+ render :json => {:success => false, :message => "User does not have capability."}
53
85
  end
54
-
55
- render :json => {:success => true}
56
86
  end
57
87
 
58
88
  def update
59
- @website_section.in_menu = params[:in_menu] == 'yes'
60
- @website_section.title = params[:title]
61
- @website_section.internal_identifier = params[:internal_identifier]
89
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
90
+ begin
91
+ current_user.with_capability(model, 'edit', 'Section') do
92
+ @website_section.in_menu = params[:in_menu] == 'yes'
93
+ @website_section.title = params[:title]
94
+ @website_section.render_base_layout = params[:render_with_base_layout] == 'yes'
95
+ @website_section.internal_identifier = params[:internal_identifier]
62
96
 
63
- if @website_section.save
64
- render :json => {:success => true}
65
- else
66
- render :json => {:success => false}
97
+ if @website_section.save
98
+ render :json => {:success => true}
99
+ else
100
+ render :json => {:success => false}
101
+ end
102
+ end
103
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
104
+ render :json => {:success => false, :message => ex.message}
67
105
  end
68
106
  end
69
107
 
70
108
  def add_layout
71
- @website_section.create_layout
72
- render :json => {:success => true}
109
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
110
+ begin
111
+ current_user.with_capability(model, 'create', 'Layout') do
112
+ @website_section.create_layout
113
+ render :json => {:success => true}
114
+ end
115
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
116
+ render :json => {:success => false, :message => ex.message}
117
+ end
73
118
  end
74
119
 
75
120
  def get_layout
76
- render :text => @website_section.layout
121
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
122
+ begin
123
+ current_user.with_capability(model, 'edit', 'Layout') do
124
+ render :text => @website_section.layout
125
+ end
126
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
127
+ render :json => {:success => false, :message => ex.message}
128
+ end
77
129
  end
78
130
 
79
131
  def save_layout
80
- result = Knitkit::SyntaxValidator.validate_content(:erb, params[:content])
132
+ model = DesktopApplication.find_by_internal_identifier('knitkit')
133
+ begin
134
+ current_user.with_capability(model, 'edit', 'Layout') do
135
+ result = Knitkit::SyntaxValidator.validate_content(:erb, params[:content])
81
136
 
82
- unless result
83
- @website_section.layout = params[:content]
84
- render :json => @website_section.save ? {:success => true} : {:success => false}
85
- else
86
- render :json => {:success => false, :message => result}
137
+ unless result
138
+ @website_section.layout = params[:content]
139
+ render :json => @website_section.save ? {:success => true} : {:success => false}
140
+ else
141
+ render :json => {:success => false, :message => result}
142
+ end
143
+ end
144
+ rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
145
+ render :json => {:success => false, :message => ex.message}
87
146
  end
88
147
  end
89
148
 
90
149
  def available_articles
91
150
  current_articles = Article.joins("INNER JOIN website_section_contents ON website_section_contents.content_id = contents.id").where("website_section_id = #{params[:section_id]}").all
92
- available_articles = Article.all - current_articles
151
+ available_articles = Article.order('LOWER(internal_identifier) ASC').all - current_articles
93
152
 
94
153
  render :inline => "{\"articles\":#{available_articles.to_json(:only => [:internal_identifier, :id])}}"
95
154
  end
@@ -0,0 +1,45 @@
1
+ module Knitkit
2
+ class OnlineDocumentSectionsController < BaseController
3
+ layout 'knitkit/online_document_sections'
4
+
5
+ before_filter :find_root
6
+ before_filter :find_document_sections, :only => :build_tree
7
+
8
+ def index
9
+
10
+ end
11
+
12
+ def build_tree
13
+ render :inline => build_document_hash.to_json
14
+ end
15
+
16
+ protected
17
+
18
+ def id_or_node
19
+ (params[:node].to_i == 0) ? params[:section_id] : params[:node]
20
+ end
21
+
22
+ def find_root
23
+ @root = OnlineDocumentSection.find(params[:section_id])
24
+ if @root.documented_item_published_content(@active_publication)
25
+ @root_content = @root.documented_item_published_content(@active_publication).body_html
26
+ else
27
+ @root_content = ""
28
+ end
29
+ end
30
+
31
+ def find_document_sections
32
+ @document_sections = OnlineDocumentSection.find(id_or_node).positioned_children
33
+ end
34
+
35
+ def build_document_hash
36
+ [].tap do |documents|
37
+ @document_sections.each do |section|
38
+ documents << {:id => section.id, :title => section.title,
39
+ :leaf => section.leaf, :documented_item_published_content_html => section.documented_item_published_content_html(@active_publication)}
40
+ end
41
+ end
42
+ end
43
+
44
+ end
45
+ end
@@ -1,5 +1,10 @@
1
1
  module Knitkit
2
2
  class UnauthorizedController < BaseController
3
+
4
+ def index
5
+ @current_user = nil
6
+ end
7
+
3
8
  #no section to set
4
9
  def set_section
5
10
  return false
@@ -1,17 +1,16 @@
1
1
  module Knitkit
2
2
  class WebsiteSectionsController < BaseController
3
-
3
+
4
4
  def index
5
- if @website_section.has_access?(current_user)
6
- @contents = Article.find_published_by_section(@active_publication, @website_section)
7
- unless @website_section.layout.nil?
8
- layout = @website_section.get_published_layout(@active_publication)
9
- render :inline => layout, :layout => 'knitkit/base'
10
- end
5
+ @current_user = current_user
6
+ @contents = Article.find_published_by_section(@active_publication, @website_section)
7
+ layout = @website_section.get_published_layout(@active_publication)
8
+ unless layout.nil?
9
+ @website_section.render_base_layout? ? (render :inline => layout, :layout => 'knitkit/base') : (render :inline => layout)
11
10
  else
12
- redirect_to '/unauthorized'
11
+ @website_section.render_base_layout? ? (render) : (render :layout => false)
13
12
  end
14
13
  end
15
-
14
+
16
15
  end
17
16
  end
@@ -0,0 +1,10 @@
1
+ class DocumentMailer < ActionMailer::Base
2
+ default :from => ErpTechSvcs::Config.email_notifications_from
3
+
4
+ def email_document(to_email, document)
5
+ file = document.files.first
6
+ attachments[file.data_file_name] = document.files.first.get_contents
7
+
8
+ mail(:to => to_email, :subject => 'The Document You Requested')
9
+ end
10
+ end
@@ -10,5 +10,5 @@ class Article < Content
10
10
  def check_internal_indentifier
11
11
  self.internal_identifier = self.permalink if self.internal_identifier.blank?
12
12
  end
13
-
14
13
  end
14
+
@@ -5,6 +5,7 @@ class Content < ActiveRecord::Base
5
5
  acts_as_commentable
6
6
  acts_as_versioned :table_name => :content_versions
7
7
  can_be_published
8
+ has_relational_dynamic_attributes
8
9
 
9
10
  has_many :website_section_contents, :dependent => :destroy
10
11
  has_many :website_sections, :through => :website_section_contents
@@ -91,7 +92,7 @@ class Content < ActiveRecord::Base
91
92
  end
92
93
 
93
94
  def get_comments(limit)
94
- self.commentable.comments.recent.limit(limit).all
95
+ self.comments.recent.limit(limit).all
95
96
  end
96
97
 
97
98
  def update_content_area_and_position_by_section(section, content_area, position)
@@ -119,6 +120,37 @@ class Content < ActiveRecord::Base
119
120
  position
120
121
  end
121
122
 
123
+ def assign_attribute_on_save
124
+ super
125
+
126
+ Article.find_by_internal_identifier(self.internal_identifier) ? attribute_type_description = "updated_by_role" : attribute_type_description = "created_by_role"
127
+
128
+ if attribute_type_description == "created_by_role"
129
+ user = self.created_by
130
+ else
131
+ user = User.find(self.versions.sort_by {|version| version.version}.reverse[0].created_by_id)
132
+ end
133
+
134
+ if user
135
+ #keep only the attributes related to the most recent change for each attribute_type
136
+ self.destroy_values_of_type attribute_type_description
137
+
138
+ attribute_type = AttributeType.find_by_internal_identifier(attribute_type_description)
139
+ attribute_type = AttributeType.create(:description => attribute_type_description, :data_type => "Text") unless attribute_type
140
+
141
+ user.roles.each do |role|
142
+ new_value = AttributeValue.new(:value => role.internal_identifier)
143
+ attribute_type.attribute_values << new_value
144
+ self.attribute_values << new_value
145
+ new_value.save
146
+ end
147
+ end
148
+ end
149
+
150
+ def is_published?
151
+ !PublishedElement.where('published_element_record_id = ? and published_element_record_type = ? and published_elements.version = ?', self.id, 'Content', self.version).first.nil?
152
+ end
153
+
122
154
  protected
123
155
 
124
156
  def self.build_search_results(results)
@@ -129,10 +161,10 @@ class Content < ActiveRecord::Base
129
161
 
130
162
  results_hash = {}
131
163
  if section.attributes['type'] == 'Blog'
132
- results_hash[:link] = section.permalink + '/' + content.permalink
164
+ results_hash[:link] = section.path + '/' + content.permalink
133
165
  results_hash[:title] = content.title
134
166
  else
135
- results_hash[:link] = section.permalink
167
+ results_hash[:link] = section.path
136
168
  results_hash[:title] = section.title
137
169
  end
138
170
  results_hash[:section] = section
@@ -0,0 +1,8 @@
1
+ class Document < ActiveRecord::Base
2
+ has_relational_dynamic_attributes
3
+ has_file_assets
4
+
5
+ belongs_to :document_record, :polymorphic => true
6
+ belongs_to :document_type
7
+
8
+ end
@@ -0,0 +1,3 @@
1
+ class DocumentType < ActiveRecord::Base
2
+ has_many :documents
3
+ end
@@ -0,0 +1,29 @@
1
+ class DocumentedContent < Content
2
+ has_permalink :title
3
+ before_save :check_internal_indentifier
4
+
5
+ def to_param
6
+ permalink
7
+ end
8
+
9
+ def check_internal_indentifier
10
+ self.internal_identifier = self.permalink if self.internal_identifier.blank?
11
+ end
12
+
13
+ def content_hash
14
+ {:id => self.id, :title => self.title, :body_html => self.body_html}
15
+ end
16
+
17
+ def self.find_published_by_section(active_publication, website_section)
18
+ published_content = []
19
+ documented_item = DocumentedItem.where(["online_document_section_id = ?", website_section.id]).first
20
+ if documented_item
21
+ documented_content = DocumentedContent.find(documented_item.documented_content_id)
22
+ content = get_published_version(active_publication, documented_content)
23
+ published_content << content unless content.nil?
24
+ end
25
+
26
+ published_content.first
27
+ end
28
+
29
+ end
@@ -0,0 +1,31 @@
1
+ class DocumentedItem < ActiveRecord::Base
2
+ belongs_to :online_document_section
3
+
4
+ def content
5
+ if content?
6
+ Content.find(documented_content_id)
7
+ elsif klass?
8
+ self.documented_klass
9
+ end
10
+ end
11
+
12
+ def published_content(active_publication)
13
+ if content?
14
+ DocumentedContent.find_published_by_section(active_publication, online_document_section)
15
+ elsif klass?
16
+ self.documented_klass
17
+ end
18
+ end
19
+
20
+ def klass?
21
+ !!self.documented_klass
22
+ end
23
+
24
+ def content?
25
+ !!self.documented_content_id
26
+ end
27
+
28
+ def self.find_by_section_id( website_section_id )
29
+ DocumentedItem.where(["online_document_section_id = ?", website_section_id]).first
30
+ end
31
+ end