knitkit 2.0.5 → 2.0.6

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 (57) hide show
  1. data/app/controllers/knitkit/erp_app/desktop/app_controller.rb +5 -8
  2. data/app/controllers/knitkit/erp_app/desktop/articles_controller.rb +11 -8
  3. data/app/controllers/knitkit/erp_app/desktop/content_controller.rb +26 -4
  4. data/app/controllers/knitkit/erp_app/desktop/file_assets_controller.rb +49 -35
  5. data/app/controllers/knitkit/erp_app/desktop/image_assets_controller.rb +30 -21
  6. data/app/controllers/knitkit/erp_app/desktop/theme_controller.rb +41 -32
  7. data/app/controllers/knitkit/erp_app/desktop/website_controller.rb +0 -6
  8. data/app/controllers/knitkit/erp_app/desktop/website_section_controller.rb +42 -6
  9. data/app/{models → mailers}/website_inquiry_mailer.rb +0 -0
  10. data/app/models/article.rb +4 -0
  11. data/app/models/content.rb +0 -4
  12. data/app/models/theme.rb +3 -3
  13. data/app/models/website.rb +44 -17
  14. data/app/views/knitkit/website_sections/index.html.erb +1 -1
  15. data/app/views/layouts/knitkit/base.html.erb +6 -0
  16. data/app/views/shared/knitkit/_footer.html.erb +2 -2
  17. data/app/widgets/signup/base.rb +0 -2
  18. data/db/data_migrations/20120809020508_update_website_and_configuration.rb +77 -0
  19. data/lib/knitkit/engine.rb +4 -0
  20. data/lib/knitkit/extensions.rb +4 -1
  21. data/lib/knitkit/extensions/action_controller/theme_support/acts_as_themed_controller.rb +36 -33
  22. data/lib/knitkit/extensions/action_mailer/theme_support/acts_as_themed_mailer.rb +60 -0
  23. data/lib/knitkit/extensions/active_record/acts_as_commentable.rb +9 -4
  24. data/lib/knitkit/extensions/active_record/acts_as_document.rb +1 -1
  25. data/lib/knitkit/extensions/compass_ae/widgets/base.rb +21 -1
  26. data/lib/knitkit/extensions/compass_ae/widgets/widget_proxy_controller.rb +26 -0
  27. data/lib/knitkit/extensions/railties/action_view/base.rb +11 -0
  28. data/lib/knitkit/extensions/railties/action_view/helpers/blog_helper.rb +62 -0
  29. data/lib/knitkit/extensions/railties/action_view/helpers/content_helper.rb +83 -0
  30. data/lib/knitkit/extensions/railties/action_view/helpers/knitkit_helper.rb +67 -0
  31. data/lib/knitkit/extensions/railties/action_view/helpers/menu_helper.rb +71 -0
  32. data/lib/knitkit/version.rb +1 -1
  33. data/public/images/knitkit/close.png +0 -0
  34. data/public/javascripts/erp_app/desktop/applications/knitkit/articles_grid_panel.js +150 -400
  35. data/public/javascripts/erp_app/desktop/applications/knitkit/center_region.js +687 -593
  36. data/public/javascripts/erp_app/desktop/applications/knitkit/east_region.js +1 -2
  37. data/public/javascripts/erp_app/desktop/applications/knitkit/file_assets_panel.js +39 -15
  38. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_data_view.js +1 -1
  39. data/public/javascripts/erp_app/desktop/applications/knitkit/image_assets_panel.js +65 -126
  40. data/public/javascripts/erp_app/desktop/applications/knitkit/module.js +65 -1
  41. data/public/javascripts/erp_app/desktop/applications/knitkit/section_articles_grid_panel.js +265 -183
  42. data/public/javascripts/erp_app/desktop/applications/knitkit/themes_tree_panel.js +24 -9
  43. data/public/javascripts/erp_app/desktop/applications/knitkit/versions_grid_panel.js +631 -595
  44. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/document.js +265 -0
  45. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/host.js +133 -0
  46. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/menu.js +174 -0
  47. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/section.js +399 -0
  48. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website.js +165 -0
  49. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/helpers/website_nav_items.js +266 -0
  50. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region/west_region.js +1224 -0
  51. data/public/javascripts/knitkit/inline_editing.js +136 -0
  52. data/public/stylesheets/extjs/resources/css/knitkit_extjs_4.css +1 -2
  53. data/public/stylesheets/knitkit/inline_editing.css +88 -0
  54. data/public/stylesheets/knitkit/style.css +1 -1
  55. metadata +47 -31
  56. data/lib/knitkit/extensions/railties/action_view.rb +0 -199
  57. data/public/javascripts/erp_app/desktop/applications/knitkit/west_region.js +0 -2725
