Commit f4012a36daa7a996193a465f3c846f15be1f5742

Authored by Antonio Terceiro
2 parents 6e951355 20c9a186

Merge branch 'stable'

INSTALL.varnish
@@ -15,6 +15,10 @@ Noosfero was tested with Varnish 2.x. If you are using a Debian Lenny (and you @@ -15,6 +15,10 @@ Noosfero was tested with Varnish 2.x. If you are using a Debian Lenny (and you
15 should, unless Debian already released Squeeze by now), make sure you install 15 should, unless Debian already released Squeeze by now), make sure you install
16 varnish from the lenny-backports suite. 16 varnish from the lenny-backports suite.
17 17
  18 +Install the RPAF apache module (or skip this step if not using apache):
  19 +
  20 + # apt-get install libapache2-mod-rpaf
  21 +
18 3) Enable varnish logging: 22 3) Enable varnish logging:
19 23
20 3a) Edit /etc/default/varnishncsa and uncomment the line that contains: 24 3a) Edit /etc/default/varnishncsa and uncomment the line that contains:
app/controllers/public/content_viewer_controller.rb
@@ -19,7 +19,7 @@ class ContentViewerController < ApplicationController @@ -19,7 +19,7 @@ class ContentViewerController < ApplicationController
19 unless @page 19 unless @page
20 page_from_old_path = profile.articles.find_by_old_path(path) 20 page_from_old_path = profile.articles.find_by_old_path(path)
21 if page_from_old_path 21 if page_from_old_path
22 - redirect_to :profile => profile.identifier, :page => page_from_old_path.explode_path 22 + redirect_to profile.url.merge(:page => page_from_old_path.explode_path)
23 return 23 return
24 end 24 end
25 end 25 end
app/controllers/public/search_controller.rb
@@ -4,10 +4,17 @@ class SearchController < PublicController @@ -4,10 +4,17 @@ class SearchController < PublicController
4 include SearchHelper 4 include SearchHelper
5 include ActionView::Helpers::NumberHelper 5 include ActionView::Helpers::NumberHelper
6 6
  7 + before_filter :redirect_asset_param, :except => [:facets_browse, :assets]
7 before_filter :load_category 8 before_filter :load_category
8 before_filter :load_search_assets 9 before_filter :load_search_assets
9 before_filter :load_query 10 before_filter :load_query
10 11
  12 + # Backwards compatibility with old URLs
  13 + def redirect_asset_param
  14 + return unless params.has_key?(:asset)
  15 + redirect_to params.merge(:action => params.delete(:asset))
  16 + end
  17 +
11 no_design_blocks 18 no_design_blocks
12 19
13 def facets_browse 20 def facets_browse
@@ -250,10 +257,9 @@ class SearchController < PublicController @@ -250,10 +257,9 @@ class SearchController < PublicController
250 end 257 end
251 258
252 def limit 259 def limit
253 - searching = @searching.values.select{ |v| v }  
254 - if params[:display] == 'map' 260 + if map_search?
255 MAP_SEARCH_LIMIT 261 MAP_SEARCH_LIMIT
256 - elsif searching.size <= 1 262 + elsif !multiple_search?
257 if [:people, :communities].include? @asset 263 if [:people, :communities].include? @asset
258 BLOCKS_SEARCH_LIMIT 264 BLOCKS_SEARCH_LIMIT
259 elsif @asset == :enterprises and @empty_query 265 elsif @asset == :enterprises and @empty_query
@@ -267,31 +273,34 @@ class SearchController &lt; PublicController @@ -267,31 +273,34 @@ class SearchController &lt; PublicController
267 end 273 end
268 274
269 def paginate_options(page = params[:page]) 275 def paginate_options(page = params[:page])
  276 + page = 1 if multiple_search? or params[:display] == 'map'
