Commit 275fdc75bcbff79e6e5ff4732c7dc0fdc3b8ed2a

Authored by Daniela Feitosa
Committed by Antonio Terceiro
1 parent a18ff65c

ActionItem856: adding list of products in article EnterpriseHomepage

app/helpers/application_helper.rb
... ... @@ -22,6 +22,8 @@ module ApplicationHelper
22 22  
23 23 include ProfileEditorHelper
24 24  
  25 + include DisplayHelper
  26 +
25 27 # Displays context help. You can pass the content of the help message as the
26 28 # first parameter or using template code inside a block passed to this
27 29 # method. *Note*: the block is ignored if <tt>content</tt> is not
... ... @@ -261,19 +263,6 @@ module ApplicationHelper
261 263 concat(content_tag('div', capture(&block) + tag('br', :style => 'clear: left;'), { :class => 'button-bar' }.merge(options)), block.binding)
262 264 end
263 265  
264   - def link_to_category(category, full = true)
265   - return _('Uncategorized product') unless category
266   - name = full ? category.full_name(' &rarr; ') : category.name
267   - link_to name, :controller => 'search', :action => 'category_index', :category_path => category.path.split('/')
268   - end
269   -
270   - def link_to_product(product, opts={})
271   - return _('No product') unless product
272   - link_to content_tag( 'span', product.name ),
273   - { :controller => 'catalog', :action => 'show', :id => product, :profile => product.enterprise.identifier },
274   - opts
275   - end
276   -
277 266 def partial_for_class(klass)
278 267 if klass.nil?
279 268 raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?'
... ... @@ -578,17 +567,6 @@ module ApplicationHelper
578 567 end
579 568 end
580 569  
581   - def txt2html(txt)
582   - txt.
583   - gsub( /\n\s*\n/, ' <p/> ' ).
584   - gsub( /\n/, ' <br/> ' ).
585   - gsub( /(^|\s)(www\.[^\s])/, '\1http://\2' ).
586   - gsub( /(https?:\/\/([^\s]+))/,
587   - '<a href="\1" target="_blank" rel="nofolow" onclick="return confirm(\'' +
588   - escape_javascript( _('Are you sure you want to visit this web site?') ) +
589   - '\n\n\'+this.href)">\2</a>' )
590   - end
591   -
592 570 # Should be on the forms_helper file but when its there the translation of labels doesn't work
593 571 class NoosferoFormBuilder < ActionView::Helpers::FormBuilder
594 572 include GetText
... ...
app/helpers/catalog_helper.rb
1 1 module CatalogHelper
  2 +
  3 +include DisplayHelper
  4 +
  5 + def display_products_list(profile, products)
  6 + data = ''
  7 + products.each { |product|
  8 +
  9 + data << content_tag('li',
  10 + link_to_product(product, :class => 'product-pic', :style => 'background-image:url(%s)' % ( product.image ? product.image.public_filename(:portrait) : '/images/icons-app/product-default-pic-portrait.png' )) +
  11 + content_tag('h3', link_to_product(product)) +
  12 + content_tag('ul',
  13 + (product.price ? content_tag('li', _('Price: %s') % ( "%.2f" % product.price), :class => 'product_price') : '') +
  14 + content_tag('li', link_to_category(product.product_category), :class => 'product_category')
  15 + ) +
  16 + (product.description ? content_tag('div', txt2html(product.description), :class => 'description') : tag('br', :style => 'clear:both')),
  17 + :class => 'product')
  18 + }
  19 + content_tag('h1', _('Products/Services')) + content_tag('ul', data, :id => 'product_list')
  20 + end
2 21 end
... ...
app/helpers/display_helper.rb 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +module DisplayHelper
  2 +
  3 + def link_to_product(product, opts={})
  4 + return _('No product') unless product
  5 + link_to content_tag( 'span', product.name ),
  6 + product.enterprise.generate_url(:controller => 'catalog', :action => 'show', :id => product),
  7 + opts
  8 + end
  9 +
  10 + def link_to_category(category, full = true)
  11 + return _('Uncategorized product') unless category
  12 + name = full ? category.full_name(' &rarr; ') : category.name
  13 + link_to name, Noosfero.url_options.merge({:controller => 'search', :action => 'category_index', :category_path => category.path.split('/'),:host => category.environment.default_hostname })
  14 + end
  15 +
  16 + def txt2html(txt)
  17 + txt.
  18 + gsub( /\n\s*\n/, ' <p/> ' ).
  19 + gsub( /\n/, ' <br/> ' ).
  20 + gsub( /(^|\s)(www\.[^\s])/, '\1http://\2' ).
  21 + gsub( /(https?:\/\/([^\s]+))/,
  22 + '<a href="\1" target="_blank" rel="nofolow" onclick="return confirm(\'' +
  23 + escape_javascript( _('Are you sure you want to visit this web site?') ) +
  24 + '\n\n\'+this.href)">\2</a>' )
  25 + end
  26 +end