@@ -88,9 +88,6 @@ module Knitkit
88
88
  website.subtitle = params[:subtitle]
89
89
  website.title = params[:title]
90
90
  website.name = params[:name]
91
- website.email = params[:email]
92
- website.auto_activate_publication = params[:auto_activate_publication] == 'yes'
93
- website.email_inquiries = params[:email_inquiries] == 'yes'
94
91
 
95
92
  # create homepage
96
93
  website_section = WebsiteSection.new
@@ -129,12 +126,9 @@ module Knitkit
129
126
  model = DesktopApplication.find_by_internal_identifier('knitkit')
130
127
  begin
131
128
  current_user.with_capability(model, 'edit', 'Website') do
132
- @website.email = params[:email]
133
129
  @website.name = params[:name]
134
130
  @website.title = params[:title]
135
131
  @website.subtitle = params[:subtitle]
136
- @website.auto_activate_publication = params[:auto_activate_publication] == 'yes'
137
- @website.email_inquiries = params[:email_inquiries] == 'yes'
138
132
 
139
133
  render :json => @website.save ? {:success => true} : {:success => false}
140
134
  end
@@ -94,7 +94,10 @@ module Knitkit
94
94
  @website_section.render_base_layout = params[:render_with_base_layout] == 'yes'
95
95
  @website_section.internal_identifier = params[:internal_identifier]
96
96
 
97
+ website = @website_section.website
97
98
  if @website_section.save
99
+ @website_section.publish(website, 'Auto Publish', @website_section.version, current_user) if website.publish_on_save?
100
+
98
101
  render :json => {:success => true}
99
102
  else
100
103
  render :json => {:success => false}
@@ -132,11 +135,13 @@ module Knitkit
132
135
  model = DesktopApplication.find_by_internal_identifier('knitkit')
133
136
  begin
134
137
  current_user.with_capability(model, 'edit', 'Layout') do
135
- result = Knitkit::SyntaxValidator.validate_content(:erb, params[:content])
136
-
138
+ result = Knitkit::SyntaxValidator.validate_content(:erb, params[:content])
137
139
  unless result
140
+ website = @website_section.website
138
141
  @website_section.layout = params[:content]
139
- render :json => @website_section.save ? {:success => true} : {:success => false}
142
+ saved = @website_section.save
143
+ @website_section.publish(website, 'Auto Publish', @website_section.version, current_user) if saved and website.publish_on_save?
144
+ render :json => saved ? {:success => true} : {:success => false}
140
145
  else
141
146
  render :json => {:success => false, :message => result}
142
147
  end
@@ -146,11 +151,42 @@ module Knitkit
146
151
  end
147
152
  end
148
153
 
154
+ def available_articles_filter
155
+ menu = []
156
+ websites = Website.all
157
+ all_articles = [{:name => 'All Articles', :id => 0}]
158
+ orphaned_articles = [{:name => 'Orphaned Articles Only', :id => -1}]
159
+
160
+ websites_array = []
161
+ websites.each do |w|
162
+ websites_array << { :name => "Website: #{w.name}", :id => w.id }
163
+ end
164
+
165
+ menu = all_articles + orphaned_articles + websites_array
166
+
167
+ render :inline => "{\"websites\":#{menu.to_json(:only => [:name, :id])}}"
168
+ end
169
+
149
170
  def available_articles
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
151
- available_articles = Article.order('LOWER(internal_identifier) ASC').all - current_articles
171
+ website_id = params[:website_id]
172
+ current_articles = Article.joins(:website_section_contents).where("website_section_id = #{params[:section_id]}").all
173
+
174
+ # Defaults to retrieving all articles
175
+ available_articles = Article.order('LOWER(contents.internal_identifier) ASC')
176
+
177
+ # Orphaned Articles
178
+ if !website_id.blank? and website_id.to_i == -1
179
+ available_articles = available_articles.includes(:website_section_contents).where( :website_section_contents => { :content_id => nil } )
180
+ end
181
+
182
+ # Website Articles
183
+ if !website_id.blank? and website_id.to_i > 0
184
+ available_articles = available_articles.joins(:website_sections).where("website_sections.website_id = #{website_id}")
185
+ end
186
+
187
+ available_articles = available_articles.all - current_articles
152
188
 
