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 15 should, unless Debian already released Squeeze by now), make sure you install
16 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 22 3) Enable varnish logging:
19 23  
20 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 19 unless @page
20 20 page_from_old_path = profile.articles.find_by_old_path(path)
21 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 23 return
24 24 end
25 25 end
... ...
app/controllers/public/search_controller.rb
... ... @@ -4,10 +4,17 @@ class SearchController < PublicController
4 4 include SearchHelper
5 5 include ActionView::Helpers::NumberHelper
6 6  
  7 + before_filter :redirect_asset_param, :except => [:facets_browse, :assets]
7 8 before_filter :load_category
8 9 before_filter :load_search_assets
9 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 18 no_design_blocks
12 19  
13 20 def facets_browse
... ... @@ -250,10 +257,9 @@ class SearchController < PublicController
250 257 end
251 258  
252 259 def limit
253   - searching = @searching.values.select{ |v| v }
254   - if params[:display] == 'map'
  260 + if map_search?
255 261 MAP_SEARCH_LIMIT
256   - elsif searching.size <= 1
  262 + elsif !multiple_search?
257 263 if [:people, :communities].include? @asset
258 264 BLOCKS_SEARCH_LIMIT
259 265 elsif @asset == :enterprises and @empty_query
... ... @@ -267,31 +273,34 @@ class SearchController &lt; PublicController
267 273 end
268 274  
269 275 def paginate_options(page = params[:page])
  276 + page = 1 if multiple_search? or params[:display] == 'map'
270 277 { :per_page => limit, :page => page }
271 278 end
272 279  
273 280 def full_text_search(filters = [], options = {})
274 281 paginate_options = paginate_options(params[:page])
275 282 asset_class = asset_class(@asset)
276   -
277 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 304 end
296 305 end
297 306  
... ...
app/helpers/search_helper.rb
... ... @@ -45,6 +45,14 @@ module SearchHelper
45 45 # FIXME remove it after search_controler refactored
46 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 56 def search_page_title(title, category = nil)
49 57 title = "<h1>" + title
50 58 title += '<small>' + category.name + '</small>' if category
... ... @@ -58,8 +66,8 @@ module SearchHelper
58 66 :align => 'center', :class => 'search-category-context') if category
59 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 71 partial = 'google_maps'
64 72 klass = 'map'
65 73 else
... ...
app/models/community.rb
... ... @@ -88,7 +88,7 @@ class Community &lt; Organization
88 88 end
89 89  
90 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 92 end
93 93  
94 94 end
... ...
app/models/person.rb
... ... @@ -458,7 +458,7 @@ class Person &lt; Profile
458 458 end
459 459  
460 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 462 end
463 463  
464 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 2 <% @order.each do |name| %>
3 3 <% results = @results[name] %>
4 4 <% empty = results.nil? || results.empty? %>
... ... @@ -7,7 +7,7 @@
7 7 <% if not empty %>
8 8 <% partial = partial_for_class(results.first.class.class_name.constantize) %>
9 9  
10   - <% if @results.size > 1 %>
  10 + <% if multiple_search? %>
11 11 <h3><%= @names[name] %></h3>
12 12 <% if results.total_entries > SearchController::MULTIPLE_SEARCH_LIMIT %>
13 13 <%= link_to(_('see all (%d)') % results.total_entries, params.merge(:action => name), :class => 'see-more' ) %>
... ... @@ -22,9 +22,10 @@
22 22 </ul>
23 23 </div>
24 24 <% else %>
25   - <% if @results.size > 1 %>
  25 + <% if multiple_search? %>
26 26 <h3><%= @names[name] %></h3>
27 27 <% end %>
  28 +
28 29 <div class="search-results-innerbox search-results-type-empty">
29 30 <div> <%= _('None') %> </div>
30 31 </div>
... ...
app/views/search/_profile.rhtml
1 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 3 <%= profile_image_link profile, :portrait, 'div',
4 4 @filter == 'more_recent' ? profile.send(@filter + '_label') + show_date(profile.created_at) : profile.send(@filter + '_label') %>
5 5 <% else %>
... ...
app/views/tasks/processed.rhtml
... ... @@ -7,7 +7,7 @@
7 7 <ul>
8 8 <% @tasks.each do |item| %>
9 9 <li>
10   - <strong><%= item.information %></strong> <br/>
  10 + <strong><%= task_information(item) %></strong> <br/>