270 { :per_page => limit, :page => page } 277 { :per_page => limit, :page => page }
271 end 278 end
272 279
273 def full_text_search(filters = [], options = {}) 280 def full_text_search(filters = [], options = {})
274 paginate_options = paginate_options(params[:page]) 281 paginate_options = paginate_options(params[:page])
275 asset_class = asset_class(@asset) 282 asset_class = asset_class(@asset)
276 -  
277 solr_options = options 283 solr_options = options
278 - if !@results_only and asset_class.respond_to? :facets  
279 - solr_options.merge! asset_class.facets_find_options(params[:facet])  
280 - solr_options[:all_facets] = true  
281 - solr_options[:limit] = 0 if @facets_only  
282 - end  
283 - solr_options[:filter_queries] ||= []  
284 - solr_options[:filter_queries] += filters  
285 - solr_options[:filter_queries] << "environment_id:#{environment.id}"  
286 - solr_options[:filter_queries] << asset_class.facet_category_query.call(@category) if @category  
287 -  
288 - solr_options[:boost_functions] ||= []  
289 - params[:order_by] = nil if params[:order_by] == 'none'  
290 - if params[:order_by]  
291 - order = SortOptions[@asset][params[:order_by].to_sym]  
292 - raise "Unknown order by" if order.nil?  
293 - order[:solr_opts].each do |opt, value|  
294 - solr_options[opt] = value.is_a?(Proc) ? instance_eval(&value) : value 284 + pg_options = paginate_options(params[:page])
  285 +
  286 + if !multiple_search?
  287 + if !@results_only and asset_class.respond_to? :facets
  288 + solr_options.merge! asset_class.facets_find_options(params[:facet])
  289 + solr_options[:all_facets] = true
  290 + end
  291 + solr_options[:filter_queries] ||= []
  292 + solr_options[:filter_queries] += filters
  293 + solr_options[:filter_queries] << "environment_id:#{environment.id}"
  294 + solr_options[:filter_queries] << asset_class.facet_category_query.call(@category) if @category
  295 +
  296 + solr_options[:boost_functions] ||= []
  297 + params[:order_by] = nil if params[:order_by] == 'none'
  298 + if params[:order_by]
  299 + order = SortOptions[@asset][params[:order_by].to_sym]
  300 + raise "Unknown order by" if order.nil?
  301 + order[:solr_opts].each do |opt, value|
  302 + solr_options[opt] = value.is_a?(Proc) ? instance_eval(&value) : value
  303 + end
295 end 304 end
296 end 305 end
297 306
app/helpers/search_helper.rb
@@ -45,6 +45,14 @@ module SearchHelper @@ -45,6 +45,14 @@ module SearchHelper
45 # FIXME remove it after search_controler refactored 45 # FIXME remove it after search_controler refactored
46 include EventsHelper 46 include EventsHelper
47 47
  48 + def multiple_search?
  49 + ['index', 'category_index'].include?(params[:action]) or @results.size > 1
  50 + end
  51 +
  52 + def map_search?
  53 + !@query.blank? and !multiple_search? and params[:display] == 'map'
  54 + end
  55 +
48 def search_page_title(title, category = nil) 56 def search_page_title(title, category = nil)
49 title = "<h1>" + title 57 title = "<h1>" + title
50 title += '<small>' + category.name + '</small>' if category 58 title += '<small>' + category.name + '</small>' if category
@@ -58,8 +66,8 @@ module SearchHelper @@ -58,8 +66,8 @@ module SearchHelper
58 :align => 'center', :class => 'search-category-context') if category 66 :align => 'center', :class => 'search-category-context') if category
59 end 67 end
60 68
61 - def display_results(use_map = false)  
62 - if params[:display] == 'map' && use_map 69 + def display_results(map_capable = false)
  70 + if map_capable and map_search?