153
- render :inline => "{\"articles\":#{available_articles.to_json(:only => [:internal_identifier, :id])}}"
189
+ render :inline => "{\"articles\":#{available_articles.to_json(:only => [:title, :internal_identifier, :id], :methods => [:combobox_display_value])}}"
154
190
  end
155
191
 
156
192
  def existing_sections
File without changes
@@ -10,5 +10,9 @@ 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
+ def combobox_display_value
15
+ "#{title} (#{internal_identifier})"
16
+ end
13
17
  end
14
18
 
@@ -87,10 +87,6 @@ class Content < ActiveRecord::Base
87
87
  position
88
88
  end
89
89
 
90
- def add_comment(options={})
91
- self.comments.create(options)
92
- end
93
-
94
90
  def get_comments(limit)
95
91
  self.comments.recent.limit(limit).all
96
92
  end
data/app/models/theme.rb CHANGED
@@ -126,7 +126,7 @@ class Theme < ActiveRecord::Base
126
126
  self.summary = about['summary'] if about['summary']
127
127
  else
128
128
  name = entry.name.sub(/__MACOSX\//, '')
129
- name = Theme.strip_path(entry.name, theme_root)
129
+ name = Theme.strip_path(name, theme_root)
130
130
  data = ''
131
131
  entry.get_input_stream { |io| data = io.read }
132
132
  data = StringIO.new(data) if data.present?
@@ -153,10 +153,10 @@ class Theme < ActiveRecord::Base
153
153
  relative_path = file.directory.sub("#{url}",'')
154
154
  path = FileUtils.mkdir_p(File.join(tmp_dir,relative_path))
155
155
  full_path = File.join(path,file.name)
156
- File.open(full_path, 'w+:ASCII-8BIT') {|f| f.puts(contents) }
156
+ File.open(full_path, 'wb+') {|f| f.puts(contents) }
157
157
  zip.add(File.join(relative_path[1..relative_path.length],file.name), full_path) if ::File.exists?(full_path)
158
158
  }
159
- ::File.open(tmp_dir + 'about.yml', 'w') { |f| f.puts(about.to_yaml) }
159
+ ::File.open(tmp_dir + 'about.yml', 'wb+') { |f| f.puts(about.to_yaml) }
160
160
  zip.add('about.yml', tmp_dir + 'about.yml')
161
161
  end
162
162
  end
@@ -64,10 +64,21 @@ class Website < ActiveRecord::Base
64
64
  #ActiveRecord::Base.connection.execute("select path from website_sections where website_id = #{self.id}").collect{|row| row['path']}
65
65
  end
66
66
 
67
+ def config_value(config_item_type_iid)
68
+ primary_host_config_item_type = ConfigurationItemType.find_by_internal_identifier(config_item_type_iid)
69
+ self.configurations.first.get_configuration_item(primary_host_config_item_type).options.first.value
70
+ end
71
+
72
+ def email_inquiries?
73
+ config_value('email_inquiries') == 'yes'
74
+ end
75
+
67
76
  def self.find_by_host(host)
68
77
  website = nil
69
- website_host = WebsiteHost.find_by_host(host)
70
- website = website_host.website unless website_host.nil?
78
+ unless host.nil?
79
+ website_host = WebsiteHost.find_by_host(host)
80
+ website = website_host.website unless website_host.nil?
81
+ end
71
82
  website
72
83
  end
73
84
 
@@ -93,6 +104,24 @@ class Website < ActiveRecord::Base
93
104
  self.published_websites.where(:active => true).first
94
105
  end
95
106
 
107
+ def auto_activate_publication?
108
+ configuration_item = self.configurations.first.get_item(:auto_active_publications)
109
+ unless configuration_item.nil?
110
+ configuration_item.options.first.value == 'yes'
111
+ else
112
+ false
113
+ end
114
+ end
115
+
116
+ def publish_on_save?
117
+ configuration_item = self.configurations.first.get_item(:publish_on_save)
118
+ unless configuration_item.nil?
119
+ configuration_item.options.first.value == 'yes'
120
+ else
121
+ false
122
+ end
123
+ end
124
+
96
125
  def role
97
126
  Role.iid(website_role_iid)