11 11 <small>
12 12 <%= _('Created:') +' '+ show_date(item.created_at) %>
13 13 &nbsp; &#151; &nbsp;
... ...
config/initializers/action_tracker.rb
... ... @@ -23,7 +23,28 @@ ActionTrackerConfig.verbs = {
23 23 },
24 24  
25 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 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 7 noosfero (0.38.1) unstable; urgency=low
2 8  
3 9 * Bugfixes release
... ...
debian/control
... ... @@ -62,8 +62,7 @@ Description: free web-based platform for social networks
62 62  
63 63 Package: noosfero-apache
64 64 Architecture: all
65   -Depends: apache2, debconf
66   -Suggests: noosfero
  65 +Depends: apache2, debconf, noosfero
67 66 Description: free web-based platform for social networks (apache frontend)
68 67 Noosfero is a web platform for social and solidarity economy networks with
69 68 blog, e-Porfolios, CMS, RSS, thematic discussion, events agenda and collective
... ...
etc/noosfero/varnish-noosfero.vcl
1 1 sub vcl_recv {
  2 + if (req.request == "GET" || req.request == "HEAD") {
2 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 8 unset req.http.Cookie;
  9 + }
10 10 }
  11 + }
11 12 }
12 13  
13 14 sub vcl_error {
... ...
lib/noosfero.rb
... ... @@ -2,7 +2,7 @@ require &#39;fast_gettext&#39;
2 2  
3 3 module Noosfero
4 4 PROJECT = 'noosfero'
5   - VERSION = '0.38.1'
  5 + VERSION = '0.38.2'
6 6  
7 7 def self.pattern_for_controllers_in_directory(dir)
8 8 disjunction = controllers_in_directory(dir).join('|')
... ...
public/designs/templates/leftbar/stylesheets/style.css
... ... @@ -45,26 +45,25 @@
45 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 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 4733 }
4734 4734 #profile-activity li, #profile-network li, #profile-wall li {
4735 4735 display: block;
4736   - padding: 3px;
  4736 + padding: 3px 0px;
4737 4737 margin-bottom: 3px;
4738 4738 background-color: #fff;
4739 4739 border-bottom: 1px solid #e8e8e8;
4740 4740 position: relative;
4741 4741 }
4742 4742  
4743   -#profile-activity li, #profile-network li, #profile-wall li {
4744   -}
4745   -
4746 4743 .profile-activity-lead img {
4747 4744 width: 124px;
4748 4745 float: left;
... ... @@ -4806,75 +4803,79 @@ h1#agenda-title {
4806 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 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 4873 float: none;
  4874 + display: inline-block;
4875 4875 width: auto;
  4876 + max-width: 100%;
4876 4877 height: auto;
4877   - font-weight: normal;
  4878 + max-height: 300px;
4878 4879 }
4879 4880  
4880 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 474 get :view_page, :profile => p.identifier, :page => old_path
475 475  
476 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 478 end
479 479  
480 480 should 'load new article name equal of another article old name' do
... ... @@ -503,7 +503,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
503 503 get :view_page, :profile => p.identifier, :page => old_path
504 504  
505 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 507 end
508 508  
509 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 1139  
1140 1140 should "view more activities paginated" do
1141 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 1144 assert_equal 40, profile.tracked_actions.count
  1145 + assert_equal 40, profile.activities.count
1144 1146 get :view_more_activities, :profile => profile.identifier, :page => 2
1145 1147 assert_response :success
1146 1148 assert_template '_profile_activities_list'
... ...
test/integration/varnish_conf_test.rb 0 → 100644
... ... @@ -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 351 scrap = Scrap.create!(defaults_for_scrap(:sender => person, :receiver => community, :content => 'A scrap'))
352 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 355 end
356 356  
357 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 4  
5 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 29 should 'display search page title' do
8 30 title = 'page_title'
9 31 assert_equal search_page_title(title), '<h1>page_title</h1>'
... ... @@ -35,6 +57,8 @@ class SearchHelperTest &lt; ActiveSupport::TestCase
35 57  
36 58 should 'display results with map' do
37 59 stubs(:params).returns({:display => 'map'})
  60 + @query = 'test'
  61 + @results = {:products => [1,2]}
38 62 expects('render').with({:partial => 'google_maps'}).returns('render_return')
39 63 expects('content_tag').with('div', 'render_return', :class => 'map-or-list-search-results map')
40 64 display_results true
... ... @@ -231,7 +255,6 @@ class SearchHelperTest &lt; ActiveSupport::TestCase
231 255 end
232 256 end
233 257  
234   -
235 258 should 'return asset class from string' do
236 259 asset_names = ['products', 'events', 'articles', 'enterprises', 'people', 'communities']
237 260 asset_classes = [Product, Event, Article, Enterprise, Person, Community]
... ...