63 partial = 'google_maps' 71 partial = 'google_maps'
64 klass = 'map' 72 klass = 'map'
65 else 73 else
app/models/community.rb
@@ -88,7 +88,7 @@ class Community &lt; Organization @@ -88,7 +88,7 @@ class Community &lt; Organization
88 end 88 end
89 89
90 def activities 90 def activities
91 - Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.target_id = #{self.id} UNION SELECT at.id, at.updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} at INNER JOIN articles a ON at.target_id = a.id WHERE a.profile_id = #{self.id} AND at.target_type = 'Article' ORDER BY updated_at DESC") 91 + Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.target_id = #{self.id} and action_tracker.verb != 'join_community' and action_tracker.verb != 'leave_scrap' UNION SELECT at.id, at.updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} at INNER JOIN articles a ON at.target_id = a.id WHERE a.profile_id = #{self.id} AND at.target_type = 'Article' ORDER BY updated_at DESC")
92 end 92 end
93 93
94 end 94 end
app/models/person.rb
@@ -458,7 +458,7 @@ class Person &lt; Profile @@ -458,7 +458,7 @@ class Person &lt; Profile
458 end 458 end
459 459
460 def activities 460 def activities
461 - Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.user_id = #{self.id} ORDER BY updated_at DESC") 461 + Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.user_id = #{self.id} and action_tracker.verb != 'leave_scrap_to_self' and action_tracker.verb != 'add_member_in_community' ORDER BY updated_at DESC")
462 end 462 end
463 463
464 protected 464 protected
app/views/search/_display_results.rhtml
1 -<div id="search-results" class="<%= @results.size == 1 ? 'only-one-result-box' : 'multiple-results-boxes' %>"> 1 +<div id="search-results" class="<%= !multiple_search? ? 'only-one-result-box' : 'multiple-results-boxes' %>">
2 <% @order.each do |name| %> 2 <% @order.each do |name| %>
3 <% results = @results[name] %> 3 <% results = @results[name] %>
4 <% empty = results.nil? || results.empty? %> 4 <% empty = results.nil? || results.empty? %>
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <% if not empty %> 7 <% if not empty %>
8 <% partial = partial_for_class(results.first.class.class_name.constantize) %> 8 <% partial = partial_for_class(results.first.class.class_name.constantize) %>
9 9
10 - <% if @results.size > 1 %> 10 + <% if multiple_search? %>
11 <h3><%= @names[name] %></h3> 11 <h3><%= @names[name] %></h3>
12 <% if results.total_entries > SearchController::MULTIPLE_SEARCH_LIMIT %> 12 <% if results.total_entries > SearchController::MULTIPLE_SEARCH_LIMIT %>
13 <%= link_to(_('see all (%d)') % results.total_entries, params.merge(:action => name), :class => 'see-more' ) %> 13 <%= link_to(_('see all (%d)') % results.total_entries, params.merge(:action => name), :class => 'see-more' ) %>
@@ -22,9 +22,10 @@ @@ -22,9 +22,10 @@
22 </ul> 22 </ul>
23 </div> 23 </div>
24 <% else %> 24 <% else %>
25 - <% if @results.size > 1 %> 25 + <% if multiple_search? %>
26 <h3><%= @names[name] %></h3> 26 <h3><%= @names[name] %></h3>
27 <% end %> 27 <% end %>
  28 +
28 <div class="search-results-innerbox search-results-type-empty"> 29 <div class="search-results-innerbox search-results-type-empty">
29 <div> <%= _('None') %> </div> 30 <div> <%= _('None') %> </div>
30 </div> 31 </div>
app/views/search/_profile.rhtml
1 <li class="search-profile-item"> 1 <li class="search-profile-item">
2 -<% if @empty_query or @results.size > 1 or !profile.enterprise? %> 2 +<% if @empty_query or multiple_search? or !profile.enterprise? %>
3 <%= profile_image_link profile, :portrait, 'div', 3 <%= profile_image_link profile, :portrait, 'div',
4 @filter == 'more_recent' ? profile.send(@filter + '_label') + show_date(profile.created_at) : profile.send(@filter + '_label') %> 4 @filter == 'more_recent' ? profile.send(@filter + '_label') + show_date(profile.created_at) : profile.send(@filter + '_label') %>
5 <% else %> 5 <% else %>
app/views/tasks/processed.rhtml
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <ul> 7 <ul>
8 <% @tasks.each do |item| %> 8 <% @tasks.each do |item| %>
9 <li> 9 <li>
10 - <strong><%= item.information %></strong> <br/> 10 + <strong><%= task_information(item) %></strong> <br/>
11 <small> 11 <small>
12 <%= _('Created:') +' '+ show_date(item.created_at) %> 12 <%= _('Created:') +' '+ show_date(item.created_at) %>
13 &nbsp; &#151; &nbsp; 13 &nbsp; &#151; &nbsp;
config/initializers/action_tracker.rb
@@ -23,7 +23,28 @@ ActionTrackerConfig.verbs = { @@ -23,7 +23,28 @@ ActionTrackerConfig.verbs = {
23 }, 23 },
24 24
25 :upload_image => { 25 :upload_image => {
26 - :description => lambda { n_('uploaded 1 image<br />%{thumbnails}<br style="clear: both;" />', 'uploaded %{num} images<br />%{thumbnails}<br style="clear: both;" />', get_view_url.size) % { :num => get_view_url.size, :thumbnails => '{{ta.collect_group_with_index(:thumbnail_path){ |t,i| content_tag(:span, link_to(image_tag(t), ta.get_view_url[i]))}.last(3).join}}' } }, 26 + :description => lambda do
  27 + total = get_view_url.size
  28 + n_('uploaded 1 image', 'uploaded %d images', total) % total +
  29 + '<br />{{'+
  30 + 'ta.collect_group_with_index(:thumbnail_path) { |t,i|' +
  31 + " if ( #{total} == 1 );" +
  32 + ' link_to( image_tag(t), ta.get_view_url[i], :class => \'upimg\' );' +
  33 + ' else;' +
  34 + " pos = #{total}-i;" +
  35 + ' morethen2 = pos>2 ? \'morethen2\' : \'\';' +
  36 + ' morethen5 = pos>5 ? \'morethen5\' : \'\';' +
  37 + ' t = t.gsub(/(.*)(display)(.*)/, \'\\1thumb\\3\');' +
  38 + ' link_to( \'&nbsp;\', ta.get_view_url[i],' +
  39 + ' :style => "background-image:url(#{t})",' +
  40 + ' :class => "upimg pos#{pos} #{morethen2} #{morethen5}" );' +
  41 + ' end' +
  42 + '}.reverse.join}}' +
  43 + ( total > 5 ?
  44 + '<span class="more" onclick="this.parentNode.className+=\' show-all\'">' +
  45 + '&hellip;</span>' : '' ) +
  46 + '<br style="clear: both;" />'
  47 + end,
27 :type => :groupable 48 :type => :groupable
28 }, 49 },
29 50
debian/changelog
  1 +noosfero (0.38.2) unstable; urgency=low
  2 +
  3 + * Bugfixes release
  4 +
  5 + -- Antonio Terceiro <terceiro@colivre.coop.br> Wed, 05 Sep 2012 10:07:58 -0300
  6 +