98
127
  end
@@ -103,7 +132,6 @@ class Website < ActiveRecord::Base
103
132
  configuration = ::Configuration.find_template('default_website_configuration').clone(true)
104
133
  configuration.description = "Website #{self.name} Configuration"
105
134
  configuration.internal_identifier = configuration.description.underscore
106
- configuration.update_configuration_item(ConfigurationItemType.find_by_internal_identifier('contact_us_email_address'), self.email)
107
135
  configuration.update_configuration_item(ConfigurationItemType.find_by_internal_identifier('login_url'), '/login')
108
136
  configuration.update_configuration_item(ConfigurationItemType.find_by_internal_identifier('homepage_url'), '/home')
109
137
  self.configurations << configuration
@@ -154,15 +182,14 @@ class Website < ActiveRecord::Base
154
182
  :title => title,
155
183
  :subtitle => subtitle,
156
184
  :internal_identifier => internal_identifier,
157
- :email => email,
158
- :auto_activate_publication => auto_activate_publication,
159
- :email_inquiries => email_inquiries,
160
185
  :sections => [],
161
186
  :images => [],
162
187
  :files => [],
163
188
  :website_navs => []
164
189
  }
165
190
 
191
+ #TODO update to handle configurations
192
+
166
193
  setup_hash[:sections] = sections.positioned.collect do |website_section|
167
194
  website_section.build_section_hash
168
195
  end
@@ -209,32 +236,32 @@ class Website < ActiveRecord::Base
209
236
 
210
237
  sections.each do |website_section|
211
238
  unless website_section.layout.blank?
212
- File.open(File.join(sections_path,"#{website_section.internal_identifier}.rhtml"), 'w+') {|f| f.puts(website_section.layout) }
239
+ File.open(File.join(sections_path,"#{website_section.internal_identifier}.rhtml"), 'wb+') {|f| f.puts(website_section.layout) }
213
240
  end
214
241
  end
215
242
 
216
243
  contents = sections.collect(&:contents).flatten.uniq
217
244
  contents.each do |content|
218
- File.open(File.join(articles_path,"#{content.internal_identifier}.html"), 'w+') {|f| f.puts(content.body_html) }
245
+ File.open(File.join(articles_path,"#{content.internal_identifier}.html"), 'wb+') {|f| f.puts(content.body_html) }
219
246
  unless content.excerpt_html.blank?
220
- File.open(File.join(excerpts_path,"#{content.internal_identifier}.html"), 'w+') {|f| f.puts(content.excerpt_html) }
247
+ File.open(File.join(excerpts_path,"#{content.internal_identifier}.html"), 'wb+') {|f| f.puts(content.excerpt_html) }
221
248
  end
222
249
  end
223
250
 
224
251
  online_document_sections.each do |online_documented_section|
225
- File.open(File.join(documented_contents_path,"#{online_documented_section.internal_identifier}.html"), 'w+') {|f| f.puts(online_documented_section.documented_item_published_content_html(active_publication)) }
252
+ File.open(File.join(documented_contents_path,"#{online_documented_section.internal_identifier}.html"), 'wb+') {|f| f.puts(online_documented_section.documented_item_published_content_html(active_publication)) }
226
253
  end
227
254
 
228
255
  self.files.where("directory like '%/sites/#{self.iid}/images%'").all.each do |image_asset|
229
256
  contents = file_support.get_contents(File.join(file_support.root,image_asset.directory,image_asset.name))
230
257
  FileUtils.mkdir_p(File.join(image_assets_path,image_asset.directory))
231
- File.open(File.join(image_assets_path,image_asset.directory,image_asset.name), 'w+:ASCII-8BIT') {|f| f.puts(contents) }
258
+ File.open(File.join(image_assets_path,image_asset.directory,image_asset.name), 'wb+') {|f| f.puts(contents) }
232
259
  end
233
260
 
234
261
  self.files.where("directory like '%/#{Rails.application.config.erp_tech_svcs.file_assets_location}/sites/#{self.iid}%'").all.each do |file_asset|
235
262
  contents = file_support.get_contents(File.join(file_support.root,file_asset.directory,file_asset.name))
236
263
  FileUtils.mkdir_p(File.join(file_assets_path,file_asset.directory))
237
- File.open(File.join(file_assets_path,file_asset.directory,file_asset.name), 'w+:ASCII-8BIT') {|f| f.puts(contents) }
264
+ File.open(File.join(file_assets_path,file_asset.directory,file_asset.name), 'wb+') {|f| f.puts(contents) }
238
265
  end