... ...
app/helpers/enterprise_homepage_helper.rb
... ... @@ -22,5 +22,4 @@ module EnterpriseHomepageHelper
22 22 end
23 23 content_tag('div', content_tag('ul', data), :class => 'enterprise-info')
24 24 end
25   -
26 25 end
... ...
app/models/enterprise_homepage.rb
... ... @@ -14,8 +14,12 @@ class EnterpriseHomepage &lt; Article
14 14 include ActionController::UrlWriter
15 15 include ActionView::Helpers::AssetTagHelper
16 16 include EnterpriseHomepageHelper
  17 + include CatalogHelper
  18 +
17 19 def to_html
18   - display_profile_info(self.profile) + content_tag('div', self.body || '')
  20 + products = self.profile.products
  21 + display_profile_info(self.profile) + content_tag('div', self.body || '') +
  22 + (self.profile.environment.enabled?('disable_products_for_enterprises') ? '' : display_products_list(self.profile, products))
19 23 end
20 24  
21 25 end
... ...
app/views/catalog/index.rhtml
1   -<h1> <%= _('Products/Services') % @profile.name %> </h1>
2   -
3   -<ul id="product_list">
4   -<% @products.each do |product| %>
5   - <li class="product">
6   - <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' %
7   - ( product.image ? product.image.public_filename(:portrait) : '/images/icons-app/product-default-pic-portrait.png' ) %>
8   - <h3>
9   - <%= link_to_product product %>
10   - </h3>
11   - <ul>
12   - <% if product.price %>
13   - <li class="product_price"> <%= _('Price: %s') % ( "%.2f" % product.price) %> </li>
14   - <% end %>
15   - <li class="product_category"> <%= link_to_category(product.product_category) %> </li>
16   - </ul>
17   - <% if product.description %>
18   - <div class="description">
19   - <%= txt2html product.description %>
20   - <div>
21   - <% else %>
22   - <br style="clear:both" />
23   - <% end %>
24   - </li>
25   -<% end %>
26   -</ul>
27   -
  1 +<%= display_products_list @profile, @products %>
... ...
public/stylesheets/controller_catalog.css
1   -
2   -/* * * List Products * * * * * * * * * * * * */
3   -
4   -#product_list {
5   - margin: 0px;
6   - padding: 0px;
7   -}
8   -
9   -#product_list ul {
10   - margin: 0px;
11   - padding: 0px;
12   -}
13   -
14   -#content #product_list li {
15   - margin: 0px;
16   - padding: 0px;
17   - list-style: none;
18   -}
19   -
20   -#content #product_list li.product {
21   - border: 1px solid #888;
22   - margin-bottom: 10px;
23   - padding: 5px 10px;
24   -}
25   -
26   -#product_list .product-pic {
27   - display: block;
28   - width: 64px;
29   - height: 64px;
30   - background-repeat: no-repeat;
31   - background-position: 50% 50%;
32   - float: left;
33   - margin-right: 15px;
34   - position: relative; /* work arround msie bug */
35   -}
36   -
37   -#product_list .product-pic span {
38   - display: none;
39   -}
40   -
41   -#content #product_list h3 {
42   - margin: 0px;
43   - padding: 0px;
44   - font-size: 120%;
45   -}
46   -.msie #content #product_list h3 {
47   - margin-top: -15px;
48   -}
49   -#product_list h3 a {
50   - text-decoration: none;
51   -}
52   -
53   -#product_list .product_category {
54   - font-size: 11px;
55   -}
56   -
57   -#product_list .description {
58   - clear: left;
59   - font-size: 11px;
60   - text-align: justify;
61   - padding: 5px 10px 0px 10px;
62   -}
63   -.msie #product_list .description {
64   - padding: 5px 10px 10px 10px;
65   -}
66   -
67   -/* * * Show Product * * * * * * * * * * * * */
68   -
69   -#show_product .product-pic {
70   - float: left;
71   - margin-right: 15px;
72   - border: 1px solid #444;
73   - padding: 2px;
74   - background: #FFF;
75   -}
76   -
77   -#show_product .product_category {
78   - padding-top: 10px;
79   - clear: left;
80   -}
81   -
  1 +@import url('products.css');
... ...
public/stylesheets/controller_content_viewer.css
  1 +@import url('products.css');
  2 +