1 noosfero (0.38.1) unstable; urgency=low 7 noosfero (0.38.1) unstable; urgency=low
2 8
3 * Bugfixes release 9 * Bugfixes release
debian/control
@@ -62,8 +62,7 @@ Description: free web-based platform for social networks @@ -62,8 +62,7 @@ Description: free web-based platform for social networks
62 62
63 Package: noosfero-apache 63 Package: noosfero-apache
64 Architecture: all 64 Architecture: all
65 -Depends: apache2, debconf  
66 -Suggests: noosfero 65 +Depends: apache2, debconf, noosfero
67 Description: free web-based platform for social networks (apache frontend) 66 Description: free web-based platform for social networks (apache frontend)
68 Noosfero is a web platform for social and solidarity economy networks with 67 Noosfero is a web platform for social and solidarity economy networks with
69 blog, e-Porfolios, CMS, RSS, thematic discussion, events agenda and collective 68 blog, e-Porfolios, CMS, RSS, thematic discussion, events agenda and collective
etc/noosfero/varnish-noosfero.vcl
1 sub vcl_recv { 1 sub vcl_recv {
  2 + if (req.request == "GET" || req.request == "HEAD") {
2 if (req.http.Cookie) { 3 if (req.http.Cookie) {
3 - # We only care about the "_noosfero_session.*" cookie, used for  
4 - # authentication.  
5 - if (req.http.Cookie ~ "_noosfero_session.*" ) {  
6 - return (pass);  
7 - }  
8 - # Else strip all cookies 4 + # We only care about the "_noosfero_session.*" cookie, used for
  5 + # authentication.
  6 + if (req.http.Cookie !~ "_noosfero_session.*" ) {
  7 + # strip all cookies
9 unset req.http.Cookie; 8 unset req.http.Cookie;
  9 + }
10 } 10 }
  11 + }
11 } 12 }
12 13
13 sub vcl_error { 14 sub vcl_error {
lib/noosfero.rb
@@ -2,7 +2,7 @@ require &#39;fast_gettext&#39; @@ -2,7 +2,7 @@ require &#39;fast_gettext&#39;
2 2
3 module Noosfero 3 module Noosfero
4 PROJECT = 'noosfero' 4 PROJECT = 'noosfero'
5 - VERSION = '0.38.1' 5 + VERSION = '0.38.2'
6 6
7 def self.pattern_for_controllers_in_directory(dir) 7 def self.pattern_for_controllers_in_directory(dir)
8 disjunction = controllers_in_directory(dir).join('|') 8 disjunction = controllers_in_directory(dir).join('|')
public/designs/templates/leftbar/stylesheets/style.css
@@ -45,26 +45,25 @@ @@ -45,26 +45,25 @@
45 width: 489px; 45 width: 489px;
46 } 46 }
47 47
48 -#profile-wall li.profile-activity-item.upload_image span,  
49 -#profile-wall li.profile-activity-item.upload_image span img,  
50 -#profile-wall li.profile-activity-item.upload_image span a,  
51 -#profile-network li.profile-activity-item.upload_image span,  
52 -#profile-network li.profile-activity-item.upload_image span img,  
53 -#profile-network li.profile-activity-item.upload_image span a {  
54 - width: 178px;  
55 - height: 144px; 48 +li.profile-activity-item.upload_image .upimg {
  49 + width: 168px;
  50 + height: 168px;
56 } 51 }
57 -  
58 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
59 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img,  
60 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
61 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
62 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img,  
63 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a {  
64 - max-width: 540px; 52 +li.profile-activity-item.upload_image .more,
  53 +li.profile-activity-item.upload_image .upimg.morethen2 {
  54 + font-size: 46px;
  55 + width: 77px;
  56 + height: 77px;
  57 +}
  58 +li.profile-activity-item.upload_image .activity-gallery-images-count-3 .pos3 {
  59 + /* reduce size only for 4 or more itens */
  60 + width: 168px;
  61 + height: 168px;
65 } 62 }
66 63
67 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
68 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a {  
69 - background-image: url(/images/gallery-image-activity-border-big-onecol.png); 64 +li.profile-activity-item.upload_image .activity-gallery-images-count-4 .pos3 {
  65 + /* make a line-break on this case */
  66 + float: none;
  67 + margin-left: 364px;
70 } 68 }
  69 +