239
266
 
240
267
  files = []
@@ -246,7 +273,7 @@ class Website < ActiveRecord::Base
246
273
  files << {:path => path, :name => entry}
247
274
  end
248
275
 
249
- File.open(tmp_dir + 'setup.yml', 'w') { |f| f.puts(export_setup.to_yaml) }
276
+ File.open(tmp_dir + 'setup.yml', 'wb+') { |f| f.puts(export_setup.to_yaml) }
250
277
 
251
278
  (tmp_dir + "#{name}.zip").tap do |file_name|
252
279
  file_name.unlink if file_name.exist?
@@ -313,11 +340,11 @@ class Website < ActiveRecord::Base
313
340
  :name => setup_hash[:name],
314
341
  :title => setup_hash[:title],
315
342
  :subtitle => setup_hash[:subtitle],
316
- :internal_identifier => setup_hash[:internal_identifier],
317
- :email => setup_hash[:email],
318
- :email_inquiries => setup_hash[:email_inquiries],
319
- :auto_activate_publication => setup_hash[:auto_activate_publication]
343
+ :internal_identifier => setup_hash[:internal_identifier]
320
344
  )
345
+
346
+ #TODO update to handle configurations
347
+
321
348
  website.save!
322
349
 
323
350
  #set default publication published by user
@@ -1,5 +1,5 @@
1
1
  <h2><%=h @website_section.title %></h2>
2
2
 
3
3
  <% @contents.each do |content| %>
4
- <%=raw content.body_html %>
4
+ <%= render_editable_content(content) %>
5
5
  <% end %>
@@ -20,10 +20,14 @@
20
20
  <%= static_stylesheet_link_tag('datepicker.css') %>
21
21
  <%= static_stylesheet_link_tag('extjs/resources/css/knitkit_extjs_4.css') %>
22
22
  <%= static_stylesheet_link_tag('knitkit/style.css') %>
23
+ <%= static_stylesheet_link_tag('knitkit/inline_editing.css') %>
23
24
  <%= static_javascript_include_tag('erp_app/widgets.js') %>
24
25
  <%= static_javascript_include_tag('ajax_pagination.js') %>
25
26
  <%= static_javascript_include_tag('erp_app/shared/dynamic_forms/dynamic_forms_validation.js') %>
26
27
  <%= static_javascript_include_tag('knitkit/helpers.js') %>
28
+ <%= static_javascript_include_tag('knitkit/inline_editing.js') %>
29
+ <%= static_javascript_include_tag('erp_app/ckeditor/ckeditor.js') %>
30
+
27
31
  <%= yield :head %>
28
32
  </head>
29
33
  <body>
@@ -57,5 +61,7 @@
57
61
  <%= content_for?(:footer) ? yield(:footer) : (render :partial => 'shared/knitkit/footer') %>
58
62
  <%= yield :foot %>
59
63
  </div>
64
+ <%= setSessionTimeout %>
65
+ <%= setup_inline_editing %>
60
66
  </body>
61
67
  </html>
@@ -1,3 +1,3 @@
1
1
  <div id="footer">
2
- Powered By Compass
3
- </div>
2
+ Powered By <a href="http://development.compassagile.com">CompassAE</a>
3
+ </div>
@@ -1,4 +1,3 @@
1
-
2
1
  module Widgets
3
2
  module Signup
4
3
  class Base < ErpApp::Widgets::Base
@@ -34,7 +33,6 @@ module Widgets
34
33
  @user.party = individual.party
35
34
  @user.save
36
35
  render :update => {:id => "#{@uuid}_result", :view => :success}
37
- render :update => {:id => "#{@uuid}_result_form", :view => :success}
38
36
  else
39
37
  render :update => {:id => "#{@uuid}_result_form", :view => :error}
40
38
 
