Commit f7ebcca898ecdf428ba409652ee237a7b38d0409

Authored by Victor Costa
Committed by Rodrigo Souto
1 parent 54df9315

Do not build view_paths on each request

Add plugin view paths at initialization.
Calling prepend_view_path on each request is too slow.

Do not include theme dir at view path.
Themes must use theme_include method to render rhtml files (instead of using render directly).
This avoids conflict of files with same name at different themes and reduces the amount of paths in view_paths.
app/controllers/application_controller.rb
@@ -2,7 +2,7 @@ class ApplicationController < ActionController::Base @@ -2,7 +2,7 @@ class ApplicationController < ActionController::Base
2 2
3 before_filter :setup_multitenancy 3 before_filter :setup_multitenancy
4 before_filter :detect_stuff_by_domain 4 before_filter :detect_stuff_by_domain
5 - before_filter :init_noosfero_plugins 5 + before_filter :init_noosfero_plugins_controller_filters
6 before_filter :allow_cross_domain_access 6 before_filter :allow_cross_domain_access
7 7
8 def allow_cross_domain_access 8 def allow_cross_domain_access
@@ -21,8 +21,12 @@ class ApplicationController < ActionController::Base @@ -21,8 +21,12 @@ class ApplicationController < ActionController::Base
21 include ApplicationHelper 21 include ApplicationHelper
22 layout :get_layout 22 layout :get_layout
23 def get_layout 23 def get_layout
24 - prepend_view_path('public/' + theme_path)  
25 - theme_option(:layout) || 'application' 24 + theme_layout = theme_option(:layout)
  25 + if theme_layout
  26 + theme_view_file('layouts/'+theme_layout) || theme_layout
  27 + else
  28 + 'application'
  29 + end
26 end 30 end
27 31
28 filter_parameter_logging :password 32 filter_parameter_logging :password
@@ -122,13 +126,6 @@ class ApplicationController < ActionController::Base @@ -122,13 +126,6 @@ class ApplicationController < ActionController::Base
122 126
123 include Noosfero::Plugin::HotSpot 127 include Noosfero::Plugin::HotSpot
124 128
125 - def init_noosfero_plugins  
126 - plugins.each do |plugin|  
127 - prepend_view_path(plugin.class.view_path)  
128 - end  
129 - init_noosfero_plugins_controller_filters  
130 - end  
131 -  
132 # This is a generic method that initialize any possible filter defined by a 129 # This is a generic method that initialize any possible filter defined by a
133 # plugin to the current controller being initialized. 130 # plugin to the current controller being initialized.
134 def init_noosfero_plugins_controller_filters 131 def init_noosfero_plugins_controller_filters
app/helpers/application_helper.rb
@@ -399,16 +399,23 @@ module ApplicationHelper @@ -399,16 +399,23 @@ module ApplicationHelper
399 end 399 end
400 end 400 end
401 401
402 - def theme_include(template) 402 + def theme_view_file(template)
403 ['.rhtml', '.html.erb'].each do |ext| 403 ['.rhtml', '.html.erb'].each do |ext|
404 - file = (RAILS_ROOT + '/public' + theme_path + '/' + template + ext)  
405 - if File.exists?(file)  
406 - return render :file => file, :use_full_path => false  
407 - end 404 + file = (RAILS_ROOT + '/public' + theme_path + '/' + template + ext)
  405 + return file if File.exists?(file)
408 end 406 end
409 nil 407 nil
410 end 408 end
411 409
  410 + def theme_include(template)
  411 + file = theme_view_file(template)
  412 + if file
  413 + render :file => file, :use_full_path => false
  414 + else
  415 + nil
  416 + end
  417 + end
  418 +
412 def theme_favicon 419 def theme_favicon
413 return '/designs/themes/' + current_theme + '/favicon.ico' if profile.nil? || profile.theme.nil? 420 return '/designs/themes/' + current_theme + '/favicon.ico' if profile.nil? || profile.theme.nil?
414 if File.exists?(File.join(RAILS_ROOT, 'public', theme_path, 'favicon.ico')) 421 if File.exists?(File.join(RAILS_ROOT, 'public', theme_path, 'favicon.ico'))
lib/noosfero/plugin.rb
@@ -57,6 +57,9 @@ class Noosfero::Plugin @@ -57,6 +57,9 @@ class Noosfero::Plugin
57 path << File.join(dir, 'lib') 57 path << File.join(dir, 'lib')
58 end 58 end
59 59
  60 + # add view path
  61 + ActionController::Base.view_paths.unshift(File.join(dir, 'views'))
  62 +
60 # load vendor/plugins 63 # load vendor/plugins
61 Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin| 64 Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin|
62 [ ActiveSupport::Dependencies.load_paths, $:].each{ |path| path << "#{vendor_plugin}/lib" } 65 [ ActiveSupport::Dependencies.load_paths, $:].each{ |path| path << "#{vendor_plugin}/lib" }