Commit f4012a36daa7a996193a465f3c846f15be1f5742
Exists in
master
and in
29 other branches
Merge branch 'stable'
Showing
22 changed files
with
220 additions
and
133 deletions
Show diff stats
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 < PublicController | @@ -267,31 +273,34 @@ class SearchController < 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 < Organization | @@ -88,7 +88,7 @@ class Community < 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 < Profile | @@ -458,7 +458,7 @@ class Person < 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 | — | 13 | — |
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( \' \', 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 | + '…</span>' : '' ) + | ||
46 | + '<br style="clear: both;" />' | ||
47 | + end, | ||
27 | :type => :groupable | 48 | :type => :groupable |
28 | }, | 49 | }, |
29 | 50 |
debian/changelog
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 'fast_gettext' | @@ -2,7 +2,7 @@ require 'fast_gettext' | ||
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 < ActionController::TestCase | @@ -474,7 +474,7 @@ class ContentViewerControllerTest < 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 < ActionController::TestCase | @@ -503,7 +503,7 @@ class ContentViewerControllerTest < 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 < ActionController::TestCase | @@ -1139,8 +1139,10 @@ class ProfileControllerTest < 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/unit/community_test.rb
@@ -351,7 +351,7 @@ class CommunityTest < ActiveSupport::TestCase | @@ -351,7 +351,7 @@ class CommunityTest < 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 < ActiveSupport::TestCase | @@ -4,6 +4,28 @@ class SearchHelperTest < 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 < ActiveSupport::TestCase | @@ -35,6 +57,8 @@ class SearchHelperTest < 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 < ActiveSupport::TestCase | @@ -231,7 +255,6 @@ class SearchHelperTest < 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] |