@@ -0,0 +1,77 @@
1
+ class UpdateWebsiteAndConfiguration < ActiveRecord::Migration
2
+ def self.up
3
+ content_work_flow_category = Category.create(:description => 'Content Workflow', :internal_identifier => 'content_workflow')
4
+
5
+ website_setup_category = Category.find_by_internal_identifier('website_setup')
6
+ configuration = ::Configuration.find_template('default_website_configuration')
7
+
8
+ yes_option = ConfigurationOption.find_by_internal_identifier('yes')
9
+ yes_option = ConfigurationOption.create(
10
+ :description => 'Yes',
11
+ :internal_identifier => 'yes',
12
+ :value => 'yes'
13
+ ) if yes_option.nil?
14
+
15
+ no_option = ConfigurationOption.find_by_internal_identifier('no')
16
+ no_option = ConfigurationOption.create(
17
+ :description => 'No',
18
+ :internal_identifier => 'no',
19
+ :value => 'no'
20
+ ) if no_option.nil?
21
+
22
+ #add email inquiries config
23
+ email_inquiries_config_item_type = ConfigurationItemType.create(
24
+ :description => 'Email inquiries',
25
+ :internal_identifier => 'email_inquiries'
26
+ )
27
+ email_inquiries_config_item_type.configuration_options << yes_option
28
+ email_inquiries_config_item_type.add_default_option(no_option)
29
+ CategoryClassification.create(:category => website_setup_category, :classification => email_inquiries_config_item_type)
30
+
31
+ configuration.configuration_item_types << email_inquiries_config_item_type
32
+
33
+ #add auto activate publications
34
+ auto_activate_config_item_type = ConfigurationItemType.create(
35
+ :description => 'Auto activate publications',
36
+ :internal_identifier => 'auto_active_publications'
37
+ )
38
+ auto_activate_config_item_type.configuration_options << no_option
39
+ auto_activate_config_item_type.add_default_option(yes_option)
40
+ CategoryClassification.create(:category => content_work_flow_category, :classification => auto_activate_config_item_type)
41
+
42
+ configuration.configuration_item_types << auto_activate_config_item_type
43
+
44
+ #add auto publish on save
45
+ publish_on_save_config_item_type = ConfigurationItemType.create(
46
+ :description => 'Publish on save',
47
+ :internal_identifier => 'publish_on_save'
48
+ )
49
+ publish_on_save_config_item_type.configuration_options << no_option
50
+ publish_on_save_config_item_type.add_default_option(yes_option)
51
+ CategoryClassification.create(:category => content_work_flow_category, :classification => publish_on_save_config_item_type)
52
+
53
+ configuration.configuration_item_types << publish_on_save_config_item_type
54
+
55
+ Website.all.each do |website|
56
+ website_config = website.configurations.first
57
+ #add types
58
+ website_config.configuration_item_types << email_inquiries_config_item_type
59
+ website_config.configuration_item_types << auto_activate_config_item_type
60
+ website_config.configuration_item_types << publish_on_save_config_item_type
61
+
62
+ website_config.add_configuration_item(email_inquiries_config_item_type, (website.email_inquiries ? :yes : :no))
63
+ website_config.add_configuration_item(auto_activate_config_item_type, (website.auto_activate_publication ? :yes : :no))
64
+ website_config.add_configuration_item(publish_on_save_config_item_type, (website.auto_activate_publication ? :no : :yes))
65
+
66
+ website_config.save
67
+ end
68
+
69
+ remove_column(:websites, :email) if columns(:websites).collect {|c| c.name}.include?('email')
70
+
71
+ remove_column(:websites, :auto_activate_publication) if columns(:websites).collect {|c| c.name}.include?('auto_activate_publication')
72
+ remove_column(:websites, :email_inquiries) if columns(:websites).collect {|c| c.name}.include?('email_inquiries')
73
+ end
74
+
75
+ def self.down
76
+ end
77
+ end
@@ -24,6 +24,10 @@ module Knitkit
24
24
  include Knitkit::Extensions::ActionController::ThemeSupport::ActsAsThemedController
25
25
  end
26
26
 
27
+ ActiveSupport.on_load(:action_mailer) do
28
+ include Knitkit::Extensions::ActionMailer::ThemeSupport::ActsAsThemedMailer
29
+ end
30
+
27
31
  engine = self
28
32
  config.to_prepare do
29
33
  ErpBaseErpSvcs.register_compass_ae_engine(engine)
@@ -2,7 +2,7 @@
2
2
  require 'knitkit/extensions/core/array'
3
3
 
4
4
  #railties
5
- require 'knitkit/extensions/railties/action_view'
5
+ require 'knitkit/extensions/railties/action_view/base'
6
6
  require 'knitkit/extensions/railties/theme_support/asset_tag_helper'
7
7
  require 'knitkit/extensions/railties/theme_support/theme_file_resolver'