1 3 /************* enterprise homepage style *****************/
2 4  
3 5 div.event-info {
... ...
public/stylesheets/products.css 0 → 100644
... ... @@ -0,0 +1,80 @@
  1 +/* * * List Products * * * * * * * * * * * * */
  2 +
  3 +#product_list {
  4 + margin: 0px;
  5 + padding: 0px;
  6 +}
  7 +
  8 +#product_list ul {
  9 + margin: 0px;
  10 + padding: 0px;
  11 +}
  12 +
  13 +#content #product_list li {
  14 + margin: 0px;
  15 + padding: 0px;
  16 + list-style: none;
  17 +}
  18 +
  19 +#content #product_list li.product {
  20 + border: 1px solid #888;
  21 + margin-bottom: 10px;
  22 + padding: 5px 10px;
  23 +}
  24 +
  25 +#product_list .product-pic {
  26 + display: block;
  27 + width: 64px;
  28 + height: 64px;
  29 + background-repeat: no-repeat;
  30 + background-position: 50% 50%;
  31 + float: left;
  32 + margin-right: 15px;
  33 + position: relative; /* work arround msie bug */
  34 +}
  35 +
  36 +#product_list .product-pic span {
  37 + display: none;
  38 +}
  39 +
  40 +#content #product_list h3 {
  41 + margin: 0px;
  42 + padding: 0px;
  43 + font-size: 120%;
  44 +}
  45 +.msie #content #product_list h3 {
  46 + margin-top: -15px;
  47 +}
  48 +#product_list h3 a {
  49 + text-decoration: none;
  50 +}
  51 +
  52 +#product_list .product_category {
  53 + font-size: 11px;
  54 +}
  55 +
  56 +#product_list .description {
  57 + clear: left;
  58 + font-size: 11px;
  59 + text-align: justify;
  60 + padding: 5px 10px 0px 10px;
  61 +}
  62 +.msie #product_list .description {
  63 + padding: 5px 10px 10px 10px;
  64 +}
  65 +
  66 +/* * * Show Product * * * * * * * * * * * * */
  67 +
  68 +#show_product .product-pic {
  69 + float: left;
  70 + margin-right: 15px;
  71 + border: 1px solid #444;
  72 + padding: 2px;
  73 + background: #FFF;
  74 +}
  75 +
  76 +#show_product .product_category {
  77 + padding-top: 10px;
  78 + clear: left;
  79 +}
  80 +
... ...
test/unit/application_helper_test.rb
... ... @@ -62,9 +62,11 @@ class ApplicationHelperTest &lt; Test::Unit::TestCase
62 62 cat = mock
63 63 cat.expects(:path).returns('my-category/my-subcatagory')
64 64 cat.expects(:full_name).returns('category name')
  65 + cat.expects(:environment).returns(Environment.default)
  66 + Environment.any_instance.expects(:default_hostname).returns('example.com')
65 67  
66 68 result = "/cat/my-category/my-subcatagory"
67   - expects(:link_to).with('category name', :controller => 'search', :action => 'category_index', :category_path => ['my-category', 'my-subcatagory']).returns(result)
  69 + expects(:link_to).with('category name', :controller => 'search', :action => 'category_index', :category_path => ['my-category', 'my-subcatagory'], :host => 'example.com').returns(result)
68 70 assert_same result, link_to_category(cat)
69 71 end
70 72  
... ...
test/unit/enterprise_homepage_test.rb
... ... @@ -24,4 +24,33 @@ class EnterpriseHomepageTest &lt; Test::Unit::TestCase
24 24 assert_match /5555 5555/, result
25 25 end
26 26  
  27 + should 'display products list' do
  28 + ent = Enterprise.create!(:identifier => 'test_enterprise', :name => 'Test enteprise')
  29 + prod = ent.products.create!(:name => 'Product test')
  30 + a = EnterpriseHomepage.new(:name => 'article homepage')
  31 + ent.articles << a
  32 + result = a.to_html
  33 + assert_match /Product test/, result
  34 + end
  35 +
  36 + should 'not display products list if environment do not let' do
  37 + e = Environment.default
  38 + e.enable('disable_products_for_enterprises')
  39 + e.save!
  40 + ent = Enterprise.create!(:identifier => 'test_enterprise', :name => 'Test enteprise', :environment => e)
  41 + prod = ent.products.create!(:name => 'Product test')
  42 + a = EnterpriseHomepage.new(:name => 'article homepage')
  43 + ent.articles << a
  44 + result = a.to_html
  45 + assert_no_match /Product test/, result
  46 + end
  47 +
  48 + should 'display link to product' do
  49 + ent = Enterprise.create!(:identifier => 'test_enterprise', :name => 'Test enteprise')
  50 + prod = ent.products.create!(:name => 'Product test')
  51 + a = EnterpriseHomepage.new(:name => 'article homepage')
  52 + ent.articles << a
  53 + result = a.to_html
  54 + assert_match /catalog\/test_enterprise\/#{prod.id}/, result
  55 + end
27 56 end
... ...