diff --git a/History.txt b/History.txt index cbf665e2..245c246c 100644 --- a/History.txt +++ b/History.txt @@ -7,6 +7,7 @@ * Added login retry wait delay on failures. * Added support for 'in home' or 'from home' in sqliss. * Added support for any scope with 'in sub_nodes' (uses fullpath field). + * Added forced skin setting for sites (overwrites all but ACL skin settings). <== TODO: Document * Minor changes * Fixed gemspec to not include TextMate helper and selenium plugin. diff --git a/app/models/site.rb b/app/models/site.rb index b1b7a04e..d78ad611 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -62,7 +62,7 @@ class Site < ActiveRecord::Base validate :valid_site validates_uniqueness_of :host - attr_accessible :name, :languages, :default_lang, :authentication, :http_auth, :ssl_on_auth, :auto_publish, :redit_time, :api_group_id, :home_zip + attr_accessible :name, :languages, :default_lang, :authentication, :http_auth, :ssl_on_auth, :auto_publish, :redit_time, :api_group_id, :home_zip, :skin_zip has_many :groups, :order => "name" has_many :nodes has_many :users @@ -405,6 +405,30 @@ def home_zip=(zip) @home_zip_error = _('could not be found') end end + + def skin_zip + skin ? skin.zip : nil + end + + def skin_zip=(zip) + if zip.blank? + self[:skin_id] = nil + else + if id = secure(Node) { Node.translate_pseudo_id(zip) } + self[:skin_id] = id + else + @skin_zip_error = _('could not be found') + end + end + end + + def skin + secure(Skin) { Skin.find_by_id(skin_id) } + end + + def skin_id + @alias && @alias[:skin_id] || self[:skin_id] + end def create_alias(hostname) raise "Hostname '#{hostname}' already exists" if Site.find_by_host(hostname) @@ -604,9 +628,14 @@ def valid_site end if @home_zip_error - errors.add('root_id', @home_zip_error) + errors.add('root_zip', @home_zip_error) @home_zip_error = nil end + + if @skin_zip_error + errors.add('skin_zip', @skin_zip_error) + @skin_zip_error = nil + end end end diff --git a/app/models/user.rb b/app/models/user.rb index dff84f91..ff420fcc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -339,7 +339,7 @@ def get_skin(node) nil when ANY_SKIN_ID # normal skin - node.skin || (node.parent ? node.parent.skin : nil) + current_site.skin || node.skin || (node.parent ? node.parent.skin : nil) else # find skin from zip secure(Skin) { Skin.find_by_zip(skin_zip)} diff --git a/app/views/sites/_form.erb b/app/views/sites/_form.erb index 4b82dc2a..92140ce4 100644 --- a/app/views/sites/_form.erb +++ b/app/views/sites/_form.erb @@ -15,6 +15,7 @@
<%= _('host') %> | <%= @site[:host] %> |
<%= _('home') %> | <%= text_field('site', :home_zip, :size=>15, :value => @site.home_zip) %> |
<%= _('skin') %> | <%= text_field('site', :skin_zip, :size=>15, :value => @site.skin_zip) %> |
<%= _(name) %> | <%= text_field('site', name, :size=>nil) %> |