public/designs/templates/rightbar/stylesheets/style.css
@@ -45,21 +45,25 @@ @@ -45,21 +45,25 @@
45 width: 489px; 45 width: 489px;
46 } 46 }
47 47
48 -#profile-wall li.profile-activity-item.upload_image span,  
49 -#profile-wall li.profile-activity-item.upload_image span img,  
50 -#profile-wall li.profile-activity-item.upload_image span a,  
51 -#profile-network li.profile-activity-item.upload_image span,  
52 -#profile-network li.profile-activity-item.upload_image span img,  
53 -#profile-network li.profile-activity-item.upload_image span a {  
54 - width: 178px;  
55 - height: 144px; 48 +li.profile-activity-item.upload_image .upimg {
  49 + width: 168px;
  50 + height: 168px;
  51 +}
  52 +li.profile-activity-item.upload_image .more,
  53 +li.profile-activity-item.upload_image .upimg.morethen2 {
  54 + font-size: 46px;
  55 + width: 77px;
  56 + height: 77px;
  57 +}
  58 +li.profile-activity-item.upload_image .activity-gallery-images-count-3 .pos3 {
  59 + /* reduce size only for 4 or more itens */
  60 + width: 168px;
  61 + height: 168px;
56 } 62 }
57 63
58 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
59 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img,  
60 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
61 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
62 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img,  
63 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a {  
64 - max-width: 540px; 64 +li.profile-activity-item.upload_image .activity-gallery-images-count-4 .pos3 {
  65 + /* make a line-break on this case */
  66 + float: none;
  67 + margin-left: 364px;
65 } 68 }
  69 +
