Commit 929235dd9375de3b2a7fc33b210abcca2bcb3c8e
1 parent
35feaa05
Exists in
master
and in
29 other branches
ActionItem296: adding custom headerr and footer for profiles and
environments git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2345 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
110 additions
and
6 deletions
Show diff stats
app/helpers/boxes_helper.rb
| ... | ... | @@ -22,7 +22,18 @@ module BoxesHelper |
| 22 | 22 | boxes = holder.boxes.first(holder.boxes_limit) |
| 23 | 23 | content = boxes.reverse.map { |item| display_box(item, main_content) }.join("\n") |
| 24 | 24 | content = main_content if (content.blank?) |
| 25 | - content_tag('div', content, :class => 'boxes', :id => 'boxes' ) | |
| 25 | + | |
| 26 | + maybe_display_custom_element(holder, :custom_header, :id => 'profile-header') + | |
| 27 | + content_tag('div', content, :class => 'boxes', :id => 'boxes' ) + | |
| 28 | + maybe_display_custom_element(holder, :custom_footer, :id => 'profile-footer') | |
| 29 | + end | |
| 30 | + | |
| 31 | + def maybe_display_custom_element(holder, element, options = {}) | |
| 32 | + if holder.respond_to?(element) | |
| 33 | + content_tag('div', holder.send(element), options) | |
| 34 | + else | |
| 35 | + '' | |
| 36 | + end | |
| 26 | 37 | end |
| 27 | 38 | |
| 28 | 39 | def display_box(box, main_content) | ... | ... |
app/models/profile.rb
| ... | ... | @@ -391,4 +391,12 @@ class Profile < ActiveRecord::Base |
| 391 | 391 | end |
| 392 | 392 | end |
| 393 | 393 | |
| 394 | + def custom_header | |
| 395 | + self[:custom_header] || environment.custom_header | |
| 396 | + end | |
| 397 | + | |
| 398 | + def custom_footer | |
| 399 | + self[:custom_footer] || environment.custom_footer | |
| 400 | + end | |
| 401 | + | |
| 394 | 402 | end | ... | ... |
db/migrate/048_add_custom_header_and_footer_to_profile.rb
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +class AddCustomHeaderAndFooterToProfile < ActiveRecord::Migration | |
| 2 | + | |
| 3 | + TABLES = [ :profiles, :environments ] | |
| 4 | + | |
| 5 | + def self.up | |
| 6 | + TABLES.each do |item| | |
| 7 | + add_column item, :custom_header, :text | |
| 8 | + add_column item, :custom_footer, :text | |
| 9 | + end | |
| 10 | + end | |
| 11 | + | |
| 12 | + def self.down | |
| 13 | + TABLES.each do |item| | |
| 14 | + remove_column item, :custom_header | |
| 15 | + remove_column item, :custom_footer | |
| 16 | + end | |
| 17 | + end | |
| 18 | +end | ... | ... |
db/schema.rb
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | # |
| 10 | 10 | # It's strongly recommended to check this file into your version control system. |
| 11 | 11 | |
| 12 | -ActiveRecord::Schema.define(:version => 47) do | |
| 12 | +ActiveRecord::Schema.define(:version => 48) do | |
| 13 | 13 | |
| 14 | 14 | create_table "article_versions", :force => true do |t| |
| 15 | 15 | t.integer "article_id" |
| ... | ... | @@ -71,8 +71,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 71 | 71 | t.boolean "virtual", :default => false |
| 72 | 72 | end |
| 73 | 73 | |
| 74 | - add_index "articles_categories", ["article_id"], :name => "index_articles_categories_on_article_id" | |
| 75 | 74 | add_index "articles_categories", ["category_id"], :name => "index_articles_categories_on_category_id" |
| 75 | + add_index "articles_categories", ["article_id"], :name => "index_articles_categories_on_article_id" | |
| 76 | 76 | |
| 77 | 77 | create_table "blocks", :force => true do |t| |
| 78 | 78 | t.string "title" |
| ... | ... | @@ -112,8 +112,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 112 | 112 | t.boolean "virtual", :default => false |
| 113 | 113 | end |
| 114 | 114 | |
| 115 | - add_index "categories_profiles", ["profile_id"], :name => "index_categories_profiles_on_profile_id" | |
| 116 | 115 | add_index "categories_profiles", ["category_id"], :name => "index_categories_profiles_on_category_id" |
| 116 | + add_index "categories_profiles", ["profile_id"], :name => "index_categories_profiles_on_profile_id" | |
| 117 | 117 | |
| 118 | 118 | create_table "comments", :force => true do |t| |
| 119 | 119 | t.string "title" |
| ... | ... | @@ -143,6 +143,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 143 | 143 | t.boolean "is_default" |
| 144 | 144 | t.text "settings" |
| 145 | 145 | t.text "design_data" |
| 146 | + t.text "custom_header" | |
| 147 | + t.text "custom_footer" | |
| 146 | 148 | end |
| 147 | 149 | |
| 148 | 150 | create_table "favorite_enteprises_people", :id => false, :force => true do |t| |
| ... | ... | @@ -177,8 +179,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 177 | 179 | t.datetime "updated_at" |
| 178 | 180 | end |
| 179 | 181 | |
| 180 | - add_index "product_categorizations", ["product_id"], :name => "index_product_categorizations_on_product_id" | |
| 181 | 182 | add_index "product_categorizations", ["category_id"], :name => "index_product_categorizations_on_category_id" |
| 183 | + add_index "product_categorizations", ["product_id"], :name => "index_product_categorizations_on_product_id" | |
| 182 | 184 | |
| 183 | 185 | create_table "products", :force => true do |t| |
| 184 | 186 | t.integer "enterprise_id" |
| ... | ... | @@ -213,6 +215,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 213 | 215 | t.integer "geocode_precision" |
| 214 | 216 | t.boolean "enabled", :default => true |
| 215 | 217 | t.string "nickname", :limit => 16 |
| 218 | + t.text "custom_header" | |
| 219 | + t.text "custom_footer" | |
| 216 | 220 | end |
| 217 | 221 | |
| 218 | 222 | add_index "profiles", ["environment_id"], :name => "index_profiles_on_environment_id" |
| ... | ... | @@ -245,8 +249,8 @@ ActiveRecord::Schema.define(:version => 47) do |
| 245 | 249 | t.datetime "created_at" |
| 246 | 250 | end |
| 247 | 251 | |
| 248 | - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" | |
| 249 | 252 | add_index "taggings", ["taggable_id", "taggable_type"], :name => "index_taggings_on_taggable_id_and_taggable_type" |
| 253 | + add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" | |
| 250 | 254 | |
| 251 | 255 | create_table "tags", :force => true do |t| |
| 252 | 256 | t.string "name" | ... | ... |
public/stylesheets/common.css
| ... | ... | @@ -0,0 +1,26 @@ |
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | + | |
| 3 | +class BoxesHelperTest < Test::Unit::TestCase | |
| 4 | + | |
| 5 | + include BoxesHelper | |
| 6 | + include ActionView::Helpers::TagHelper | |
| 7 | + | |
| 8 | + should 'include profile-specific header' do | |
| 9 | + holder = mock | |
| 10 | + holder.stubs(:boxes).returns([]) | |
| 11 | + holder.stubs(:boxes_limit).returns(0) | |
| 12 | + holder.stubs(:custom_header).returns('my custom header') | |
| 13 | + | |
| 14 | + assert_tag_in_string display_boxes(holder, 'main content'), :tag => "div", :attributes => { :id => 'profile-header' }, :content => 'my custom header' | |
| 15 | + end | |
| 16 | + | |
| 17 | + should 'include profile-specific footer' do | |
| 18 | + holder = mock | |
| 19 | + holder.stubs(:boxes).returns([]) | |
| 20 | + holder.stubs(:boxes_limit).returns(0) | |
| 21 | + holder.stubs(:custom_footer).returns('my custom footer') | |
| 22 | + | |
| 23 | + assert_tag_in_string display_boxes(holder, 'main content'), :tag => "div", :attributes => { :id => 'profile-footer' }, :content => 'my custom footer' | |
| 24 | + end | |
| 25 | + | |
| 26 | +end | ... | ... |
test/unit/environment_test.rb
| ... | ... | @@ -347,4 +347,12 @@ class EnvironmentTest < Test::Unit::TestCase |
| 347 | 347 | end |
| 348 | 348 | end |
| 349 | 349 | |
| 350 | + should 'provide custom header' do | |
| 351 | + assert_equal 'my header', Environment.new(:custom_header => 'my header').custom_header | |
| 352 | + end | |
| 353 | + | |
| 354 | + should 'provide custom footer' do | |
| 355 | + assert_equal 'my footer', Environment.new(:custom_footer => "my footer").custom_footer | |
| 356 | + end | |
| 357 | + | |
| 350 | 358 | end | ... | ... |
test/unit/profile_test.rb
| ... | ... | @@ -741,6 +741,32 @@ class ProfileTest < Test::Unit::TestCase |
| 741 | 741 | assert_equal 'a123456789ab...', p.short_name |
| 742 | 742 | end |
| 743 | 743 | |
| 744 | + should 'provide custom header' do | |
| 745 | + assert_equal 'my custom header', Profile.new(:custom_header => 'my custom header').custom_header | |
| 746 | + end | |
| 747 | + | |
| 748 | + should 'provide custom footer' do | |
| 749 | + assert_equal 'my custom footer', Profile.new(:custom_footer => 'my custom footer').custom_footer | |
| 750 | + end | |
| 751 | + | |
| 752 | + should 'provide environment header if profile header is blank' do | |
| 753 | + profile = Profile.new | |
| 754 | + env = mock | |
| 755 | + env.expects(:custom_header).returns('environment header') | |
| 756 | + profile.expects(:environment).returns(env) | |
| 757 | + | |
| 758 | + assert_equal 'environment header', profile.custom_header | |
| 759 | + end | |
| 760 | + | |
| 761 | + should 'provide environment footer if profile footer is blank' do | |
| 762 | + profile = Profile.new | |
| 763 | + env = mock | |
| 764 | + env.expects(:custom_footer).returns('environment footer') | |
| 765 | + profile.expects(:environment).returns(env) | |
| 766 | + | |
| 767 | + assert_equal 'environment footer', profile.custom_footer | |
| 768 | + end | |
| 769 | + | |
| 744 | 770 | private |
| 745 | 771 | |
| 746 | 772 | def assert_invalid_identifier(id) | ... | ... |