8
8
 
@@ -14,3 +14,6 @@ require 'knitkit/extensions/active_record/acts_as_document'
14
14
 
15
15
  #active_controller extensions
16
16
  require 'knitkit/extensions/action_controller/theme_support/acts_as_themed_controller'
17
+
18
+ #action_mailer extensions
19
+ require 'knitkit/extensions/action_mailer/theme_support/acts_as_themed_mailer'
@@ -23,17 +23,20 @@ module Knitkit
23
23
  end
24
24
 
25
25
  def acts_as_themed_controller?
26
- included_modules.include?(Knitkit::Extensions::ActionController::ThemeSupport::ActsAsThemedController::InstanceMethods)
26
+ included_modules.include?(InstanceMethods)
27
27
  end
28
28
  end
29
29
 
30
30
  module InstanceMethods
31
31
  def current_themes
32
32
  @current_themes ||= case accessor = self.class.read_inheritable_attribute(:current_themes)
33
- when Symbol then accessor == :current_themes ? raise("screwed") : send(accessor)
34
- when Proc then accessor.call(self)
35
- else accessor
36
- end
33
+ when Symbol then
34
+ accessor == :current_themes ? raise("screwed") : send(accessor)
35
+ when Proc then
36
+ accessor.call(self)
37
+ else
38
+ accessor
39
+ end
37
40
  end
38
41
 
39
42
  def add_theme_view_paths
@@ -41,34 +44,34 @@ module Knitkit
41
44
  if respond_to?(:current_theme_paths)
42
45
  current_theme_paths.each do |theme|
43
46
  resolver = case Rails.application.config.erp_tech_svcs.file_storage
44
- when :s3
45
- path = File.join(theme[:url], "templates")
46
- cached_resolver = ThemeSupport::Cache.theme_resolvers.find{|cached_resolver| cached_resolver.to_path == path}
47
- if cached_resolver.nil?
48
- resolver = ActionView::S3Resolver.new(path)
49
- ThemeSupport::Cache.theme_resolvers << resolver
50
- resolver
51
- else
52
- cached_resolver
53
- end
54
- when :filesystem
55
- path = "#{theme[:path]}/templates"
56
- cached_resolver = ThemeSupport::Cache.theme_resolvers.find{|cached_resolver| cached_resolver.to_path == path}
57
- if cached_resolver.nil?
58
- resolver = ActionView::ThemeFileResolver.new(path)
59
- ThemeSupport::Cache.theme_resolvers << resolver
60
- resolver
61
- else
62
- cached_resolver
63
- end
64
- end
47
+ when :s3
48
+ path = File.join(theme[:url], "templates")
49
+ cached_resolver = ThemeSupport::Cache.theme_resolvers.find { |cached_resolver| cached_resolver.to_path == path }
50
+ if cached_resolver.nil?
51
+ resolver = ActionView::S3Resolver.new(path)
52
+ ThemeSupport::Cache.theme_resolvers << resolver
53
+ resolver
54
+ else
55
+ cached_resolver
56
+ end
57
+ when :filesystem
58
+ path = "#{theme[:path]}/templates"
59
+ cached_resolver = ThemeSupport::Cache.theme_resolvers.find { |cached_resolver| cached_resolver.to_path == path }
60
+ if cached_resolver.nil?
61
+ resolver = ActionView::ThemeFileResolver.new(path)
62
+ ThemeSupport::Cache.theme_resolvers << resolver
63
+ resolver
64
+ else
65
+ cached_resolver
66
+ end
67
+ end
65
68
  prepend_view_path(resolver)
66
69
  end
67
70
  end
68
71
  end
69
72
 
70
73
  def current_theme_paths
71
- current_themes ? current_themes.map { |theme| {:path => theme.path.to_s, :url => theme.url.to_s}} : []
74
+ current_themes ? current_themes.map { |theme| {:path => theme.path.to_s, :url => theme.url.to_s} } : []
72
75
  end
73
76
 
74
77
  def authorize_template_extension!(template, ext)
@@ -79,9 +82,9 @@ module Knitkit
79
82
  def allowed_template_type?(ext)
80
83
  force_template_types.blank? || force_template_types.include?(ext)
81
84
  end
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
85
+ end #InstanceMethods
86
+ end #ActsAsThemedController
87
+ end #ThemeSupport
88
+ end #ActionController
89
+ end #Extensions
90
+ end #Knitkit