public/stylesheets/application.css
@@ -4733,16 +4733,13 @@ h1#agenda-title { @@ -4733,16 +4733,13 @@ h1#agenda-title {
4733 } 4733 }
4734 #profile-activity li, #profile-network li, #profile-wall li { 4734 #profile-activity li, #profile-network li, #profile-wall li {
4735 display: block; 4735 display: block;
4736 - padding: 3px; 4736 + padding: 3px 0px;
4737 margin-bottom: 3px; 4737 margin-bottom: 3px;
4738 background-color: #fff; 4738 background-color: #fff;
4739 border-bottom: 1px solid #e8e8e8; 4739 border-bottom: 1px solid #e8e8e8;
4740 position: relative; 4740 position: relative;
4741 } 4741 }
4742 4742
4743 -#profile-activity li, #profile-network li, #profile-wall li {  
4744 -}  
4745 -  
4746 .profile-activity-lead img { 4743 .profile-activity-lead img {
4747 width: 124px; 4744 width: 124px;
4748 float: left; 4745 float: left;
@@ -4806,75 +4803,79 @@ h1#agenda-title { @@ -4806,75 +4803,79 @@ h1#agenda-title {
4806 color: #000; 4803 color: #000;
4807 } 4804 }
4808 4805
4809 -#profile-wall li.profile-activity-item.upload_image span,  
4810 -#profile-wall li.profile-activity-item.upload_image span a,  
4811 -#profile-network li.profile-activity-item.upload_image span,  
4812 -#profile-network li.profile-activity-item.upload_image span a {  
4813 - width: 110px;  
4814 - height: 100px; 4806 +li.profile-activity-item.upload_image .more,
  4807 +li.profile-activity-item.upload_image .upimg {
4815 display: block; 4808 display: block;
4816 - overflow: hidden;  
4817 - position: absolute; 4809 + float: left;
  4810 + width: 114px;
  4811 + height: 114px;
  4812 + background-size: cover;
  4813 + -o-background-size: cover;
  4814 + -moz-background-size: cover;
  4815 + -webkit-background-size: cover;
  4816 + background-position: 50% 50%;
  4817 + border: 4px solid #D2D2D2;
  4818 + border-radius: 4px;
  4819 + -moz-border-radius: 4px;
  4820 + -webkit-border-radius: 4px;
  4821 + margin: 3px 6px 3px 0px;
4818 } 4822 }
4819 4823
4820 -#profile-wall li.profile-activity-item.upload_image span a img,  
4821 -#profile-network li.profile-activity-item.upload_image span a img {  
4822 - width: 110px;  
4823 - height: 100px; 4824 +#wrap-1 li.profile-activity-item.upload_image .upimg:hover {
  4825 + text-decoration: none;
4824 } 4826 }
4825 4827
4826 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
4827 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
4828 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img,  
4829 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span,  
4830 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
4831 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a img {  
4832 - width: auto;  
4833 - max-width: 383px;  
4834 - height: auto; 4828 +li.profile-activity-item.upload_image .more,
  4829 +li.profile-activity-item.upload_image .upimg.morethen2 {
  4830 + width: 50px;
  4831 + height: 50px;
  4832 +}
  4833 +li.profile-activity-item.upload_image .activity-gallery-images-count-3 .pos3 {
  4834 + /* reduce size only for 4 or more itens */
  4835 + width: 114px;
  4836 + height: 114px;
4835 } 4837 }
4836 4838
4837 -#profile-wall li.profile-activity-item.upload_image span img,  
4838 -#profile-network li.profile-activity-item.upload_image span img {  
4839 - display: block; 4839 +li.profile-activity-item.upload_image .activity-gallery-images-count-4 .pos3 {
  4840 + /* make a line-break on this case */
  4841 + float: none;
  4842 + margin-left: 256px;
4840 } 4843 }
4841 4844
4842 -#profile-wall li.profile-activity-item.upload_image span,  
4843 -#profile-network li.profile-activity-item.upload_image span {  
4844 - position: relative;  
4845 - display: inline-block;  
4846 - margin: 5px 0px 0px 5px; 4845 +li.profile-activity-item.upload_image .more {
  4846 + text-align: center;
  4847 + font-weight: bold;
  4848 + font-size: 28px;
  4849 + color: #DDD;
  4850 + background: #888;
  4851 + cursor: pointer;
  4852 +}
  4853 +li.profile-activity-item.upload_image .more:hover {
  4854 + color: #EEE;
  4855 + background: #999;
4847 } 4856 }
4848 4857
4849 -#profile-wall li.profile-activity-item.upload_image .profile-activity-text span,  
4850 -#profile-network li.profile-activity-item.upload_image .profile-activity-text span {  
4851 - border: 4px solid #D2D2D2;  
4852 - border-radius: 4px;  
4853 - -webkit-border-radius: 4px;  
4854 - -moz-border-radius: 4px; 4858 +li.profile-activity-item.upload_image .morethen5 {
  4859 + display: none;
4855 } 4860 }
4856 4861
4857 -#profile-wall li.profile-activity-item.upload_image span a,  
4858 -#profile-network li.profile-activity-item.upload_image span a {  
4859 - text-indent: -5000em; 4862 +li.profile-activity-item.upload_image .show-all .morethen5 {
  4863 + display: block;
4860 } 4864 }
4861 4865
4862 -#profile-wall li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a,  
4863 -#profile-network li.profile-activity-item.upload_image .activity-gallery-images-count-1 span a {  
4864 - position: relative; 4866 +li.profile-activity-item.upload_image .show-all .more {
  4867 + display: none;
4865 } 4868 }
4866 4869
4867 -#profile-wall li.profile-activity-item.upload_image .article-comment span,  
4868 -#profile-wall li.profile-activity-item.upload_image .profile-wall-actions span,  
4869 -#profile-network li.profile-activity-item.upload_image .article-comment span,  
4870 -#profile-network li.profile-activity-item.upload_image .profile-wall-actions span {  
4871 - display: inline;  
4872 - position: static;  
4873 - margin: 0; 4870 +li.profile-activity-item.upload_image .activity-gallery-images-count-1 .upimg,
  4871 +li.profile-activity-item.upload_image .activity-gallery-images-count-1 img {
  4872 + /* Only ".activity-gallery-images-count-1" has a "img" inside */
4874 float: none; 4873 float: none;
  4874 + display: inline-block;
4875 width: auto; 4875 width: auto;
  4876 + max-width: 100%;
4876 height: auto; 4877 height: auto;
4877 - font-weight: normal; 4878 + max-height: 300px;
4878 } 4879 }
4879 4880
4880 #profile-wall li.profile-activity-item ul.profile-wall-activities-comments, 4881 #profile-wall li.profile-activity-item ul.profile-wall-activities-comments,
test/functional/content_viewer_controller_test.rb
@@ -474,7 +474,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -474,7 +474,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
474 get :view_page, :profile => p.identifier, :page => old_path 474 get :view_page, :profile => p.identifier, :page => old_path
475 475
476 assert_response :redirect 476 assert_response :redirect
477 - assert_redirected_to :profile => p.identifier, :page => a.explode_path 477 + assert_redirected_to :host => p.default_hostname, :controller => 'content_viewer', :action => 'view_page', :profile => p.identifier, :page => a.explode_path
478 end 478 end
479 479
480 should 'load new article name equal of another article old name' do 480 should 'load new article name equal of another article old name' do
@@ -503,7 +503,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -503,7 +503,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
503 get :view_page, :profile => p.identifier, :page => old_path 503 get :view_page, :profile => p.identifier, :page => old_path
504 504
505 assert_response :redirect 505 assert_response :redirect
506 - assert_redirected_to :profile => p.identifier, :page => a2.explode_path 506 + assert_redirected_to :host => p.default_hostname, :controller => 'content_viewer', :action => 'view_page', :profile => p.identifier, :page => a2.explode_path
507 end 507 end
508 508
509 should 'not return an article of a different user' do 509 should 'not return an article of a different user' do
test/functional/profile_controller_test.rb
@@ -1139,8 +1139,10 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -1139,8 +1139,10 @@ class ProfileControllerTest &lt; ActionController::TestCase
1139 1139
1140 should "view more activities paginated" do 1140 should "view more activities paginated" do
1141 login_as(profile.identifier) 1141 login_as(profile.identifier)
1142 - 40.times{ fast_create(ActionTracker::Record, :user_id => profile.id)} 1142 + article = TinyMceArticle.create!(:profile => profile, :name => 'An Article about Free Software')
  1143 + 40.times{ ActionTracker::Record.create!(:user_id => profile.id, :user_type => 'Profile', :verb => 'create_article', :target_id => article.id, :target_type => 'Article', :params => {'name' => article.name, 'url' => article.url, 'lead' => article.lead, 'first_image' => article.first_image})}
1143 assert_equal 40, profile.tracked_actions.count 1144 assert_equal 40, profile.tracked_actions.count
  1145 + assert_equal 40, profile.activities.count
1144 get :view_more_activities, :profile => profile.identifier, :page => 2 1146 get :view_more_activities, :profile => profile.identifier, :page => 2
1145 assert_response :success 1147 assert_response :success
1146 assert_template '_profile_activities_list' 1148 assert_template '_profile_activities_list'
test/integration/varnish_conf_test.rb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +require 'test/unit'
  2 +
  3 +class VarnishConfTest < Test::Unit::TestCase
  4 +
  5 + def test_not_use_return_in_varnish_noosfero
  6 + assert !system('grep "return.*pass" etc/noosfero/varnish-noosfero.vcl')
  7 + end
  8 +
  9 +end
test/unit/community_test.rb
@@ -351,7 +351,7 @@ class CommunityTest &lt; ActiveSupport::TestCase @@ -351,7 +351,7 @@ class CommunityTest &lt; ActiveSupport::TestCase
351 scrap = Scrap.create!(defaults_for_scrap(:sender => person, :receiver => community, :content => 'A scrap')) 351 scrap = Scrap.create!(defaults_for_scrap(:sender => person, :receiver => community, :content => 'A scrap'))
352 activity = ActionTracker::Record.last 352 activity = ActionTracker::Record.last
353 353
354 - assert_equal [activity,scrap], community.activities.map { |a| a.klass.constantize.find(a.id) } 354 + assert_equal [scrap], community.activities.map { |a| a.klass.constantize.find(a.id) }
355 end 355 end
356 356
357 should 'return tracked_actions of community as activities' do 357 should 'return tracked_actions of community as activities' do
test/unit/search_helper_test.rb
@@ -4,6 +4,28 @@ class SearchHelperTest &lt; ActiveSupport::TestCase @@ -4,6 +4,28 @@ class SearchHelperTest &lt; ActiveSupport::TestCase
4 4
5 include SearchHelper 5 include SearchHelper
6 6
  7 + should 'return whether on a multiple search' do
  8 + stubs(:params).returns({:action => 'index', :display => 'map'})
  9 + @results = {:articles => [1,2], :products => [1,2]}
  10 + assert multiple_search?
  11 +
  12 + stubs(:params).returns({:action => 'products', :display => 'map'})
  13 + @results = {:products => [1,2]}
  14 + assert !multiple_search?
  15 + end
  16 +
  17 + should 'return whether on a map search' do
  18 + stubs(:params).returns({:action => 'index', :display => 'map'})
  19 + @results = {:articles => [1,2], :products => [1,2]}
  20 + @query = ''
  21 + assert !map_search?
  22 +
  23 + stubs(:params).returns({:action => 'products', :display => 'map'})
  24 + @results = {:products => [1,2]}
  25 + @query = 'test'
  26 + assert map_search?
  27 + end
  28 +
7 should 'display search page title' do 29 should 'display search page title' do
8 title = 'page_title' 30 title = 'page_title'
9 assert_equal search_page_title(title), '<h1>page_title</h1>' 31 assert_equal search_page_title(title), '<h1>page_title</h1>'
@@ -35,6 +57,8 @@ class SearchHelperTest &lt; ActiveSupport::TestCase @@ -35,6 +57,8 @@ class SearchHelperTest &lt; ActiveSupport::TestCase
35 57
36 should 'display results with map' do 58 should 'display results with map' do
37 stubs(:params).returns({:display => 'map'}) 59 stubs(:params).returns({:display => 'map'})
  60 + @query = 'test'
  61 + @results = {:products => [1,2]}
38 expects('render').with({:partial => 'google_maps'}).returns('render_return') 62 expects('render').with({:partial => 'google_maps'}).returns('render_return')
39 expects('content_tag').with('div', 'render_return', :class => 'map-or-list-search-results map') 63 expects('content_tag').with('div', 'render_return', :class => 'map-or-list-search-results map')
40 display_results true 64 display_results true
@@ -231,7 +255,6 @@ class SearchHelperTest &lt; ActiveSupport::TestCase @@ -231,7 +255,6 @@ class SearchHelperTest &lt; ActiveSupport::TestCase
231 end 255 end
232 end 256 end
233 257
234 -  
235 should 'return asset class from string' do 258 should 'return asset class from string' do
236 asset_names = ['products', 'events', 'articles', 'enterprises', 'people', 'communities'] 259 asset_names = ['products', 'events', 'articles', 'enterprises', 'people', 'communities']
237 asset_classes = [Product, Event, Article, Enterprise, Person, Community] 260 asset_classes = [Product, Event, Article, Enterprise, Person, Community]