Commit 785b56adcdd6b0a026d4c734063d4705054b0e2f

Authored by Caio Almeida
2 parents cdd1f702 733814ea

Merge branch 'master' into field-of-interest

Showing 310 changed files with 2575 additions and 1519 deletions   Show diff stats
app/api/entities.rb
@@ -93,7 +93,9 @@ module Api @@ -93,7 +93,9 @@ module Api
93 class Box < Entity 93 class Box < Entity
94 root 'boxes', 'box' 94 root 'boxes', 'box'
95 expose :id, :position 95 expose :id, :position
96 - expose :blocks, :using => Block 96 + expose :blocks, :using => Block do |box, options|
  97 + box.blocks.select {|block| block.visible_to_user?(options[:current_person]) }
  98 + end
97 end 99 end
98 100
99 class Profile < Entity 101 class Profile < Entity
@@ -200,12 +202,21 @@ module Api @@ -200,12 +202,21 @@ module Api
200 expose :accept_comments?, as: :accept_comments 202 expose :accept_comments?, as: :accept_comments
201 end 203 end
202 204
  205 + def self.permissions_for_entity(entity, current_person, *method_names)
  206 + method_names.map { |method| entity.send(method, current_person) ? method.to_s.gsub(/\?/,'') : nil }.compact
  207 + end
  208 +
203 class Article < ArticleBase 209 class Article < ArticleBase
204 root 'articles', 'article' 210 root 'articles', 'article'
205 expose :parent, :using => ArticleBase 211 expose :parent, :using => ArticleBase
206 expose :children, :using => ArticleBase do |article, options| 212 expose :children, :using => ArticleBase do |article, options|
207 article.children.published.limit(V1::Articles::MAX_PER_PAGE) 213 article.children.published.limit(V1::Articles::MAX_PER_PAGE)
208 end 214 end
  215 + expose :permissions do |article, options|
  216 + Entities.permissions_for_entity(article, options[:current_person],
  217 + :allow_edit?, :allow_post_content?, :allow_delete?, :allow_create?,
  218 + :allow_publish_content?)
  219 + end
209 end 220 end
210 221
211 class User < Entity 222 class User < Entity
app/api/helpers.rb
@@ -121,7 +121,7 @@ module Api @@ -121,7 +121,7 @@ module Api
121 121
122 def present_article(asset) 122 def present_article(asset)
123 article = find_article(asset.articles, params[:id]) 123 article = find_article(asset.articles, params[:id])
124 - present_partial article, :with => Entities::Article, :params => params 124 + present_partial article, with: Entities::Article, params: params, current_person: current_person
125 end 125 end
126 126
127 def present_articles_for_asset(asset, method = 'articles') 127 def present_articles_for_asset(asset, method = 'articles')
@@ -130,7 +130,7 @@ module Api @@ -130,7 +130,7 @@ module Api
130 end 130 end
131 131
132 def present_articles(articles) 132 def present_articles(articles)
133 - present_partial paginate(articles), :with => Entities::Article, :params => params 133 + present_partial paginate(articles), :with => Entities::Article, :params => params, current_person: current_person
134 end 134 end
135 135
136 def find_articles(asset, method = 'articles') 136 def find_articles(asset, method = 'articles')
@@ -407,9 +407,11 @@ module Api @@ -407,9 +407,11 @@ module Api
407 407
408 def parse_content_type(content_type) 408 def parse_content_type(content_type)
409 return nil if content_type.blank? 409 return nil if content_type.blank?
410 - content_type.split(',').map do |content_type|  
411 - content_type.camelcase 410 + content_types = content_type.split(',').map do |content_type|
  411 + content_type = content_type.camelcase
  412 + content_type == 'TextArticle' ? Article.text_article_types : content_type
412 end 413 end
  414 + content_types.flatten.uniq
413 end 415 end
414 416
415 def period(from_date, until_date) 417 def period(from_date, until_date)
app/api/v1/activities.rb
1 module Api 1 module Api
2 module V1 2 module V1
3 class Activities < Grape::API 3 class Activities < Grape::API
4 - before { authenticate! }  
5 4
6 resource :profiles do 5 resource :profiles do
7 6
@@ -9,7 +8,7 @@ module Api @@ -9,7 +8,7 @@ module Api
9 profile = Profile.find_by id: params[:id] 8 profile = Profile.find_by id: params[:id]
10 9
11 not_found! if profile.blank? || profile.secret || !profile.visible 10 not_found! if profile.blank? || profile.secret || !profile.visible
12 - forbidden! if !profile.secret && profile.visible && !profile.display_private_info_to?(current_person) 11 + forbidden! if !profile.display_private_info_to?(current_person)
13 12
14 activities = profile.activities.map(&:activity) 13 activities = profile.activities.map(&:activity)
15 present activities, :with => Entities::Activity, :current_person => current_person 14 present activities, :with => Entities::Activity, :current_person => current_person
app/api/v1/articles.rb
@@ -54,6 +54,17 @@ module Api @@ -54,6 +54,17 @@ module Api
54 present_partial article, :with => Entities::Article 54 present_partial article, :with => Entities::Article
55 end 55 end
56 56
  57 + delete ':id' do
  58 + article = environment.articles.find(params[:id])
  59 + return forbidden! unless article.allow_delete?(current_person)
  60 + begin
  61 + article.destroy
  62 + { :success => true }
  63 + rescue Exception => exception
  64 + render_api_error!(_('The article couldn\'t be removed due to some problem. Please contact the administrator.'), 400)
  65 + end
  66 + end
  67 +
57 desc 'Report a abuse and/or violent content in a article by id' do 68 desc 'Report a abuse and/or violent content in a article by id' do
58 detail 'Submit a abuse (in general, a content violation) report about a specific article' 69 detail 'Submit a abuse (in general, a content violation) report about a specific article'
59 params Entities::Article.documentation 70 params Entities::Article.documentation
@@ -262,7 +273,7 @@ module Api @@ -262,7 +273,7 @@ module Api
262 article = forbidden! 273 article = forbidden!
263 end 274 end
264 275
265 - present_partial article, :with => Entities::Article 276 + present_partial article, :with => Entities::Article, current_person: current_person
266 else 277 else
267 278
268 present_articles_for_asset(profile) 279 present_articles_for_asset(profile)
app/api/v1/boxes.rb
@@ -12,7 +12,8 @@ module Api @@ -12,7 +12,8 @@ module Api
12 resource :boxes do 12 resource :boxes do
13 get do 13 get do
14 profile = environment.send(kind.pluralize).find(params["#{kind}_id"]) 14 profile = environment.send(kind.pluralize).find(params["#{kind}_id"])
15 - present profile.boxes, :with => Entities::Box 15 + return forbidden! unless profile.display_info_to?(current_person)
  16 + present profile.boxes, with: Entities::Box, current_person: current_person
16 end 17 end
17 end 18 end
18 end 19 end
@@ -32,7 +33,7 @@ module Api @@ -32,7 +33,7 @@ module Api
32 else 33 else
33 env = Environment.find(params[:environment_id]) 34 env = Environment.find(params[:environment_id])
34 end 35 end
35 - present env.boxes, :with => Entities::Box 36 + present env.boxes, with: Entities::Box, current_person: current_person
36 end 37 end
37 end 38 end
38 end 39 end
app/api/v1/comments.rb
@@ -34,6 +34,7 @@ module Api @@ -34,6 +34,7 @@ module Api
34 post ":id/comments" do 34 post ":id/comments" do
35 authenticate! 35 authenticate!
36 article = find_article(environment.articles, params[:id]) 36 article = find_article(environment.articles, params[:id])
  37 + return forbidden! unless article.accept_comments?
37 options = params.select { |key,v| !['id','private_token'].include?(key) }.merge(:author => current_person, :source => article) 38 options = params.select { |key,v| !['id','private_token'].include?(key) }.merge(:author => current_person, :source => article)
38 begin 39 begin
39 comment = Comment.create!(options) 40 comment = Comment.create!(options)
@@ -42,6 +43,19 @@ module Api @@ -42,6 +43,19 @@ module Api
42 end 43 end
43 present comment, :with => Entities::Comment, :current_person => current_person 44 present comment, :with => Entities::Comment, :current_person => current_person
44 end 45 end
  46 +
  47 + delete ":id/comments/:comment_id" do
  48 + article = find_article(environment.articles, params[:id])
  49 + comment = article.comments.find_by_id(params[:comment_id])
  50 + return not_found! if comment.nil?
  51 + return forbidden! unless comment.can_be_destroyed_by?(current_person)
  52 + begin
  53 + comment.destroy
  54 + present comment, with: Entities::Comment, :current_person => current_person
  55 + rescue => e
  56 + render_api_error!(e.message, 500)
  57 + end
  58 + end
45 end 59 end
46 60
47 end 61 end
app/api/v1/profiles.rb
@@ -22,6 +22,15 @@ module Api @@ -22,6 +22,15 @@ module Api
22 not_found! 22 not_found!
23 end 23 end
24 end 24 end
  25 +
  26 + desc "Update profile information"
  27 + post ':id' do
  28 + authenticate!
  29 + profile = environment.profiles.find_by(id: params[:id])
  30 + return forbidden! unless current_person.has_permission?(:edit_profile, profile)
  31 + profile.update_attributes!(params[:profile])
  32 + present profile, :with => Entities::Profile, :current_person => current_person
  33 + end
25 34
26 delete ':id' do 35 delete ':id' do
27 authenticate! 36 authenticate!
app/concerns/authenticated_system.rb 0 → 100644
@@ -0,0 +1,169 @@ @@ -0,0 +1,169 @@
  1 +module AuthenticatedSystem
  2 +
  3 + protected
  4 +
  5 + extend ActiveSupport::Concern
  6 +
  7 + included do
  8 + if self < ActionController::Base
  9 + around_filter :user_set_current
  10 + before_filter :override_user
  11 + before_filter :login_from_cookie
  12 + end
  13 +
  14 + # Inclusion hook to make #current_user and #logged_in?
  15 + # available as ActionView helper methods.
  16 + helper_method :current_user, :logged_in?
  17 + end
  18 +
  19 + # Returns true or false if the user is logged in.
  20 + # Preloads @current_user with the user model if they're logged in.
  21 + def logged_in?
  22 + current_user != nil
  23 + end
  24 +
  25 + # Accesses the current user from the session.
  26 + def current_user user_id = session[:user]
  27 + @current_user ||= begin
  28 + user = User.find_by id: user_id if user_id
  29 + user.session = session if user
  30 + User.current = user
  31 + user
  32 + end
  33 + end
  34 +
  35 + # Store the given user in the session.
  36 + def current_user=(new_user)
  37 + if new_user.nil?
  38 + session.delete(:user)
  39 + else
  40 + session[:user] = new_user.id
  41 + new_user.session = session
  42 + new_user.register_login
  43 + end
  44 + @current_user = User.current = new_user
  45 + end
  46 +
  47 + # See impl. from http://stackoverflow.com/a/2513456/670229
  48 + def user_set_current
  49 + User.current = current_user
  50 + yield
  51 + ensure
  52 + # to address the thread variable leak issues in Puma/Thin webserver
  53 + User.current = nil
  54 + end
  55 +
  56 + # Check if the user is authorized.
  57 + #
  58 + # Override this method in your controllers if you want to restrict access
  59 + # to only a few actions or if you want to check if the user
  60 + # has the correct rights.
  61 + #
  62 + # Example:
  63 + #
  64 + # # only allow nonbobs
  65 + # def authorize?
  66 + # current_user.login != "bob"
  67 + # end
  68 + def authorized?
  69 + true
  70 + end
  71 +
  72 + # Filter method to enforce a login requirement.
  73 + #
  74 + # To require logins for all actions, use this in your controllers:
  75 + #
  76 + # before_filter :login_required
  77 + #
  78 + # To require logins for specific actions, use this in your controllers:
  79 + #
  80 + # before_filter :login_required, :only => [ :edit, :update ]
  81 + #
  82 + # To skip this in a subclassed controller:
  83 + #
  84 + # skip_before_filter :login_required
  85 + #
  86 + def login_required
  87 + username, passwd = get_auth_data
  88 + if username && passwd
  89 + self.current_user ||= User.authenticate(username, passwd) || nil
  90 + end
  91 + if logged_in? && authorized?
  92 + true
  93 + else
  94 + if params[:require_login_popup]
  95 + render :json => { :require_login_popup => true }
  96 + else
  97 + access_denied
  98 + end
  99 + end
  100 + end
  101 +
  102 + # Redirect as appropriate when an access request fails.
  103 + #
  104 + # The default action is to redirect to the login screen.
  105 + #
  106 + # Override this method in your controllers if you want to have special
  107 + # behavior in case the user is not authorized
  108 + # to access the requested action. For example, a popup window might
  109 + # simply close itself.
  110 + def access_denied
  111 + respond_to do |accepts|
  112 + accepts.html do
  113 + if request.xhr?
  114 + render :text => _('Access denied'), :status => 401
  115 + else
  116 + store_location
  117 + redirect_to :controller => '/account', :action => 'login'
  118 + end
  119 + end
  120 + accepts.xml do
  121 + headers["Status"] = "Unauthorized"
  122 + headers["WWW-Authenticate"] = %(Basic realm="Web Password")
  123 + render :text => "Could't authenticate you", :status => '401 Unauthorized'
  124 + end
  125 + end
  126 + false
  127 + end
  128 +
  129 + # Store the URI of the current request in the session.
  130 + #
  131 + # We can return to this location by calling #redirect_back_or_default.
  132 + def store_location(location = request.url)
  133 + session[:return_to] = location
  134 + end
  135 +
  136 + # Redirect to the URI stored by the most recent store_location call or
  137 + # to the passed default.
  138 + def redirect_back_or_default(default)
  139 + if session[:return_to]
  140 + redirect_to(session.delete(:return_to))
  141 + else
  142 + redirect_to(default)
  143 + end
  144 + end
  145 +
  146 + def override_user
  147 + return if params[:override_user].blank?
  148 + return unless logged_in? and user.is_admin? environment
  149 + @current_user = nil
  150 + current_user params[:override_user]
  151 + end
  152 +
  153 + # When called with before_filter :login_from_cookie will check for an :auth_token
  154 + # cookie and log the user back in if apropriate
  155 + def login_from_cookie
  156 + return if cookies[:auth_token].blank? or logged_in?
  157 + user = User.where(remember_token: cookies[:auth_token]).first
  158 + self.current_user = user if user and user.remember_token?
  159 + end
  160 +
  161 + private
  162 + @@http_auth_headers = %w(X-HTTP_AUTHORIZATION HTTP_AUTHORIZATION Authorization)
  163 + # gets BASIC auth info
  164 + def get_auth_data
  165 + auth_key = @@http_auth_headers.detect { |h| request.env.has_key?(h) }
  166 + auth_data = request.env[auth_key].to_s.split unless auth_key.blank?
  167 + return auth_data && auth_data[0] == 'Basic' ? Base64.decode64(auth_data[1]).split(':')[0..1] : [nil, nil]
  168 + end
  169 +end
app/controllers/application_controller.rb
@@ -13,6 +13,13 @@ class ApplicationController &lt; ActionController::Base @@ -13,6 +13,13 @@ class ApplicationController &lt; ActionController::Base
13 before_filter :verify_members_whitelist, :if => [:private_environment?, :user] 13 before_filter :verify_members_whitelist, :if => [:private_environment?, :user]
14 before_filter :redirect_to_current_user 14 before_filter :redirect_to_current_user
15 15
  16 + before_filter :set_session_theme
  17 + def set_session_theme
  18 + if params[:theme]
  19 + session[:theme] = environment.theme_ids.include?(params[:theme]) ? params[:theme] : nil
  20 + end
  21 + end
  22 +
16 def require_login_for_environment 23 def require_login_for_environment
17 login_required 24 login_required
18 end 25 end
app/controllers/my_profile/profile_themes_controller.rb
@@ -63,12 +63,12 @@ class ProfileThemesController &lt; ThemesController @@ -63,12 +63,12 @@ class ProfileThemesController &lt; ThemesController
63 end 63 end
64 64
65 def start_test 65 def start_test
66 - session[:theme] = params[:id] 66 + session[:user_theme] = params[:id]
67 redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page' 67 redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page'
68 end 68 end
69 69
70 def stop_test 70 def stop_test
71 - session[:theme] = nil 71 + session[:user_theme] = nil
72 redirect_to :action => 'index' 72 redirect_to :action => 'index'
73 end 73 end
74 74
app/controllers/public/content_viewer_controller.rb
@@ -209,7 +209,7 @@ class ContentViewerController &lt; ApplicationController @@ -209,7 +209,7 @@ class ContentViewerController &lt; ApplicationController
209 end 209 end
210 210
211 if @page.published && @page.uploaded_file? 211 if @page.published && @page.uploaded_file?
212 - redirect_to @page.public_filename 212 + redirect_to "#{Noosfero.root}#{@page.public_filename}"
213 else 213 else
214 send_data data, @page.download_headers 214 send_data data, @page.download_headers
215 end 215 end
app/helpers/application_helper.rb
@@ -233,13 +233,6 @@ module ApplicationHelper @@ -233,13 +233,6 @@ module ApplicationHelper
233 link_to(content_tag('span', text), url, html_options.merge(:class => the_class, :title => text)) 233 link_to(content_tag('span', text), url, html_options.merge(:class => the_class, :title => text))
234 end 234 end
235 235
236 - def button_bar(options = {}, &block)  
237 - options[:class].nil? ?  
238 - options[:class]='button-bar' :  
239 - options[:class]+=' button-bar'  
240 - concat(content_tag('div', capture(&block).to_s + tag('br', :style => 'clear: left;'), options))  
241 - end  
242 -  
243 def render_profile_actions klass 236 def render_profile_actions klass
244 name = klass.to_s.underscore 237 name = klass.to_s.underscore
245 begin 238 begin
@@ -351,7 +344,7 @@ module ApplicationHelper @@ -351,7 +344,7 @@ module ApplicationHelper
351 end 344 end
352 345
353 def is_testing_theme 346 def is_testing_theme
354 - !controller.session[:theme].nil? 347 + !controller.session[:user_theme].nil?
355 end 348 end
356 349
357 def theme_owner 350 def theme_owner
@@ -600,8 +593,8 @@ module ApplicationHelper @@ -600,8 +593,8 @@ module ApplicationHelper
600 end 593 end
601 594
602 if block 595 if block
603 - field_html ||= ''  
604 - field_html += capture(&block) 596 + field_html ||= ''.html_safe
  597 + field_html = [field_html, capture(&block)].safe_join
605 end 598 end
606 599
607 if controller.action_name == 'signup' || controller.action_name == 'new_community' || (controller.controller_name == "enterprise_registration" && controller.action_name == 'index') || (controller.controller_name == 'home' && controller.action_name == 'index' && user.nil?) 600 if controller.action_name == 'signup' || controller.action_name == 'new_community' || (controller.controller_name == "enterprise_registration" && controller.action_name == 'index') || (controller.controller_name == 'home' && controller.action_name == 'index' && user.nil?)
@@ -610,7 +603,9 @@ module ApplicationHelper @@ -610,7 +603,9 @@ module ApplicationHelper
610 end 603 end
611 else 604 else
612 if profile.active_fields.include?(name) 605 if profile.active_fields.include?(name)
613 - result = content_tag('div', field_html + profile_field_privacy_selector(profile, name), :class => 'field-with-privacy-selector') 606 + result = content_tag :div, class: 'field-with-privacy-selector' do
  607 + [field_html, profile_field_privacy_selector(profile, name)].safe_join
  608 + end
614 end 609 end
615 end 610 end
616 611
@@ -618,10 +613,6 @@ module ApplicationHelper @@ -618,10 +613,6 @@ module ApplicationHelper
618 result = required(result) 613 result = required(result)
619 end 614 end
620 615
621 - if block  
622 - concat(result)  
623 - end  
624 -  
625 result 616 result
626 end 617 end
627 618
@@ -866,7 +857,7 @@ module ApplicationHelper @@ -866,7 +857,7 @@ module ApplicationHelper
866 alias :browse_communities_menu :search_communities_menu 857 alias :browse_communities_menu :search_communities_menu
867 858
868 def pagination_links(collection, options={}) 859 def pagination_links(collection, options={})
869 - options = {:previous_label => content_tag(:span, '&laquo; ', :class => 'previous-arrow') + _('Previous'), :next_label => _('Next') + content_tag(:span, ' &raquo;', :class => 'next-arrow'), :inner_window => 1, :outer_window => 0 }.merge(options) 860 + options = {:previous_label => content_tag(:span, '&laquo; '.html_safe, :class => 'previous-arrow') + _('Previous'), :next_label => _('Next') + content_tag(:span, ' &raquo;'.html_safe, :class => 'next-arrow'), :inner_window => 1, :outer_window => 0 }.merge(options)
870 will_paginate(collection, options) 861 will_paginate(collection, options)
871 end 862 end
872 863
@@ -988,6 +979,7 @@ module ApplicationHelper @@ -988,6 +979,7 @@ module ApplicationHelper
988 values = {} 979 values = {}
989 values.merge!(task.information[:variables]) if task.information[:variables] 980 values.merge!(task.information[:variables]) if task.information[:variables]
990 values.merge!({:requestor => link_to(task.requestor.name, task.requestor.url)}) if task.requestor 981 values.merge!({:requestor => link_to(task.requestor.name, task.requestor.url)}) if task.requestor
  982 + values.merge!({:target => link_to(task.target.name, task.target.url)}) if (task.target && task.target.respond_to?(:url))
991 values.merge!({:subject => content_tag('span', task.subject, :class=>'task_target')}) if task.subject 983 values.merge!({:subject => content_tag('span', task.subject, :class=>'task_target')}) if task.subject
992 values.merge!({:linked_subject => link_to(content_tag('span', task.linked_subject[:text], :class => 'task_target'), task.linked_subject[:url])}) if task.linked_subject 984 values.merge!({:linked_subject => link_to(content_tag('span', task.linked_subject[:text], :class => 'task_target'), task.linked_subject[:url])}) if task.linked_subject
993 (task.information[:message] % values).html_safe 985 (task.information[:message] % values).html_safe
@@ -1138,7 +1130,7 @@ module ApplicationHelper @@ -1138,7 +1130,7 @@ module ApplicationHelper
1138 content_tag(:div, :class => 'errorExplanation', :id => 'errorExplanation') do 1130 content_tag(:div, :class => 'errorExplanation', :id => 'errorExplanation') do
1139 content_tag(:h2, _('Errors while saving')) + 1131 content_tag(:h2, _('Errors while saving')) +
1140 content_tag(:ul) do 1132 content_tag(:ul) do
1141 - safe_join(errors.map { |err| content_tag(:li, err) }) 1133 + safe_join(errors.map { |err| content_tag(:li, err.html_safe) })
1142 end 1134 end
1143 end 1135 end
1144 end 1136 end
app/helpers/article_helper.rb
@@ -187,9 +187,9 @@ module ArticleHelper @@ -187,9 +187,9 @@ module ArticleHelper
187 def following_button(page, user) 187 def following_button(page, user)
188 if !user.blank? and user != page.author 188 if !user.blank? and user != page.author
189 if page.is_followed_by? user 189 if page.is_followed_by? user
190 - button :cancel, unfollow_button_text(page), {:controller => 'profile', :action => 'unfollow_article', :article_id => page.id, :profile => page.profile.identifier} 190 + button :cancel, unfollow_button_text(page), {controller: :profile, profile: page.profile.identifier, action: :unfollow_article, article_id: page.id}
191 else 191 else
192 - button :add, follow_button_text(page), {:controller => 'profile', :action => 'follow_article', :article_id => page.id, :profile => page.profile.identifier} 192 + button :add, follow_button_text(page), {controller: :profile, profile: page.profile.identifier, action: :follow_article, article_id: page.id}
193 end 193 end
194 end 194 end
195 end 195 end
app/helpers/boxes_helper.rb
@@ -99,15 +99,10 @@ module BoxesHelper @@ -99,15 +99,10 @@ module BoxesHelper
99 end 99 end
100 100
101 def render_block_content block 101 def render_block_content block
102 - # FIXME: this conditional should be removed after all  
103 - # block footer from plugins methods get refactored into helpers and views.  
104 - # They are a failsafe until all of them are done.  
105 - return block.content if block.method(:content).owner != Block  
106 render_block block 102 render_block block
107 end 103 end
108 104
109 def render_block_footer block 105 def render_block_footer block
110 - return block.footer if block.method(:footer).owner != Block  
111 render_block block, 'footers/' 106 render_block block, 'footers/'
112 end 107 end
113 108
app/helpers/buttons_helper.rb
1 module ButtonsHelper 1 module ButtonsHelper
  2 +
  3 + def button_bar(options = {}, &block)
  4 + options[:class] ||= ''
  5 + options[:class] << ' button-bar'
  6 +
  7 + content_tag :div, options do
  8 + [
  9 + capture(&block).to_s,
  10 + tag(:br, style: 'clear: left;'),
  11 + ].safe_join
  12 + end
  13 + end
  14 +
2 def button(type, label, url, html_options = {}) 15 def button(type, label, url, html_options = {})
3 html_options ||= {} 16 html_options ||= {}
4 the_class = 'with-text' 17 the_class = 'with-text'
app/helpers/custom_fields_helper.rb
@@ -61,6 +61,6 @@ module CustomFieldsHelper @@ -61,6 +61,6 @@ module CustomFieldsHelper
61 61
62 def form_for_format(customized_type, format) 62 def form_for_format(customized_type, format)
63 field = CustomField.new(:format => format, :customized_type => customized_type, :environment => environment) 63 field = CustomField.new(:format => format, :customized_type => customized_type, :environment => environment)
64 - CGI::escapeHTML((render(:partial => 'features/custom_fields/form', :locals => {:field => field}))) 64 + CGI::escapeHTML((render(:partial => 'features/custom_fields/form', :locals => {:field => field}))).html_safe
65 end 65 end
66 end 66 end
app/helpers/theme_loader_helper.rb
@@ -2,8 +2,8 @@ module ThemeLoaderHelper @@ -2,8 +2,8 @@ module ThemeLoaderHelper
2 def current_theme 2 def current_theme
3 @current_theme ||= 3 @current_theme ||=
4 begin 4 begin
5 - if session[:theme]  
6 - session[:theme] 5 + if session[:user_theme]
  6 + session[:user_theme]
7 else 7 else
8 # utility for developers: set the theme to 'random' in development mode and 8 # utility for developers: set the theme to 'random' in development mode and
9 # you will get a different theme every request. This is interesting for 9 # you will get a different theme every request. This is interesting for
@@ -11,8 +11,8 @@ module ThemeLoaderHelper @@ -11,8 +11,8 @@ module ThemeLoaderHelper
11 if Rails.env.development? && environment.theme == 'random' 11 if Rails.env.development? && environment.theme == 'random'
12 @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand 12 @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand
13 @random_theme 13 @random_theme
14 - elsif Rails.env.development? && respond_to?(:params) && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme]))  
15 - params[:theme] 14 + elsif Rails.env.development? && respond_to?(:params) && params[:user_theme] && File.exists?(Rails.root.join('public/designs/themes', params[:user_theme]))
  15 + params[:user_theme]
16 else 16 else
17 if profile && !profile.theme.nil? 17 if profile && !profile.theme.nil?
18 profile.theme 18 profile.theme
@@ -34,8 +34,10 @@ module ThemeLoaderHelper @@ -34,8 +34,10 @@ module ThemeLoaderHelper
34 end 34 end
35 35
36 def theme_path 36 def theme_path
37 - if session[:theme] 37 + if session[:user_theme]
38 '/user_themes/' + current_theme 38 '/user_themes/' + current_theme
  39 + elsif session[:theme]
  40 + '/designs/themes/' + session[:theme]
39 else 41 else
40 '/designs/themes/' + current_theme 42 '/designs/themes/' + current_theme
41 end 43 end
app/helpers/url_helper.rb
@@ -4,4 +4,12 @@ module UrlHelper @@ -4,4 +4,12 @@ module UrlHelper
4 'javascript:history.back()' 4 'javascript:history.back()'
5 end 5 end
6 6
  7 + def default_url_options
  8 + options = {}
  9 +
  10 + options[:override_user] = params[:override_user] if params[:override_user].present?
  11 +
  12 + options
  13 + end
  14 +
7 end 15 end
app/helpers/users_helper.rb
1 module UsersHelper 1 module UsersHelper
2 2
3 - FILTER_TRANSLATION = { 3 + def filter_translation
  4 + {
4 'all_users' => _('All users'), 5 'all_users' => _('All users'),
5 'admin_users' => _('Admin users'), 6 'admin_users' => _('Admin users'),
6 'activated_users' => _('Activated users'), 7 'activated_users' => _('Activated users'),
7 'deactivated_users' => _('Deativated users'), 8 'deactivated_users' => _('Deativated users'),
8 - } 9 + }
  10 + end
9 11
10 def filter_selector(filter, float = 'right') 12 def filter_selector(filter, float = 'right')
11 - options = options_for_select(FILTER_TRANSLATION.map {|key, name| [name, key]}, :selected => filter) 13 + options = options_for_select(filter_translation.map {|key, name| [name, key]}, :selected => filter)
12 url_params = url_for(params.merge(:filter => 'FILTER')) 14 url_params = url_for(params.merge(:filter => 'FILTER'))
13 onchange = "document.location.href = '#{url_params}'.replace('FILTER', this.value)" 15 onchange = "document.location.href = '#{url_params}'.replace('FILTER', this.value)"
14 select_field = select_tag(:filter, options, :onchange => onchange) 16 select_field = select_tag(:filter, options, :onchange => onchange)
@@ -19,7 +21,7 @@ module UsersHelper @@ -19,7 +21,7 @@ module UsersHelper
19 end 21 end
20 22
21 def users_filter_title(filter) 23 def users_filter_title(filter)
22 - FILTER_TRANSLATION[filter] 24 + filter_translation[filter]
23 end 25 end
24 26
25 end 27 end
app/jobs/download_reported_images_job.rb 0 → 100644
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
  1 +class DownloadReportedImagesJob < Struct.new(:abuse_report, :article)
  2 + def perform
  3 + images_paths = article.image? ? [File.join(article.profile.environment.top_url, article.public_filename(:display))] : article.body_images_paths
  4 + images_paths.each do |image_path|
  5 + image = get_image(image_path)
  6 + reported_image = ReportedImage.create!( :abuse_report => abuse_report,
  7 + :uploaded_data => image,
  8 + :filename => File.basename(image_path),
  9 + :size => image.size )
  10 + abuse_report.content = parse_content(abuse_report, image_path, reported_image)
  11 + end
  12 + abuse_report.save!
  13 + end
  14 +
  15 + def get_image(image_path)
  16 + image = ActionController::UploadedTempfile.new('reported_image')
  17 + image.write(Net::HTTP.get(URI.parse(image_path)))
  18 + image.original_path = 'tmp/' + File.basename(image_path)
  19 + image.content_type = 'image/' + File.extname(image_path).gsub('.','')
  20 + image
  21 + end
  22 +
  23 + def parse_content(report, old_path, image)
  24 + old_path = old_path.gsub(report.reporter.environment.top_url, '')
  25 + report.content.gsub(/#{old_path}/, image.public_filename)
  26 + end
  27 +end
app/jobs/get_email_contacts_job.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +class GetEmailContactsJob < Struct.new(:import_from, :login, :password, :contact_list_id)
  2 + def perform
  3 + begin
  4 + Invitation.get_contacts(import_from, login, password, contact_list_id)
  5 + rescue Contacts::AuthenticationError => ex
  6 + ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).register_auth_error
  7 + rescue Exception => ex
  8 + ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).register_error
  9 + end
  10 + end
  11 +end
app/jobs/invitation_job.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +class InvitationJob < Struct.new(:person_id, :contacts_to_invite, :message, :profile_id, :contact_list_id, :locale)
  2 + def perform
  3 + Noosfero.with_locale(locale) do
  4 + person = Person.find(person_id)
  5 + profile = Profile.find(profile_id)
  6 + Invitation.invite(person, contacts_to_invite, message, profile)
  7 + ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).destroy
  8 + end
  9 + end
  10 +end
app/jobs/log_memory_consumption_job.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +class LogMemoryConsumptionJob < Struct.new(:last_stat)
  2 + # Number of entries do display
  3 + N = 20
  4 +
  5 + def perform
  6 + logpath = File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_memory_consumption.log")
  7 + logger = Logger.new(logpath)
  8 + stats = Hash.new(0)
  9 + ObjectSpace.each_object {|o| stats[o.class.to_s] += 1}
  10 + i = 1
  11 +
  12 + logger << "[#{Time.now.strftime('%F %T %z')}]\n"
  13 + stats.sort {|(k1,v1),(k2,v2)| v2 <=> v1}.each do |k,v|
  14 + logger << (sprintf "%-60s %10d", k, v)
  15 + logger << (sprintf " | delta %10d", (v - last_stat[k])) if last_stat && last_stat[k]
  16 + logger << "\n"
  17 + break if i > N
  18 + i += 1
  19 + end
  20 + logger << "\n"
  21 + end
  22 +end
app/jobs/mailing_job.rb 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +class MailingJob < Struct.new(:mailing_id)
  2 + def perform
  3 + mailing = Mailing.find(mailing_id)
  4 + Noosfero.with_locale(mailing.locale) do
  5 + mailing.deliver
  6 + end
  7 + end
  8 +end
app/jobs/notify_activity_to_profiles_job.rb 0 → 100644
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
  1 +class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id)
  2 + NOTIFY_ONLY_COMMUNITY = [
  3 + 'add_member_in_community'
  4 + ]
  5 +
  6 + NOT_NOTIFY_COMMUNITY = [
  7 + 'join_community'
  8 + ]
  9 + def perform
  10 + return unless ActionTracker::Record.exists?(tracked_action_id)
  11 + tracked_action = ActionTracker::Record.find(tracked_action_id)
  12 + return unless tracked_action.user.present?
  13 + target = tracked_action.target
  14 + if target.is_a?(Community) && ( NOTIFY_ONLY_COMMUNITY.include?(tracked_action.verb) || ! target.public_profile )
  15 + ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id)
  16 + return
  17 + end
  18 +
  19 + # Notify the user
  20 + ActionTrackerNotification.create(:profile_id => tracked_action.user.id, :action_tracker_id => tracked_action.id)
  21 +
  22 + # Notify all friends
  23 + ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select f.friend_id, #{tracked_action.id} from friendships as f where person_id=#{tracked_action.user.id} and f.friend_id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id})")
  24 +
  25 + if tracked_action.user.is_a? Organization
  26 + ActionTrackerNotification.connection.execute "insert into action_tracker_notifications(profile_id, action_tracker_id) " +
  27 + "select distinct accessor_id, #{tracked_action.id} from role_assignments where resource_id = #{tracked_action.user.id} and resource_type='Profile' " +
  28 + if tracked_action.user.is_a? Enterprise then "union select distinct person_id, #{tracked_action.id} from favorite_enterprise_people where enterprise_id = #{tracked_action.user.id}" else "" end
  29 + end
  30 +
  31 + if target.is_a?(Community)
  32 + ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb)
  33 +
  34 + ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select distinct profiles.id, #{tracked_action.id} from role_assignments, profiles where profiles.type = 'Person' and profiles.id = role_assignments.accessor_id and profiles.id != #{tracked_action.user.id} and profiles.id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id}) and role_assignments.resource_type = 'Profile' and role_assignments.resource_id = #{target.id}")
  35 + end
  36 +
  37 + if target.is_a?(Article) && target.profile.is_a?(Community)
  38 + ActionTrackerNotification.create(:profile_id => target.profile.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb)
  39 +
  40 + ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select distinct profiles.id, #{tracked_action.id} from role_assignments, profiles where profiles.type = 'Person' and profiles.id = role_assignments.accessor_id and profiles.id != #{tracked_action.user.id} and profiles.id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id}) and role_assignments.resource_type = 'Profile' and role_assignments.resource_id = #{target.profile.id}")
  41 + end
  42 +
  43 + end
  44 +end
app/jobs/profile_suggestions_job.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +class ProfileSuggestionsJob < Struct.new(:person_id)
  2 +
  3 + def self.exists?(person_id)
  4 + !find(person_id).empty?
  5 + end
  6 +
  7 + def self.find(person_id)
  8 + Delayed::Job.by_handler("--- !ruby/struct:ProfileSuggestionsJob\nperson_id: #{person_id}\n")
  9 + end
  10 +
  11 + def perform
  12 + logger = Delayed::Worker.logger
  13 + begin
  14 + person = Person.find(person_id)
  15 + ProfileSuggestion.calculate_suggestions(person)
  16 + UserMailer.profiles_suggestions_email(person).deliver if person.email_suggestions
  17 + rescue Exception => exception
  18 + logger.error("Error with suggestions for person ID %d: %s" % [person_id, exception.to_s])
  19 + end
  20 + end
  21 +
  22 +end
app/jobs/user_activation_job.rb 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +class UserActivationJob < Struct.new(:user_id)
  2 + def perform
  3 + user = User.find(user_id)
  4 + user.destroy unless user.activated? || user.person.is_template? || user.moderate_registration_pending?
  5 + end
  6 +end
app/models/add_member.rb
@@ -37,6 +37,10 @@ class AddMember &lt; Task @@ -37,6 +37,10 @@ class AddMember &lt; Task
37 true 37 true
38 end 38 end
39 39
  40 + def reject_details
  41 + true
  42 + end
  43 +
40 def footer 44 def footer
41 true 45 true
42 end 46 end
@@ -72,8 +76,9 @@ class AddMember &lt; Task @@ -72,8 +76,9 @@ class AddMember &lt; Task
72 end 76 end
73 77
74 def task_cancelled_message 78 def task_cancelled_message
75 - _("Your request to enter community \"%{target} with the profile \"%{requestor}\" was not accepted. Please contact any profile admin from %{url} for more information.") %  
76 - {:target => self.target.name, :url => self.target.url,  
77 - :requestor => self.requestor.name} 79 + _("Your request to enter community \"%{target}\" with the profile \"%{requestor}\" was not accepted. Please contact any profile admin from %{target} for more information. The following explanation was given: \n\n\"%{explanation}\"") %
  80 + {:target => self.target.name,
  81 + :requestor => self.requestor.name,
  82 + :explanation => self.reject_explanation}
78 end 83 end
79 end 84 end
app/models/article.rb
@@ -29,6 +29,8 @@ class Article &lt; ApplicationRecord @@ -29,6 +29,8 @@ class Article &lt; ApplicationRecord
29 :display => %w[full] 29 :display => %w[full]
30 } 30 }
31 31
  32 + N_('article')
  33 +
32 def initialize(*params) 34 def initialize(*params)
33 super 35 super
34 if params.present? && params.first.present? 36 if params.present? && params.first.present?
app/models/block.rb
@@ -181,30 +181,6 @@ class Block &lt; ApplicationRecord @@ -181,30 +181,6 @@ class Block &lt; ApplicationRecord
181 "/images/block_preview.png" 181 "/images/block_preview.png"
182 end 182 end
183 183
184 - # Returns the content to be used for this block.  
185 - #  
186 - # This method can return several types of objects:  
187 - #  
188 - # * <tt>String</tt>: if the string starts with <tt>http://</tt> or <tt>https://</tt>, then it is assumed to be address of an IFRAME. Otherwise it's is used as regular HTML.  
189 - # * <tt>Hash</tt>: the hash is used to build an URL that is used as the address for a IFRAME.  
190 - # * <tt>Proc</tt>: the Proc is evaluated in the scope of BoxesHelper. The  
191 - # block can then use <tt>render</tt>, <tt>link_to</tt>, etc.  
192 - #  
193 - # The method can also return <tt>nil</tt>, which means "no content".  
194 - #  
195 - # See BoxesHelper#extract_block_content for implementation details.  
196 - def content(args={})  
197 - "This is block number %d" % self.id  
198 - end  
199 -  
200 - # A footer to be appended to the end of the block. Returns <tt>nil</tt>.  
201 - #  
202 - # Override in your subclasses. You can return the same types supported by  
203 - # #content.  
204 - def footer  
205 - nil  
206 - end  
207 -  
208 # Is this block editable? (Default to <tt>true</tt>) 184 # Is this block editable? (Default to <tt>true</tt>)
209 def editable?(user=nil) 185 def editable?(user=nil)
210 self.edit_modes == "all" 186 self.edit_modes == "all"
app/models/comment_handler.rb
1 -class CommentHandler < Struct.new(:comment_id, :method) 1 +class CommentHandler < Struct.new(:comment_id, :method, :locale)
  2 + def initialize(*args)
  3 + super
  4 + self.locale ||= FastGettext.locale
  5 + end
2 6
3 def perform 7 def perform
  8 + saved_locale = FastGettext.locale
  9 + FastGettext.locale = locale
  10 +
4 comment = Comment.find(comment_id) 11 comment = Comment.find(comment_id)
5 comment.send(method) 12 comment.send(method)
  13 + FastGettext.locale = saved_locale
6 rescue ActiveRecord::RecordNotFound 14 rescue ActiveRecord::RecordNotFound
7 # just ignore non-existing comments 15 # just ignore non-existing comments
8 end 16 end
app/models/community.rb
@@ -9,7 +9,7 @@ class Community &lt; Organization @@ -9,7 +9,7 @@ class Community &lt; Organization
9 _('Community') 9 _('Community')
10 end 10 end
11 11
12 - N_('Community') 12 + N_('community')
13 N_('Language') 13 N_('Language')
14 14
15 settings_items :language 15 settings_items :language
app/models/enterprise.rb
@@ -12,7 +12,7 @@ class Enterprise &lt; Organization @@ -12,7 +12,7 @@ class Enterprise &lt; Organization
12 _('Enterprise') 12 _('Enterprise')
13 end 13 end
14 14
15 - N_('Enterprise') 15 + N_('enterprise')
16 16
17 acts_as_trackable after_add: proc{ |p, t| notify_activity t } 17 acts_as_trackable after_add: proc{ |p, t| notify_activity t }
18 18
app/models/environment.rb
@@ -750,6 +750,10 @@ class Environment &lt; ApplicationRecord @@ -750,6 +750,10 @@ class Environment &lt; ApplicationRecord
750 end 750 end
751 end 751 end
752 752
  753 + def theme_ids
  754 + settings[:themes] || []
  755 + end
  756 +
753 def themes=(values) 757 def themes=(values)
754 settings[:themes] = values 758 settings[:themes] = values
755 end 759 end
app/models/link_list_block.rb
@@ -81,10 +81,8 @@ class LinkListBlock &lt; Block @@ -81,10 +81,8 @@ class LinkListBlock &lt; Block
81 end 81 end
82 end 82 end
83 83
84 - def icons_options  
85 - ICONS.map do |i|  
86 - "<span title=\"#{i[1]}\" class=\"icon-#{i[0]}\" onclick=\"changeIcon(this, '#{i[0]}')\"></span>".html_safe  
87 - end 84 + def icons
  85 + ICONS
88 end 86 end
89 87
90 end 88 end
app/models/organization.rb
@@ -234,4 +234,7 @@ class Organization &lt; Profile @@ -234,4 +234,7 @@ class Organization &lt; Profile
234 self.admins.where(:id => user.id).exists? 234 self.admins.where(:id => user.id).exists?
235 end 235 end
236 236
  237 + def display_private_info_to?(user)
  238 + (public_profile && visible && !secret) || super
  239 + end
237 end 240 end
app/models/person.rb
@@ -13,6 +13,8 @@ class Person &lt; Profile @@ -13,6 +13,8 @@ class Person &lt; Profile
13 _('Person') 13 _('Person')
14 end 14 end
15 15
  16 + N_('person')
  17 +
16 acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)} 18 acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)}
17 acts_as_accessor 19 acts_as_accessor
18 20
app/models/person_notifier.rb
@@ -82,7 +82,7 @@ class PersonNotifier @@ -82,7 +82,7 @@ class PersonNotifier
82 helper ActionTrackerHelper 82 helper ActionTrackerHelper
83 83
84 def session 84 def session
85 - {:theme => nil} 85 + {:user_theme => nil}
86 end 86 end
87 87
88 def content_summary(person, notifications, tasks) 88 def content_summary(person, notifications, tasks)
app/views/account/_login_form.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= hidden_field_tag :terms_accepted, params[:terms_accepted] %> 11 <%= hidden_field_tag :terms_accepted, params[:terms_accepted] %>
12 <% end %> 12 <% end %>
13 13
14 -<% button_bar do %> 14 +<%= button_bar do %>
15 <%= submit_button( 'login', _('Log in') )%> 15 <%= submit_button( 'login', _('Log in') )%>
16 <%= modal_close_button _('Cancel') if request.xhr? %> 16 <%= modal_close_button _('Cancel') if request.xhr? %>
17 <% end %> 17 <% end %>
app/views/account/accept_terms.html.erb
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <%= hidden_field_tag :answer, params[:answer] %> 20 <%= hidden_field_tag :answer, params[:answer] %>
21 21
22 <%= labelled_check_box(environment.terms_of_use_acceptance_text.blank? ? _('I read the terms of use and accepted them') : environment.terms_of_use_acceptance_text, :terms_accepted, '1', false, :id => 'accept-terms') %> 22 <%= labelled_check_box(environment.terms_of_use_acceptance_text.blank? ? _('I read the terms of use and accepted them') : environment.terms_of_use_acceptance_text, :terms_accepted, '1', false, :id => 'accept-terms') %>
23 - <% button_bar do %> 23 + <%= button_bar do %>
24 <%= button 'cancel', _('Cancel'), :controller => 'home', :action => 'index' %> 24 <%= button 'cancel', _('Cancel'), :controller => 'home', :action => 'index' %>
25 <%= submit_button 'forward', _('Continue'), {:disabled => true, :class => 'disabled', :id => 'submit-accept-terms'} %> 25 <%= submit_button 'forward', _('Continue'), {:disabled => true, :class => 'disabled', :id => 'submit-accept-terms'} %>
26 <% end %> 26 <% end %>
app/views/account/activation_question.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 24
25 <div class='activation-box'> 25 <div class='activation-box'>
26 <h2><%= _('Enterprise activation') + ' - ' + (logged_in? ? _('part 1 of 2') : _('part 1 of 3')) %></h2> 26 <h2><%= _('Enterprise activation') + ' - ' + (logged_in? ? _('part 1 of 2') : _('part 1 of 3')) %></h2>
27 - <%= form_tag( {:action => 'accept_terms'}, {:method => 'get', :onsubmit => (@question == :foundation_year ? 'return check_valid_year(this)' : 'return check_valid_cnpj(this)')}) do %> 27 + <%= form_tag( {:action => 'accept_terms'}, {:method => 'get', :onsubmit => (@question == :foundation_year ? 'return check_valid_year(this)' : 'return check_valid_cnpj(this)')}) do %>
28 28
29 <p> <strong><%= _('Pay atention! You have only one chance!') %></strong> </p> 29 <p> <strong><%= _('Pay atention! You have only one chance!') %></strong> </p>
30 30
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 34
35 <%= hidden_field_tag :enterprise_code, params[:enterprise_code] %> 35 <%= hidden_field_tag :enterprise_code, params[:enterprise_code] %>
36 36
37 - <% button_bar do %> 37 + <%= button_bar do %>
38 <%= button 'cancel', _('Cancel'), :action => 'index' %> 38 <%= button 'cancel', _('Cancel'), :action => 'index' %>
39 <%= submit_button 'forward', _('Continue') %> 39 <%= submit_button 'forward', _('Continue') %>
40 <% end %> 40 <% end %>
app/views/account/forgot_password.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %> 9 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %>
10 10
11 <div> 11 <div>
12 - <% button_bar do %> 12 + <%= button_bar do %>
13 <%= submit_button('send', _('Send instructions')) %> 13 <%= submit_button('send', _('Send instructions')) %>
14 <% end %> 14 <% end %>
15 </div> 15 </div>
app/views/account/login.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 22
23 <%= safe_join(@plugins.dispatch(:login_extra_contents).collect { |content| instance_exec(&content) }, "") %> 23 <%= safe_join(@plugins.dispatch(:login_extra_contents).collect { |content| instance_exec(&content) }, "") %>
24 24
25 - <% button_bar do %> 25 + <%= button_bar do %>
26 <%= submit_button( 'login', _('Log in') )%> 26 <%= submit_button( 'login', _('Log in') )%>
27 <% if is_popin %> 27 <% if is_popin %>
28 <%= modal_close_button(_('Cancel')) %> 28 <%= modal_close_button(_('Cancel')) %>
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 31
32 <% end %> 32 <% end %>
33 33
34 -<% button_bar do %> 34 +<%= button_bar do %>
35 <% unless @plugins.dispatch(:allow_user_registration).include?(false) %> 35 <% unless @plugins.dispatch(:allow_user_registration).include?(false) %>
36 <%= button :add, _("New user"), :controller => 'account', :action => 'signup' %> 36 <%= button :add, _("New user"), :controller => 'account', :action => 'signup' %>
37 <% end %> 37 <% end %>
app/views/account/login_block.html.erb
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 17
18 <%= safe_join(@plugins.dispatch(:login_extra_contents).collect { |content| instance_eval(&content) }, "") %> 18 <%= safe_join(@plugins.dispatch(:login_extra_contents).collect { |content| instance_eval(&content) }, "") %>
19 19
20 - <% button_bar do %> 20 + <%= button_bar do %>
21 <%= submit_button( 'login', _('Log in') )%> 21 <%= submit_button( 'login', _('Log in') )%>
22 <% unless @plugins.dispatch(:allow_user_registration).include?(false) %> 22 <% unless @plugins.dispatch(:allow_user_registration).include?(false) %>
23 <%= button(:add, _('New user'), { :controller => 'account', :action => 'signup' }) %> 23 <%= button(:add, _('New user'), { :controller => 'account', :action => 'signup' }) %>
app/views/account/logout_popup.html.erb
1 <h2><%= _('Are you sure you want to get out?') %></h2> 1 <h2><%= _('Are you sure you want to get out?') %></h2>
2 <p> 2 <p>
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button :ok, _('Yes'), { :controller => 'account', :action => 'logout' } %> 4 <%= button :ok, _('Yes'), { :controller => 'account', :action => 'logout' } %>
5 <%= modal_close_button _('No, I want to stay.') %> 5 <%= modal_close_button _('No, I want to stay.') %>
6 <% end %> 6 <% end %>
app/views/account/new_password.html.erb
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 10
11 <%= labelled_form_field(_('Enter new password'), (f.password_field :password)) %> 11 <%= labelled_form_field(_('Enter new password'), (f.password_field :password)) %>
12 <%= labelled_form_field(_('Confirm the new password'), (f.password_field :password_confirmation)) %> 12 <%= labelled_form_field(_('Confirm the new password'), (f.password_field :password_confirmation)) %>
13 - <% button_bar do %> 13 + <%= button_bar do %>
14 <%= submit_button(:ok, _('Change password')) %> 14 <%= submit_button(:ok, _('Change password')) %>
15 <% end %> 15 <% end %>
16 16
app/views/account/welcome.html.erb
@@ -3,8 +3,8 @@ @@ -3,8 +3,8 @@
3 3
4 <%= _('%s was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise') % @enterprise.name %> 4 <%= _('%s was successfuly activated. Now you may go to your control panel or to the control panel of your enterprise') % @enterprise.name %>
5 5
6 - <% button_bar do %>  
7 - <%= button 'forward', _('Go to my control panel'), :action => 'index', :controller => 'profile_editor', :profile => current_user.person.identifier %> 6 + <%= button_bar do %>
  7 + <%= button 'forward', _('Go to my control panel'), :action => 'index', :controller => 'profile_editor', :profile => current_user.person.identifier %>
8 <%= button 'forward', _('Go to my enterprise control panel') % @enterprise.name, :action => 'index', :controller => 'profile_editor', :profile => @enterprise.identifier %> 8 <%= button 'forward', _('Go to my enterprise control panel') % @enterprise.name, :action => 'index', :controller => 'profile_editor', :profile => @enterprise.identifier %>
9 <% end %> 9 <% end %>
10 <% end %> 10 <% end %>
app/views/admin_panel/message_for_disabled_enterprise.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 <%= f.text_area :message_for_disabled_enterprise, :cols => 40, :style => 'width: 90%' %> 7 <%= f.text_area :message_for_disabled_enterprise, :cols => 40, :style => 'width: 90%' %>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button(:save, _('Save')) %> 10 <%= submit_button(:save, _('Save')) %>
11 <%= button(:cancel, _('Cancel'), :action => 'index') %> 11 <%= button(:cancel, _('Cancel'), :action => 'index') %>
12 <% end %> 12 <% end %>
app/views/admin_panel/set_portal_community.html.erb
@@ -4,14 +4,14 @@ @@ -4,14 +4,14 @@
4 <%= form_tag do %> 4 <%= form_tag do %>
5 <%= labelled_form_field(_('Portal identifier'), text_field_tag('portal_community_identifier', @portal_community.identifier, :size => 40) ) %> 5 <%= labelled_form_field(_('Portal identifier'), text_field_tag('portal_community_identifier', @portal_community.identifier, :size => 40) ) %>
6 6
7 - <% button_bar do %> 7 + <%= button_bar do %>
8 <%= submit_button 'save', _('Save'), :cancel => { :action => 'index' } %> 8 <%= submit_button 'save', _('Save'), :cancel => { :action => 'index' } %>
9 <% end %> 9 <% end %>
10 <% end %> 10 <% end %>
11 <% else %> 11 <% else %>
12 <%= _('Portal identifier: %s').html_safe % link_to(@portal_community.identifier, @portal_community.url) %> 12 <%= _('Portal identifier: %s').html_safe % link_to(@portal_community.identifier, @portal_community.url) %>
13 13
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <%if @portal_community.environment.enabled?('use_portal_community') %> 15 <%if @portal_community.environment.enabled?('use_portal_community') %>
16 <%= button 'cancel', _('Disable'), {:action => 'manage_portal_community', :activate => 0} %> 16 <%= button 'cancel', _('Disable'), {:action => 'manage_portal_community', :activate => 0} %>
17 <% else %> 17 <% else %>
app/views/admin_panel/set_portal_folders.html.erb
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 <%= _('The same order in which you arrange the folders here will be used for arranging the boxes in the environment initial page.') %> 37 <%= _('The same order in which you arrange the folders here will be used for arranging the boxes in the environment initial page.') %>
38 </p> 38 </p>
39 39
40 - <% button_bar do %> 40 + <%= button_bar do %>
41 <%= submit_button 'save', _('Save'), :cancel => {:action => 'index'} %> 41 <%= submit_button 'save', _('Save'), :cancel => {:action => 'index'} %>
42 <% end %> 42 <% end %>
43 <% end %> 43 <% end %>
app/views/admin_panel/set_portal_news_amount.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <%= labelled_form_field _('Number of portal news'), select(:environment, :portal_news_amount, (0..10).to_a) %> 6 <%= labelled_form_field _('Number of portal news'), select(:environment, :portal_news_amount, (0..10).to_a) %>
7 <%= labelled_form_field _('Number of news by folder'), select(:environment, :news_amount_by_folder, (1..10).to_a) %> 7 <%= labelled_form_field _('Number of news by folder'), select(:environment, :news_amount_by_folder, (1..10).to_a) %>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button(:save, _('Save')) %> 10 <%= submit_button(:save, _('Save')) %>
11 <%= button(:cancel, _('Cancel'), :action => 'index') %> 11 <%= button(:cancel, _('Cancel'), :action => 'index') %>
12 <% end %> 12 <% end %>
app/views/admin_panel/site_info.html.erb
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <% tabs << {:title => _('Signup introduction text'), :id => 'signup-intro', 20 <% tabs << {:title => _('Signup introduction text'), :id => 'signup-intro',
21 :content => (render :partial => 'signup_intro', :locals => {:f => f})} %> 21 :content => (render :partial => 'signup_intro', :locals => {:f => f})} %>
22 <%= render_tabs(tabs) %> 22 <%= render_tabs(tabs) %>
23 - <% button_bar do %> 23 + <%= button_bar do %>
24 <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %> 24 <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %>
25 <% end %> 25 <% end %>
26 <% end %> 26 <% end %>
app/views/box_organizer/_icon_selector.html.erb
@@ -2,6 +2,8 @@ @@ -2,6 +2,8 @@
2 <%= hidden_field_tag 'block[links][][icon]', icon %> 2 <%= hidden_field_tag 'block[links][][icon]', icon %>
3 <span class='icon-<%= icon %>' style='display:block; width:16px; height:16px;'></span> 3 <span class='icon-<%= icon %>' style='display:block; width:16px; height:16px;'></span>
4 <div class="icon-selector" style='display:none;'> 4 <div class="icon-selector" style='display:none;'>
5 - <%= @block.icons_options.join %> 5 + <% @block.icons.map do |i| %>
  6 + <%= content_tag('span', '', :title => i[1], :class => "icon-#{i[0]}", :onclick => "changeIcon(this, '#{i[0]}')") %>
  7 + <% end %>
6 </div> 8 </div>
7 </div> 9 </div>
app/views/box_organizer/edit.html.erb
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 </div> 35 </div>
36 <% end %> 36 <% end %>
37 37
38 - <% button_bar do %> 38 + <%= button_bar do %>
39 <%= submit_button(:save, _('Save')) %> 39 <%= submit_button(:save, _('Save')) %>
40 <%= modal_close_button(_('Cancel')) %> 40 <%= modal_close_button(_('Cancel')) %>
41 <% end %> 41 <% end %>
app/views/box_organizer/index.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 3
4 <h1><%= _('Editing sideboxes')%></h1> 4 <h1><%= _('Editing sideboxes')%></h1>
5 5
6 -<% button_bar :class=>'design-menu' do %> 6 +<%= button_bar :class=>'design-menu' do %>
7 <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %> 7 <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %>
8 <% end %> 8 <% end %>
9 9
app/views/categories/_form.html.erb
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 <%= file_field_or_thumbnail(_('Image:'), @category.image, i) %> 28 <%= file_field_or_thumbnail(_('Image:'), @category.image, i) %>
29 <% end %> 29 <% end %>
30 30
31 - <% button_bar do %> 31 + <%= button_bar do %>
32 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %> 32 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %>
33 <% end%> 33 <% end%>
34 <% end %> 34 <% end %>
app/views/cms/_media_new_folder.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <%= labelled_radio_button _('Folder'), :folder_type, 'Folder', false %> 9 <%= labelled_radio_button _('Folder'), :folder_type, 'Folder', false %>
10 10
11 <%= labelled_form_field _('Name:'), text_field_tag(:new_folder, nil, 'data-url' => url_for({:action => 'new', :profile => profile.identifier})) %> 11 <%= labelled_form_field _('Name:'), text_field_tag(:new_folder, nil, 'data-url' => url_for({:action => 'new', :profile => profile.identifier})) %>
12 - <% button_bar do %> 12 + <%= button_bar do %>
13 <%= submit_button(:newfolder, _('Create')) %> 13 <%= submit_button(:newfolder, _('Create')) %>
14 <% end %> 14 <% end %>
15 <% end %> 15 <% end %>
app/views/cms/_text_fields.html.erb
1 -<%= labelled_form_field(_('Publish date'), date_field('article[published_at]', @article.published_at || DateTime.current, {:max_date => '+0d', :date_format => 'yy-mm-dd'}, {:id => "article_published_at"})) %> 1 +<%= labelled_form_field(_('Publish date'), date_field('article[published_at]', @article.published_at || DateTime.current, {:max_date => '+0d', :time => true}, {:id => "article_published_at"})) %>
app/views/cms/_upload_file_form.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 12
13 <%= hidden_field_tag('back_to', @back_to) %> 13 <%= hidden_field_tag('back_to', @back_to) %>
14 14
15 -<% button_bar do %> 15 +<%= button_bar do %>
16 <%= button_to_function :add, _('More files'), "add_new_file_fields()" %> 16 <%= button_to_function :add, _('More files'), "add_new_file_fields()" %>
17 <% if @back_to %> 17 <% if @back_to %>
18 <%= submit_button :save, _('Upload'), :cancel => @back_to %> 18 <%= submit_button :save, _('Upload'), :cancel => @back_to %>
app/views/cms/destroy.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 <% end %> 12 <% end %>
13 </strong> 13 </strong>
14 14
15 - <% button_bar do %> 15 + <%= button_bar do %>
16 <%= submit_button :save, _('Yes, I want.') %> 16 <%= submit_button :save, _('Yes, I want.') %>
17 <%= button :cancel, _("No, I don't want."), @article.url %> 17 <%= button :cancel, _("No, I don't want."), @article.url %>
18 <% end %> 18 <% end %>
app/views/cms/edit.html.erb
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 </div> 21 </div>
22 <% end %> 22 <% end %>
23 23
24 - <% button_bar do %> 24 + <%= button_bar do %>
25 <%= submit_button :save, _('Save') %> 25 <%= submit_button :save, _('Save') %>
26 <%= submit_button :save, _('Save and continue'), :name => "continue" %> 26 <%= submit_button :save, _('Save and continue'), :name => "continue" %>
27 <% end %> 27 <% end %>
@@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
48 <%= options_for_article(@article, @tokenized_children) %> 48 <%= options_for_article(@article, @tokenized_children) %>
49 </div> 49 </div>
50 50
51 - <% button_bar do %> 51 + <%= button_bar do %>
52 <%= submit_button :save, _('Save') %> 52 <%= submit_button :save, _('Save') %>
53 53
54 <% if @back_to %> 54 <% if @back_to %>
app/views/cms/publish.html.erb
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 <%= hidden_field_tag :back_to, @back_to %> 25 <%= hidden_field_tag :back_to, @back_to %>
26 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %> 26 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %>
27 27
28 - <% button_bar do %> 28 + <%= button_bar do %>
29 <%= submit_button 'spread', _('Spread this') %> 29 <%= submit_button 'spread', _('Spread this') %>
30 <% end %> 30 <% end %>
31 <% end %> 31 <% end %>
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <% search_action = url_for(:action => 'search_communities_to_publish') %> 41 <% search_action = url_for(:action => 'search_communities_to_publish') %>
42 <%= token_input_field_tag(:q, 'search-communities-to-publish', search_action, { :hint_text => _('Type in a search for your community'), :zindex => 10000, :focus => false }) %> 42 <%= token_input_field_tag(:q, 'search-communities-to-publish', search_action, { :hint_text => _('Type in a search for your community'), :zindex => 10000, :focus => false }) %>
43 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %> 43 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %>
44 - <% button_bar do %> 44 + <%= button_bar do %>
45 <%= submit_button 'spread', _('Spread this') %> 45 <%= submit_button 'spread', _('Spread this') %>
46 <% end %> 46 <% end %>
47 <% end %> 47 <% end %>
@@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
58 <%= hidden_field_tag :back_to, @back_to %> 58 <%= hidden_field_tag :back_to, @back_to %>
59 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %> 59 <%= labelled_form_field _('Title'), text_field_tag('name', @article.name) %>
60 60
61 - <% button_bar do %> 61 + <%= button_bar do %>
62 <%= submit_button 'spread', _('Spread this') %> 62 <%= submit_button 'spread', _('Spread this') %>
63 <% end %> 63 <% end %>
64 <% end %> 64 <% end %>
app/views/cms/publish_on_portal_community.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= hidden_field_tag :back_to, @back_to %> 5 <%= hidden_field_tag :back_to, @back_to %>
6 <%= labelled_text_field _('Title') + ': ', :name, @article.name, :style => 'width: 100%' %> 6 <%= labelled_text_field _('Title') + ': ', :name, @article.name, :style => 'width: 100%' %>
7 7
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button 'spread', _('Spread this'), :cancel => @back_to %> 9 <%= submit_button 'spread', _('Spread this'), :cancel => @back_to %>
10 <% end %> 10 <% end %>
11 <% end %> 11 <% end %>
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <%= _("There is no portal community in this environment.") %> 14 <%= _("There is no portal community in this environment.") %>
15 </div> 15 </div>
16 16
17 - <% button_bar do %> 17 + <%= button_bar do %>
18 <%= button :back, _('Back'), :controller => 'cms' %> 18 <%= button :back, _('Back'), :controller => 'cms' %>
19 <% end %> 19 <% end %>
20 <% end %> 20 <% end %>
app/views/cms/suggest_an_article.html.erb
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 23
24 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) unless logged_in? %> 24 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) unless logged_in? %>
25 25
26 - <% button_bar do %> 26 + <%= button_bar do %>
27 <%= submit_button :save, _('Save') %> 27 <%= submit_button :save, _('Save') %>
28 <%= button :cancel, _('Cancel'), @back_to %> 28 <%= button :cancel, _('Cancel'), @back_to %>
29 <% end %> 29 <% end %>
app/views/cms/view.html.erb
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </div> 14 </div>
15 <% end %> 15 <% end %>
16 16
17 -<% button_bar(:style => 'margin-bottom: 1em;') do %> 17 +<%= button_bar(:style => 'margin-bottom: 1em;') do %>
18 <% parent_id = ((@article && @article.allow_children?) ? @article : nil) %> 18 <% parent_id = ((@article && @article.allow_children?) ? @article : nil) %>
19 19
20 <%= modal_button('new', _('New content'), url_for({:action => 'new', :parent_id => parent_id, :cms => true}).html_safe) %> 20 <%= modal_button('new', _('New content'), url_for({:action => 'new', :parent_id => parent_id, :cms => true}).html_safe) %>
app/views/cms/why_categorize.html.erb
@@ -4,6 +4,6 @@ @@ -4,6 +4,6 @@
4 <%= _('By categorizing your content, you increase the possibility that other people access it. When they are looking for, say, articles about Bahia and you categorize your article in "Regions/Bahia", then there is a good change that your article is going to be found.') %> 4 <%= _('By categorizing your content, you increase the possibility that other people access it. When they are looking for, say, articles about Bahia and you categorize your article in "Regions/Bahia", then there is a good change that your article is going to be found.') %>
5 </p> 5 </p>
6 6
7 -<% button_bar do %> 7 +<%= button_bar do %>
8 <%= modal_close_button _('Close') %> 8 <%= modal_close_button _('Close') %>
9 <% end %> 9 <% end %>
app/views/comment/_comment_form.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <div id="recaptcha-container" style="display: none"> 8 <div id="recaptcha-container" style="display: none">
9 <h3><%= _('Please type the two words below') %></h3> 9 <h3><%= _('Please type the two words below') %></h3>
10 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %> 10 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %>
11 - <% button_bar do %> 11 + <%= button_bar do %>
12 <%= button_to_function :add, _('Confirm'), "return false", :id => "confirm-captcha" %> 12 <%= button_to_function :add, _('Confirm'), "return false", :id => "confirm-captcha" %>
13 <%= button_to_function :cancel, _('Cancel'), "noosfero.modal.close()" %> 13 <%= button_to_function :cancel, _('Cancel'), "noosfero.modal.close()" %>
14 <% end %> 14 <% end %>
@@ -87,7 +87,7 @@ function check_captcha(button, confirm_action) { @@ -87,7 +87,7 @@ function check_captcha(button, confirm_action) {
87 87
88 <%= safe_join(@plugins.dispatch(:comment_form_extra_contents, local_assigns.merge(:comment => @comment)).collect { |content| instance_exec(&content) }, "") %> 88 <%= safe_join(@plugins.dispatch(:comment_form_extra_contents, local_assigns.merge(:comment => @comment)).collect { |content| instance_exec(&content) }, "") %>
89 89
90 - <% button_bar do %> 90 + <%= button_bar do %>
91 <%= submit_button('add', _('Post comment'), :onclick => "if(check_captcha(this)) { save_comment(this) } else { check_captcha(this, save_comment)};return false;") %> 91 <%= submit_button('add', _('Post comment'), :onclick => "if(check_captcha(this)) { save_comment(this) } else { check_captcha(this, save_comment)};return false;") %>
92 <% if !edition_mode %> 92 <% if !edition_mode %>
93 <%= button :cancel, _('Cancel'), '', :id => 'cancel-comment' %> 93 <%= button :cancel, _('Cancel'), '', :id => 'cancel-comment' %>
app/views/content_viewer/_comment_form.html.erb
@@ -36,7 +36,7 @@ function submit_comment_form(button) { @@ -36,7 +36,7 @@ function submit_comment_form(button) {
36 <div id="recaptcha-container" style="display: none"> 36 <div id="recaptcha-container" style="display: none">
37 <h3><%= _('Please type the two words below') %></h3> 37 <h3><%= _('Please type the two words below') %></h3>
38 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %> 38 <%= recaptcha_tags(:display => { :theme => 'clean' }, :ajax => true) %>
39 - <% button_bar do %> 39 + <%= button_bar do %>
40 <%= button_to_function :add, _('Confirm'), "return false", :id => "confirm-captcha" %> 40 <%= button_to_function :add, _('Confirm'), "return false", :id => "confirm-captcha" %>
41 <%= button_to_function :cancel, _('Cancel'), "noosfero.modal.close()" %> 41 <%= button_to_function :cancel, _('Cancel'), "noosfero.modal.close()" %>
42 <% end %> 42 <% end %>
@@ -73,7 +73,7 @@ function submit_comment_form(button) { @@ -73,7 +73,7 @@ function submit_comment_form(button) {
73 <%= hidden_field_tag(:confirm, 'false') %> 73 <%= hidden_field_tag(:confirm, 'false') %>
74 <%= hidden_field_tag(:view, params[:view])%> 74 <%= hidden_field_tag(:view, params[:view])%>
75 75
76 - <% button_bar do %> 76 + <%= button_bar do %>
77 <%= submit_button('add', _('Post comment'), :onclick => "submit_comment_form(this); return false") %> 77 <%= submit_button('add', _('Post comment'), :onclick => "submit_comment_form(this); return false") %>
78 <% if cancel_triggers_hide %> 78 <% if cancel_triggers_hide %>
79 <%= button :cancel, _('Cancel'), '', :id => 'cancel-comment' %> 79 <%= button :cancel, _('Cancel'), '', :id => 'cancel-comment' %>
app/views/content_viewer/_confirm_unfollow.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= form_tag(@page.view_url.merge({:only_path => true}), {:method => 'post', :class => 'comment_form'}) do %> 5 <%= form_tag(@page.view_url.merge({:only_path => true}), {:method => 'post', :class => 'comment_form'}) do %>
6 <%= hidden_field_tag(:unfollow, 'commit') %> 6 <%= hidden_field_tag(:unfollow, 'commit') %>
7 <%= labelled_form_field(_('Enter your e-Mail'), text_field_tag(:email, nil, {:size => 40})) %> 7 <%= labelled_form_field(_('Enter your e-Mail'), text_field_tag(:email, nil, {:size => 40})) %>
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button(:ok, _('Cancel notifications for e-mail above') ) %> 9 <%= submit_button(:ok, _('Cancel notifications for e-mail above') ) %>
10 <% end %> 10 <% end %>
11 <% end %> 11 <% end %>
app/views/content_viewer/blog_page.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 <div> 5 <div>
6 <div class='blog-description'> 6 <div class='blog-description'>
7 - <%= blog.body %> 7 + <%= (blog.body || '').html_safe %>
8 </div> 8 </div>
9 </div> 9 </div>
10 <hr class="pre-posts"/> 10 <hr class="pre-posts"/>
app/views/content_viewer/forum_page.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 <p><%= @page.terms_of_use %></p> 16 <p><%= @page.terms_of_use %></p>
17 17
18 <%= form_tag @page.url.merge(:terms_accepted => true) do %> 18 <%= form_tag @page.url.merge(:terms_accepted => true) do %>
19 - <% button_bar do %> 19 + <%= button_bar do %>
20 <% if user %> 20 <% if user %>
21 <%= submit_button :save, _("Accept") %> 21 <%= submit_button :save, _("Accept") %>
22 <% else %> 22 <% else %>
app/views/enterprise_registration/basic_information.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <%= _('There are no validators to validate the registration of this new enterprise. Contact your administrator for instructions.') %> 8 <%= _('There are no validators to validate the registration of this new enterprise. Contact your administrator for instructions.') %>
9 </div> 9 </div>
10 10
11 - <% button_bar do %> 11 + <%= button_bar do %>
12 <%= button :back, _('Go back'), { :profile => current_user.person.identifier, :action=>"enterprises", :controller=>"profile" }%> 12 <%= button :back, _('Go back'), { :profile => current_user.person.identifier, :action=>"enterprises", :controller=>"profile" }%>
13 <% end %> 13 <% end %>
14 <% else %> 14 <% else %>
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 36
37 <%= template_options(:enterprises, 'create_enterprise')%> 37 <%= template_options(:enterprises, 'create_enterprise')%>
38 38
39 - <% button_bar do %> 39 + <%= button_bar do %>
40 <%= submit_button('next', _('Next'), :cancel => {:profile => current_user.person.identifier, :action=>"enterprises", :controller=>"profile"}) %> 40 <%= submit_button('next', _('Next'), :cancel => {:profile => current_user.person.identifier, :action=>"enterprises", :controller=>"profile"}) %>
41 <% end %> 41 <% end %>
42 <% end %> 42 <% end %>
app/views/enterprise_registration/creation.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @enterprise.template, :header => _("What can I do with a %s?")} %> 5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @enterprise.template, :header => _("What can I do with a %s?")} %>
6 6
7 -<% button_bar do %> 7 +<%= button_bar do %>
8 <%= button :back, _('Back'), {:controller => 'memberships', :action => 'index', :profile => user.identifier} %> 8 <%= button :back, _('Back'), {:controller => 'memberships', :action => 'index', :profile => user.identifier} %>
9 <% end %> 9 <% end %>
10 10
app/views/enterprise_registration/select_validator.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <% end %> 22 <% end %>
23 </table> 23 </table>
24 24
25 - <% button_bar do %> 25 + <%= button_bar do %>
26 <%= submit_button 'save', _('Confirm') %> 26 <%= submit_button 'save', _('Confirm') %>
27 <% end %> 27 <% end %>
28 <% end %> 28 <% end %>
app/views/enterprise_validation/details.html.erb
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <p><%= _('If this enterprise passes the criteria to be considered an solidarity enconomy enterprise, you can approve it by click the button below.') %></p> 15 <p><%= _('If this enterprise passes the criteria to be considered an solidarity enconomy enterprise, you can approve it by click the button below.') %></p>
16 16
17 <%= form_tag :action => 'approve', :id => @pending.code do %> 17 <%= form_tag :action => 'approve', :id => @pending.code do %>
18 - <% button_bar do %> 18 + <%= button_bar do %>
19 <%= submit_button('approve', _('Approve')) %> 19 <%= submit_button('approve', _('Approve')) %>
20 <% end %> 20 <% end %>
21 <% end %> 21 <% end %>
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <%= form_tag :action => 'reject', :id => @pending.code do %> 27 <%= form_tag :action => 'reject', :id => @pending.code do %>
28 <%= labelled_form_field(_('Please provide an explanation for the rejection. This explanation will be sent to the requestor (required).'), text_area_tag('reject_explanation'))%> 28 <%= labelled_form_field(_('Please provide an explanation for the rejection. This explanation will be sent to the requestor (required).'), text_area_tag('reject_explanation'))%>
29 <div> 29 <div>
30 - <% button_bar do %> 30 + <%= button_bar do %>
31 <%= submit_button('reject', _('Reject')) %> 31 <%= submit_button('reject', _('Reject')) %>
32 <% end %> 32 <% end %>
33 </div> 33 </div>
app/views/enterprise_validation/edit_validation_info.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= labelled_form_for :info do |f| %> 5 <%= labelled_form_for :info do |f| %>
6 <%= f.text_area(:validation_methodology, :cols => 50, :rows => 10) %> 6 <%= f.text_area(:validation_methodology, :cols => 50, :rows => 10) %>
7 <%= f.text_area(:restrictions, :cols => 50, :rows => 7) %> 7 <%= f.text_area(:restrictions, :cols => 50, :rows => 7) %>
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %> 9 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %>
10 <% end %> 10 <% end %>
11 <% end %> 11 <% end %>
app/views/enterprise_validation/index.html.erb
1 <h1><%= _('Enterprise validations') %></h1> 1 <h1><%= _('Enterprise validations') %></h1>
2 2
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button(:edit, _('Edit validation info'), { :action => 'edit_validation_info' }) %> 4 <%= button(:edit, _('Edit validation info'), { :action => 'edit_validation_info' }) %>
5 <%= button(:back, _('Go Back'), { :controller => 'profile_editor' }) %> 5 <%= button(:back, _('Go Back'), { :controller => 'profile_editor' }) %>
6 <% end %> 6 <% end %>
app/views/environment_role_manager/affiliate.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= form_tag( {:action => 'give_role'}, {:method => :post}) do %> 3 <%= form_tag( {:action => 'give_role'}, {:method => :post}) do %>
4 <%= select_tag 'role', options_for_select(@roles.map{|r|[r.name,r.id]}) %> 4 <%= select_tag 'role', options_for_select(@roles.map{|r|[r.name,r.id]}) %>
5 <%= hidden_field_tag 'person', current_user.person.id %> 5 <%= hidden_field_tag 'person', current_user.person.id %>
6 - <% button_bar do %> 6 + <%= button_bar do %>
7 <%= submit_button('affiliate', _('Affiliate', :cancel => {:action => 'index'}) %> 7 <%= submit_button('affiliate', _('Affiliate', :cancel => {:action => 'index'}) %>
8 <% end %> 8 <% end %>
9 <% end %> 9 <% end %>
app/views/environment_role_manager/change_role.html.erb
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <% end %> 7 <% end %>
8 <%= hidden_field_tag 'person', @admin.id %> 8 <%= hidden_field_tag 'person', @admin.id %>
9 9
10 - <% button_bar do %> 10 + <%= button_bar do %>
11 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'}) %> 11 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'}) %>
12 <% end %> 12 <% end %>
13 <% end %> 13 <% end %>
app/views/environment_role_manager/make_admin.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <% @roles.each do |r| %> 9 <% @roles.each do |r| %>
10 <%= labelled_form_field(r.name, (check_box_tag "roles[]", r.id)) %> 10 <%= labelled_form_field(r.name, (check_box_tag "roles[]", r.id)) %>
11 <% end %> 11 <% end %>
12 - <% button_bar do %> 12 + <%= button_bar do %>
13 <%= submit_button( 'save', _('Make'), :cancel => {:action => 'index'} ) %> 13 <%= submit_button( 'save', _('Make'), :cancel => {:action => 'index'} ) %>
14 <% end %> 14 <% end %>
15 <% end %> 15 <% end %>
app/views/environment_themes/index.html.erb
@@ -3,6 +3,6 @@ @@ -3,6 +3,6 @@
3 3
4 <br style="clear:both" /> 4 <br style="clear:both" />
5 5
6 -<% button_bar do %> 6 +<%= button_bar do %>
7 <%= button(:back, _('Back'), :controller => 'admin_panel', :action => 'index') %> 7 <%= button(:back, _('Back'), :controller => 'admin_panel', :action => 'index') %>
8 <% end %> 8 <% end %>
app/views/favorite_enterprises/index.html.erb
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 </p> 23 </p>
24 <% end %> 24 <% end %>
25 25
26 -<% button_bar do %> 26 +<%= button_bar do %>
27 <%= button(:back, _('Go back'), :controller => 'profile_editor') %> 27 <%= button(:back, _('Go back'), :controller => 'profile_editor') %>
28 <% end %> 28 <% end %>
29 29
app/views/features/_manage_community_fields.html.erb
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 </script> 55 </script>
56 56
57 <div> 57 <div>
58 - <% button_bar do %> 58 + <%= button_bar do %>
59 <%= submit_button('save', _('Save changes'), :id=>"save_community_fields") %> 59 <%= submit_button('save', _('Save changes'), :id=>"save_community_fields") %>
60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> 60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %>
61 <% end %> 61 <% end %>
app/views/features/_manage_custom_fields.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 </fieldset> 22 </fieldset>
23 </div> 23 </div>
24 24
25 -<% button_bar do %> 25 +<%= button_bar do %>
26 <%= button(:save, _('Save'), 'javascript: void()', :onClick => "submit_custom_field_form('##{format_values_id}', '##{form_id}');") %> 26 <%= button(:save, _('Save'), 'javascript: void()', :onClick => "submit_custom_field_form('##{format_values_id}', '##{form_id}');") %>
27 <% end %> 27 <% end %>
28 28
app/views/features/_manage_enterprise_fields.html.erb
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 </script> 55 </script>
56 56
57 <div> 57 <div>
58 - <% button_bar do %> 58 + <%= button_bar do %>
59 <%= submit_button('save', _('Save changes'), :id=>"save_enterprise_fields") %> 59 <%= submit_button('save', _('Save changes'), :id=>"save_enterprise_fields") %>
60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> 60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %>
61 <% end %> 61 <% end %>
app/views/features/_manage_person_fields.html.erb
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 </script> 55 </script>
56 56
57 <div> 57 <div>
58 - <% button_bar do %> 58 + <%= button_bar do %>
59 <%= submit_button('save', _('Save changes'), :id=>"save_person_fields") %> 59 <%= submit_button('save', _('Save changes'), :id=>"save_person_fields") %>
60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> 60 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %>
61 <% end %> 61 <% end %>
app/views/features/custom_fields/_form.html.erb
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 </tr> 29 </tr>
30 </thead> 30 </thead>
31 <tfoot> 31 <tfoot>
32 - <tr><td colspan=3><%= button(:add, _('Add option'), 'javascript: void()', :id => "btn_opt_#{id}", :onclick => "add_content('##{id} .custom-field-extras', $('#btn_opt_#{id}').attr('value'), 'EXTRAS_ID');", :value => "#{render_extras_field(id)}") %></td></tr> 32 + <tr><td colspan=3><%= button(:add, _('Add option'), 'javascript: void()', :id => "btn_opt_#{id}", :onclick => "add_content('##{id} .custom-field-extras', $('#btn_opt_#{id}').attr('value'), 'EXTRAS_ID');", :value => "#{render_extras_field(id)}".html_safe) %></td></tr>
33 </tfoot> 33 </tfoot>
34 <tbody class="custom-field-extras"> 34 <tbody class="custom-field-extras">
35 <% if !field.extras.blank?%> 35 <% if !field.extras.blank?%>
app/views/features/index.html.erb
@@ -69,7 +69,7 @@ Check all the features you want to enable for your environment, uncheck all the @@ -69,7 +69,7 @@ Check all the features you want to enable for your environment, uncheck all the
69 <hr/> 69 <hr/>
70 70
71 <div> 71 <div>
72 - <% button_bar do %> 72 + <%= button_bar do %>
73 <%= submit_button('save', _('Save changes')) %> 73 <%= submit_button('save', _('Save changes')) %>
74 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> 74 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %>
75 <% end %> 75 <% end %>
app/views/friends/connections.html.erb
1 <h1><%= _("Connections with %s") % @suggestion.suggestion.name %></h1> 1 <h1><%= _("Connections with %s") % @suggestion.suggestion.name %></h1>
2 2
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button(:back, _('Go to friends list'), :controller => 'friends') %> 4 <%= button(:back, _('Go to friends list'), :controller => 'friends') %>
5 <% end %> 5 <% end %>
6 6
app/views/friends/index.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 </p> 12 </p>
13 <% end %> 13 <% end %>
14 14
15 - <% button_bar do %> 15 + <%= button_bar do %>
16 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> 16 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
17 <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %> 17 <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>
18 <% unless @plugins.dispatch(:remove_invite_friends_button).include?(true) %> 18 <% unless @plugins.dispatch(:remove_invite_friends_button).include?(true) %>
app/views/friends/suggest.html.erb
1 <h1><%= _("Friends suggestions for %s") % profile.name %></h1> 1 <h1><%= _("Friends suggestions for %s") % profile.name %></h1>
2 2
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button(:back, _('Go to friends list'), :controller => 'friends') %> 4 <%= button(:back, _('Go to friends list'), :controller => 'friends') %>
5 <% end %> 5 <% end %>
6 6
app/views/invite/_select_address_book.html.erb
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 <%= labelled_form_field(_("Password") + ":", password_field_tag(:password)) %> 34 <%= labelled_form_field(_("Password") + ":", password_field_tag(:password)) %>
35 </div> 35 </div>
36 36
37 - <% button_bar do %> 37 + <%= button_bar do %>
38 <%= submit_button(:forward, _("Next")) %> 38 <%= submit_button(:forward, _("Next")) %>
39 <% end %> 39 <% end %>
40 <p><%= _("We won't store your password or contact anyone without your permission.") %></p> 40 <p><%= _("We won't store your password or contact anyone without your permission.") %></p>
app/views/invite/invite_friends.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 { :hint_text => _('Type in the person\'s %{search_fields}') % {:search_fields => @search_fields}, 24 { :hint_text => _('Type in the person\'s %{search_fields}') % {:search_fields => @search_fields},
25 :focus => false }) %> 25 :focus => false }) %>
26 26
27 - <% button_bar do %> 27 + <%= button_bar do %>
28 <%= submit_button('save', _('Invite'))%> 28 <%= submit_button('save', _('Invite'))%>
29 <%= button('cancel', _('Cancel'), profile.url)%> 29 <%= button('cancel', _('Cancel'), profile.url)%>
30 <% end %> 30 <% end %>
app/views/invite/select_friends.html.erb
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 32
33 <%= render :partial => 'invite/personalize_invitation_mail', :locals => {:mail_template => @mail_template } %> 33 <%= render :partial => 'invite/personalize_invitation_mail', :locals => {:mail_template => @mail_template } %>
34 34
35 - <% button_bar do %> 35 + <%= button_bar do %>
36 <%= submit_button(:ok, _("Invite!")) %> 36 <%= submit_button(:ok, _("Invite!")) %>
37 <% end %> 37 <% end %>
38 <% end %> 38 <% end %>
app/views/licenses/_form.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= required labelled_form_field(_('Name'), f.text_field(:name)) %> 5 <%= required labelled_form_field(_('Name'), f.text_field(:name)) %>
6 <%= labelled_form_field(_('License url'), f.text_field(:url)) %> 6 <%= labelled_form_field(_('License url'), f.text_field(:url)) %>
7 7
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button('save', _('Save'))%> 9 <%= submit_button('save', _('Save'))%>
10 <%= button('cancel', _('Cancel'), {:action => 'index'})%> 10 <%= button('cancel', _('Cancel'), {:action => 'index'})%>
11 <% end %> 11 <% end %>
app/views/licenses/index.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 <% end %> 16 <% end %>
17 </table> 17 </table>
18 18
19 -<% button_bar do %> 19 +<%= button_bar do %>
20 <%= button(:add, _('Add a new license'), :action => 'create')%> 20 <%= button(:add, _('Add a new license'), :action => 'create')%>
21 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %> 21 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %>
22 <% end %> 22 <% end %>
app/views/mailconf/index.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 <p><%= _('You already request activation of your mailbox. Please wait until an administrator approves your request.') %></p> 7 <p><%= _('You already request activation of your mailbox. Please wait until an administrator approves your request.') %></p>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> 10 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %>
11 <% end %> 11 <% end %>
12 12
@@ -21,10 +21,10 @@ @@ -21,10 +21,10 @@
21 <h2><%= _('Configuration') %></h2> 21 <h2><%= _('Configuration') %></h2>
22 <ul> 22 <ul>
23 <li> 23 <li>
24 - <%= link_to _('Mail configuration for POP and IMAP'), 'http://www.ynternet.org/move/infos-technique-pour-utiliser-multypass-pop3-smtp-imap-ftp-quotas...' %> 24 + <%= link_to _('Mail configuration for POP and IMAP'), 'http://www.ynternet.org/move/infos-technique-pour-utiliser-multypass-pop3-smtp-imap-ftp-quotas...' %>
25 </li> 25 </li>
26 </ul> 26 </ul>
27 - <% button_bar do %> 27 + <%= button_bar do %>
28 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> 28 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %>
29 <% end %> 29 <% end %>
30 30
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 <h2><%= _("Enable e-Mail account below:") %></h2> 33 <h2><%= _("Enable e-Mail account below:") %></h2>
34 <ul><%= safe_join(profile.email_addresses.map{|i| content_tag('li', i)}, "\n") %></ul> 34 <ul><%= safe_join(profile.email_addresses.map{|i| content_tag('li', i)}, "\n") %></ul>
35 <blockquote><%= _("You'll be able to access a webmail from your user menu.") %></blockquote> 35 <blockquote><%= _("You'll be able to access a webmail from your user menu.") %></blockquote>
36 - <% button_bar do %> 36 + <%= button_bar do %>
37 <%= button(:ok, _('Enable e-Mail'), { :action => 'enable' }, :method => 'post') %> 37 <%= button(:ok, _('Enable e-Mail'), { :action => 'enable' }, :method => 'post') %>
38 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> 38 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %>
39 <% end %> 39 <% end %>
app/views/maps/edit_location.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= labelled_form_field _('City'), f.text_field(:city) %> 11 <%= labelled_form_field _('City'), f.text_field(:city) %>
12 <%= labelled_form_field _('ZIP code'), text_field(:profile_data, :zip_code) %> 12 <%= labelled_form_field _('ZIP code'), text_field(:profile_data, :zip_code) %>
13 <%= labelled_form_field _('Address (street and number)'), text_field(:profile_data, :address) %> 13 <%= labelled_form_field _('Address (street and number)'), text_field(:profile_data, :address) %>
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <%= button_to_function :search, _('Locate in the map'), "addressToPoint()", :title => _("Locate the address informed above in the map below (note that you'll probably need to adjust the marker to get a precise position)") %> 15 <%= button_to_function :search, _('Locate in the map'), "addressToPoint()", :title => _("Locate the address informed above in the map below (note that you'll probably need to adjust the marker to get a precise position)") %>
16 <%= submit_button 'save', _('Save') %> 16 <%= submit_button 'save', _('Save') %>
17 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> 17 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
app/views/memberships/connections.html.erb
1 <h1><%= _("Connections with %s") % @suggestion.suggestion.name %></h1> 1 <h1><%= _("Connections with %s") % @suggestion.suggestion.name %></h1>
2 2
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button(:back, _('Go to groups list'), :controller => 'memberships') %> 4 <%= button(:back, _('Go to groups list'), :controller => 'memberships') %>
5 <% end %> 5 <% end %>
6 6
app/views/memberships/index.html.erb
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 2
3 <h1><%= _('Manage my groups') %></h1> 3 <h1><%= _('Manage my groups') %></h1>
4 4
5 -<% button_bar do %> 5 +<%= button_bar do %>
6 <%= button(:add, _('Create a new community'), :controller => 'memberships', :action => 'new_community') %> 6 <%= button(:add, _('Create a new community'), :controller => 'memberships', :action => 'new_community') %>
7 <%= button :add, _('Register a new enterprise'), :controller => 'enterprise_registration' if environment.enabled?('enterprise_registration') %> 7 <%= button :add, _('Register a new enterprise'), :controller => 'enterprise_registration' if environment.enabled?('enterprise_registration') %>
8 <%= button :back, _('Go back'), :controller => 'profile_editor' %> 8 <%= button :back, _('Go back'), :controller => 'profile_editor' %>
app/views/memberships/new_community.html.erb
@@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
48 48
49 <%= hidden_field_tag('back_to', @back_to) %> 49 <%= hidden_field_tag('back_to', @back_to) %>
50 50
51 - <% button_bar do %> 51 + <%= button_bar do %>
52 <%= submit_button(:save, _('Create')) %> 52 <%= submit_button(:save, _('Create')) %>
53 <%= button(:cancel, _('Cancel'), @back_to ) %> 53 <%= button(:cancel, _('Cancel'), @back_to ) %>
54 <% end %> 54 <% end %>
app/views/memberships/suggest.html.erb
1 <h1><%= _("Communities suggestions for %s") % profile.name %></h1> 1 <h1><%= _("Communities suggestions for %s") % profile.name %></h1>
2 2
3 -<% button_bar do %> 3 +<%= button_bar do %>
4 <%= button(:back, _('Go to groups list'), :controller => 'memberships') %> 4 <%= button(:back, _('Go to groups list'), :controller => 'memberships') %>
5 <% end %> 5 <% end %>
6 6
app/views/memberships/welcome.html.erb
@@ -4,6 +4,6 @@ @@ -4,6 +4,6 @@
4 4
5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @community.template, :header => _("What can I do with a %s?")} %> 5 <%= render :partial => 'shared/template_welcome_page', :locals => {:template => @community.template, :header => _("What can I do with a %s?")} %>
6 6
7 -<% button_bar do %> 7 +<%= button_bar do %>
8 <%= button :back, _('Back'), @back_to %> 8 <%= button :back, _('Back'), @back_to %>
9 <% end %> 9 <% end %>
app/views/organizations/index.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 22
23 <%= render :partial => 'results' %> 23 <%= render :partial => 'results' %>
24 24
25 - <% button_bar do %> 25 + <%= button_bar do %>
26 <%= button :back, _('Back'), :controller => 'admin_panel' %> 26 <%= button :back, _('Back'), :controller => 'admin_panel' %>
27 <% end %> 27 <% end %>
28 <% end %> 28 <% end %>
app/views/plugins/index.html.erb
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 </table> 26 </table>
27 27
28 <div> 28 <div>
29 - <% button_bar do %> 29 + <%= button_bar do %>
30 <%= submit_button('save', _('Save changes')) %> 30 <%= submit_button('save', _('Save changes')) %>
31 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> 31 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %>
32 <% end %> 32 <% end %>
app/views/profile/_comment.html.erb
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 </div> 45 </div>
46 46
47 <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %> 47 <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %>
48 - <% button_bar(:style => 'float: right; margin-top: 0px;') do %> 48 + <%= button_bar(:style => 'float: right; margin-top: 0px;') do %>
49 <%= link_to_function(_('Remove'), 'remove_item_wall(this, \'%s\', \'%s\', \'%s\'); return false ;' % [".article-comment", url_for(:profile => params[:profile], :action => :remove_comment, :comment_id => comment.id, :view => params[:view]), _('Are you sure you want to remove this comment and all its replies?')], :class => 'button icon-button icon-delete') %> 49 <%= link_to_function(_('Remove'), 'remove_item_wall(this, \'%s\', \'%s\', \'%s\'); return false ;' % [".article-comment", url_for(:profile => params[:profile], :action => :remove_comment, :comment_id => comment.id, :view => params[:view]), _('Are you sure you want to remove this comment and all its replies?')], :class => 'button icon-button icon-delete') %>
50 <% end %> 50 <% end %>
51 <% end %> 51 <% end %>
app/views/profile/_private_profile.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <div class='private-profile-message'><%= @message %></div> 5 <div class='private-profile-message'><%= @message %></div>
6 <div class='private-profile-description'><%= profile.description %></div> 6 <div class='private-profile-description'><%= profile.description %></div>
7 7
8 -<% button_bar do %> 8 +<%= button_bar do %>
9 <% if @action == :join && logged_in? %> 9 <% if @action == :join && logged_in? %>
10 <%= join_community_button({:logged => true}) %> 10 <%= join_community_button({:logged => true}) %>
11 <% end %> 11 <% end %>
app/views/profile/_upload_image.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= link_to(profile_image(activity.user, :minor), activity.user.url) %> 3 <%= link_to(profile_image(activity.user, :minor), activity.user.url) %>
4 </div> 4 </div>
5 <div class='profile-activity-description'> 5 <div class='profile-activity-description'>
6 - <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></p> 6 + <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe(activity).html_safe %></p>
7 <p class='profile-activity-time'><%= time_ago_in_words(activity.created_at) %></p> 7 <p class='profile-activity-time'><%= time_ago_in_words(activity.created_at) %></p>
8 <div class='profile-wall-actions'> 8 <div class='profile-wall-actions'>
9 <%= link_to_function(_('Remove'), 'remove_item_wall(this, \'%s\', \'%s\', \'%s\'); return false ;' % [".profile-activity-item", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %> 9 <%= link_to_function(_('Remove'), 'remove_item_wall(this, \'%s\', \'%s\', \'%s\'); return false ;' % [".profile-activity-item", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %>
app/views/profile/communities.html.erb
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </div> 14 </div>
15 <% end %> 15 <% end %>
16 16
17 -<% button_bar do %> 17 +<%= button_bar do %>
18 <%= button :back, _('Go back'), { :controller => 'profile' } %> 18 <%= button :back, _('Go back'), { :controller => 'profile' } %>
19 <%= button :add, _('Create a new community'), 19 <%= button :add, _('Create a new community'),
20 :controller => 'memberships', :action => 'new_community' if logged_in? && user == profile %> 20 :controller => 'memberships', :action => 'new_community' if logged_in? && user == profile %>
app/views/profile/enterprises.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <% end %> 8 <% end %>
9 </ul> 9 </ul>
10 10
11 -<% button_bar do %> 11 +<%= button_bar do %>
12 <%= button :back, _('Go back'), { :controller => 'profile' } %> 12 <%= button :back, _('Go back'), { :controller => 'profile' } %>
13 <%= button :add, _('Register a new enterprise'), :controller => 'enterprise_registration' if logged_in? && environment.enabled?('enterprise_registration') %> 13 <%= button :add, _('Register a new enterprise'), :controller => 'enterprise_registration' if logged_in? && environment.enabled?('enterprise_registration') %>
14 <% end %> 14 <% end %>
app/views/profile/fans.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <% end %> 8 <% end %>
9 </ul> 9 </ul>
10 10
11 -<% button_bar do %> 11 +<%= button_bar do %>
12 <%= button :back, _('Go back'), { :controller => 'profile' }%> 12 <%= button :back, _('Go back'), { :controller => 'profile' }%>
13 <% end %> 13 <% end %>
14 14
app/views/profile/favorite_enterprises.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <% end %> 8 <% end %>
9 </ul> 9 </ul>
10 10
11 -<% button_bar do %> 11 +<%= button_bar do %>
12 <%= button :back, _('Go back'), { :controller => 'profile' }%> 12 <%= button :back, _('Go back'), { :controller => 'profile' }%>
13 <% end %> 13 <% end %>
14 14
app/views/profile/friends.html.erb
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </div> 14 </div>
15 <% end %> 15 <% end %>
16 16
17 -<% button_bar do %> 17 +<%= button_bar do %>
18 <%= button :back, _('Go back'), { :controller => 'profile' } %> 18 <%= button :back, _('Go back'), { :controller => 'profile' } %>
19 <% if user == profile %> 19 <% if user == profile %>
20 <%= button :edit, _('Manage my friends'), :controller => 'friends', :action => 'index', :profile => profile.identifier %> 20 <%= button :edit, _('Manage my friends'), :controller => 'friends', :action => 'index', :profile => profile.identifier %>
app/views/profile/members.html.erb
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 </div><!-- end of class="profile-members-tabs-container" --> 36 </div><!-- end of class="profile-members-tabs-container" -->
37 <% end %> 37 <% end %>
38 38
39 -<% button_bar do %> 39 +<%= button_bar do %>
40 <%= button :back, _('Go back'), { :controller => 'profile' } %> 40 <%= button :back, _('Go back'), { :controller => 'profile' } %>
41 <% if profile.community? and user %> 41 <% if profile.community? and user %>
42 <% if user.has_permission?(:invite_members, profile) %> 42 <% if user.has_permission?(:invite_members, profile) %>
app/views/profile_editor/destroy_profile.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <p><%= _('Are you sure you want to delete this profile?') %></p> 3 <p><%= _('Are you sure you want to delete this profile?') %></p>
4 <p><%= _('You must be aware that all content of this profile (articles, events, files and pictures) will also be deleted.') %></p> 4 <p><%= _('You must be aware that all content of this profile (articles, events, files and pictures) will also be deleted.') %></p>
5 5
6 -<% button_bar do %> 6 +<%= button_bar do %>
7 <%= button(:remove, _('Yes, I am sure'), {:action => 'destroy_profile'}, :method => :post) %> 7 <%= button(:remove, _('Yes, I am sure'), {:action => 'destroy_profile'}, :method => :post) %>
8 <%= button(:cancel, _('No, I gave up'), profile.url) %> 8 <%= button(:cancel, _('No, I gave up'), profile.url) %>
9 <% end %> 9 <% end %>
app/views/profile_editor/edit.html.erb
@@ -67,13 +67,13 @@ @@ -67,13 +67,13 @@
67 67
68 <%= select_categories(:profile_data, _('Select the categories of your interest'), 2) %> 68 <%= select_categories(:profile_data, _('Select the categories of your interest'), 2) %>
69 69
70 - <% button_bar do %> 70 + <%= button_bar do %>
71 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %> 71 <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %>
72 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> 72 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
73 <% end %> 73 <% end %>
74 74
75 <% if user && user.has_permission?('destroy_profile', profile) %> 75 <% if user && user.has_permission?('destroy_profile', profile) %>
76 - <% button_bar(:id => 'delete-profile') do %> 76 + <%= button_bar(:id => 'delete-profile') do %>
77 77
78 <% if !environment.enabled?('forbid_destroy_profile') || user.is_admin?(environment) %> 78 <% if !environment.enabled?('forbid_destroy_profile') || user.is_admin?(environment) %>
79 <%= button(:remove, _('Delete profile'), {:action => :destroy_profile}) %> 79 <%= button(:remove, _('Delete profile'), {:action => :destroy_profile}) %>
app/views/profile_editor/header_footer.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 <%= text_area_tag(:custom_header, @header, :style => 'width: 100%; height: 150px;', :class => 'mceEditor') %> 24 <%= text_area_tag(:custom_header, @header, :style => 'width: 100%; height: 150px;', :class => 'mceEditor') %>
25 <h2><%= _('Content for footer') %></h2> 25 <h2><%= _('Content for footer') %></h2>
26 <%= text_area_tag(:custom_footer, @footer, :style => 'width: 100%; height: 150px;', :class => 'mceEditor') %> 26 <%= text_area_tag(:custom_footer, @footer, :style => 'width: 100%; height: 150px;', :class => 'mceEditor') %>
27 - <% button_bar do %> 27 + <%= button_bar do %>
28 <%= submit_button(:save, _('Save')) %> 28 <%= submit_button(:save, _('Save')) %>
29 <%= button(:cancel, _('Cancel'), :action => 'index') %> 29 <%= button(:cancel, _('Cancel'), :action => 'index') %>
30 <% end %> 30 <% end %>
app/views/profile_editor/welcome_page.html.erb
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 <%= _('This page will be displayed to the user after his signup with this template.') %> 13 <%= _('This page will be displayed to the user after his signup with this template.') %>
14 </div> 14 </div>
15 15
16 - <% button_bar do%> 16 + <%= button_bar do%>
17 <%= submit_button('save', _('Save'), :cancel => @back_to) %> 17 <%= submit_button('save', _('Save'), :cancel => @back_to) %>
18 <% end %> 18 <% end %>
19 <% end %> 19 <% end %>
app/views/profile_members/_index_buttons.html.erb
1 -<% button_bar do %> 1 +<%= button_bar do %>
2 <%= button :back, _('Back'), :controller => 'profile_editor' %> 2 <%= button :back, _('Back'), :controller => 'profile_editor' %>
3 <%= button :add, _('Add members'), :action => 'add_members' if profile.enterprise? %> 3 <%= button :add, _('Add members'), :action => 'add_members' if profile.enterprise? %>
4 <% if profile.community? and user.has_permission?(:invite_members, profile) %> 4 <% if profile.community? and user.has_permission?(:invite_members, profile) %>
app/views/profile_members/_manage_roles.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= hidden_field_tag(:last_admin, true) if from == 'last_admin'%> 5 <%= hidden_field_tag(:last_admin, true) if from == 'last_admin'%>
6 <% end %> 6 <% end %>
7 7
8 - <% button_bar(:style => 'margin-top: 30px;') do %> 8 + <%= button_bar(:style => 'margin-top: 30px;') do %>
9 <%= submit_button('save', _('Save'))%> 9 <%= submit_button('save', _('Save'))%>
10 <%= button('cancel', _('Cancel'), {:controller => 'profile_editor'})%> 10 <%= button('cancel', _('Cancel'), {:controller => 'profile_editor'})%>
11 <% end %> 11 <% end %>
app/views/profile_members/affiliate.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= form_tag( {:action => 'give_role'}, {:method => :post}) do %> 3 <%= form_tag( {:action => 'give_role'}, {:method => :post}) do %>
4 <%= select_tag 'role', options_for_select(@roles.map{|r|[r.name,r.id]}) %> 4 <%= select_tag 'role', options_for_select(@roles.map{|r|[r.name,r.id]}) %>
5 <%= hidden_field_tag 'person', current_user.person.id %> 5 <%= hidden_field_tag 'person', current_user.person.id %>
6 - <% button_bar do %> 6 + <%= button_bar do %>
7 <%= submit_button('affiliate', _('Affiliate'), :cancel => {:action => 'index'}) %> 7 <%= submit_button('affiliate', _('Affiliate'), :cancel => {:action => 'index'}) %>
8 <% end %> 8 <% end %>
9 <% end %> 9 <% end %>
app/views/profile_members/change_role.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 <% end %> 24 <% end %>
25 <%= hidden_field_tag 'person', @member.id %> 25 <%= hidden_field_tag 'person', @member.id %>
26 26
27 - <% button_bar do %> 27 + <%= button_bar do %>
28 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'}) %> 28 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'}) %>
29 <% end %> 29 <% end %>
30 <% end %> 30 <% end %>
app/views/profile_roles/_form.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 </div> 16 </div>
17 <% end %> 17 <% end %>
18 18
19 - <% button_bar do %> 19 + <%= button_bar do %>
20 <%= submit_button('save', (mode == :edit) ? _('Save changes') : _('Create role'), :cancel => {:action => 'index'} ) %> 20 <%= submit_button('save', (mode == :edit) ? _('Save changes') : _('Create role'), :cancel => {:action => 'index'} ) %>
21 <% end %> 21 <% end %>
22 <% end %> 22 <% end %>
app/views/profile_roles/assign.html.erb
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 <%=token_input_field_tag(:person_id, 'search-profile-members', {:action => 'assign_role_by_members'}, 17 <%=token_input_field_tag(:person_id, 'search-profile-members', {:action => 'assign_role_by_members'},
18 {:focus => false, :hint_text => _('Select members to assign the role')}) %> 18 {:focus => false, :hint_text => _('Select members to assign the role')}) %>
19 19
20 - <% button_bar do %> 20 + <%= button_bar do %>
21 <%= submit_button(:forward, _("Confirm")) %> 21 <%= submit_button(:forward, _("Confirm")) %>
22 <% end %> 22 <% end %>
23 </div> 23 </div>
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 <% @roles_list.each do |role| %> 28 <% @roles_list.each do |role| %>
29 <%= labelled_radio_button role.name , :selected_role, role.id , false, :class => "selected_role" %> <br> 29 <%= labelled_radio_button role.name , :selected_role, role.id , false, :class => "selected_role" %> <br>
30 <% end %> 30 <% end %>
31 - <% button_bar do %> 31 + <%= button_bar do %>
32 <%= submit_button('save',_('Confirm'), :cancel => {:action => 'index'} ) %> 32 <%= submit_button('save',_('Confirm'), :cancel => {:action => 'index'} ) %>
33 <% end %> 33 <% end %>
34 </div> 34 </div>
app/views/profile_roles/destroy.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <p><%= _('This role is not being currently used.')%></p> 4 <p><%= _('This role is not being currently used.')%></p>
5 <p><%= _('Are you sure you want to delete this role?') %></p> 5 <p><%= _('Are you sure you want to delete this role?') %></p>
6 6
7 - <% button_bar do %> 7 + <%= button_bar do %>
8 <%= button(:remove, _('Yes, I am sure'), {:action => 'remove', :id => @role.id}, :method => :post) %> 8 <%= button(:remove, _('Yes, I am sure'), {:action => 'remove', :id => @role.id}, :method => :post) %>
9 <%= button(:cancel, _('No, I gave up'), {:action => 'index'}) %> 9 <%= button(:cancel, _('No, I gave up'), {:action => 'index'}) %>
10 <% end %> 10 <% end %>
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 <%= check_box_tag("roles[]", role.id, false ,{:id => role.key}) %> 16 <%= check_box_tag("roles[]", role.id, false ,{:id => role.key}) %>
17 <%= content_tag(:label, role.name, { :for => role.key }) %><br/> 17 <%= content_tag(:label, role.name, { :for => role.key }) %><br/>
18 <% end %> 18 <% end %>
19 - <% button_bar do %> 19 + <%= button_bar do %>
20 <%= submit_button('save',_('Delete role'), :cancel => {:action => 'index'} ) %> 20 <%= submit_button('save',_('Delete role'), :cancel => {:action => 'index'} ) %>
21 <% end %> 21 <% end %>
22 <% end %> 22 <% end %>
app/views/profile_roles/index.html.erb
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <% end %> 21 <% end %>
22 </table> 22 </table>
23 23
24 -<% button_bar do %> 24 +<%= button_bar do %>
25 <%= button :add, _('Create a new role'), :action => 'new' %> 25 <%= button :add, _('Create a new role'), :action => 'new' %>
26 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %> 26 <%= button :back, _('Back to control panel'), :controller => 'profile_editor' %>
27 <% end %> 27 <% end %>
app/views/profile_roles/show.html.erb
@@ -3,11 +3,11 @@ @@ -3,11 +3,11 @@
3 <h3> <%= _('Permissions') %> </h3> 3 <h3> <%= _('Permissions') %> </h3>
4 <ul> 4 <ul>
5 <% @role.permissions.each do |p| %> 5 <% @role.permissions.each do |p| %>
6 - <li> <%= permission_name(p) %> </li> 6 + <li> <%= permission_name(p) %> </li>
7 <% end %> 7 <% end %>
8 </ul> 8 </ul>
9 9
10 -<% button_bar do %> 10 +<%= button_bar do %>
11 <%= button :edit, _('Edit'), :action => 'edit', :id => @role %> 11 <%= button :edit, _('Edit'), :action => 'edit', :id => @role %>
12 <%= button :back, _('Back to roles management'), :action => 'index' %> 12 <%= button :back, _('Back to roles management'), :action => 'index' %>
13 <% end %> 13 <% end %>
app/views/profile_themes/add_css.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= form_tag do %> 3 <%= form_tag do %>
4 <%= labelled_form_field(_('File name'), text_field_tag('css')) %> 4 <%= labelled_form_field(_('File name'), text_field_tag('css')) %>
5 5
6 - <% button_bar do %> 6 + <%= button_bar do %>
7 <%= submit_button(:add, _('Add')) %> 7 <%= submit_button(:add, _('Add')) %>
8 <%= modal_close_button _('Cancel') %> 8 <%= modal_close_button _('Cancel') %>
9 <% end %> 9 <% end %>
app/views/profile_themes/add_image.html.erb
1 <%= form_tag({:action => 'add_image', :id => @theme.id}, :multipart => true) do %> 1 <%= form_tag({:action => 'add_image', :id => @theme.id}, :multipart => true) do %>
2 <%= labelled_form_field(_('Choose the image file'), file_field_tag(:image)) %> 2 <%= labelled_form_field(_('Choose the image file'), file_field_tag(:image)) %>
3 - <% button_bar do %> 3 + <%= button_bar do %>
4 <%= submit_button(:add, _('Add image')) %> 4 <%= submit_button(:add, _('Add image')) %>
5 <% end %> 5 <% end %>
6 <% end %> 6 <% end %>
app/views/profile_themes/css_editor.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= form_tag({:action => 'update_css', :id => @theme.id }, :name => 'csscode_form') do %> 3 <%= form_tag({:action => 'update_css', :id => @theme.id }, :name => 'csscode_form') do %>
4 <%= hidden_field_tag('css', @css) %> 4 <%= hidden_field_tag('css', @css) %>
5 <%= text_area_tag('csscode', @code, :id => "codepressWindow", :class => 'codepress css') %> 5 <%= text_area_tag('csscode', @code, :id => "codepressWindow", :class => 'codepress css') %>
6 - <% button_bar do %> 6 + <%= button_bar do %>
7 <%= submit_button(:save, _('Save')) %> 7 <%= submit_button(:save, _('Save')) %>
8 <% end %> 8 <% end %>
9 <% end %> 9 <% end %>
app/views/profile_themes/edit.html.erb
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <li><%= link_to_remote(css, :url => { :action => 'css_editor', :id => @theme.id, :css => css }, :update => { :success => 'css-code' }) %></li> 15 <li><%= link_to_remote(css, :url => { :action => 'css_editor', :id => @theme.id, :css => css }, :update => { :success => 'css-code' }) %></li>
16 <% end %> 16 <% end %>
17 </ul> 17 </ul>
18 - <% button_bar do %> 18 + <%= button_bar do %>
19 <%= modal_button :add, _('New CSS'), :action => 'add_css', :id => @theme.id %> 19 <%= modal_button :add, _('New CSS'), :action => 'add_css', :id => @theme.id %>
20 <% end %> 20 <% end %>
21 </div> 21 </div>
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <li><%= image_tag("/user_themes/#{@theme.id}/images/#{image}") %></li> 27 <li><%= image_tag("/user_themes/#{@theme.id}/images/#{image}") %></li>
28 <% end %> 28 <% end %>
29 </ul> 29 </ul>
30 - <% button_bar do %> 30 + <%= button_bar do %>
31 <%= modal_button :add, _('Add image'), :action => 'add_image', :id => @theme.id %> 31 <%= modal_button :add, _('Add image'), :action => 'add_image', :id => @theme.id %>
32 <% end %> 32 <% end %>
33 </div> 33 </div>
app/views/profile_themes/index.html.erb
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 40
41 <br style="clear:both" /> 41 <br style="clear:both" />
42 42
43 -<% button_bar do %> 43 +<%= button_bar do %>
44 <% if environment.enabled?('user_themes') %> 44 <% if environment.enabled?('user_themes') %>
45 <%= modal_button :add, _('New theme ...'), :action => 'new' %> 45 <%= modal_button :add, _('New theme ...'), :action => 'new' %>
46 <% end %> 46 <% end %>
app/views/profile_themes/new.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 <%= labelled_form_field(_('Name of the new theme:'), text_field_tag(:name)) %> 5 <%= labelled_form_field(_('Name of the new theme:'), text_field_tag(:name)) %>
6 6
7 - <% button_bar do %> 7 + <%= button_bar do %>
8 <%= submit_button(:save, _('Create')) %> 8 <%= submit_button(:save, _('Create')) %>
9 <% end %> 9 <% end %>
10 <% end %> 10 <% end %>
app/views/region_validators/_search.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= item.name %> 5 <%= item.name %>
6 <%= form_tag :action => 'add', :id => @region do %> 6 <%= form_tag :action => 'add', :id => @region do %>
7 <%= hidden_field_tag :validator_id, item.id %> 7 <%= hidden_field_tag :validator_id, item.id %>
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button('add', _('Add')) %> 9 <%= submit_button('add', _('Add')) %>
10 <% end %> 10 <% end %>
11 <% end %> 11 <% end %>
app/views/region_validators/region.html.erb
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 19
20 <%= form_tag({}, { :method => 'get' }) do %> 20 <%= form_tag({}, { :method => 'get' }) do %>
21 <%= text_field_tag :search, nil, :id => 'search_validator' %> 21 <%= text_field_tag :search, nil, :id => 'search_validator' %>
22 - <% button_bar do %> 22 + <%= button_bar do %>
23 <%= submit_button('search', _('Search')) %> 23 <%= submit_button('search', _('Search')) %>
24 <% end %> 24 <% end %>
25 <% end %> 25 <% end %>
app/views/role/_form.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 </div> 16 </div>
17 <% end %> 17 <% end %>
18 18
19 - <% button_bar do %> 19 + <%= button_bar do %>
20 <%= submit_button('save', (mode == :edit) ? _('Save changes') : _('Create role'), :cancel => {:action => 'index'} ) %> 20 <%= submit_button('save', (mode == :edit) ? _('Save changes') : _('Create role'), :cancel => {:action => 'index'} ) %>
21 <% end %> 21 <% end %>
22 <% end %> 22 <% end %>
app/views/role/index.html.erb
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 <% end %> 17 <% end %>
18 </table> 18 </table>
19 19
20 -<% button_bar do %> 20 +<%= button_bar do %>
21 <%= button :add, _('Create a new role'), :action => 'new' %> 21 <%= button :add, _('Create a new role'), :action => 'new' %>
22 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %> 22 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %>
23 <% end %> 23 <% end %>
app/views/role/show.html.erb
@@ -3,11 +3,11 @@ @@ -3,11 +3,11 @@
3 <h3> <%= _('Permissions') %> </h3> 3 <h3> <%= _('Permissions') %> </h3>
4 <ul> 4 <ul>
5 <% @role.permissions.each do |p| %> 5 <% @role.permissions.each do |p| %>
6 - <li> <%= permission_name(p) %> </li> 6 + <li> <%= permission_name(p) %> </li>
7 <% end %> 7 <% end %>
8 </ul> 8 </ul>
9 9
10 -<% button_bar do %> 10 +<%= button_bar do %>
11 <%= button :edit, _('Edit'), :action => 'edit', :id => @role %> 11 <%= button :edit, _('Edit'), :action => 'edit', :id => @role %>
12 <%= button :back, _('Back to roles management'), :action => 'index' %> 12 <%= button :back, _('Back to roles management'), :action => 'index' %>
13 <% end %> 13 <% end %>
app/views/search/search_page.html.erb
1 -<%= render :partial => 'search_form', :locals => { :hint => _("Type words about the %s you're looking for") % @asset.to_s.singularize } %> 1 +<%= render :partial => 'search_form', :locals => { :hint => _("Type words about the %s you're looking for") % _(@asset.to_s.singularize) } %>
2 <%= render :partial => 'search_content' %> 2 <%= render :partial => 'search_content' %>
3 3
4 <div style="clear: both"></div> 4 <div style="clear: both"></div>
app/views/search/tag.html.erb
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <%= _('Tagged with "%s"').html_safe % content_tag('code', @tag) %> 2 <%= _('Tagged with "%s"').html_safe % content_tag('code', @tag) %>
3 </h2> 3 </h2>
4 4
5 -<% button_bar do %> 5 +<%= button_bar do %>
6 <%= button('back', _('Back to tag cloud'), :action => 'tags') %> 6 <%= button('back', _('Back to tag cloud'), :action => 'tags') %>
7 <% end %> 7 <% end %>
8 8
app/views/shared/_list_groups.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= raw _('Description: %s') % group.description + '<br/>' if group.community? %> 11 <%= raw _('Description: %s') % group.description + '<br/>' if group.community? %>
12 <%= _('Members: %s') % group.members_count.to_s %> <br/> 12 <%= _('Members: %s') % group.members_count.to_s %> <br/>
13 <%= _('Created at: %s') % show_date(group.created_at) unless group.enterprise? %> <br/> 13 <%= _('Created at: %s') % show_date(group.created_at) unless group.enterprise? %> <br/>
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <% if user.has_permission?(:edit_profile, group) %> 15 <% if user.has_permission?(:edit_profile, group) %>
16 <%= button 'menu-ctrl-panel', _('Control panel of this group'), group.admin_url %> 16 <%= button 'menu-ctrl-panel', _('Control panel of this group'), group.admin_url %>
17 <% end %> 17 <% end %>
app/views/shared/access_denied.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <p><%= _("If you are supposed to have access to this area, you'll probably want to talk to the people responsible and ask them to give you access.") %></p> 9 <p><%= _("If you are supposed to have access to this area, you'll probably want to talk to the people responsible and ask them to give you access.") %></p>
10 <% end %> 10 <% end %>
11 11
12 - <% button_bar do %> 12 + <%= button_bar do %>
13 <%= button :back, _('Go back'), :back %> 13 <%= button :back, _('Go back'), :back %>
14 <%= button :home, _('Go to the site home page'), :controller => 'home' %> 14 <%= button :home, _('Go to the site home page'), :controller => 'home' %>
15 <% end %> 15 <% end %>
app/views/shared/not_found.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <%= _('You may have clicked an expired link or mistyped the address.') %> 4 <%= _('You may have clicked an expired link or mistyped the address.') %>
5 <%= _('If you clicked a link that was in another site, or was given to you by someone else, it would be nice if you tell them that their link is not valid anymore.') %> 5 <%= _('If you clicked a link that was in another site, or was given to you by someone else, it would be nice if you tell them that their link is not valid anymore.') %>
6 </p> 6 </p>
7 - <% button_bar do %> 7 + <%= button_bar do %>
8 <%= button :back, _('Go back'), :back %> 8 <%= button :back, _('Go back'), :back %>
9 <%= button :home, _('Go to the home page'), '/' %> 9 <%= button :home, _('Go to the home page'), '/' %>
10 <% end %> 10 <% end %>
app/views/shared/theme_test_panel.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 5
6 <p><small><em><%= _('You can move this window away to have a better visualization of specific parts of screen.') %></em></small></p> 6 <p><small><em><%= _('You can move this window away to have a better visualization of specific parts of screen.') %></em></small></p>
7 7
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= button(:ok, _('Finished testing'), :controller => 'profile_themes', :profile => theme_owner, :action => 'stop_test', :id => current_theme) %> 9 <%= button(:ok, _('Finished testing'), :controller => 'profile_themes', :profile => theme_owner, :action => 'stop_test', :id => current_theme) %>
10 <%= button(:edit, _('Edit theme'), :controller => 'profile_themes', :profile => theme_owner, :action => 'edit', :id => current_theme) %> 10 <%= button(:edit, _('Edit theme'), :controller => 'profile_themes', :profile => theme_owner, :action => 'edit', :id => current_theme) %>
11 <% end %> 11 <% end %>
app/views/spam/_task.html.erb
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 7
8 <%= yield %> <%# ??? %> 8 <%= yield %> <%# ??? %>
9 9
10 - <% button_bar do %> 10 + <%= button_bar do %>
11 <%= button_to_function('new', _('Mark as NOT SPAM'), 'removeTaskBox(this, %s, "%s", "")' % [url_for(:mark_task_as_ham => task.id).to_json, "task-#{task.id}"]) %> 11 <%= button_to_function('new', _('Mark as NOT SPAM'), 'removeTaskBox(this, %s, "%s", "")' % [url_for(:mark_task_as_ham => task.id).to_json, "task-#{task.id}"]) %>
12 <%= yield :extra_buttons %> 12 <%= yield :extra_buttons %>
13 <%= button_to_function('delete', _('Remove'), 'removeTaskBox(this, %s, "%s", %s)' % [url_for(:profile => params[:profile], :remove_task => task.id).to_json, "task-#{task.id}", _('Are you sure you want to remove this article suggestion?').to_json]) %> 13 <%= button_to_function('delete', _('Remove'), 'removeTaskBox(this, %s, "%s", %s)' % [url_for(:profile => params[:profile], :remove_task => task.id).to_json, "task-#{task.id}", _('Are you sure you want to remove this article suggestion?').to_json]) %>
app/views/spam/index.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 <%= _('There are no spams to review.') if no_tabs %> 7 <%= _('There are no spams to review.') if no_tabs %>
8 8
9 -<% button_bar do %> 9 +<%= button_bar do %>
10 <%= button :back, _('Back to control panel'), :controller => :profile_editor %> 10 <%= button :back, _('Back to control panel'), :controller => :profile_editor %>
11 <% end %> 11 <% end %>
12 12
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <%= render_tabs(tabs) %> 20 <%= render_tabs(tabs) %>
21 21
22 <% unless no_tabs %> 22 <% unless no_tabs %>
23 - <% button_bar do %> 23 + <%= button_bar do %>
24 <%= button :back, _('Back to control panel'), :controller => :profile_editor %> 24 <%= button :back, _('Back to control panel'), :controller => :profile_editor %>
25 <% end %> 25 <% end %>
26 <% end %> 26 <% end %>
app/views/tasks/index.html.erb
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 </p> 41 </p>
42 <% else %> 42 <% else %>
43 <%= form_tag tasks_url(:action => 'close') do%> 43 <%= form_tag tasks_url(:action => 'close') do%>
44 - <% button_bar(:class => 'task-actions') do %> 44 + <%= button_bar(:class => 'task-actions') do %>
45 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %> 45 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %>
46 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %> 46 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %>
47 <%= submit_button :save, _("Apply!") %> 47 <%= submit_button :save, _("Apply!") %>
@@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
71 71
72 <%= pagination_links(@tasks)%> 72 <%= pagination_links(@tasks)%>
73 73
74 - <% button_bar(:class => 'task-actions') do %> 74 + <%= button_bar(:class => 'task-actions') do %>
75 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %> 75 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %>
76 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %> 76 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %>
77 <%= submit_button :save, _("Apply!") %> 77 <%= submit_button :save, _("Apply!") %>
app/views/tasks/list_requested.html.erb
@@ -13,6 +13,6 @@ @@ -13,6 +13,6 @@
13 <% end %> 13 <% end %>
14 </ul> 14 </ul>
15 15
16 -<% button_bar do %> 16 +<%= button_bar do %>
17 <%= button :back, _('Back'), :action => 'index' %> 17 <%= button :back, _('Back'), :action => 'index' %>
18 <% end %> 18 <% end %>
app/views/tasks/new.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= f.text_field :title, :style => 'width:80%;' %> 11 <%= f.text_field :title, :style => 'width:80%;' %>
12 <%= f.text_area :message, :style => 'height:200px; width:80%;' %> 12 <%= f.text_area :message, :style => 'height:200px; width:80%;' %>
13 13
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <%= submit_button(:ok, _('Send'), :cancel => {:action => 'index'}) %> 15 <%= submit_button(:ok, _('Send'), :cancel => {:action => 'index'}) %>
16 <% end %> 16 <% end %>
17 <% end %> 17 <% end %>
app/views/tasks/processed.html.erb
@@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
48 <% end %> 48 <% end %>
49 </p> 49 </p>
50 50
51 -<% button_bar do %> 51 +<%= button_bar do %>
52 <%= button(:back, _('Back'), :action => 'index') %> 52 <%= button(:back, _('Back'), :action => 'index') %>
53 <% end %> 53 <% end %>
54 54
app/views/tasks/ticket_details.html.erb
@@ -14,6 +14,6 @@ @@ -14,6 +14,6 @@
14 <p><%= _('Closing statement: %s') % @ticket.closing_statment %></p> 14 <p><%= _('Closing statement: %s') % @ticket.closing_statment %></p>
15 <% end %> 15 <% end %>
16 16
17 -<% button_bar do %> 17 +<%= button_bar do %>
18 <%= button :back, _('Back'), :action => 'index' %> 18 <%= button :back, _('Back'), :action => 'index' %>
19 <% end %> 19 <% end %>
app/views/templates/_create_template_form.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= form_tag do %> 11 <%= form_tag do %>
12 <%= labelled_text_field(_('Name')+': ', :name)%> 12 <%= labelled_text_field(_('Name')+': ', :name)%>
13 13
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <%= submit_button('save', _('Save'))%> 15 <%= submit_button('save', _('Save'))%>
16 <%= button('cancel', _('Cancel'), {:action => 'index'})%> 16 <%= button('cancel', _('Cancel'), {:action => 'index'})%>
17 <% end %> 17 <% end %>
app/views/templates/index.html.erb
@@ -40,6 +40,6 @@ @@ -40,6 +40,6 @@
40 </div> 40 </div>
41 <% end %> 41 <% end %>
42 42
43 -<% button_bar do %> 43 +<%= button_bar do %>
44 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %> 44 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %>
45 <% end %> 45 <% end %>
app/views/trusted_sites/edit.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= text_field_tag :site, @site %> 5 <%= text_field_tag :site, @site %>
6 <%= hidden_field_tag :orig_site, @site %> 6 <%= hidden_field_tag :orig_site, @site %>
7 7
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'} ) %> 9 <%= submit_button('save', _('Save changes'), :cancel => {:action => 'index'} ) %>
10 <% end %> 10 <% end %>
11 <% end %> 11 <% end %>
app/views/trusted_sites/index.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <% end %> 22 <% end %>
23 </table> 23 </table>
24 24
25 -<% button_bar do %> 25 +<%= button_bar do %>
26 <%= button :add, _('Add a trusted site'), :action => 'new' %> 26 <%= button :add, _('Add a trusted site'), :action => 'new' %>
27 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %> 27 <%= button :back, _('Back to admin panel'), :controller => 'admin_panel' %>
28 <% end %> 28 <% end %>
app/views/trusted_sites/new.html.erb
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 <%= text_field_tag :site, @site %> 5 <%= text_field_tag :site, @site %>
6 6
7 - <% button_bar do %> 7 + <%= button_bar do %>
8 <%= submit_button('save', _('Add trusted site'), :cancel => {:action => 'index'} ) %> 8 <%= submit_button('save', _('Add trusted site'), :cancel => {:action => 'index'} ) %>
9 <% end %> 9 <% end %>
10 <% end %> 10 <% end %>
app/views/users/_index_buttons.html.erb
1 -<% button_bar do %> 1 +<%= button_bar do %>
2 <%= button :'text-plain', _('User list as [CSV]'), :action => 'download.csv' %> 2 <%= button :'text-plain', _('User list as [CSV]'), :action => 'download.csv' %>
3 <%= button :'text-html', _('User list as [XML]'), :action => 'download.xml' %> 3 <%= button :'text-html', _('User list as [XML]'), :action => 'download.xml' %>
4 <%= button :send, _('Send e-mail to users'), :action => 'send_mail' %> 4 <%= button :send, _('Send e-mail to users'), :action => 'send_mail' %>
config/application.rb
@@ -40,7 +40,6 @@ module Noosfero @@ -40,7 +40,6 @@ module Noosfero
40 # Custom directories with classes and modules you want to be autoloadable. 40 # Custom directories with classes and modules you want to be autoloadable.
41 config.autoload_paths << config.root.join('lib') 41 config.autoload_paths << config.root.join('lib')
42 config.autoload_paths << config.root.join('app') 42 config.autoload_paths << config.root.join('app')
43 - config.autoload_paths << config.root.join('app/jobs')  
44 config.autoload_paths << config.root.join('app/sweepers') 43 config.autoload_paths << config.root.join('app/sweepers')
45 config.autoload_paths.concat Dir["#{config.root}/app/controllers/**/"] 44 config.autoload_paths.concat Dir["#{config.root}/app/controllers/**/"]
46 config.autoload_paths << config.root.join('test', 'mocks', Rails.env) 45 config.autoload_paths << config.root.join('test', 'mocks', Rails.env)
features/edit_article.feature
@@ -281,3 +281,16 @@ Feature: edit article @@ -281,3 +281,16 @@ Feature: edit article
281 And I press "Save" 281 And I press "Save"
282 Then I should not see "Language must be choosen" 282 Then I should not see "Language must be choosen"
283 And I should be on /joaosilva/article-in-portuguese 283 And I should be on /joaosilva/article-in-portuguese
  284 +
  285 + @selenium
  286 + Scenario: create an article with time
  287 + Given I am on joaosilva's control panel
  288 + And I follow "Manage Content"
  289 + And I follow "New content"
  290 + When I follow "Text article with visual editor"
  291 + And I fill in "Title" with "My time testing Article"
  292 + And I fill in "Publish date" with "1980-11-15 20:37"
  293 + And I press "Save"
  294 + And I go to /joaosilva/my-time-testing-article
  295 + Then I should see "November 15, 1980 20:37"
  296 +
lib/authenticated_system.rb
@@ -1,160 +0,0 @@ @@ -1,160 +0,0 @@
1 -module AuthenticatedSystem  
2 -  
3 - protected  
4 -  
5 - def self.included base  
6 - if base < ActionController::Base  
7 - base.around_filter :user_set_current  
8 - base.before_filter :login_from_cookie  
9 - end  
10 -  
11 - # Inclusion hook to make #current_user and #logged_in?  
12 - # available as ActionView helper methods.  
13 - base.helper_method :current_user, :logged_in?  
14 - end  
15 -  
16 - # Returns true or false if the user is logged in.  
17 - # Preloads @current_user with the user model if they're logged in.  
18 - def logged_in?  
19 - current_user != nil  
20 - end  
21 -  
22 - # Accesses the current user from the session.  
23 - def current_user  
24 - @current_user ||= begin  
25 - id = session[:user]  
26 - user = User.where(id: id).first if id  
27 - user.session = session if user  
28 - User.current = user  
29 - user  
30 - end  
31 - end  
32 -  
33 - # Store the given user in the session.  
34 - def current_user=(new_user)  
35 - if new_user.nil?  
36 - session.delete(:user)  
37 - else  
38 - session[:user] = new_user.id  
39 - new_user.session = session  
40 - new_user.register_login  
41 - end  
42 - @current_user = User.current = new_user  
43 - end  
44 -  
45 - # See impl. from http://stackoverflow.com/a/2513456/670229  
46 - def user_set_current  
47 - User.current = current_user  
48 - yield  
49 - ensure  
50 - # to address the thread variable leak issues in Puma/Thin webserver  
51 - User.current = nil  
52 - end  
53 -  
54 - # Check if the user is authorized.  
55 - #  
56 - # Override this method in your controllers if you want to restrict access  
57 - # to only a few actions or if you want to check if the user  
58 - # has the correct rights.  
59 - #  
60 - # Example:  
61 - #  
62 - # # only allow nonbobs  
63 - # def authorize?  
64 - # current_user.login != "bob"  
65 - # end  
66 - def authorized?  
67 - true  
68 - end  
69 -  
70 - # Filter method to enforce a login requirement.  
71 - #  
72 - # To require logins for all actions, use this in your controllers:  
73 - #  
74 - # before_filter :login_required  
75 - #  
76 - # To require logins for specific actions, use this in your controllers:  
77 - #  
78 - # before_filter :login_required, :only => [ :edit, :update ]  
79 - #  
80 - # To skip this in a subclassed controller:  
81 - #  
82 - # skip_before_filter :login_required  
83 - #  
84 - def login_required  
85 - username, passwd = get_auth_data  
86 - if username && passwd  
87 - self.current_user ||= User.authenticate(username, passwd) || nil  
88 - end  
89 - if logged_in? && authorized?  
90 - true  
91 - else  
92 - if params[:require_login_popup]  
93 - render :json => { :require_login_popup => true }  
94 - else  
95 - access_denied  
96 - end  
97 - end  
98 - end  
99 -  
100 - # Redirect as appropriate when an access request fails.  
101 - #  
102 - # The default action is to redirect to the login screen.  
103 - #  
104 - # Override this method in your controllers if you want to have special  
105 - # behavior in case the user is not authorized  
106 - # to access the requested action. For example, a popup window might  
107 - # simply close itself.  
108 - def access_denied  
109 - respond_to do |accepts|  
110 - accepts.html do  
111 - if request.xhr?  
112 - render :text => _('Access denied'), :status => 401  
113 - else  
114 - store_location  
115 - redirect_to :controller => '/account', :action => 'login'  
116 - end  
117 - end  
118 - accepts.xml do  
119 - headers["Status"] = "Unauthorized"  
120 - headers["WWW-Authenticate"] = %(Basic realm="Web Password")  
121 - render :text => "Could't authenticate you", :status => '401 Unauthorized'  
122 - end  
123 - end  
124 - false  
125 - end  
126 -  
127 - # Store the URI of the current request in the session.  
128 - #  
129 - # We can return to this location by calling #redirect_back_or_default.  
130 - def store_location(location = request.url)  
131 - session[:return_to] = location  
132 - end  
133 -  
134 - # Redirect to the URI stored by the most recent store_location call or  
135 - # to the passed default.  
136 - def redirect_back_or_default(default)  
137 - if session[:return_to]  
138 - redirect_to(session.delete(:return_to))  
139 - else  
140 - redirect_to(default)  
141 - end  
142 - end  
143 -  
144 - # When called with before_filter :login_from_cookie will check for an :auth_token  
145 - # cookie and log the user back in if apropriate  
146 - def login_from_cookie  
147 - return if cookies[:auth_token].blank? or logged_in?  
148 - user = User.where(remember_token: cookies[:auth_token]).first  
149 - self.current_user = user if user and user.remember_token?  
150 - end  
151 -  
152 - private  
153 - @@http_auth_headers = %w(X-HTTP_AUTHORIZATION HTTP_AUTHORIZATION Authorization)  
154 - # gets BASIC auth info  
155 - def get_auth_data  
156 - auth_key = @@http_auth_headers.detect { |h| request.env.has_key?(h) }  
157 - auth_data = request.env[auth_key].to_s.split unless auth_key.blank?  
158 - return auth_data && auth_data[0] == 'Basic' ? Base64.decode64(auth_data[1]).split(':')[0..1] : [nil, nil]  
159 - end  
160 -end  
lib/download_reported_images_job.rb
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -class DownloadReportedImagesJob < Struct.new(:abuse_report, :article)  
2 - def perform  
3 - images_paths = article.image? ? [File.join(article.profile.environment.top_url, article.public_filename(:display))] : article.body_images_paths  
4 - images_paths.each do |image_path|  
5 - image = get_image(image_path)  
6 - reported_image = ReportedImage.create!( :abuse_report => abuse_report,  
7 - :uploaded_data => image,  
8 - :filename => File.basename(image_path),  
9 - :size => image.size )  
10 - abuse_report.content = parse_content(abuse_report, image_path, reported_image)  
11 - end  
12 - abuse_report.save!  
13 - end  
14 -  
15 - def get_image(image_path)  
16 - image = ActionController::UploadedTempfile.new('reported_image')  
17 - image.write(Net::HTTP.get(URI.parse(image_path)))  
18 - image.original_path = 'tmp/' + File.basename(image_path)  
19 - image.content_type = 'image/' + File.extname(image_path).gsub('.','')  
20 - image  
21 - end  
22 -  
23 - def parse_content(report, old_path, image)  
24 - old_path = old_path.gsub(report.reporter.environment.top_url, '')  
25 - report.content.gsub(/#{old_path}/, image.public_filename)  
26 - end  
27 -end  
lib/extensions/active_record/reflection.rb
1 -  
2 # on STI classes tike Article and Profile, plugins' extensions 1 # on STI classes tike Article and Profile, plugins' extensions
3 # on associations should be reflected on descendants 2 # on associations should be reflected on descendants
4 module ActiveRecord 3 module ActiveRecord
5 module Reflection 4 module Reflection
6 -  
7 - class << self  
8 -  
9 - def add_reflection_with_descendants(ar, name, reflection)  
10 - self.add_reflection_without_descendants ar, name, reflection  
11 - ar.descendants.each do |k|  
12 - k._reflections.merge!(name.to_s => reflection)  
13 - end if ar.base_class == ar 5 + def self.add_reflection(ar, name, reflection)
  6 + (ar.descendants << ar).each do |klass|
  7 + klass.clear_reflections_cache
  8 + klass._reflections = klass._reflections.merge(name.to_s => reflection)
14 end 9 end
15 -  
16 - alias_method_chain :add_reflection, :descendants  
17 -  
18 end 10 end
19 end 11 end
20 end 12 end
lib/get_email_contacts_job.rb
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -class GetEmailContactsJob < Struct.new(:import_from, :login, :password, :contact_list_id)  
2 - def perform  
3 - begin  
4 - Invitation.get_contacts(import_from, login, password, contact_list_id)  
5 - rescue Contacts::AuthenticationError => ex  
6 - ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).register_auth_error  
7 - rescue Exception => ex  
8 - ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).register_error  
9 - end  
10 - end  
11 -end  
lib/invitation_job.rb
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -class InvitationJob < Struct.new(:person_id, :contacts_to_invite, :message, :profile_id, :contact_list_id, :locale)  
2 - def perform  
3 - Noosfero.with_locale(locale) do  
4 - person = Person.find(person_id)  
5 - profile = Profile.find(profile_id)  
6 - Invitation.invite(person, contacts_to_invite, message, profile)  
7 - ContactList.exists?(contact_list_id) && ContactList.find(contact_list_id).destroy  
8 - end  
9 - end  
10 -end  
lib/log_memory_consumption_job.rb
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -class LogMemoryConsumptionJob < Struct.new(:last_stat)  
2 - # Number of entries do display  
3 - N = 20  
4 -  
5 - def perform  
6 - logpath = File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_memory_consumption.log")  
7 - logger = Logger.new(logpath)  
8 - stats = Hash.new(0)  
9 - ObjectSpace.each_object {|o| stats[o.class.to_s] += 1}  
10 - i = 1  
11 -  
12 - logger << "[#{Time.now.strftime('%F %T %z')}]\n"  
13 - stats.sort {|(k1,v1),(k2,v2)| v2 <=> v1}.each do |k,v|  
14 - logger << (sprintf "%-60s %10d", k, v)  
15 - logger << (sprintf " | delta %10d", (v - last_stat[k])) if last_stat && last_stat[k]  
16 - logger << "\n"  
17 - break if i > N  
18 - i += 1  
19 - end  
20 - logger << "\n"  
21 - end  
22 -end  
lib/mailing_job.rb
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -class MailingJob < Struct.new(:mailing_id)  
2 - def perform  
3 - mailing = Mailing.find(mailing_id)  
4 - Noosfero.with_locale(mailing.locale) do  
5 - mailing.deliver  
6 - end  
7 - end  
8 -end  
lib/notify_activity_to_profiles_job.rb
@@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
1 -class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id)  
2 - NOTIFY_ONLY_COMMUNITY = [  
3 - 'add_member_in_community'  
4 - ]  
5 -  
6 - NOT_NOTIFY_COMMUNITY = [  
7 - 'join_community'  
8 - ]  
9 - def perform  
10 - return unless ActionTracker::Record.exists?(tracked_action_id)  
11 - tracked_action = ActionTracker::Record.find(tracked_action_id)  
12 - return unless tracked_action.user.present?  
13 - target = tracked_action.target  
14 - if target.is_a?(Community) && ( NOTIFY_ONLY_COMMUNITY.include?(tracked_action.verb) || ! target.public_profile )  
15 - ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id)  
16 - return  
17 - end  
18 -  
19 - # Notify the user  
20 - ActionTrackerNotification.create(:profile_id => tracked_action.user.id, :action_tracker_id => tracked_action.id)  
21 -  
22 - # Notify all friends  
23 - ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select f.friend_id, #{tracked_action.id} from friendships as f where person_id=#{tracked_action.user.id} and f.friend_id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id})")  
24 -  
25 - if tracked_action.user.is_a? Organization  
26 - ActionTrackerNotification.connection.execute "insert into action_tracker_notifications(profile_id, action_tracker_id) " +  
27 - "select distinct accessor_id, #{tracked_action.id} from role_assignments where resource_id = #{tracked_action.user.id} and resource_type='Profile' " +  
28 - if tracked_action.user.is_a? Enterprise then "union select distinct person_id, #{tracked_action.id} from favorite_enterprise_people where enterprise_id = #{tracked_action.user.id}" else "" end  
29 - end  
30 -  
31 - if target.is_a?(Community)  
32 - ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb)  
33 -  
34 - ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select distinct profiles.id, #{tracked_action.id} from role_assignments, profiles where profiles.type = 'Person' and profiles.id = role_assignments.accessor_id and profiles.id != #{tracked_action.user.id} and profiles.id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id}) and role_assignments.resource_type = 'Profile' and role_assignments.resource_id = #{target.id}")  
35 - end  
36 -  
37 - if target.is_a?(Article) && target.profile.is_a?(Community)  
38 - ActionTrackerNotification.create(:profile_id => target.profile.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb)  
39 -  
40 - ActionTrackerNotification.connection.execute("insert into action_tracker_notifications(profile_id, action_tracker_id) select distinct profiles.id, #{tracked_action.id} from role_assignments, profiles where profiles.type = 'Person' and profiles.id = role_assignments.accessor_id and profiles.id != #{tracked_action.user.id} and profiles.id not in (select atn.profile_id from action_tracker_notifications as atn where atn.action_tracker_id = #{tracked_action.id}) and role_assignments.resource_type = 'Profile' and role_assignments.resource_id = #{target.profile.id}")  
41 - end  
42 -  
43 - end  
44 -end  
lib/profile_suggestions_job.rb
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -class ProfileSuggestionsJob < Struct.new(:person_id)  
2 -  
3 - def self.exists?(person_id)  
4 - !find(person_id).empty?  
5 - end  
6 -  
7 - def self.find(person_id)  
8 - Delayed::Job.by_handler("--- !ruby/struct:ProfileSuggestionsJob\nperson_id: #{person_id}\n")  
9 - end  
10 -  
11 - def perform  
12 - logger = Delayed::Worker.logger  
13 - begin  
14 - person = Person.find(person_id)  
15 - ProfileSuggestion.calculate_suggestions(person)  
16 - UserMailer.profiles_suggestions_email(person).deliver if person.email_suggestions  
17 - rescue Exception => exception  
18 - logger.error("Error with suggestions for person ID %d: %s" % [person_id, exception.to_s])  
19 - end  
20 - end  
21 -  
22 -end  
lib/user_activation_job.rb
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -class UserActivationJob < Struct.new(:user_id)  
2 - def perform  
3 - user = User.find(user_id)  
4 - user.destroy unless user.activated? || user.person.is_template? || user.moderate_registration_pending?  
5 - end  
6 -end  
plugins/admin_notifications/controllers/admin_notifications_plugin_myprofile_controller.rb
@@ -10,7 +10,7 @@ class AdminNotificationsPluginMyprofileController &lt; MyProfileController @@ -10,7 +10,7 @@ class AdminNotificationsPluginMyprofileController &lt; MyProfileController
10 end 10 end
11 11
12 def admin_required 12 def admin_required
13 - redirect_to :root unless target.is_admin?(current_person) 13 + redirect_to :root unless (current_person.is_admin? || target.is_admin?(current_person))
14 end 14 end
15 15
16 end 16 end
plugins/admin_notifications/po/admin_notifications.pot 0 → 100644
@@ -0,0 +1,191 @@ @@ -0,0 +1,191 @@
  1 +# SOME DESCRIPTIVE TITLE.
  2 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3 +# This file is distributed under the same license as the PACKAGE package.
  4 +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5 +#
  6 +#, fuzzy
  7 +msgid ""
  8 +msgstr ""
  9 +"Project-Id-Version: PACKAGE VERSION\n"
  10 +"Report-Msgid-Bugs-To: \n"
  11 +"POT-Creation-Date: 2016-05-17 15:38-0300\n"
  12 +"PO-Revision-Date: 2016-05-17 15:38-0300\n"
  13 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  14 +"Language-Team: LANGUAGE <LL@li.org>\n"
  15 +"Language: \n"
  16 +"MIME-Version: 1.0\n"
  17 +"Content-Type: text/plain; charset=UTF-8\n"
  18 +"Content-Transfer-Encoding: 8bit\n"
  19 +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
  20 +
  21 +#: ../lib/admin_notifications_plugin.rb:8
  22 +msgid "A plugin for notifications."
  23 +msgstr ""
  24 +
  25 +#: ../lib/admin_notifications_plugin.rb:29
  26 +msgid "Notification Manager"
  27 +msgstr ""
  28 +
  29 +#: ../lib/admin_notifications_plugin.rb:35
  30 +msgid "Manage Notifications"
  31 +msgstr ""
  32 +
  33 +#: ../lib/admin_notifications_plugin/notification_manager.rb:14
  34 +msgid "Notification successfully created"
  35 +msgstr ""
  36 +
  37 +#: ../lib/admin_notifications_plugin/notification_manager.rb:17
  38 +msgid "Notification couldn't be created"
  39 +msgstr ""
  40 +
  41 +#: ../lib/admin_notifications_plugin/notification_manager.rb:26
  42 +msgid "The notification was deleted."
  43 +msgstr ""
  44 +
  45 +#: ../lib/admin_notifications_plugin/notification_manager.rb:28
  46 +msgid "Could not remove the notification"
  47 +msgstr ""
  48 +
  49 +#: ../lib/admin_notifications_plugin/notification_manager.rb:38
  50 +msgid "The notification was edited."
  51 +msgstr ""
  52 +
  53 +#: ../lib/admin_notifications_plugin/notification_manager.rb:40
  54 +msgid "Could not edit the notification."
  55 +msgstr ""
  56 +
  57 +#: ../lib/admin_notifications_plugin/notification_manager.rb:52
  58 +msgid "The status of the notification was changed."
  59 +msgstr ""
  60 +
  61 +#: ../lib/admin_notifications_plugin/notification_manager.rb:54
  62 +msgid "Could not change the status of the notification."
  63 +msgstr ""
  64 +
  65 +#: ../views/shared/_form.html.erb:5
  66 +msgid "Back"
  67 +msgstr ""
  68 +
  69 +#: ../views/shared/_form.html.erb:11
  70 +msgid "Optional Title:"
  71 +msgstr ""
  72 +
  73 +#: ../views/shared/_form.html.erb:13
  74 +msgid "Enter your message here:"
  75 +msgstr ""
  76 +
  77 +#: ../views/shared/_form.html.erb:15
  78 +msgid ""
  79 +"Obs: You can use %{name} and %{email} variables to put the user's name and ema"
  80 +"il in the message."
  81 +msgstr ""
  82 +
  83 +#: ../views/shared/_form.html.erb:18
  84 +msgid "Notifications Status"
  85 +msgstr ""
  86 +
  87 +#: ../views/shared/_form.html.erb:18
  88 +msgid "Active"
  89 +msgstr ""
  90 +
  91 +#: ../views/shared/_form.html.erb:18
  92 +msgid "Inactive"
  93 +msgstr ""
  94 +
  95 +#: ../views/shared/_form.html.erb:20
  96 +msgid "Notifications Color/Type"
  97 +msgstr ""
  98 +
  99 +#: ../views/shared/_form.html.erb:20
  100 +msgid "Blue - Information"
  101 +msgstr ""
  102 +
  103 +#: ../views/shared/_form.html.erb:20
  104 +msgid "Yellow - Warning"
  105 +msgstr ""
  106 +
  107 +#: ../views/shared/_form.html.erb:20
  108 +msgid "Green - Success"
  109 +msgstr ""
  110 +
  111 +#: ../views/shared/_form.html.erb:20
  112 +msgid "Red - Danger"
  113 +msgstr ""
  114 +
  115 +#: ../views/shared/_form.html.erb:23
  116 +msgid "Display only in the profile homepage"
  117 +msgstr ""
  118 +
  119 +#: ../views/shared/_form.html.erb:23
  120 +msgid "Display only in the homepage"
  121 +msgstr ""
  122 +
  123 +#: ../views/shared/_form.html.erb:27
  124 +msgid "Display to not logged users too"
  125 +msgstr ""
  126 +
  127 +#: ../views/shared/_form.html.erb:31
  128 +msgid "Display popup until user close the notification"
  129 +msgstr ""
  130 +
  131 +#: ../views/shared/_form.html.erb:35
  132 +msgid "Save"
  133 +msgstr ""
  134 +
  135 +#: ../views/shared/_notifications_list.html.erb:3
  136 +#: ../views/shared/_notifications_list.html.erb:16
  137 +msgid "Notifications"
  138 +msgstr ""
  139 +
  140 +#: ../views/shared/_notifications_list.html.erb:7
  141 +msgid "New Notification"
  142 +msgstr ""
  143 +
  144 +#: ../views/shared/_notifications_list.html.erb:10
  145 +msgid "Back to control panel"
  146 +msgstr ""
  147 +
  148 +#: ../views/shared/_notifications_list.html.erb:19
  149 +msgid "Actions"
  150 +msgstr ""
  151 +
  152 +#: ../views/shared/_notifications_list.html.erb:30
  153 +msgid "Deactivate"
  154 +msgstr ""
  155 +
  156 +#: ../views/shared/_notifications_list.html.erb:30
  157 +#: ../views/shared/_notifications_list.html.erb:32
  158 +msgid "Do you want to change the status of this notification?"
  159 +msgstr ""
  160 +
  161 +#: ../views/shared/_notifications_list.html.erb:32
  162 +msgid "Activate"
  163 +msgstr ""
  164 +
  165 +#: ../views/shared/_notifications_list.html.erb:34
  166 +msgid "Edit"
  167 +msgstr ""
  168 +
  169 +#: ../views/shared/_notifications_list.html.erb:35
  170 +msgid "Delete"
  171 +msgstr ""
  172 +
  173 +#: ../views/shared/_notifications_list.html.erb:35
  174 +msgid "Do you want to delete this notification?"
  175 +msgstr ""
  176 +
  177 +#: ../views/shared/show_notification.html.erb:8
  178 +msgid "There are active notifications in this environment!"
  179 +msgstr ""
  180 +
  181 +#: ../views/shared/show_notification.html.erb:9
  182 +msgid "Manage all notifications here."
  183 +msgstr ""
  184 +
  185 +#: ../views/shared/show_notification.html.erb:28
  186 +msgid "Do not show anymore"
  187 +msgstr ""
  188 +
  189 +#: ../views/shared/show_notification.html.erb:29
  190 +msgid "Hide for now"
  191 +msgstr ""
plugins/admin_notifications/po/notification.pot
@@ -1,187 +0,0 @@ @@ -1,187 +0,0 @@
1 -# SOME DESCRIPTIVE TITLE.  
2 -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER  
3 -# This file is distributed under the same license as the PACKAGE package.  
4 -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.  
5 -#  
6 -#, fuzzy  
7 -msgid ""  
8 -msgstr ""  
9 -"Project-Id-Version: PACKAGE VERSION\n"  
10 -"Report-Msgid-Bugs-To: \n"  
11 -"POT-Creation-Date: 2016-03-31 15:02-0300\n"  
12 -"PO-Revision-Date: 2016-03-31 15:02-0300\n"  
13 -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"  
14 -"Language-Team: LANGUAGE <LL@li.org>\n"  
15 -"Language: \n"  
16 -"MIME-Version: 1.0\n"  
17 -"Content-Type: text/plain; charset=UTF-8\n"  
18 -"Content-Transfer-Encoding: 8bit\n"  
19 -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"  
20 -  
21 -#: ../lib/notification_plugin.rb:8  
22 -msgid "A plugin for notifications."  
23 -msgstr ""  
24 -  
25 -#: ../lib/notification_plugin.rb:29  
26 -msgid "Notification Manager"  
27 -msgstr ""  
28 -  
29 -#: ../lib/notification_plugin.rb:35  
30 -msgid "Manage Notifications"  
31 -msgstr ""  
32 -  
33 -#: ../lib/notification_plugin/notification_manager.rb:14  
34 -msgid "Notification successfully created"  
35 -msgstr ""  
36 -  
37 -#: ../lib/notification_plugin/notification_manager.rb:17  
38 -msgid "Notification couldn't be created"  
39 -msgstr ""  
40 -  
41 -#: ../lib/notification_plugin/notification_manager.rb:26  
42 -msgid "The notification was deleted."  
43 -msgstr ""  
44 -  
45 -#: ../lib/notification_plugin/notification_manager.rb:28  
46 -msgid "Could not remove the notification"  
47 -msgstr ""  
48 -  
49 -#: ../lib/notification_plugin/notification_manager.rb:38  
50 -msgid "The notification was edited."  
51 -msgstr ""  
52 -  
53 -#: ../lib/notification_plugin/notification_manager.rb:40  
54 -msgid "Could not edit the notification."  
55 -msgstr ""  
56 -  
57 -#: ../lib/notification_plugin/notification_manager.rb:52  
58 -msgid "The status of the notification was changed."  
59 -msgstr ""  
60 -  
61 -#: ../lib/notification_plugin/notification_manager.rb:54  
62 -msgid "Could not change the status of the notification."  
63 -msgstr ""  
64 -  
65 -#: ../views/shared/_form.html.erb:5  
66 -msgid "Back"  
67 -msgstr ""  
68 -  
69 -#: ../views/shared/_form.html.erb:11  
70 -msgid "Optional Title:"  
71 -msgstr ""  
72 -  
73 -#: ../views/shared/_form.html.erb:13  
74 -msgid "Enter your message here:"  
75 -msgstr ""  
76 -  
77 -#: ../views/shared/_form.html.erb:15  
78 -msgid ""  
79 -"Obs: You can use %{name} and %{email} variables to put the user's name and ema"  
80 -"il in the message."  
81 -msgstr ""  
82 -  
83 -#: ../views/shared/_form.html.erb:18  
84 -msgid "Notifications Status"  
85 -msgstr ""  
86 -  
87 -#: ../views/shared/_form.html.erb:18  
88 -msgid "Active"  
89 -msgstr ""  
90 -  
91 -#: ../views/shared/_form.html.erb:18  
92 -msgid "Inactive"  
93 -msgstr ""  
94 -  
95 -#: ../views/shared/_form.html.erb:20  
96 -msgid "Notifications Color/Type"  
97 -msgstr ""  
98 -  
99 -#: ../views/shared/_form.html.erb:20  
100 -msgid "Blue - Information"  
101 -msgstr ""  
102 -  
103 -#: ../views/shared/_form.html.erb:20  
104 -msgid "Yellow - Warning"  
105 -msgstr ""  
106 -  
107 -#: ../views/shared/_form.html.erb:20  
108 -msgid "Green - Success"  
109 -msgstr ""  
110 -  
111 -#: ../views/shared/_form.html.erb:20  
112 -msgid "Red - Danger"  
113 -msgstr ""  
114 -  
115 -#: ../views/shared/_form.html.erb:23  
116 -msgid "Display only in the homepage"  
117 -msgstr ""  
118 -  
119 -#: ../views/shared/_form.html.erb:27  
120 -msgid "Display to not logged users too"  
121 -msgstr ""  
122 -  
123 -#: ../views/shared/_form.html.erb:31  
124 -msgid "Display popup until user close the notification"  
125 -msgstr ""  
126 -  
127 -#: ../views/shared/_form.html.erb:35  
128 -msgid "Save"  
129 -msgstr ""  
130 -  
131 -#: ../views/shared/_notifications_list.html.erb:3  
132 -#: ../views/shared/_notifications_list.html.erb:16  
133 -msgid "Notifications"  
134 -msgstr ""  
135 -  
136 -#: ../views/shared/_notifications_list.html.erb:7  
137 -msgid "New Notification"  
138 -msgstr ""  
139 -  
140 -#: ../views/shared/_notifications_list.html.erb:10  
141 -msgid "Back to control panel"  
142 -msgstr ""  
143 -  
144 -#: ../views/shared/_notifications_list.html.erb:19  
145 -msgid "Actions"  
146 -msgstr ""  
147 -  
148 -#: ../views/shared/_notifications_list.html.erb:30  
149 -msgid "Deactivate"  
150 -msgstr ""  
151 -  
152 -#: ../views/shared/_notifications_list.html.erb:30  
153 -#: ../views/shared/_notifications_list.html.erb:32  
154 -msgid "Do you want to change the status of this notification?"  
155 -msgstr ""  
156 -  
157 -#: ../views/shared/_notifications_list.html.erb:32  
158 -msgid "Activate"  
159 -msgstr ""  
160 -  
161 -#: ../views/shared/_notifications_list.html.erb:34  
162 -msgid "Edit"  
163 -msgstr ""  
164 -  
165 -#: ../views/shared/_notifications_list.html.erb:35  
166 -msgid "Delete"  
167 -msgstr ""  
168 -  
169 -#: ../views/shared/_notifications_list.html.erb:35  
170 -msgid "Do you want to delete this notification?"  
171 -msgstr ""  
172 -  
173 -#: ../views/shared/show_notification.html.erb:8  
174 -msgid "There are active notifications in this environment!"  
175 -msgstr ""  
176 -  
177 -#: ../views/shared/show_notification.html.erb:9  
178 -msgid "Manage all notifications here."  
179 -msgstr ""  
180 -  
181 -#: ../views/shared/show_notification.html.erb:28  
182 -msgid "Do not show anymore"  
183 -msgstr ""  
184 -  
185 -#: ../views/shared/show_notification.html.erb:29  
186 -msgid "Hide for now"  
187 -msgstr ""  
plugins/admin_notifications/po/pt/admin_notifications.po 0 → 100644
@@ -0,0 +1,147 @@ @@ -0,0 +1,147 @@
  1 +# SOME DESCRIPTIVE TITLE.
  2 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3 +# This file is distributed under the same license as the PACKAGE package.
  4 +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5 +#
  6 +msgid ""
  7 +msgstr ""
  8 +"Project-Id-Version: PACKAGE VERSION\n"
  9 +"Report-Msgid-Bugs-To: \n"
  10 +"PO-Revision-Date: 2016-05-16 14:48-0300\n"
  11 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  12 +"Language-Team: LANGUAGE <LL@li.org>\n"
  13 +"Language: \n"
  14 +"MIME-Version: 1.0\n"
  15 +"Content-Type: text/plain; charset=UTF-8\n"
  16 +"Content-Transfer-Encoding: 8bit\n"
  17 +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
  18 +
  19 +msgid "A plugin for notifications."
  20 +msgstr "Plugin para notificações."
  21 +
  22 +msgid "Notification Manager"
  23 +msgstr "Gerenciador de Notificações"
  24 +
  25 +msgid "Manage Notifications"
  26 +msgstr "Gerenciar Notificações"
  27 +
  28 +msgid "Notification successfully created"
  29 +msgstr "Notificação criada com sucesso"
  30 +
  31 +msgid "Notification couldn't be created"
  32 +msgstr "Não foi possível criar notificação"
  33 +
  34 +msgid "The notification was deleted."
  35 +msgstr "A notificação foi removida."
  36 +
  37 +msgid "Could not remove the notification"
  38 +msgstr "Não foi possível remover a notificação"
  39 +
  40 +msgid "The notification was edited."
  41 +msgstr "A notificação foi editada."
  42 +
  43 +msgid "Could not edit the notification."
  44 +msgstr "Não foi possível editar a notificação."
  45 +
  46 +msgid "The status of the notification was changed."
  47 +msgstr "O status da notificação foi modificado."
  48 +
  49 +msgid "Could not change the status of the notification."
  50 +msgstr "Não foi possível alterar o status da notificação."
  51 +
  52 +msgid "Back"
  53 +msgstr "Voltar"
  54 +
  55 +msgid "Optional Title:"
  56 +msgstr "Título Opcional:"
  57 +
  58 +msgid "Enter your message here:"
  59 +msgstr "Entre com sua mensagem aqui:"
  60 +
  61 +msgid ""
  62 +"Obs: You can use %{name} and %{email} variables to put the user's name and ema"
  63 +"il in the message."
  64 +msgstr ""
  65 +"Obs: Você pode usar as variáveis %{name} e %{email} para inserir o nome e emai"
  66 +"l do usuário logado na mensagem."
  67 +
  68 +msgid "Notifications Status"
  69 +msgstr "Status da Notificação"
  70 +
  71 +msgid "Active"
  72 +msgstr "Ativa"
  73 +
  74 +msgid "Inactive"
  75 +msgstr "Inativa"
  76 +
  77 +msgid "Notifications Color/Type"
  78 +msgstr "Cor/Tipo de Notificação"
  79 +
  80 +msgid "Blue - Information"
  81 +msgstr "Azul - Informação"
  82 +
  83 +msgid "Yellow - Warning"
  84 +msgstr "Amarelo - Atenção"
  85 +
  86 +msgid "Green - Success"
  87 +msgstr "Verde - Sucesso"
  88 +
  89 +msgid "Red - Danger"
  90 +msgstr "Vermelho - Perigo"
  91 +
  92 +msgid "Display only in the profile homepage"
  93 +msgstr "Apresentar apenas na página inicial do perfil"
  94 +
  95 +msgid "Display only in the homepage"
  96 +msgstr "Apresentar apenas na página inicial"
  97 +
  98 +msgid "Display to not logged users too"
  99 +msgstr "Apresentar também para usuários não logados"
  100 +
  101 +msgid "Display popup until user close the notification"
  102 +msgstr "Apresentar popup da notificação até que o usuário a feche"
  103 +
  104 +msgid "Save"
  105 +msgstr "Salvar"
  106 +
  107 +msgid "Notifications"
  108 +msgstr "Notificações"
  109 +
  110 +msgid "New Notification"
  111 +msgstr "Nova Notificação"
  112 +
  113 +msgid "Back to control panel"
  114 +msgstr "Voltar ao painel de controle"
  115 +
  116 +msgid "Actions"
  117 +msgstr "Ações"
  118 +
  119 +msgid "Deactivate"
  120 +msgstr "Desativar"
  121 +
  122 +msgid "Do you want to change the status of this notification?"
  123 +msgstr "Você quer alterar o status dessa notificação?"
  124 +
  125 +msgid "Activate"
  126 +msgstr "Ativar"
  127 +
  128 +msgid "Edit"
  129 +msgstr "Editar"
  130 +
  131 +msgid "Delete"
  132 +msgstr "Remover"
  133 +
  134 +msgid "Do you want to delete this notification?"
  135 +msgstr "Você quer remover essa notificação?"
  136 +
  137 +msgid "There are active notifications in this environment!"
  138 +msgstr "Existem notificações ativas neste ambiente!"
  139 +
  140 +msgid "Manage all notifications here."
  141 +msgstr "Gerencie todas as notificações aqui."
  142 +
  143 +msgid "Do not show anymore"
  144 +msgstr "Não mostrar mais"
  145 +
  146 +msgid "Hide for now"
  147 +msgstr "Ocultar momentaneamente"
plugins/admin_notifications/views/shared/_form.html.erb
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <%= labelled_form_field(_('Notifications Color/Type'), select(:notifications, :type, options_for_select_with_title({_("Blue - Information") => "AdminNotificationsPlugin::InformationNotification", _("Yellow - Warning") => "AdminNotificationsPlugin::WarningNotification", _("Green - Success") => "AdminNotificationsPlugin::SuccessNotification", _("Red - Danger") => "AdminNotificationsPlugin::DangerNotification"}, @notification.type))) %> 20 <%= labelled_form_field(_('Notifications Color/Type'), select(:notifications, :type, options_for_select_with_title({_("Blue - Information") => "AdminNotificationsPlugin::InformationNotification", _("Yellow - Warning") => "AdminNotificationsPlugin::WarningNotification", _("Green - Success") => "AdminNotificationsPlugin::SuccessNotification", _("Red - Danger") => "AdminNotificationsPlugin::DangerNotification"}, @notification.type))) %>
21 21
22 <div> 22 <div>
23 - <%= labelled_check_box(_("Display only in the homepage"), 'notifications[display_only_in_homepage]', '1', @notification.display_only_in_homepage?) %> 23 + <%= labelled_check_box(profile.present? ? _("Display only in the profile homepage") : _("Display only in the homepage") , 'notifications[display_only_in_homepage]', '1', @notification.display_only_in_homepage?) %>
24 </div> 24 </div>
25 25
26 <div> 26 <div>
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 <%= labelled_check_box(_("Display popup until user close the notification"), 'notifications[display_popup]', '1', @notification.display_popup?) %> 31 <%= labelled_check_box(_("Display popup until user close the notification"), 'notifications[display_popup]', '1', @notification.display_popup?) %>
32 </div> 32 </div>
33 33
34 - <% button_bar do %> 34 + <%= button_bar do %>
35 <%= submit_button 'save', _('Save'), :cancel => { :action => 'index' } %> 35 <%= submit_button 'save', _('Save'), :cancel => { :action => 'index' } %>
36 <% end %> 36 <% end %>
37 37
plugins/analytics/views/analytics_plugin/_body_ending.html.slim
1 javascript: 1 javascript:
2 - analytics.timeOnPage.baseUrl = #{url_for(controller: 'analytics_plugin/time_on_page').to_json} 2 + analytics.timeOnPage.baseUrl = #{url_for(profile: profile.identifier, controller: 'analytics_plugin/time_on_page').to_json}
3 analytics.timeOnPage.updateInterval = #{AnalyticsPlugin::TimeOnPageUpdateIntervalMs.to_json} 3 analytics.timeOnPage.updateInterval = #{AnalyticsPlugin::TimeOnPageUpdateIntervalMs.to_json}
4 analytics.requestId = #{request.env['action_dispatch.request_id'].to_json} 4 analytics.requestId = #{request.env['action_dispatch.request_id'].to_json}
5 analytics.init() 5 analytics.init()
plugins/anti_spam/views/anti_spam_plugin_admin/index.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 <%= labelled_form_field _('API key'), f.text_field(:api_key, :size => 40) %> 7 <%= labelled_form_field _('API key'), f.text_field(:api_key, :size => 40) %>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 10 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
11 <% end %> 11 <% end %>
12 12
plugins/classify_members/views/classify_members_plugin_admin/index.html.erb
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <%=_('salvador-ba: Soteropolitano')%> 15 <%=_('salvador-ba: Soteropolitano')%>
16 </fieldset> 16 </fieldset>
17 17
18 - <% button_bar do %> 18 + <%= button_bar do %>
19 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 19 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
20 <% end %> 20 <% end %>
21 21
plugins/comment_classification/views/comment_classification_plugin_labels/_form.html.erb
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <%= labelled_form_field(_('Color'), f.select(:color, @colors.map{|s|[s.capitalize,s]})) %> 7 <%= labelled_form_field(_('Color'), f.select(:color, @colors.map{|s|[s.capitalize,s]})) %>
8 <%= labelled_form_field(f.check_box(:enabled) + _('Enable this label?'),'') %> 8 <%= labelled_form_field(f.check_box(:enabled) + _('Enable this label?'),'') %>
9 9
10 - <% button_bar do %> 10 + <%= button_bar do %>
11 <%= submit_button('save', c_('Save'), :cancel => {:action => 'index'} ) %> 11 <%= submit_button('save', c_('Save'), :cancel => {:action => 'index'} ) %>
12 <% end %> 12 <% end %>
13 <% end %> 13 <% end %>
plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 </table> 25 </table>
26 <% end %> 26 <% end %>
27 27
28 - <% button_bar do %> 28 + <%= button_bar do %>
29 <%= button(:add, _('Add a new label'), :action => 'create')%> 29 <%= button(:add, _('Add a new label'), :action => 'create')%>
30 <%= button :back, c_('Back to admin panel'), :controller => 'admin_panel' %> 30 <%= button :back, c_('Back to admin panel'), :controller => 'admin_panel' %>
31 <% end %> 31 <% end %>
plugins/comment_classification/views/comment_classification_plugin_myprofile/_status_form.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <%= labelled_form_field(_('Status'), f.select(:status_id, @statuses.map{|s|[s.name,s.id]})) %> 6 <%= labelled_form_field(_('Status'), f.select(:status_id, @statuses.map{|s|[s.name,s.id]})) %>
7 <%= labelled_form_field(_('Reason:'), f.text_area(:reason, :rows => 5)) %> 7 <%= labelled_form_field(_('Reason:'), f.text_area(:reason, :rows => 5)) %>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button('save', c_('Save') ) %> 10 <%= submit_button('save', c_('Save') ) %>
11 <% end %> 11 <% end %>
12 <% end %> 12 <% end %>
plugins/comment_classification/views/comment_classification_plugin_status/_form.html.erb
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <%= labelled_form_field(f.check_box(:enabled) + _('Enable this status?'),'') %> 7 <%= labelled_form_field(f.check_box(:enabled) + _('Enable this status?'),'') %>
8 <%#= labelled_form_field(f.check_box(:enable_reason) + _('This status allows reason?'),'') %> 8 <%#= labelled_form_field(f.check_box(:enable_reason) + _('This status allows reason?'),'') %>
9 9
10 - <% button_bar do %> 10 + <%= button_bar do %>
11 <%= submit_button('save', c_('Save'), :cancel => {:action => 'index'} ) %> 11 <%= submit_button('save', c_('Save'), :cancel => {:action => 'index'} ) %>
12 <% end %> 12 <% end %>
13 <% end %> 13 <% end %>
plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 </table> 25 </table>
26 <% end %> 26 <% end %>
27 27
28 - <% button_bar do %> 28 + <%= button_bar do %>
29 <%= button(:add, _('Add a new status'), :action => 'create')%> 29 <%= button(:add, _('Add a new status'), :action => 'create')%>
30 <%= button :back, c_('Back to admin panel'), :controller => 'admin_panel' %> 30 <%= button :back, c_('Back to admin panel'), :controller => 'admin_panel' %>
31 <% end %> 31 <% end %>
plugins/comment_paragraph/lib/comment_paragraph_plugin.rb
@@ -59,6 +59,12 @@ class CommentParagraphPlugin &lt; Noosfero::Plugin @@ -59,6 +59,12 @@ class CommentParagraphPlugin &lt; Noosfero::Plugin
59 [CommentParagraphPlugin::API] 59 [CommentParagraphPlugin::API]
60 end 60 end
61 61
  62 + def self.extra_blocks
  63 + {
  64 + CommentParagraphPlugin::DiscussionBlock => {:position => ['1','2','3'] }
  65 + }
  66 + end
  67 +
62 def content_types 68 def content_types
63 [CommentParagraphPlugin::Discussion] 69 [CommentParagraphPlugin::Discussion]
64 end 70 end
plugins/comment_paragraph/lib/comment_paragraph_plugin/discussion_block.rb 0 → 100644
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
  1 +class CommentParagraphPlugin::DiscussionBlock < Block
  2 +
  3 + settings_items :presentation_mode, :type => String, :default => 'title_only'
  4 + settings_items :total_items, :type => Integer, :default => 5
  5 + settings_items :discussion_status, :type => Integer
  6 +
  7 + attr_accessible :presentation_mode, :total_items, :discussion_status
  8 +
  9 + VALID_CONTENT = ['CommentParagraphPlugin::Discussion']
  10 +
  11 + STATUS_NOT_OPENED = 0
  12 + STATUS_AVAILABLE = 1
  13 + STATUS_CLOSED = 2
  14 +
  15 + def self.description
  16 + c_('Discussion Articles')
  17 + end
  18 +
  19 + def help
  20 + _("This block displays all profile's article discussion")
  21 + end
  22 +
  23 + def discussions
  24 + current_time = Time.now
  25 + discussions = holder.articles.where(type: VALID_CONTENT).order('start_date ASC, end_date DESC, created_at DESC').limit(self.total_items)
  26 + case discussion_status
  27 + when STATUS_NOT_OPENED
  28 + discussions = discussions.where("start_date > ?", current_time)
  29 + when STATUS_AVAILABLE
  30 + discussions = discussions.where("start_date is null or start_date <= ?", current_time)
  31 + discussions = discussions.where("end_date is null or end_date >= ?", current_time)
  32 + when STATUS_CLOSED
  33 + discussions = discussions.where("end_date < ?", current_time)
  34 + end
  35 + discussions
  36 + end
  37 +
  38 + def holder
  39 + return nil if self.box.nil? || self.box.owner.nil?
  40 + if self.box.owner.kind_of?(Environment)
  41 + return nil if self.box.owner.portal_community.nil?
  42 + self.box.owner.portal_community
  43 + else
  44 + self.box.owner
  45 + end
  46 + end
  47 +
  48 + def mode?(attr)
  49 + attr == self.presentation_mode
  50 + end
  51 +
  52 + def api_content
  53 + Api::Entities::ArticleBase.represent(self.discussions).as_json
  54 + end
  55 +
  56 + def display_api_content_by_default?
  57 + false
  58 + end
  59 +end
plugins/comment_paragraph/test/unit/comment_paragraph_plugin_test.rb
@@ -69,7 +69,7 @@ class CommentParagraphPluginTest &lt; ActiveSupport::TestCase @@ -69,7 +69,7 @@ class CommentParagraphPluginTest &lt; ActiveSupport::TestCase
69 article = fast_create(Article, :profile_id => profile.id) 69 article = fast_create(Article, :profile_id => profile.id)
70 article.expects(:comment_paragraph_plugin_enabled?).returns(true) 70 article.expects(:comment_paragraph_plugin_enabled?).returns(true)
71 article.expects(:allow_edit?).with(user).returns(true) 71 article.expects(:allow_edit?).with(user).returns(true)
72 - article.expects(:comment_paragraph_plugin_activated?).returns(false) 72 + article.expects(:comment_paragraph_plugin_activated?).at_least_once.returns(false)
73 73
74 assert_equal 'Activate Comments', plugin.article_extra_toolbar_buttons(article)[:title] 74 assert_equal 'Activate Comments', plugin.article_extra_toolbar_buttons(article)[:title]
75 end 75 end
@@ -79,7 +79,7 @@ class CommentParagraphPluginTest &lt; ActiveSupport::TestCase @@ -79,7 +79,7 @@ class CommentParagraphPluginTest &lt; ActiveSupport::TestCase
79 article = fast_create(Article, :profile_id => profile.id) 79 article = fast_create(Article, :profile_id => profile.id)
80 article.expects(:comment_paragraph_plugin_enabled?).returns(true) 80 article.expects(:comment_paragraph_plugin_enabled?).returns(true)
81 article.expects(:allow_edit?).with(user).returns(true) 81 article.expects(:allow_edit?).with(user).returns(true)
82 - article.expects(:comment_paragraph_plugin_activated?).returns(true) 82 + article.expects(:comment_paragraph_plugin_activated?).at_least_once.returns(true)
83 83
84 assert_equal 'Deactivate Comments', plugin.article_extra_toolbar_buttons(article)[:title] 84 assert_equal 'Deactivate Comments', plugin.article_extra_toolbar_buttons(article)[:title]
85 end 85 end
plugins/comment_paragraph/test/unit/discussion_block_test.rb 0 → 100644
@@ -0,0 +1,204 @@ @@ -0,0 +1,204 @@
  1 +require_relative '../test_helper'
  2 +class DiscussionBlockTest < ActiveSupport::TestCase
  3 +
  4 + def setup
  5 + @environment = Environment.default
  6 + @environment.enable_plugin(CommentParagraphPlugin)
  7 + end
  8 +
  9 + attr_reader :environment
  10 +
  11 + should 'describe itself' do
  12 + assert_not_equal Block.description, CommentParagraphPlugin::DiscussionBlock.description
  13 + end
  14 +
  15 + should 'holder be nil if there is no box' do
  16 + b = CommentParagraphPlugin::DiscussionBlock.new
  17 + assert_nil b.holder
  18 + end
  19 +
  20 + should 'holder be nil if there is no box owner to the box' do
  21 + b = CommentParagraphPlugin::DiscussionBlock.new
  22 + box = Box.new
  23 + b.box = box
  24 + assert_nil b.holder
  25 + end
  26 +
  27 + should 'holder be nil if there is no portal community in environment' do
  28 + b = CommentParagraphPlugin::DiscussionBlock.new
  29 + environment.boxes<< Box.new
  30 + b.box = environment.boxes.last
  31 + assert_nil environment.portal_community
  32 + assert_nil b.holder
  33 + end
  34 +
  35 + should 'holder be the portal community for environments blocks' do
  36 + community = fast_create(Community)
  37 + environment.portal_community= community
  38 + environment.save!
  39 + environment.boxes<< Box.new
  40 + b = CommentParagraphPlugin::DiscussionBlock.new
  41 + b.box = environment.boxes.last
  42 + assert_equal environment.portal_community, b.holder
  43 + end
  44 +
  45 + should 'holder be the person for people blocks' do
  46 + person = fast_create(Person)
  47 + person.boxes << Box.new
  48 + b = CommentParagraphPlugin::DiscussionBlock.new
  49 + b.box = person.boxes.last
  50 + assert_equal person, b.holder
  51 + end
  52 +
  53 + should 'holder be the community for communities blocks' do
  54 + community = fast_create(Community)
  55 + community.boxes << Box.new
  56 + b = CommentParagraphPlugin::DiscussionBlock.new
  57 + b.box = community.boxes.last
  58 + assert_equal community, b.holder
  59 + end
  60 +
  61 + should 'holder be the enterprise for enterprises blocks' do
  62 + enterprise = fast_create(Enterprise)
  63 + enterprise.boxes << Box.new
  64 + b = CommentParagraphPlugin::DiscussionBlock.new
  65 + b.box = enterprise.boxes.last
  66 + assert_equal enterprise, b.holder
  67 + end
  68 +
  69 + should 'discussions return only discussion articles' do
  70 + community = fast_create(Community)
  71 + community.boxes << Box.new
  72 + b = CommentParagraphPlugin::DiscussionBlock.new
  73 + b.box = community.boxes.last
  74 + b.save
  75 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id)
  76 + fast_create(Event, :profile_id => community.id)
  77 + fast_create(TinyMceArticle, :profile_id => community.id)
  78 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id)
  79 + assert_equivalent [a1, a2], b.discussions
  80 + end
  81 +
  82 + should 'return only not opened discussions if discussion status is not opened' do
  83 + community = fast_create(Community)
  84 + community.boxes << Box.new
  85 + b = CommentParagraphPlugin::DiscussionBlock.new
  86 + b.box = community.boxes.last
  87 + b.discussion_status = CommentParagraphPlugin::DiscussionBlock::STATUS_NOT_OPENED
  88 + b.save
  89 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now + 1.day)
  90 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now )
  91 + a3 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 1.day)
  92 + a4 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 2.day, :end_date => DateTime.now - 1.day)
  93 + assert_equivalent [a1], b.discussions
  94 + end
  95 +
  96 + should 'return only available discussions if discussion status is available' do
  97 + community = fast_create(Community)
  98 + community.boxes << Box.new
  99 + b = CommentParagraphPlugin::DiscussionBlock.new
  100 + b.box = community.boxes.last
  101 + b.discussion_status = CommentParagraphPlugin::DiscussionBlock::STATUS_AVAILABLE
  102 + b.save
  103 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now + 1.day)
  104 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now )
  105 + a3 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 1.day)
  106 + a4 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 2.day, :end_date => DateTime.now - 1.day)
  107 + a5 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :end_date => DateTime.now + 1.day)
  108 + assert_equivalent [a2, a3, a5], b.discussions
  109 + end
  110 +
  111 + should 'return only closed discussions if discussion status is closed' do
  112 + community = fast_create(Community)
  113 + community.boxes << Box.new
  114 + b = CommentParagraphPlugin::DiscussionBlock.new
  115 + b.box = community.boxes.last
  116 + b.discussion_status = CommentParagraphPlugin::DiscussionBlock::STATUS_CLOSED
  117 + b.save
  118 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now + 1.day)
  119 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now )
  120 + a3 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 1.day)
  121 + a4 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, :start_date => DateTime.now - 2.day, :end_date => DateTime.now - 1.day)
  122 + assert_equivalent [a4], b.discussions
  123 + end
  124 +
  125 +end
  126 +
  127 +require 'boxes_helper'
  128 +
  129 +class DiscussionBlockViewTest < ActionView::TestCase
  130 + include BoxesHelper
  131 +
  132 + should 'show the title and the child titles when the block is set to title only mode' do
  133 + profile = create_user('testuser').person
  134 +
  135 + block = CommentParagraphPlugin::DiscussionBlock.new
  136 + block.stubs(:holder).returns(profile)
  137 + block.presentation_mode = 'title_only'
  138 +
  139 + ActionView::Base.any_instance.stubs(:block_title).returns("Block Title")
  140 + ActionView::Base.any_instance.stubs(:profile).returns(profile)
  141 +
  142 + content = render_block_content(block)
  143 +
  144 + assert_match /discussion-title/, content
  145 + assert_no_match /discussion-abstract/, content
  146 + end
  147 +
  148 + should 'show the title and the child titles and abstracts when the block is set to title and abstract mode' do
  149 + profile = create_user('testuser').person
  150 +
  151 + block = CommentParagraphPlugin::DiscussionBlock.new
  152 + block.stubs(:holder).returns(profile)
  153 + block.presentation_mode = 'title_and_abstract'
  154 +
  155 + ActionView::Base.any_instance.stubs(:block_title).returns("Block Title")
  156 + ActionView::Base.any_instance.stubs(:profile).returns(profile)
  157 +
  158 + content = render_block_content(block)
  159 +
  160 + assert_match /discussion-abstract/, content
  161 + end
  162 +
  163 + should 'show the title and the child full content when the block has no mode set' do
  164 + profile = create_user('testuser').person
  165 +
  166 + block = CommentParagraphPlugin::DiscussionBlock.new
  167 + block.stubs(:holder).returns(profile)
  168 + block.presentation_mode = ''
  169 +
  170 + ActionView::Base.any_instance.stubs(:block_title).returns("Block Title")
  171 + ActionView::Base.any_instance.stubs(:profile).returns(profile)
  172 +
  173 + content = render_block_content(block)
  174 +
  175 + assert_match /discussion-full/, content
  176 + end
  177 +
  178 + should 'return discussions in api_content' do
  179 + community = fast_create(Community)
  180 + community.boxes << Box.new
  181 + b = CommentParagraphPlugin::DiscussionBlock.new
  182 + b.box = community.boxes.last
  183 + b.save
  184 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id)
  185 + fast_create(Event, :profile_id => community.id)
  186 + fast_create(TinyMceArticle, :profile_id => community.id)
  187 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id)
  188 + assert_equivalent [a2.id, a1.id], b.api_content['articles'].map {|a| a[:id]}
  189 + end
  190 +
  191 + should 'sort discussions by start_date, end_date and created_at' do
  192 + community = fast_create(Community)
  193 + community.boxes << Box.new
  194 + b = CommentParagraphPlugin::DiscussionBlock.new
  195 + b.box = community.boxes.last
  196 + b.save
  197 + a1 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, start_date: Time.now)
  198 + a2 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, start_date: Time.now + 1, end_date: Time.now)
  199 + a3 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, start_date: Time.now + 1, end_date: Time.now + 1.day)
  200 + a4 = fast_create(CommentParagraphPlugin::Discussion, :profile_id => community.id, start_date: Time.now + 1, end_date: Time.now + 1.day)
  201 + assert_equal [a1.id, a2.id, a3.id, a4.id], b.discussions.map(&:id)
  202 + end
  203 +
  204 +end
plugins/comment_paragraph/views/blocks/discussion.html.erb 0 → 100644
@@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
  1 +<div id="discussion-block">
  2 + <% children = block.discussions %>
  3 + <div class="discussion">
  4 + <%= block_title(block.title.blank? ? c_("Discussions") : block.title, block.subtitle ) %>
  5 + </div>
  6 + <% if block.mode?('title_only') %>
  7 + <div class="discussion-title">
  8 + <ul>
  9 + <% children.each do |item| %>
  10 + <li> <%= link_to(h(item.title), item.url)%></li>
  11 + <% end %>
  12 + </ul>
  13 + </div>
  14 + <% elsif block.mode?('title_and_abstract') %>
  15 + <div class="discussion-abstract">
  16 + <% children.each do |item| %>
  17 + <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>
  18 + <span class="post-date"><%= show_date(item.published_at, true)%></span>
  19 + <div class="headline"><%=item.lead%></div>
  20 + <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>
  21 + <% end %>
  22 + </div>
  23 + <% else %>
  24 + <div class="discussion-full">
  25 + <% children.each do |item| %>
  26 + <h2><%= link_to(item.title,item.url, :class => 'post-title')%></h2>
  27 + <span class="post-date"><%= show_date(item.published_at, true)%></span>
  28 + <div class="headline"><%=item.body.html_safe %></div>
  29 + <p class="highlighted-news-read-more"><%= link_to(_('Read more'), item.url) %></p>
  30 + <% end %>
  31 + </div>
  32 + <% end %>
  33 +</div>
plugins/comment_paragraph/views/box_organizer/comment_paragraph_plugin/_discussion_block.html.erb 0 → 100644
@@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
  1 +<%=
  2 +labelled_form_field(_('Choose which blog should be displayed'),
  3 + select_tag(
  4 + 'block[discussion_status]',
  5 + options_for_select([[_('Not Opened Discussions'), CommentParagraphPlugin::DiscussionBlock::STATUS_NOT_OPENED],[_('Available Discussions'), CommentParagraphPlugin::DiscussionBlock::STATUS_AVAILABLE], [_('Closed Discussions'), CommentParagraphPlugin::DiscussionBlock::STATUS_CLOSED]], @block.discussion_status)
  6 + )
  7 +)
  8 +%>
  9 +<%=
  10 +labelled_form_field(_('Choose how the content should be displayed'),
  11 + select_tag(
  12 + 'block[presentation_mode]',
  13 + options_for_select(
  14 + {
  15 + _("Title only") => "title_only",
  16 + _("Title and abstract") => "title_and_abstract",
  17 + _("Full content") => "full_content"
  18 + },
  19 + @block.presentation_mode
  20 + )
  21 + )
  22 +)
  23 +%>
  24 +<%= labelled_form_field(_('Choose how many items will be displayed'),
  25 + text_field_tag('block[total_items]',
  26 + @block.total_items, :size => 3, :maxlength => 5)
  27 + )
  28 +%>
plugins/comment_paragraph/views/comment_paragraph_plugin_admin/index.html.erb
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </div> 17 </div>
18 </div> 18 </div>
19 19
20 - <% button_bar do %> 20 + <%= button_bar do %>
21 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 21 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
22 <% end %> 22 <% end %>
23 23
plugins/comment_paragraph/views/environment_design 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +box_organizer
0 \ No newline at end of file 2 \ No newline at end of file
plugins/comment_paragraph/views/profile_design 0 → 120000
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +box_organizer
0 \ No newline at end of file 2 \ No newline at end of file
plugins/community_track/views/community_track_plugin_public/select_community.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 </div> 12 </div>
13 <% end %> 13 <% end %>
14 14
15 -<% button_bar do %> 15 +<%= button_bar do %>
16 <%= button(:add, c_('Create a new community'), :controller => 'memberships', :action => 'new_community', :profile => user.identifier, :back_to => @back_to) %> 16 <%= button(:add, c_('Create a new community'), :controller => 'memberships', :action => 'new_community', :profile => user.identifier, :back_to => @back_to) %>
17 <% end %> 17 <% end %>
18 18
plugins/custom_forms/views/custom_forms_plugin_myprofile/_form.html.erb
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 <%= button(:add, _('Add a new select field'), '#', :onclick => "customFormsPlugin.addFields(this, 'fields', #{CGI::escapeHTML(html_for_field(f, :fields, CustomFormsPlugin::SelectField).to_json)}); return false")%> 55 <%= button(:add, _('Add a new select field'), '#', :onclick => "customFormsPlugin.addFields(this, 'fields', #{CGI::escapeHTML(html_for_field(f, :fields, CustomFormsPlugin::SelectField).to_json)}); return false")%>
56 </div> 56 </div>
57 57
58 -<% button_bar do %> 58 +<%= button_bar do %>
59 <%= submit_button :save, c_('Save'), :cancel => {:action => 'index'}%> 59 <%= submit_button :save, c_('Save'), :cancel => {:action => 'index'}%>
60 <% end %> 60 <% end %>
61 61
plugins/custom_forms/views/custom_forms_plugin_myprofile/pending.html.erb
@@ -22,6 +22,6 @@ @@ -22,6 +22,6 @@
22 </table> 22 </table>
23 <% end %> 23 <% end %>
24 24
25 -<% button_bar do %> 25 +<%= button_bar do %>
26 <%= button :back, _('Back to forms'), :action => 'index' %> 26 <%= button :back, _('Back to forms'), :action => 'index' %>
27 <% end %> 27 <% end %>
plugins/custom_forms/views/custom_forms_plugin_myprofile/show_submission.html.erb
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 <% end %> 44 <% end %>
45 </table> 45 </table>
46 46
47 -<% button_bar do %> 47 +<%= button_bar do %>
48 <%= button :back, _('Back to submissions'), :action => 'submissions', :id => @form.id %> 48 <%= button :back, _('Back to submissions'), :action => 'submissions', :id => @form.id %>
49 <% end %> 49 <% end %>
50 50
plugins/custom_forms/views/custom_forms_plugin_myprofile/submissions.html.erb
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 </table> 27 </table>
28 <% end %> 28 <% end %>
29 29
30 -<% button_bar do %> 30 +<%= button_bar do %>
31 <%= button :back, _('Back to forms'), :action => 'index' %> 31 <%= button :back, _('Back to forms'), :action => 'index' %>
32 <% end %> 32 <% end %>
33 33
plugins/custom_forms/views/custom_forms_plugin_profile/show.html.erb
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 22
23 <%= render :partial => 'shared/form_submission', :locals => {:f => f} %> 23 <%= render :partial => 'shared/form_submission', :locals => {:f => f} %>
24 24
25 - <% button_bar do %> 25 + <%= button_bar do %>
26 <% if @form.expired? %> 26 <% if @form.expired? %>
27 <%= submit_button :save, c_('Save'), :disabled => '', :class => 'disabled', :cancel => {:controller => :profile, :profile => profile.identifier} %> 27 <%= submit_button :save, c_('Save'), :disabled => '', :class => 'disabled', :cancel => {:controller => :profile, :profile => profile.identifier} %>
28 <% else %> 28 <% else %>
plugins/display_content/lib/display_content_block.rb
@@ -118,69 +118,28 @@ class DisplayContentBlock &lt; Block @@ -118,69 +118,28 @@ class DisplayContentBlock &lt; Block
118 holder.articles.where(type: types, parent_id: if parent.nil? then nil else parent end) 118 holder.articles.where(type: types, parent_id: if parent.nil? then nil else parent end)
119 end 119 end
120 120
121 - def content(args={})  
122 - block = self  
123 - 121 + def docs
124 order_string = "published_at" 122 order_string = "published_at"
125 order_string += " DESC" if order_by_recent 123 order_string += " DESC" if order_by_recent
126 124
127 limit_final = [limit_to_show, 0].max 125 limit_final = [limit_to_show, 0].max
128 126
129 - docs = owner.articles.order(order_string) 127 + documents = owner.articles.order(order_string)
130 .where(articles: {type: self.types}) 128 .where(articles: {type: self.types})
131 .includes(:profile, :image, :tags) 129 .includes(:profile, :image, :tags)
132 if nodes.present? 130 if nodes.present?
133 nodes_conditions = 'articles.id IN(:nodes)' 131 nodes_conditions = 'articles.id IN(:nodes)'
134 nodes_conditions << ' OR articles.parent_id IN(:nodes) ' if display_folder_children 132 nodes_conditions << ' OR articles.parent_id IN(:nodes) ' if display_folder_children
135 - docs = docs.where nodes_conditions, nodes: nodes 133 + documents = documents.where nodes_conditions, nodes: nodes
136 end 134 end
137 - docs = docs.limit limit_final if display_folder_children 135 + documents = documents.limit limit_final if display_folder_children
138 136
139 if content_with_translations 137 if content_with_translations
140 - docs = docs.native_translations  
141 - docs.replace docs.map{ |p| p.get_translation_to(FastGettext.locale) }.compact 138 + documents = documents.native_translations
  139 + documents.replace documents.map{ |p| p.get_translation_to(FastGettext.locale) }.compact
142 end 140 end
143 141
144 - proc do  
145 - block.block_title(block.title, block.subtitle) +  
146 - content_tag('ul', docs.map {|item|  
147 - if !item.folder? && item.class != RssFeed  
148 - content_sections = ''  
149 - read_more_section = ''  
150 - tags_section = ''  
151 -  
152 - block.sections.select { |section|  
153 - case section[:value]  
154 - when 'publish_date'  
155 - content_sections += (block.display_section?(section) ? (content_tag('div', show_date(item.published_at, false), :class => 'published-at') ) : '')  
156 - when 'title'  
157 - content_sections += (block.display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '')  
158 - when 'abstract'  
159 - content_sections += (block.display_section?(section) ? (content_tag('div', item.abstract.html_safe , :class => 'lead')) : '' )  
160 - if block.display_section?(section)  
161 - read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more')  
162 - end  
163 - when 'body'  
164 - content_sections += (block.display_section?(section) ? (content_tag('div', item.body.html_safe ,:class => 'body')) : '' )  
165 - when 'image'  
166 - image_section = image_tag item.image.public_filename if item.image  
167 - if !image_section.blank?  
168 - content_sections += (block.display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' )  
169 - end  
170 - when 'tags'  
171 - if !item.tags.empty?  
172 - tags_section = item.tags.map { |t| content_tag('span', t.name) }.join("")  
173 - content_sections += (block.display_section?(section) ? (content_tag('div', tags_section, :class => 'tags')) : '')  
174 - end  
175 - end  
176 - }  
177 -  
178 - content_sections += read_more_section if !read_more_section.blank?  
179 -#raise sections.inspect  
180 - content_tag('li', content_sections.html_safe)  
181 - end  
182 - }.join(" ").html_safe)  
183 - end 142 + documents
184 end 143 end
185 144
186 def url_params 145 def url_params
plugins/display_content/test/unit/display_content_block_test.rb
@@ -347,53 +347,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -347,53 +347,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
347 347
348 end 348 end
349 349
350 - should 'list links for all articles title defined in nodes' do  
351 - profile = create_user('testuser').person  
352 - Article.delete_all  
353 - a1 = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id)  
354 - a2 = fast_create(TextileArticle, :name => 'test article 2', :profile_id => profile.id)  
355 -  
356 - block = DisplayContentBlock.new  
357 - block.sections = [{:value => 'title', :checked => true}]  
358 - block.nodes = [a1.id, a2.id]  
359 - box = mock()  
360 - block.stubs(:box).returns(box)  
361 - box.stubs(:owner).returns(profile)  
362 -  
363 - assert_match /.*<a.*>#{a1.title}<\/a>/, instance_eval(&block.content)  
364 - assert_match /.*<a.*>#{a2.title}<\/a>/, instance_eval(&block.content)  
365 - end  
366 -  
367 - should 'list content for all articles lead defined in nodes' do  
368 - profile = create_user('testuser').person  
369 - Article.delete_all  
370 - a1 = fast_create(TinyMceArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'abstract article 1')  
371 - a2 = fast_create(TinyMceArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2')  
372 -  
373 - block = DisplayContentBlock.new  
374 - block.sections = [{:value => 'abstract', :checked => true}]  
375 - block.nodes = [a1.id, a2.id]  
376 - box = mock()  
377 - block.stubs(:box).returns(box)  
378 - box.stubs(:owner).returns(profile)  
379 -  
380 - assert_match /<div class="lead">#{a1.lead}<\/div>/, instance_eval(&block.content)  
381 - assert_match /<div class="lead">#{a2.lead}<\/div>/, instance_eval(&block.content)  
382 - end  
383 -  
384 - should 'not crash when referenced article is removed' do  
385 - profile = create_user('testuser').person  
386 - a1 = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id)  
387 -  
388 - block = DisplayContentBlock.new  
389 - block.nodes = [a1.id]  
390 - box = mock()  
391 - block.stubs(:box).returns(box)  
392 - box.stubs(:owner).returns(profile)  
393 -  
394 - Article.delete_all  
395 - assert_match /<ul><\/ul>/, instance_eval(&block.content)  
396 - end  
397 include ActionView::Helpers 350 include ActionView::Helpers
398 include Rails.application.routes.url_helpers 351 include Rails.application.routes.url_helpers
399 352
@@ -420,48 +373,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -420,48 +373,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
420 assert_equal params, block.url_params 373 assert_equal params, block.url_params
421 end 374 end
422 375
423 - should 'show title if defined by user' do  
424 - profile = create_user('testuser').person  
425 - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id)  
426 -  
427 - block = DisplayContentBlock.new  
428 - block.nodes = [a.id]  
429 - block.sections = [{:value => 'title', :checked => true}]  
430 - box = mock()  
431 - block.stubs(:box).returns(box)  
432 - box.stubs(:owner).returns(profile)  
433 -  
434 - assert_match /.*<a.*>#{a.title}<\/a>/, instance_eval(&block.content)  
435 - end  
436 -  
437 - should 'show abstract if defined by user' do  
438 - profile = create_user('testuser').person  
439 - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'some abstract')  
440 -  
441 - block = DisplayContentBlock.new  
442 - block.nodes = [a.id]  
443 - block.sections = [{:value => 'abstract', :checked => true}]  
444 - box = mock()  
445 - block.stubs(:box).returns(box)  
446 - box.stubs(:owner).returns(profile)  
447 -  
448 - assert_match /#{a.abstract}/, instance_eval(&block.content)  
449 - end  
450 -  
451 - should 'show body if defined by user' do  
452 - profile = create_user('testuser').person  
453 - a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body')  
454 -  
455 - block = DisplayContentBlock.new  
456 - block.nodes = [a.id]  
457 - block.sections = [{:value => 'body', :checked => true}]  
458 - box = mock()  
459 - block.stubs(:box).returns(box)  
460 - box.stubs(:owner).returns(profile)  
461 -  
462 - assert_match /#{a.body}/, instance_eval(&block.content)  
463 - end  
464 -  
465 should 'display_attribute be true for title by default' do 376 should 'display_attribute be true for title by default' do
466 profile = create_user('testuser').person 377 profile = create_user('testuser').person
467 378
@@ -489,20 +400,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -489,20 +400,6 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
489 assert block.display_section?({:value => 'publish_date', :checked => true}) 400 assert block.display_section?({:value => 'publish_date', :checked => true})
490 end 401 end
491 402
492 - should 'show publishd date if defined by user' do  
493 - profile = create_user('testuser').person  
494 - a = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body')  
495 -  
496 - block = DisplayContentBlock.new  
497 - block.nodes = [a.id]  
498 - block.sections = [{:value => 'publish_date', :checked => true}]  
499 - box = mock()  
500 - block.stubs(:box).returns(box)  
501 - box.stubs(:owner).returns(profile)  
502 -  
503 - assert_match /#{a.published_at}/, instance_eval(&block.content)  
504 - end  
505 -  
506 should 'do not save children if a folder is checked' do 403 should 'do not save children if a folder is checked' do
507 profile = create_user('testuser').person 404 profile = create_user('testuser').person
508 Article.delete_all 405 Article.delete_all
@@ -648,6 +545,117 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -648,6 +545,117 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
648 assert_equal [], block.parent_nodes 545 assert_equal [], block.parent_nodes
649 end 546 end
650 547
  548 +end
  549 +
  550 +require 'boxes_helper'
  551 +
  552 +class DisplayContentBlockViewTest < ActionView::TestCase
  553 + include BoxesHelper
  554 +
  555 + should 'list links for all articles title defined in nodes' do
  556 + profile = create_user('testuser').person
  557 + Article.delete_all
  558 + a1 = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id)
  559 + a2 = fast_create(TextileArticle, :name => 'test article 2', :profile_id => profile.id)
  560 +
  561 + block = DisplayContentBlock.new
  562 + block.sections = [{:value => 'title', :checked => true}]
  563 + block.nodes = [a1.id, a2.id]
  564 + box = mock()
  565 + block.stubs(:box).returns(box)
  566 + box.stubs(:owner).returns(profile)
  567 +
  568 + assert_match /.*<a.*>#{a1.title}<\/a>/, render_block_content(block)
  569 + assert_match /.*<a.*>#{a2.title}<\/a>/, render_block_content(block)
  570 + end
  571 +
  572 + should 'list content for all articles lead defined in nodes' do
  573 + profile = create_user('testuser').person
  574 + Article.delete_all
  575 + a1 = fast_create(TinyMceArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'abstract article 1')
  576 + a2 = fast_create(TinyMceArticle, :name => 'test article 2', :profile_id => profile.id, :abstract => 'abstract article 2')
  577 +
  578 + block = DisplayContentBlock.new
  579 + block.sections = [{:value => 'abstract', :checked => true}]
  580 + block.nodes = [a1.id, a2.id]
  581 + box = mock()
  582 + block.stubs(:box).returns(box)
  583 + box.stubs(:owner).returns(profile)
  584 +
  585 + assert_match /<div class="lead">#{a1.lead}<\/div>/, render_block_content(block)
  586 + assert_match /<div class="lead">#{a2.lead}<\/div>/, render_block_content(block)
  587 + end
  588 +
  589 + should 'not crash when referenced article is removed' do
  590 + profile = create_user('testuser').person
  591 + a1 = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id)
  592 +
  593 + block = DisplayContentBlock.new
  594 + block.nodes = [a1.id]
  595 + box = mock()
  596 + block.stubs(:box).returns(box)
  597 + box.stubs(:owner).returns(profile)
  598 +
  599 + Article.delete_all
  600 + assert_match /<ul><\/ul>/, render_block_content(block)
  601 + end
  602 +
  603 + should 'show title if defined by user' do
  604 + profile = create_user('testuser').person
  605 + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id)
  606 +
  607 + block = DisplayContentBlock.new
  608 + block.nodes = [a.id]
  609 + block.sections = [{:value => 'title', :checked => true}]
  610 + box = mock()
  611 + block.stubs(:box).returns(box)
  612 + box.stubs(:owner).returns(profile)
  613 +
  614 + assert_match /.*<a.*>#{a.title}<\/a>/, render_block_content(block)
  615 + end
  616 +
  617 + should 'show abstract if defined by user' do
  618 + profile = create_user('testuser').person
  619 + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :abstract => 'some abstract')
  620 +
  621 + block = DisplayContentBlock.new
  622 + block.nodes = [a.id]
  623 + block.sections = [{:value => 'abstract', :checked => true}]
  624 + box = mock()
  625 + block.stubs(:box).returns(box)
  626 + box.stubs(:owner).returns(profile)
  627 +
  628 + assert_match /#{a.abstract}/, render_block_content(block)
  629 + end
  630 +
  631 + should 'show body if defined by user' do
  632 + profile = create_user('testuser').person
  633 + a = fast_create(TextileArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body')
  634 +
  635 + block = DisplayContentBlock.new
  636 + block.nodes = [a.id]
  637 + block.sections = [{:value => 'body', :checked => true}]
  638 + box = mock()
  639 + block.stubs(:box).returns(box)
  640 + box.stubs(:owner).returns(profile)
  641 +
  642 + assert_match /#{a.body}/, render_block_content(block)
  643 + end
  644 +
  645 + should 'show publishd date if defined by user' do
  646 + profile = create_user('testuser').person
  647 + a = fast_create(TextArticle, :name => 'test article 1', :profile_id => profile.id, :body => 'some body')
  648 +
  649 + block = DisplayContentBlock.new
  650 + block.nodes = [a.id]
  651 + block.sections = [{:value => 'publish_date', :checked => true}]
  652 + box = mock()
  653 + block.stubs(:box).returns(box)
  654 + box.stubs(:owner).returns(profile)
  655 +
  656 + assert_match /#{a.published_at}/, render_block_content(block)
  657 + end
  658 +
651 should 'show articles in recent order' do 659 should 'show articles in recent order' do
652 profile = create_user('testuser').person 660 profile = create_user('testuser').person
653 Article.delete_all 661 Article.delete_all
@@ -663,8 +671,8 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -663,8 +671,8 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
663 671
664 block.order_by_recent = true 672 block.order_by_recent = true
665 673
666 - a1_index = instance_eval(&block.content).index(a1.name)  
667 - a2_index = instance_eval(&block.content).index(a2.name) 674 + a1_index = render_block_content(block).index(a1.name)
  675 + a2_index = render_block_content(block).index(a2.name)
668 676
669 assert a2_index < a1_index 677 assert a2_index < a1_index
670 end 678 end
@@ -684,8 +692,8 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -684,8 +692,8 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
684 692
685 block.order_by_recent = false 693 block.order_by_recent = false
686 694
687 - a1_index = instance_eval(&block.content).index(a1.name)  
688 - a2_index = instance_eval(&block.content).index(a2.name) 695 + a1_index = render_block_content(block).index(a1.name)
  696 + a2_index = render_block_content(block).index(a2.name)
689 697
690 assert a1_index < a2_index 698 assert a1_index < a2_index
691 end 699 end
@@ -706,7 +714,7 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -706,7 +714,7 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
706 block.order_by_recent = true 714 block.order_by_recent = true
707 block.limit_to_show = 1 715 block.limit_to_show = 1
708 716
709 - a1_index = instance_eval(&block.content).index(a1.name) 717 + a1_index = render_block_content(block).index(a1.name)
710 718
711 assert a1_index.nil? 719 assert a1_index.nil?
712 end 720 end
@@ -730,15 +738,15 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -730,15 +738,15 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
730 block.stubs(:box).returns(box) 738 block.stubs(:box).returns(box)
731 box.stubs(:owner).returns(profile) 739 box.stubs(:owner).returns(profile)
732 740
733 - assert_nil instance_eval(&block.content).index(en_article.name)  
734 - assert_nil instance_eval(&block.content).index(en_article2.name)  
735 - assert instance_eval(&block.content).index(pt_article.name).present? 741 + assert_nil render_block_content(block).index(en_article.name)
  742 + assert_nil render_block_content(block).index(en_article2.name)
  743 + assert render_block_content(block).index(pt_article.name).present?
736 744
737 FastGettext.stubs(:locale).returns('en') 745 FastGettext.stubs(:locale).returns('en')
738 746
739 - assert instance_eval(&block.content).index(en_article.name)  
740 - assert instance_eval(&block.content).index(en_article2.name)  
741 - assert_nil instance_eval(&block.content).index(pt_article.name) 747 + assert render_block_content(block).index(en_article.name)
  748 + assert render_block_content(block).index(en_article2.name)
  749 + assert_nil render_block_content(block).index(pt_article.name)
742 end 750 end
743 751
744 should 'replace article with its translation' do 752 should 'replace article with its translation' do
@@ -758,12 +766,71 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase @@ -758,12 +766,71 @@ class DisplayContentBlockTest &lt; ActiveSupport::TestCase
758 block.stubs(:box).returns(box) 766 block.stubs(:box).returns(box)
759 box.stubs(:owner).returns(profile) 767 box.stubs(:owner).returns(profile)
760 768
761 - assert_nil instance_eval(&block.content).index(en_article.name)  
762 - assert instance_eval(&block.content).index(pt_article.name).present? 769 + assert_nil render_block_content(block).index(en_article.name)
  770 + assert render_block_content(block).index(pt_article.name).present?
763 771
764 FastGettext.stubs(:locale).returns('en') 772 FastGettext.stubs(:locale).returns('en')
765 773
766 - assert instance_eval(&block.content).index(en_article.name).present?  
767 - assert_nil instance_eval(&block.content).index(pt_article.name) 774 + assert render_block_content(block).index(en_article.name).present?
  775 + assert_nil render_block_content(block).index(pt_article.name)
768 end 776 end
  777 +
  778 + should 'not escape abstract html of articles' do
  779 + profile = create_user('testuser').person
  780 + a1 = fast_create(TextileArticle, abstract: "<p class='test-article-abstract'>Test</p>", name: 'test article 1', profile_id: profile.id, published_at: DateTime.current)
  781 +
  782 + block = DisplayContentBlock.new
  783 + block.sections = [{:value => 'abstract', :checked => true}]
  784 + block.nodes = [a1.id]
  785 + box = mock()
  786 + block.stubs(:box).returns(box)
  787 + box.stubs(:owner).returns(profile)
  788 + assert_tag_in_string render_block_content(block), tag: 'p', attributes: { class: 'test-article-abstract' }
  789 + end
  790 +
  791 + should 'not raise if abstract of article is nil' do
  792 + profile = create_user('testuser').person
  793 + a1 = fast_create(TextileArticle, name: 'test article 1', profile_id: profile.id, published_at: DateTime.current)
  794 +
  795 + block = DisplayContentBlock.new
  796 + block.sections = [{:value => 'abstract', :checked => true}]
  797 + block.nodes = [a1.id]
  798 + box = mock()
  799 + block.stubs(:box).returns(box)
  800 + box.stubs(:owner).returns(profile)
  801 + assert_nil a1.abstract
  802 + assert_nothing_raised do
  803 + render_block_content(block)
  804 + end
  805 + end
  806 +
  807 + should 'not escape body html of articles' do
  808 + profile = create_user('testuser').person
  809 + a1 = fast_create(TextileArticle, body: "<p class='test-article-body'>Test</p>", name: 'test article 1', profile_id: profile.id, published_at: DateTime.current)
  810 +
  811 + block = DisplayContentBlock.new
  812 + block.sections = [{:value => 'body', :checked => true}]
  813 + block.nodes = [a1.id]
  814 + box = mock()
  815 + block.stubs(:box).returns(box)
  816 + box.stubs(:owner).returns(profile)
  817 + assert_tag_in_string render_block_content(block), tag: 'p', attributes: { class: 'test-article-body' }
  818 + end
  819 +
  820 + should 'not raise if body of article is nil' do
  821 + profile = create_user('testuser').person
  822 + a1 = fast_create(TextileArticle, name: 'test article 1', profile_id: profile.id, published_at: DateTime.current)
  823 +
  824 + block = DisplayContentBlock.new
  825 + block.sections = [{:value => 'abstract', :checked => true}]
  826 + block.nodes = [a1.id]
  827 + box = mock()
  828 + block.stubs(:box).returns(box)
  829 + box.stubs(:owner).returns(profile)
  830 + assert_nil a1.body
  831 + assert_nothing_raised do
  832 + render_block_content(block)
  833 + end
  834 + end
  835 +
769 end 836 end
plugins/display_content/views/blocks/display_content.slim 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 += block.block_title(block.title, block.subtitle)
  2 +
  3 +ul
  4 + = render partial: 'blocks/display_content/document', collection: block.docs, as: :item, locals: { block: block }
plugins/display_content/views/blocks/display_content/_document.slim 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +li
  2 + - unless item.folder? || item.class == RssFeed
  3 + = render partial: 'blocks/display_content/section', collection: block.sections, locals: { block: block, item: item }
  4 + = render partial: 'blocks/display_content/read_more', locals: { item: item, abstract_section: block.sections.bsearch { |section| section[:value] == 'abstract' }, block: block }
plugins/display_content/views/blocks/display_content/_read_more.slim 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +- if !abstract_section.nil? && block.display_section?(abstract_section)
  2 + div class='read_more'
  3 + = link_to(_('Read more'), item.url)
plugins/display_content/views/blocks/display_content/_section.slim 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +- if block.display_section?(section)
  2 + - case section[:value]
  3 + - when 'publish_date'
  4 + div class='published-at'
  5 + = show_date(item.published_at, false)
  6 + - when 'title'
  7 + div class='title'
  8 + = link_to(h(item.title), item.url)
  9 + - when 'abstract'
  10 + div class='lead'
  11 + = (item.abstract || '').html_safe
  12 + - when 'body'
  13 + div class='body'
  14 + = (item.body || '').html_safe
  15 + - when 'image'
  16 + - unless item.image || item.image.public_filename
  17 + div class='image'
  18 + = link_to(image_tag(item.image.public_filename), item.url)
  19 + - when 'tags'
  20 + - unless item.tags.empty?
  21 + div class='tags'
  22 + = render partial: 'blocks/display_content/tag', collection: item.tags
plugins/display_content/views/blocks/display_content/_tag.slim 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +span
  2 + = tag.name
0 \ No newline at end of file 3 \ No newline at end of file
plugins/ldap/views/ldap_plugin_admin/index.html.erb
@@ -73,7 +73,7 @@ @@ -73,7 +73,7 @@
73 </table> 73 </table>
74 74
75 <div> 75 <div>
76 - <% button_bar do %> 76 + <%= button_bar do %>
77 <%= submit_button('save', c_('Save changes')) %> 77 <%= submit_button('save', c_('Save changes')) %>
78 <%= button :back, _('Back to plugins administration panel'), :controller => 'plugins' %> 78 <%= button :back, _('Back to plugins administration panel'), :controller => 'plugins' %>
79 <% end %> 79 <% end %>
plugins/mark_comment_as_read/test/unit/mark_comment_as_read_test.rb
1 require 'test_helper' 1 require 'test_helper'
2 2
3 -class MarkCommentAsReadPluginTest < ActiveSupport::TestCase  
4 -  
5 - include ActionView::Helpers::TagHelper  
6 - include NoosferoTestHelper 3 +class MarkCommentAsReadPluginTest < ActionView::TestCase
7 4
8 def setup 5 def setup
9 @plugin = MarkCommentAsReadPlugin.new 6 @plugin = MarkCommentAsReadPlugin.new
plugins/metadata/lib/metadata_plugin/base.rb
1 -  
2 class MetadataPlugin::Base < Noosfero::Plugin 1 class MetadataPlugin::Base < Noosfero::Plugin
3 2
4 def self.plugin_name 3 def self.plugin_name
@@ -71,6 +70,6 @@ end @@ -71,6 +70,6 @@ end
71 70
72 ActiveSupport.run_load_hooks :metadata_plugin, MetadataPlugin 71 ActiveSupport.run_load_hooks :metadata_plugin, MetadataPlugin
73 ActiveSupport.on_load :active_record do 72 ActiveSupport.on_load :active_record do
74 - ApplicationRecord.extend MetadataPlugin::Specs::ClassMethods 73 + ActiveRecord::Base.extend MetadataPlugin::Specs::ClassMethods
75 end 74 end
76 75
plugins/newsletter/test/integration/safe_strings_test.rb 0 → 100644
@@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
  1 +require 'test_helper'
  2 +
  3 +class NewsletterPluginSafeStringsTest < ActionDispatch::IntegrationTest
  4 +
  5 + should 'not escape HTML from newsletter pending task' do
  6 + environment = Environment.default
  7 + environment.enable_plugin('newsletter')
  8 + person = create_user('john', :environment_id => environment.id, :password => 'test', :password_confirmation => 'test').person
  9 + person.user.activate
  10 + environment.add_admin(person)
  11 +
  12 + blog = fast_create(Blog, :profile_id => person.id)
  13 + post = fast_create(TextileArticle, :name => 'First post', :profile_id => person.id, :parent_id => blog.id, :body => 'Test')
  14 + newsletter = NewsletterPlugin::Newsletter.create!(:environment => environment, :person => person, :enabled => true)
  15 + newsletter.blog_ids = [blog.id]
  16 + newsletter.save!
  17 + task = NewsletterPlugin::ModerateNewsletter.create!(
  18 + :newsletter_id => newsletter.id,
  19 + :target => environment,
  20 + :post_ids => [post.id.to_s]
  21 + )
  22 +
  23 + login 'john', 'test'
  24 + get '/myprofile/john/tasks'
  25 +
  26 + assert_tag :tag => 'input',
  27 + :attributes => { :type => 'checkbox', :name => "tasks[#{task.id}][task][post_ids][]" },
  28 + :sibling => { :tag => 'span' }
  29 + end
  30 +
  31 +end
plugins/newsletter/views/newsletter_plugin/unsubscribe.html.erb
@@ -6,6 +6,6 @@ @@ -6,6 +6,6 @@
6 6
7 <%= _('Send an email to %s requesting your unsubscription or click on the button below.') % link_to(environment.contact_email, "mailto:#{environment.contact_email}?subject=#{_('Cancel newsletter subscription')}") %> 7 <%= _('Send an email to %s requesting your unsubscription or click on the button below.') % link_to(environment.contact_email, "mailto:#{environment.contact_email}?subject=#{_('Cancel newsletter subscription')}") %>
8 8
9 -<% button_bar do %> 9 +<%= button_bar do %>
10 <%= button :ok, _('Confirm unsubscription'), {:action => 'confirm_unsubscription'}, :method => 'post' %> 10 <%= button :ok, _('Confirm unsubscription'), {:action => 'confirm_unsubscription'}, :method => 'post' %>
11 <% end %> 11 <% end %>
plugins/newsletter/views/newsletter_plugin_admin/index.html.erb
@@ -85,7 +85,7 @@ @@ -85,7 +85,7 @@
85 :id => 'newsletter-footer-field' 85 :id => 'newsletter-footer-field'
86 )) 86 ))
87 %> 87 %>
88 - <% button_bar do %> 88 + <%= button_bar do %>
89 <%= submit_button :save, _('Save') %> 89 <%= submit_button :save, _('Save') %>
90 <%= submit_button :save, _('Save and visualize'), :name => "visualize", :cancel => {:controller => 'plugins'} %> 90 <%= submit_button :save, _('Save and visualize'), :name => "visualize", :cancel => {:controller => 'plugins'} %>
91 <% end %> 91 <% end %>
plugins/newsletter/views/tasks/newsletter_plugin/_moderate_newsletter_accept_details.html.erb
@@ -9,9 +9,9 @@ @@ -9,9 +9,9 @@
9 <% input_name = "tasks[#{task.id}][task][post_ids][]" %> 9 <% input_name = "tasks[#{task.id}][task][post_ids][]" %>
10 <% post_check_box = hidden_field_tag(input_name, '0') +check_box_tag(input_name, post.id, true) %> 10 <% post_check_box = hidden_field_tag(input_name, '0') +check_box_tag(input_name, post.id, true) %>
11 11
12 - <% newsletter_content.gsub!(/<span([^>]*?) id="#{post.id}"/, post_check_box + '<span\\1')%>  
13 - <% newsletter_content.gsub!(/<img([^>]*?) id="#{post.id}"/, post_check_box + '<img\\1') %> 12 + <% newsletter_content.gsub!(/<span([^>]*?) id="#{post.id}"/, post_check_box + '<span\\1'.html_safe) %>
  13 + <% newsletter_content.gsub!(/<img([^>]*?) id="#{post.id}"/, post_check_box + '<img\\1'.html_safe) %>
14 <% end %> 14 <% end %>
15 15
16 - <%= newsletter_content %> 16 + <%= newsletter_content.html_safe %>
17 </div> 17 </div>
plugins/oauth_client/views/oauth_client_plugin_admin/edit.html.erb
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 <% end %> 33 <% end %>
34 </div> 34 </div>
35 35
36 - <% button_bar do %> 36 + <%= button_bar do %>
37 <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %> 37 <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %>
38 <% end %> 38 <% end %>
39 <% end %> 39 <% end %>
plugins/organization_ratings/controllers/organization_ratings_plugin_profile_controller.rb
@@ -37,20 +37,17 @@ class OrganizationRatingsPluginProfileController &lt; ProfileController @@ -37,20 +37,17 @@ class OrganizationRatingsPluginProfileController &lt; ProfileController
37 end 37 end
38 38
39 def create_new_rate 39 def create_new_rate
40 - rating = OrganizationRating.new(params[:organization_rating])  
41 - rating.person = current_user.person  
42 - rating.organization = profile  
43 - rating.value = params[:organization_rating_value] if params[:organization_rating_value] 40 + @rating = OrganizationRating.new(params[:organization_rating])
  41 + @rating.person = current_user.person
  42 + @rating.organization = profile
  43 + @rating.value = params[:organization_rating_value] if params[:organization_rating_value]
44 44
45 - if rating.save  
46 - @plugins.dispatch(:organization_ratings_plugin_rating_created, rating, params)  
47 - create_rating_comment(rating) 45 + if @rating.save
  46 + @plugins.dispatch(:organization_ratings_plugin_rating_created, @rating, params)
  47 + create_rating_comment(@rating)
48 session[:notice] = _("%s successfully rated!") % profile.name 48 session[:notice] = _("%s successfully rated!") % profile.name
49 - else  
50 - session[:notice] = _("Sorry, there were problems rating this profile.") 49 + redirect_to profile.url
51 end 50 end
52 -  
53 - redirect_to profile.url  
54 end 51 end
55 52
56 def create_rating_comment(rating) 53 def create_rating_comment(rating)
plugins/organization_ratings/db/migrate/20160523193515_add_initial_page_to_organization_ratings_config.rb 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +class AddInitialPageToOrganizationRatingsConfig < ActiveRecord::Migration
  2 + def up
  3 + add_column :organization_ratings_configs, :ratings_on_initial_page, :integer, :default => 3
  4 + end
  5 +
  6 + def down
  7 + remove_column :organization_ratings_configs, :ratings_on_initial_page
  8 + end
  9 +end
plugins/organization_ratings/features/rate_community.feature
@@ -19,7 +19,7 @@ Feature: rate_community @@ -19,7 +19,7 @@ Feature: rate_community
19 And I am logged in as "joaosilva" 19 And I am logged in as "joaosilva"
20 20
21 @selenium 21 @selenium
22 - Scenario: display rate button inside average block 22 + Scenario: display rate button and total ratings inside average block
23 Given I am on mycommunity's homepage 23 Given I am on mycommunity's homepage
24 Then I should see "Rate this Community" within ".average-rating-block" 24 Then I should see "Rate this Community" within ".average-rating-block"
25 And I should see "Be the first to rate" within ".average-rating-block" 25 And I should see "Be the first to rate" within ".average-rating-block"
@@ -34,3 +34,9 @@ Feature: rate_community @@ -34,3 +34,9 @@ Feature: rate_community
34 When I follow "Rate this Community" 34 When I follow "Rate this Community"
35 Then I should see "Joao Silva" within ".star-profile-name" 35 Then I should see "Joao Silva" within ".star-profile-name"
36 And I should see Joao Silva's profile image 36 And I should see Joao Silva's profile image
  37 +
  38 + Scenario: display total ratings inside average block
  39 + Given I am on mycommunity's homepage
  40 + When I follow "Rate this Community"
  41 + Then I follow "Save"
  42 + Then I should see "(1)" within ".total-ratings"
plugins/organization_ratings/lib/organization_rating.rb
@@ -13,25 +13,26 @@ class OrganizationRating &lt; ApplicationRecord @@ -13,25 +13,26 @@ class OrganizationRating &lt; ApplicationRecord
13 validates :organization_id, :person_id, 13 validates :organization_id, :person_id,
14 :presence => true 14 :presence => true
15 15
16 - def display_moderation_message person  
17 - if person.present?  
18 - task_active? && (person.is_admin? || person == self.person || 16 + def display_full_info_to? person
  17 + (person.is_admin? || person == self.person ||
19 self.organization.is_admin?(person)) 18 self.organization.is_admin?(person))
20 - end  
21 end 19 end
22 20
23 - def task_active?  
24 - tasks = CreateOrganizationRatingComment.where(:target_id => self.organization.id,  
25 - :status => Task::Status::ACTIVE)  
26 - tasks.detect {|t| t.organization_rating_id == self.id}.present? 21 + def task_status
  22 + tasks = CreateOrganizationRatingComment.where(:target_id => self.organization.id, :requestor_id => self.person.id)
  23 + task = tasks.detect{ |t| t.organization_rating_id == self.id }
  24 + task.status if task.present?
27 end 25 end
28 26
29 - def self.average_rating organization_id  
30 - average = OrganizationRating.where(organization_id: organization_id).average(:value) 27 + def self.statistics_for_profile organization
  28 + ratings = OrganizationRating.where(organization_id: organization)
  29 + average = ratings.average(:value)
  30 + total = ratings.size
31 31
32 if average 32 if average
33 - (average - average.truncate) >= 0.5 ? average.ceil : average.floor 33 + average = (average - average.truncate) >= 0.5 ? average.ceil : average.floor
34 end 34 end
  35 + { average: average, total: total }
35 end 36 end
36 37
37 end 38 end
plugins/organization_ratings/lib/organization_ratings_block.rb
@@ -13,6 +13,10 @@ class OrganizationRatingsBlock &lt; Block @@ -13,6 +13,10 @@ class OrganizationRatingsBlock &lt; Block
13 env_organization_ratings_config.per_page 13 env_organization_ratings_config.per_page
14 end 14 end
15 15
  16 + def ratings_on_initial_page
  17 + env_organization_ratings_config.ratings_on_initial_page
  18 + end
  19 +
16 def cacheable? 20 def cacheable?
17 false 21 false
18 end 22 end
plugins/organization_ratings/lib/organization_ratings_config.rb
@@ -4,6 +4,7 @@ class OrganizationRatingsConfig &lt; ApplicationRecord @@ -4,6 +4,7 @@ class OrganizationRatingsConfig &lt; ApplicationRecord
4 4
5 attr_accessible :cooldown, :default_rating, :order, :per_page 5 attr_accessible :cooldown, :default_rating, :order, :per_page
6 attr_accessible :vote_once, :are_moderated, :environment_id 6 attr_accessible :vote_once, :are_moderated, :environment_id
  7 + attr_accessible :ratings_on_initial_page
7 8
8 ORDER_OPTIONS = {recent: _('More Recent'), best: _('Best Ratings')} 9 ORDER_OPTIONS = {recent: _('More Recent'), best: _('Best Ratings')}
9 10
plugins/organization_ratings/lib/ratings_helper.rb
@@ -12,4 +12,14 @@ module RatingsHelper @@ -12,4 +12,14 @@ module RatingsHelper
12 ratings = OrganizationRating.where(organization_id: profile_id).order("created_at DESC") 12 ratings = OrganizationRating.where(organization_id: profile_id).order("created_at DESC")
13 end 13 end
14 end 14 end
15 -end  
16 \ No newline at end of file 15 \ No newline at end of file
  16 +
  17 + def status_message_for(person, rating)
  18 + if person.present? && rating.display_full_info_to?(person)
  19 + if(rating.task_status == Task::Status::ACTIVE)
  20 + content_tag(:p, _("Report waiting for approval"), class: "moderation-msg")
  21 + elsif(rating.task_status == Task::Status::CANCELLED)
  22 + content_tag(:p, _("Report rejected"), class: "rejected-msg")
  23 + end
  24 + end
  25 + end
  26 +end
plugins/organization_ratings/public/style.css
1 .star-container { 1 .star-container {
2 width: 100%; 2 width: 100%;
3 - height: 20px; 3 + height: 22px;
4 } 4 }
5 5
6 .star-negative, .star-positive { 6 .star-negative, .star-positive {
@@ -80,7 +80,16 @@ @@ -80,7 +80,16 @@
80 80
81 .organization-average-rating-container .star-container { 81 .organization-average-rating-container .star-container {
82 float: left; 82 float: left;
83 - width: 120px; 83 + display: inline-flex;
  84 + width: auto;
  85 + max-width: 190px;
  86 +
  87 +}
  88 +
  89 +.total-ratings {
  90 + font-size: 16px;
  91 + margin-left: 5px;
  92 + margin-right: 5px;
84 } 93 }
85 94
86 .organization-average-rating-container .rate-this-organization { 95 .organization-average-rating-container .rate-this-organization {
plugins/organization_ratings/test/functional/organization_ratings_plugin_profile_controller_test.rb
@@ -46,7 +46,7 @@ class OrganizationRatingsPluginProfileControllerTest &lt; ActionController::TestCas @@ -46,7 +46,7 @@ class OrganizationRatingsPluginProfileControllerTest &lt; ActionController::TestCas
46 test "do not create community_rating without a rate value" do 46 test "do not create community_rating without a rate value" do
47 post :new_rating, profile: @community.identifier, :comments => {:body => ""}, :organization_rating_value => nil 47 post :new_rating, profile: @community.identifier, :comments => {:body => ""}, :organization_rating_value => nil
48 48
49 - assert_equal "Sorry, there were problems rating this profile.", session[:notice] 49 + assert_tag :tag => 'div', :attributes => {:class => /errorExplanation/}, :content => /Value can't be blank/
50 end 50 end
51 51
52 test "do not create two ratings on Community when vote once config is true" do 52 test "do not create two ratings on Community when vote once config is true" do
@@ -188,4 +188,24 @@ class OrganizationRatingsPluginProfileControllerTest &lt; ActionController::TestCas @@ -188,4 +188,24 @@ class OrganizationRatingsPluginProfileControllerTest &lt; ActionController::TestCas
188 assert_no_tag :tag => 'p', :content => /Report waiting for approva/, :attributes => {:class =>/comment-rejected-msg/} 188 assert_no_tag :tag => 'p', :content => /Report waiting for approva/, :attributes => {:class =>/comment-rejected-msg/}
189 assert_tag :tag => 'p', :content => /comment accepted/, :attributes => {:class =>/comment-body/} 189 assert_tag :tag => 'p', :content => /comment accepted/, :attributes => {:class =>/comment-body/}
190 end 190 end
  191 +
  192 + test "should display ratings count in average block" do
  193 + average_block = AverageRatingBlock.new
  194 + average_block.box = @community.boxes.find_by_position(1)
  195 + average_block.save!
  196 +
  197 + OrganizationRating.stubs(:statistics_for_profile).returns({:average => 5, :total => 42})
  198 + get :new_rating, profile: @community.identifier
  199 + assert_tag :tag => 'a', :content => /\(42\)/
  200 + end
  201 +
  202 + test "should display maximum ratings count in average block" do
  203 + average_block = AverageRatingBlock.new
  204 + average_block.box = @community.boxes.find_by_position(1)
  205 + average_block.save!
  206 +
  207 + OrganizationRating.stubs(:statistics_for_profile).returns({:average => 5, :total => 999000})
  208 + get :new_rating, profile: @community.identifier
  209 + assert_tag :tag => 'a', :content => /\(10000\+\)/
  210 + end
191 end 211 end
plugins/organization_ratings/test/unit/organization_rating_config_test.rb
@@ -29,15 +29,29 @@ class OrganizationRatingConfigTest &lt; ActiveSupport::TestCase @@ -29,15 +29,29 @@ class OrganizationRatingConfigTest &lt; ActiveSupport::TestCase
29 assert_equal "must be greater than or equal to 0", @organization_ratings_config.errors[:cooldown].first 29 assert_equal "must be greater than or equal to 0", @organization_ratings_config.errors[:cooldown].first
30 end 30 end
31 31
32 - # test "communities ratings per page validation" do  
33 - # environment = Environment.new :communities_ratings_per_page => 4  
34 - # environment.valid? 32 + test "communities ratings per page validation" do
  33 + @organization_ratings_config.per_page = 4
35 34
36 - # assert_equal "must be greater than or equal to 5", environment.errors[:communities_ratings_per_page].first 35 + refute @organization_ratings_config.valid?
37 36
38 - # environment.communities_ratings_per_page = 21  
39 - # environment.valid? 37 + assert_equal "must be greater than or equal to 5", @organization_ratings_config.errors[:per_page].first
40 38
41 - # assert_equal "must be less than or equal to 20", environment.errors[:communities_ratings_per_page].first  
42 - # end 39 + @organization_ratings_config.per_page = 21
  40 + refute @organization_ratings_config.valid?
  41 +
  42 + assert_equal "must be less than or equal to 20", @organization_ratings_config.errors[:per_page].first
  43 + end
  44 +
  45 + should "ratings block use initial_page config" do
  46 + @organization_ratings_config.ratings_on_initial_page = 4
  47 + @organization_ratings_config.save!
  48 + block = OrganizationRatingsBlock.new
  49 + assert_equal block.ratings_on_initial_page, 4
  50 + end
  51 +
  52 + should "ratings block show 3 ratings on initial page by default" do
  53 + @organization_ratings_config.save!
  54 + block = OrganizationRatingsBlock.new
  55 + assert_equal block.ratings_on_initial_page, 3
  56 + end
43 end 57 end
plugins/organization_ratings/test/unit/organization_rating_test.rb
@@ -35,55 +35,36 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase @@ -35,55 +35,36 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase
35 assert_equal false, organization_rating2.errors[:value].include?("must be between 1 and 5") 35 assert_equal false, organization_rating2.errors[:value].include?("must be between 1 and 5")
36 end 36 end
37 37
38 - test "false return when no active tasks for an Organization Rating" do  
39 - assert_not @rating.task_active?  
40 - end  
41 -  
42 - test "true return when an active task exists for an Organization Rating" do 38 + test "return rating task status" do
43 CreateOrganizationRatingComment.create!( 39 CreateOrganizationRatingComment.create!(
44 :organization_rating_id => @rating.id, 40 :organization_rating_id => @rating.id,
45 :target => @community, 41 :target => @community,
46 :requestor => @person) 42 :requestor => @person)
47 43
48 - assert_equal Task::Status::ACTIVE, CreateOrganizationRatingComment.last.status  
49 - assert @rating.task_active? 44 + assert_equal Task::Status::ACTIVE, @rating.task_status
50 end 45 end
51 46
52 - test "return false when an cancelled task exists for an Organization Rating" do 47 + test "return rating task status when task is cancelled" do
53 CreateOrganizationRatingComment.create!( 48 CreateOrganizationRatingComment.create!(
54 :organization_rating_id => @rating.id, 49 :organization_rating_id => @rating.id,
55 :target => @community, 50 :target => @community,
56 :requestor => @person) 51 :requestor => @person)
57 CreateOrganizationRatingComment.last.cancel 52 CreateOrganizationRatingComment.last.cancel
58 - assert_not @rating.task_active? 53 + assert_equal Task::Status::CANCELLED, @rating.task_status
59 end 54 end
60 55
61 - test "display report moderation message to community admin" do  
62 - moderator = create_user('moderator')  
63 - @community.add_admin(moderator.person)  
64 - @rating.stubs(:task_active?).returns(true)  
65 - assert @rating.display_moderation_message(@adminuser) 56 + test "should display full info to admin" do
  57 + @person.stubs(:is_admin?).returns(true)
  58 + assert @rating.display_full_info_to?(@person)
66 end 59 end
67 60
68 - test "display report moderation message to owner" do  
69 - @rating.stubs(:task_active?).returns(true)  
70 - assert @rating.display_moderation_message(@person) 61 + test "should display full info to owner" do
  62 + assert @rating.display_full_info_to?(@person)
71 end 63 end
72 64
73 - test "do not display report moderation message to regular user" do 65 + test "should not display full info to regular user" do
74 regular_person = fast_create(Person) 66 regular_person = fast_create(Person)
75 - @rating.stubs(:task_active?).returns(true)  
76 - assert_not @rating.display_moderation_message(regular_person)  
77 - end  
78 -  
79 - test "do not display report moderation message to not logged user" do  
80 - @rating.stubs(:task_active?).returns(true)  
81 - assert_not @rating.display_moderation_message(nil)  
82 - end  
83 -  
84 - test "do not display report moderation message no active task exists" do  
85 - @rating.stubs(:task_active?).returns(false)  
86 - assert_not @rating.display_moderation_message(@person) 67 + assert_not @rating.display_full_info_to?(regular_person)
87 end 68 end
88 69
89 test "Create task for create a rating comment" do 70 test "Create task for create a rating comment" do
@@ -109,7 +90,7 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase @@ -109,7 +90,7 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase
109 assert community.tasks.include?(create_organization_rating_comment) 90 assert community.tasks.include?(create_organization_rating_comment)
110 end 91 end
111 92
112 - test "Should calculate community's rating average" do 93 + test "Should calculate community's rating statistics" do
113 community = fast_create Community 94 community = fast_create Community
114 p1 = fast_create Person, :name=>"Person 1" 95 p1 = fast_create Person, :name=>"Person 1"
115 p2 = fast_create Person, :name=>"Person 2" 96 p2 = fast_create Person, :name=>"Person 2"
@@ -119,11 +100,13 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase @@ -119,11 +100,13 @@ class OrganizationRatingTest &lt; ActiveSupport::TestCase
119 OrganizationRating.create! :value => 3, :organization => community, :person => p2 100 OrganizationRating.create! :value => 3, :organization => community, :person => p2
120 OrganizationRating.create! :value => 5, :organization => community, :person => p3 101 OrganizationRating.create! :value => 5, :organization => community, :person => p3
121 102
122 - assert_equal 3, OrganizationRating.average_rating(community) 103 + assert_equal 3, OrganizationRating.statistics_for_profile(community)[:average]
  104 + assert_equal 3, OrganizationRating.statistics_for_profile(community)[:total]
123 105
124 p4 = fast_create Person, :name=>"Person 4" 106 p4 = fast_create Person, :name=>"Person 4"
125 OrganizationRating.create! :value => 4, :organization => community, :person => p4 107 OrganizationRating.create! :value => 4, :organization => community, :person => p4
126 108
127 - assert_equal 4, OrganizationRating.average_rating(community) 109 + assert_equal 4, OrganizationRating.statistics_for_profile(community)[:average]
  110 + assert_equal 4, OrganizationRating.statistics_for_profile(community)[:total]
128 end 111 end
129 end 112 end
plugins/organization_ratings/test/unit/ratings_helper_test.rb
@@ -3,6 +3,7 @@ require &#39;ratings_helper&#39; @@ -3,6 +3,7 @@ require &#39;ratings_helper&#39;
3 3
4 class RatingsHelperTest < ActiveSupport::TestCase 4 class RatingsHelperTest < ActiveSupport::TestCase
5 include RatingsHelper 5 include RatingsHelper
  6 + include ActionView::Helpers::TagHelper
6 7
7 def setup 8 def setup
8 9
@@ -12,6 +13,12 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase @@ -12,6 +13,12 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase
12 @person = create_user('testuser').person 13 @person = create_user('testuser').person
13 @community = Community.create(:name => "TestCommunity") 14 @community = Community.create(:name => "TestCommunity")
14 @organization_ratings_config = OrganizationRatingsConfig.instance 15 @organization_ratings_config = OrganizationRatingsConfig.instance
  16 + @rating = fast_create(OrganizationRating, {:value => 1,
  17 + :person_id => @person.id,
  18 + :organization_id => @community.id,
  19 + :created_at => DateTime.now,
  20 + :updated_at => DateTime.now,
  21 + })
15 end 22 end
16 23
17 should "get the ratings of a community ordered by most recent ratings" do 24 should "get the ratings of a community ordered by most recent ratings" do
@@ -32,6 +39,7 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase @@ -32,6 +39,7 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase
32 39
33 ratings_array << most_recent_rating 40 ratings_array << most_recent_rating
34 ratings_array << first_rating 41 ratings_array << first_rating
  42 + ratings_array << @rating
35 43
36 assert_equal @organization_ratings_config.order, "recent" 44 assert_equal @organization_ratings_config.order, "recent"
37 assert_equal ratings_array, get_ratings(@community.id) 45 assert_equal ratings_array, get_ratings(@community.id)
@@ -57,7 +65,42 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase @@ -57,7 +65,42 @@ class RatingsHelperTest &lt; ActiveSupport::TestCase
57 65
58 ratings_array << second_rating 66 ratings_array << second_rating
59 ratings_array << first_rating 67 ratings_array << first_rating
  68 + ratings_array << @rating
60 69
61 assert_equal ratings_array, get_ratings(@community.id) 70 assert_equal ratings_array, get_ratings(@community.id)
62 end 71 end
  72 +
  73 + test "display report moderation message to community admin" do
  74 + @moderator = create_user('moderator').person
  75 + @community.add_admin(@moderator)
  76 + @rating.stubs(:task_status).returns(Task::Status::ACTIVE)
  77 + assert status_message_for(@moderator, @rating).include?("Report waiting for approval")
  78 + end
  79 +
  80 + test "display report moderation message to owner" do
  81 + @rating.stubs(:task_status).returns(Task::Status::ACTIVE)
  82 + assert status_message_for(@person, @rating).include?("Report waiting for approval")
  83 + end
  84 +
  85 + test "display report rejected message to owner" do
  86 + @rating.stubs(:task_status).returns(Task::Status::CANCELLED)
  87 + assert status_message_for(@person, @rating).include?("Report rejected")
  88 + end
  89 +
  90 + test "do not display report moderation message to regular user" do
  91 + @regular_person = fast_create(Person)
  92 + @rating.stubs(:task_status).returns(Task::Status::ACTIVE)
  93 + assert_nil status_message_for(@regular_person, @rating)
  94 + end
  95 +
  96 + test "return empty status message to not logged user" do
  97 + @rating.stubs(:task_status).returns(Task::Status::ACTIVE)
  98 + assert_nil status_message_for(nil, @rating)
  99 + end
  100 +
  101 + test "do not display status message if report task is finished" do
  102 + @rating.stubs(:task_status).returns(Task::Status::FINISHED)
  103 + assert_nil status_message_for(@person, @rating)
  104 + end
  105 +
63 end 106 end
plugins/organization_ratings/views/blocks/average_rating.html.erb
1 -<% average_rating = OrganizationRating.average_rating block.owner.id %> 1 +<% statistics = OrganizationRating.statistics_for_profile block.owner %>
2 2
3 <div class="organization-average-rating-container"> 3 <div class="organization-average-rating-container">
4 - <% if average_rating %> 4 + <% if statistics[:average] %>
5 <div class="star-rate-text"> 5 <div class="star-rate-text">
6 <%= _("Rating: ") %> 6 <%= _("Rating: ") %>
7 </div> 7 </div>
8 8
9 <div class="star-container"> 9 <div class="star-container">
10 <% (1..5).each do |star_number| %> 10 <% (1..5).each do |star_number| %>
11 - <% if star_number <= average_rating %> 11 + <% if star_number <= statistics[:average] %>
12 <div class="medium-star-positive"></div> 12 <div class="medium-star-positive"></div>
13 <% else %> 13 <% else %>
14 <div class="medium-star-negative"></div> 14 <div class="medium-star-negative"></div>
15 <% end %> 15 <% end %>
16 <% end %> 16 <% end %>
  17 + <div class="total-ratings">
  18 + <%= link_to url_for(:controller => 'organization_ratings_plugin_profile', :action => 'new_rating', :anchor => 'ratings-list') do %>
  19 + <% if(statistics[:total] > 10000) %>
  20 + <%= "(10000+)" %>
  21 + <% else %>
  22 + <%= "(#{statistics[:total]})" %>
  23 + <% end %>
  24 + <% end %>
  25 + </div>
17 </div> 26 </div>
18 <% else %> 27 <% else %>
19 <div class="rating-invitation"> 28 <div class="rating-invitation">
@@ -24,4 +33,4 @@ @@ -24,4 +33,4 @@
24 <div class="rate-this-organization"> 33 <div class="rate-this-organization">
25 <%= link_to _("Rate this %s") % _(block.owner.class.name), url_for(:controller => "organization_ratings_plugin_profile", :action => "new_rating", :profile => block.owner.identifier) %> 34 <%= link_to _("Rate this %s") % _(block.owner.class.name), url_for(:controller => "organization_ratings_plugin_profile", :action => "new_rating", :profile => block.owner.identifier) %>
26 </div> 35 </div>
27 -</div>  
28 \ No newline at end of file 36 \ No newline at end of file
  37 +</div>
plugins/organization_ratings/views/blocks/organization_ratings.html.erb
@@ -7,14 +7,14 @@ @@ -7,14 +7,14 @@
7 <% else %> 7 <% else %>
8 <div class="ratings-list"> 8 <div class="ratings-list">
9 <% block.get_ratings(block.owner.id).each_with_index do |r, index| %> 9 <% block.get_ratings(block.owner.id).each_with_index do |r, index| %>
10 - <% break if index >= block.limit_number_of_ratings %> 10 + <% break if index >= block.ratings_on_initial_page %>
11 <%= render :partial => "shared/user_rating_container", :locals => {:user_rate => r} %> 11 <%= render :partial => "shared/user_rating_container", :locals => {:user_rate => r} %>
12 <% end %> 12 <% end %>
13 13
14 <%= render :partial => 'shared/make_report_block' %> 14 <%= render :partial => 'shared/make_report_block' %>
15 15
16 <div class="see-more"> 16 <div class="see-more">
17 - <%= link_to _('See more'), url_for(:controller => 'organization_ratings_plugin_profile', :action => 'new_rating'), :class => 'icon-arrow-right-p' %> 17 + <%= link_to _('See more'), url_for(:controller => 'organization_ratings_plugin_profile', :action => 'new_rating', :anchor => 'ratings-list'), :class => 'icon-arrow-right-p' %>
18 </div> 18 </div>
19 </div> 19 </div>
20 <% end %> 20 <% end %>
plugins/organization_ratings/views/organization_ratings_plugin_admin/index.html.erb
@@ -43,9 +43,15 @@ @@ -43,9 +43,15 @@
43 <%= c.select :per_page, 5..20 %> 43 <%= c.select :per_page, 5..20 %>
44 </td> 44 </td>
45 </tr> 45 </tr>
  46 + <tr>
  47 + <td><%= _('Ratings amount on initial page') %></td>
  48 + <td>
  49 + <%= c.select :ratings_on_initial_page, 1..10 %>
  50 + </td>
  51 + </tr>
46 </table> 52 </table>
47 <div> 53 <div>
48 - <% button_bar do %> 54 + <%= button_bar do %>
49 <%= submit_button('save', c_('Save changes')) %> 55 <%= submit_button('save', c_('Save changes')) %>
50 <%= button :back, _('Back'), :controller => 'plugins' %> 56 <%= button :back, _('Back'), :controller => 'plugins' %>
51 <% end %> 57 <% end %>
plugins/organization_ratings/views/organization_ratings_plugin_profile/_new_rating_fields.html.erb
1 <% min_rate = env_organization_ratings_config.minimum_ratings %> 1 <% min_rate = env_organization_ratings_config.minimum_ratings %>
2 <% default_rating = env_organization_ratings_config.default_rating %> 2 <% default_rating = env_organization_ratings_config.default_rating %>
3 3
4 -<div class="star-page-title">  
5 - <%= @plugins.dispatch(:organization_ratings_title).collect { |content| instance_exec(&content) }.join("") %>  
6 -</div>  
7 -  
8 <div class="star-rate-data"> 4 <div class="star-rate-data">
9 5
10 <div class="star-profile-information"> 6 <div class="star-profile-information">
plugins/organization_ratings/views/organization_ratings_plugin_profile/new_rating.html.erb
  1 +<%= error_messages_for 'rating' %>
  2 +
1 <% config = env_organization_ratings_config %> 3 <% config = env_organization_ratings_config %>
  4 +<div class="star-page-title">
  5 + <%= @plugins.dispatch(:organization_ratings_title).collect { |content| instance_exec(&content) }.join("") %>
  6 +</div>
2 <% if logged_in? %> 7 <% if logged_in? %>
3 <%= render :partial => "new_rating_fields" %> 8 <%= render :partial => "new_rating_fields" %>
4 <% else %> 9 <% else %>
@@ -7,7 +12,7 @@ @@ -7,7 +12,7 @@
7 </div> 12 </div>
8 <% end %> 13 <% end %>
9 14
10 -<div class="ratings-list"> 15 +<div class="ratings-list" id="ratings-list">
11 <% @users_ratings.each do |user_rate| %> 16 <% @users_ratings.each do |user_rate| %>
12 <%= render :partial => "shared/user_rating_container", :locals => {:user_rate => user_rate} %> 17 <%= render :partial => "shared/user_rating_container", :locals => {:user_rate => user_rate} %>
13 <% end %> 18 <% end %>
@@ -15,4 +20,4 @@ @@ -15,4 +20,4 @@
15 20
16 <div id='pagination-profiles'> 21 <div id='pagination-profiles'>
17 <%= pagination_links @users_ratings, :param_name => 'npage' %> 22 <%= pagination_links @users_ratings, :param_name => 'npage' %>
18 -</div>  
19 \ No newline at end of file 23 \ No newline at end of file
  24 +</div>
plugins/organization_ratings/views/shared/_make_report_block.html.erb
1 <% logged_in_image = link_to profile_image(current_user.person, :portrait), current_user.person.url if current_user %> 1 <% logged_in_image = link_to profile_image(current_user.person, :portrait), current_user.person.url if current_user %>
2 <% logged_in_name = link_to current_user.person.name, current_user.person.url if current_user %> 2 <% logged_in_name = link_to current_user.person.name, current_user.person.url if current_user %>
3 -<% logged_out_image = image_tag('plugins/organization_ratings/public/images/user-not-logged.png') %> 3 +<% logged_out_image = image_tag('plugins/organization_ratings/images/user-not-logged.png') %>
4 4
5 <div class="make-report-block"> 5 <div class="make-report-block">
6 <div class="star-profile-information"> 6 <div class="star-profile-information">
plugins/organization_ratings/views/shared/_rating_button.html.erb
1 -<% button_bar do %> 1 +<%= button_bar do %>
2 <% if logged_in? %> 2 <% if logged_in? %>
3 <%= button(:new,_("Rate %s ") % _(profile.class.name), 3 <%= button(:new,_("Rate %s ") % _(profile.class.name),
4 {:controller => "organization_ratings_plugin_profile", 4 {:controller => "organization_ratings_plugin_profile",
plugins/organization_ratings/views/shared/_user_rating_container.html.erb
  1 +<% extend RatingsHelper %>
1 <div class="user-rating-block"> 2 <div class="user-rating-block">
2 <div class="star-profile-information"> 3 <div class="star-profile-information">
3 <div class="star-profile-image"> 4 <div class="star-profile-image">
@@ -25,9 +26,7 @@ @@ -25,9 +26,7 @@
25 </div> 26 </div>
26 27
27 <div class="user-testimony"> 28 <div class="user-testimony">
28 - <% if user_rate.display_moderation_message(user) %>  
29 - <p class="moderation-msg"><%= _("Report waiting for approval") %></p>  
30 - <% end %> 29 + <%= status_message_for(user, user_rate) %>
31 <% if user_rate.comment.present? %> 30 <% if user_rate.comment.present? %>
32 <p class="comment-body"> <%= user_rate.comment.body %> </p> 31 <p class="comment-body"> <%= user_rate.comment.body %> </p>
33 <% end %> 32 <% end %>
plugins/piwik/views/piwik_plugin_admin/index.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 8
9 <%= labelled_form_field _('Piwik site id'), f.text_field(:piwik_site_id) %> 9 <%= labelled_form_field _('Piwik site id'), f.text_field(:piwik_site_id) %>
10 10
11 - <% button_bar do %> 11 + <%= button_bar do %>
12 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 12 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
13 <% end %> 13 <% end %>
14 14
plugins/products/test/unit/products_plugin/enterprise_homepage_helper_test.rb
1 require_relative '../../test_helper' 1 require_relative '../../test_helper'
2 2
3 -class EnterpriseHomepageHelperTest < ActiveSupport::TestCase 3 +class EnterpriseHomepageHelperTest < ActionView::TestCase
4 4
5 include ProductsPlugin::EnterpriseHomepageHelper 5 include ProductsPlugin::EnterpriseHomepageHelper
6 6
@@ -57,7 +57,4 @@ class EnterpriseHomepageHelperTest &lt; ActiveSupport::TestCase @@ -57,7 +57,4 @@ class EnterpriseHomepageHelperTest &lt; ActiveSupport::TestCase
57 assert_no_match /100.34/, result 57 assert_no_match /100.34/, result
58 end 58 end
59 59
60 - protected  
61 - include NoosferoTestHelper  
62 -  
63 end 60 end
plugins/products/test/unit/profile_test.rb
@@ -22,9 +22,8 @@ class ProfileTest &lt; ActiveSupport::TestCase @@ -22,9 +22,8 @@ class ProfileTest &lt; ActiveSupport::TestCase
22 end 22 end
23 23
24 should 'collect the highlighted products with image' do 24 should 'collect the highlighted products with image' do
25 - env = Environment.default  
26 e1 = fast_create(Enterprise) 25 e1 = fast_create(Enterprise)
27 - p1 = create(Product, name: 'test_prod1', product_category_id: @product_category.id, enterprise: e1) 26 + create(Product, name: 'test_prod1', product_category_id: @product_category.id, enterprise: e1)
28 products = [] 27 products = []
29 3.times {|n| 28 3.times {|n|
30 products.push(create(Product, name: "product #{n}", profile_id: e1.id, 29 products.push(create(Product, name: "product #{n}", profile_id: e1.id,
@@ -36,7 +35,8 @@ class ProfileTest &lt; ActiveSupport::TestCase @@ -36,7 +35,8 @@ class ProfileTest &lt; ActiveSupport::TestCase
36 create(Product, name: "product 5", profile_id: e1.id, product_category_id: @product_category.id, image_builder: { 35 create(Product, name: "product 5", profile_id: e1.id, product_category_id: @product_category.id, image_builder: {
37 uploaded_data: fixture_file_upload('/files/rails.png', 'image/png') 36 uploaded_data: fixture_file_upload('/files/rails.png', 'image/png')
38 }) 37 })
39 - assert_equal products, e1.highlighted_products_with_image 38 +
  39 + assert_equivalent products, e1.highlighted_products_with_image
40 end 40 end
41 41
42 should 'have many inputs through products' do 42 should 'have many inputs through products' do
plugins/products/views/products_plugin/page/_display_input.html.erb
1 <div class='input-informations input-form-closed'> 1 <div class='input-informations input-form-closed'>
2 <div class='input-name'> <%= input.name %> <%= input_icon(input) %> </div> 2 <div class='input-name'> <%= input.name %> <%= input_icon(input) %> </div>
3 <div class='input-details'> 3 <div class='input-details'>
4 - <% button_bar do %> 4 + <%= button_bar do %>
5 <% if input.has_price_details? %> 5 <% if input.has_price_details? %>
6 <%= edit_button(:edit, _('Edit'), {:action => 'edit_input', :id => input}, :class => 'edit-input', :id => "edit-input-#{input.id}") %> 6 <%= edit_button(:edit, _('Edit'), {:action => 'edit_input', :id => input}, :class => 'edit-input', :id => "edit-input-#{input.id}") %>
7 <% end %> 7 <% end %>
plugins/products/views/products_plugin/page/_edit_description.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 html: {id: 'product-description-form', method: 'post'}) do |f| %> 6 html: {id: 'product-description-form', method: 'post'}) do |f| %>
7 7
8 <%= labelled_form_field(_('Description:'), f.text_area(:description, rows: 15, style: 'width: 90%;', class: 'mceEditor')) %> 8 <%= labelled_form_field(_('Description:'), f.text_area(:description, rows: 15, style: 'width: 90%;', class: 'mceEditor')) %>
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button :save, _('Save') %> 10 <%= submit_button :save, _('Save') %>
11 <%= cancel_edit_product_link(@product, 'description') %> 11 <%= cancel_edit_product_link(@product, 'description') %>
12 <% end %> 12 <% end %>
plugins/products/views/products_plugin/page/_edit_info.html.erb
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
54 54
55 <%= hidden_field_tag 'info-bar-update-url', @product.price_composition_bar_display_url, class: 'bar-update-url' %> 55 <%= hidden_field_tag 'info-bar-update-url', @product.price_composition_bar_display_url, class: 'bar-update-url' %>
56 56
57 - <% button_bar do %> 57 + <%= button_bar do %>
58 <%= submit_button :save, _('Save') %> 58 <%= submit_button :save, _('Save') %>
59 <%= cancel_edit_product_link(@product, 'info') %> 59 <%= cancel_edit_product_link(@product, 'info') %>
60 <% end %> 60 <% end %>
plugins/products/views/products_plugin/page/_edit_name.html.erb
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 <%= f.text_field(:name, value: @product.name, class: 'name_edition') %> 6 <%= f.text_field(:name, value: @product.name, class: 'name_edition') %>
7 <%= select_unit(@product) %> 7 <%= select_unit(@product) %>
8 8
9 - <% button_bar do %> 9 + <%= button_bar do %>
10 <%= submit_button :save, _('Save') %> 10 <%= submit_button :save, _('Save') %>
11 <%= cancel_edit_product_link(@product, 'name') %> 11 <%= cancel_edit_product_link(@product, 'name') %>
12 <% end %> 12 <% end %>
plugins/products/views/products_plugin/page/_form.html.erb
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <%= file_field_or_thumbnail(_('Image:'), @product.image, i) %> 11 <%= file_field_or_thumbnail(_('Image:'), @product.image, i) %>
12 <% end %> 12 <% end %>
13 13
14 - <% button_bar do %> 14 + <%= button_bar do %>
15 <%= submit_button('save', (mode == 'new' ? _('Create product') : _('Save changes')), :cancel => {:action => 'index'} ) %> 15 <%= submit_button('save', (mode == 'new' ? _('Create product') : _('Save changes')), :cancel => {:action => 'index'} ) %>
16 <% end %> 16 <% end %>
17 <% end %> 17 <% end %>
plugins/products/views/products_plugin/page/_manage_product_details.html.erb
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <%= hidden_field(:product, :inputs_cost) %> 21 <%= hidden_field(:product, :inputs_cost) %>
22 <%= hidden_field(:product, :price) %> 22 <%= hidden_field(:product, :price) %>
23 23
24 - <% button_bar do %> 24 + <%= button_bar do %>
25 <%= submit_button :save, _('Save'), :disabled => '', :class => 'disabled' %> 25 <%= submit_button :save, _('Save'), :disabled => '', :class => 'disabled' %>
26 <%= button :cancel, _('Cancel'), '#', class: 'cancel-price-details', data: {confirm: _('If you leave, you will lose all unsaved information. Are you sure you want to quit?')} %> 26 <%= button :cancel, _('Cancel'), '#', class: 'cancel-price-details', data: {confirm: _('If you leave, you will lose all unsaved information. Are you sure you want to quit?')} %>
27 <%= button(:add, _('New cost'), '#', :id => 'add-new-cost') %> 27 <%= button(:add, _('New cost'), '#', :id => 'add-new-cost') %>
plugins/products/views/products_plugin/page/index.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 24
25 <%= pagination_links @products %> 25 <%= pagination_links @products %>
26 26
27 -<% button_bar do %> 27 +<%= button_bar do %>
28 <%= button :add, _('New product or service'), :action => 'new' if @profile.create_product? %> 28 <%= button :add, _('New product or service'), :action => 'new' if @profile.create_product? %>
29 <%= button :back, _('Back'), { :controller => 'profile_editor', :profile => @profile.identifier, :action => 'index' } %> 29 <%= button :back, _('Back'), { :controller => 'profile_editor', :profile => @profile.identifier, :action => 'index' } %>
30 <% end %> 30 <% end %>
plugins/products/views/products_plugin/page/show.html.erb
@@ -68,7 +68,7 @@ @@ -68,7 +68,7 @@
68 68
69 </div> 69 </div>
70 70
71 -<% button_bar do %> 71 +<%= button_bar do %>
72 <%= button :back, _('Back to the product listing'), controller: 'products_plugin/catalog', action: 'index' %> 72 <%= button :back, _('Back to the product listing'), controller: 'products_plugin/catalog', action: 'index' %>
73 <%= button :delete, _('Remove product or service'), {action: 'destroy', id: @product}, class: 'requires-permission-manage_products', style: 'display:none;' %> 73 <%= button :delete, _('Remove product or service'), {action: 'destroy', id: @product}, class: 'requires-permission-manage_products', style: 'display:none;' %>
74 <% end %> 74 <% end %>
plugins/products/views/profile_editor/_products_profile_info_contents.html.slim 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +- if profile.enterprise?
  2 + h2= _('Products/Services catalog')
  3 + = labelled_form_field(_('Number of products/services displayed per page on catalog'), text_field(:profile_data, :products_per_catalog_page, size: 3))
plugins/products/views/profile_editor/products_profile_info_contents.html.slim
@@ -1,3 +0,0 @@ @@ -1,3 +0,0 @@
1 -- if profile.enterprise?  
2 - h2= _('Products/Services catalog')  
3 - = labelled_form_field(_('Number of products/services displayed per page on catalog'), text_field(:profile_data, :products_per_catalog_page, size: 3))  
plugins/push_notification/lib/push_notification_plugin.rb
@@ -39,7 +39,7 @@ class PushNotificationPlugin &lt; Noosfero::Plugin @@ -39,7 +39,7 @@ class PushNotificationPlugin &lt; Noosfero::Plugin
39 end 39 end
40 40
41 def self.api_mount_points 41 def self.api_mount_points
42 - [PushNotificationPlugin::Api] 42 + [PushNotificationPlugin::API]
43 end 43 end
44 44
45 def self.plugin_description 45 def self.plugin_description
plugins/push_notification/lib/push_notification_plugin/api.rb
1 -require_dependency 'api/helpers'  
2 require_relative 'api_entities' 1 require_relative 'api_entities'
3 2
4 -class PushNotificationPlugin::Api < Grape::API 3 +# Can't be called Api as will result in:
  4 +# warning: toplevel constant Api referenced by PushNotificationPlugin::Api
  5 +# To fix this PushNotificationPlugin should be a module
  6 +class PushNotificationPlugin::API < Grape::API
5 7
6 include Api::Helpers 8 include Api::Helpers
7 9
plugins/push_notification/views/push_notification_plugin_admin/index.html.erb
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <h3><%= t('push_notification_plugin.lib.plugin.enabled_notifications')%></h3> 7 <h3><%= t('push_notification_plugin.lib.plugin.enabled_notifications')%></h3>
8 <%= render partial: "notification_events_form", locals:{f: f, settings: @settings} %> 8 <%= render partial: "notification_events_form", locals:{f: f, settings: @settings} %>
9 9
10 - <% button_bar do %> 10 + <%= button_bar do %>
11 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins'}) %> 11 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins'}) %>
12 <% end %> 12 <% end %>
13 13
plugins/push_notification/views/push_notification_plugin_myprofile/index.html.erb
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 <%= form_for(:settings, :url => {:controller => "push_notification_plugin_myprofile", :action => "update_settings"}) do |f| %> 18 <%= form_for(:settings, :url => {:controller => "push_notification_plugin_myprofile", :action => "update_settings"}) do |f| %>
19 <h1><%= t('push_notification_plugin.lib.plugin.enabled_notifications') %></h1> 19 <h1><%= t('push_notification_plugin.lib.plugin.enabled_notifications') %></h1>
20 <%= render partial: "notification_events_form", locals: {f: f, settings: @settings} %> 20 <%= render partial: "notification_events_form", locals: {f: f, settings: @settings} %>
21 - <% button_bar do %> 21 + <%= button_bar do %>
22 <%= submit_button(:save, _('Save')) %> 22 <%= submit_button(:save, _('Save')) %>
23 <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %> 23 <%= button(:back, _('Back to control panel'), :controller => (profile.nil? ? 'admin_panel': 'profile_editor')) %>
24 <% end %> 24 <% end %>
plugins/relevant_content/lib/relevant_content_plugin/relevant_content_block.rb
@@ -20,45 +20,8 @@ class RelevantContentPlugin::RelevantContentBlock &lt; Block @@ -20,45 +20,8 @@ class RelevantContentPlugin::RelevantContentBlock &lt; Block
20 20
21 attr_accessible :limit, :show_most_voted, :show_most_disliked, :show_most_liked, :show_most_commented, :show_most_read 21 attr_accessible :limit, :show_most_voted, :show_most_disliked, :show_most_liked, :show_most_commented, :show_most_read
22 22
23 - include ActionView::Helpers  
24 - include Rails.application.routes.url_helpers  
25 -  
26 - def content(args={})  
27 -  
28 - content = block_title(title, subtitle)  
29 -  
30 - if self.show_most_read  
31 - docs = Article.most_accessed(owner, self.limit)  
32 - content += subcontent(docs, _("Most read articles"), "mread") unless docs.blank?  
33 - end  
34 -  
35 - if self.show_most_commented  
36 - docs = Article.most_commented_relevant_content(owner, self.limit)  
37 - content += subcontent(docs, _("Most commented articles"), "mcommented") unless docs.blank?  
38 - end  
39 -  
40 - if owner.kind_of?(Environment)  
41 - env = owner  
42 - else  
43 - env = owner.environment  
44 - end  
45 -  
46 - if env.plugin_enabled?('VotePlugin')  
47 - if self.show_most_liked  
48 - docs = Article.more_positive_votes(owner, self.limit)  
49 - content += subcontent(docs, _("Most liked articles"), "mliked") unless docs.blank?  
50 - end  
51 - if self.show_most_disliked  
52 - docs = Article.more_negative_votes(owner, self.limit)  
53 - content += subcontent(docs, _("Most disliked articles"), "mdisliked") unless docs.blank?  
54 - end  
55 -  
56 - if self.show_most_voted  
57 - docs = Article.most_voted(owner, self.limit)  
58 - content += subcontent(docs, _("Most voted articles"), "mvoted") unless docs.blank?  
59 - end  
60 - end  
61 - return content.html_safe 23 + def env
  24 + owner.kind_of?(Environment) ? owner : owner.environment
62 end 25 end
63 26
64 def timeout 27 def timeout
@@ -69,14 +32,4 @@ class RelevantContentPlugin::RelevantContentBlock &lt; Block @@ -69,14 +32,4 @@ class RelevantContentPlugin::RelevantContentBlock &lt; Block
69 { :profile => [:article], :environment => [:article] } 32 { :profile => [:article], :environment => [:article] }
70 end 33 end
71 34
72 - protected  
73 -  
74 - def subcontent(docs, title, html_class)  
75 - subcontent = safe_join([  
76 - content_tag(:span, title, class: "title #{html_class}"),  
77 - content_tag(:ul, safe_join(docs.map {|item| content_tag('li', link_to(h(item.title), item.url))}, "\n"))  
78 - ], "\n")  
79 - content_tag(:div, subcontent, :class=>"block #{html_class}")  
80 - end  
81 -  
82 end 35 end
plugins/relevant_content/test/unit/relevant_content_block_test.rb
@@ -42,20 +42,6 @@ class RelevantContentBlockTest &lt; ActiveSupport::TestCase @@ -42,20 +42,6 @@ class RelevantContentBlockTest &lt; ActiveSupport::TestCase
42 assert_equal RelevantContentPlugin::RelevantContentBlock.expire_on, {:environment=>[:article], :profile=>[:article]} 42 assert_equal RelevantContentPlugin::RelevantContentBlock.expire_on, {:environment=>[:article], :profile=>[:article]}
43 end 43 end
44 44
45 - should 'not crash if vote plugin is not found' do  
46 - box = fast_create(Box, :owner_id => @profile.id, :owner_type => 'Profile')  
47 - block = RelevantContentPlugin::RelevantContentBlock.new(:box => box)  
48 -  
49 - Environment.any_instance.stubs(:enabled_plugins).returns(['RelevantContent'])  
50 - # When the plugin is disabled from noosfero instance, its constant name is  
51 - # undefined. To test this case, I have to manually undefine the constant  
52 - # if necessary.  
53 - Object.send(:remove_const, VotePlugin.to_s) if defined? VotePlugin  
54 -  
55 - assert_nothing_raised do  
56 - block.content  
57 - end  
58 - end  
59 45
60 should 'check most voted articles from profile with relevant content block' do 46 should 'check most voted articles from profile with relevant content block' do
61 community = fast_create(Community) 47 community = fast_create(Community)
@@ -77,11 +63,41 @@ class RelevantContentBlockTest &lt; ActiveSupport::TestCase @@ -77,11 +63,41 @@ class RelevantContentBlockTest &lt; ActiveSupport::TestCase
77 assert_equal false, data.empty? 63 assert_equal false, data.empty?
78 end 64 end
79 65
  66 +end
  67 +
  68 +require 'boxes_helper'
  69 +
  70 +class RelevantContentBlockViewTest < ActionView::TestCase
  71 + include BoxesHelper
  72 +
  73 + def setup
  74 + @profile = create_user('testinguser').person
  75 + end
  76 +
  77 + should 'not crash if vote plugin is not found' do
  78 + box = fast_create(Box, :owner_id => @profile.id, :owner_type => 'Profile')
  79 + block = RelevantContentPlugin::RelevantContentBlock.new(:box => box)
  80 +
  81 + Environment.any_instance.stubs(:enabled_plugins).returns(['RelevantContent'])
  82 + ActionView::Base.any_instance.expects(:block_title).returns("")
  83 + # When the plugin is disabled from noosfero instance, its constant name is
  84 + # undefined. To test this case, I have to manually undefine the constant
  85 + # if necessary.
  86 + Object.send(:remove_const, VotePlugin.to_s) if defined? VotePlugin
  87 +
  88 + assert_nothing_raised do
  89 + render_block_content(block)
  90 + end
  91 + end
  92 +
80 should 'not escape html in block content' do 93 should 'not escape html in block content' do
81 - fast_create(Article, profile_id: profile.id, hits: 10)  
82 - box = fast_create(Box, :owner_id => profile.id, :owner_type => 'Profile') 94 + fast_create(Article, profile_id: @profile.id, hits: 10)
  95 + box = fast_create(Box, :owner_id => @profile.id, :owner_type => 'Profile')
83 block = RelevantContentPlugin::RelevantContentBlock.new(:box => box) 96 block = RelevantContentPlugin::RelevantContentBlock.new(:box => box)
  97 +
84 Environment.any_instance.stubs(:enabled_plugins).returns(['RelevantContent']) 98 Environment.any_instance.stubs(:enabled_plugins).returns(['RelevantContent'])
85 - assert_tag_in_string block.content, tag: 'span', attributes: { class: 'title mread' } 99 + ActionView::Base.any_instance.expects(:block_title).returns("")
  100 +
  101 + assert_tag_in_string render_block_content(block), tag: 'span', attributes: { class: 'title mread' }
86 end 102 end
87 end 103 end
plugins/relevant_content/views/blocks/relevant_content.slim 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 += block_title(block.title, block.subtitle)
  2 +
  3 +- if block.show_most_read
  4 + = render partial: 'blocks/relevant_content/subcontent', locals: {docs: Article.most_accessed(block.owner, block.limit), title: _("Most read articles"), html_class: 'mread'}
  5 +- if block.show_most_commented
  6 + = render partial: 'blocks/relevant_content/subcontent', locals: {docs: Article.most_commented_relevant_content(block.owner, block.limit), title: _("Most commented articles"), html_class: 'mcommented'}
  7 +
  8 +- if block.env.plugin_enabled?('VotePlugin')
  9 + - if block.show_most_liked
  10 + = render partial: 'blocks/relevant_content/subcontent', locals: {docs: Article.more_positive_votes(block.owner, block.limit), title: _("Most liked articles"), html_class: 'mliked'}
  11 + - if block.show_most_disliked
  12 + = render partial: 'blocks/relevant_content/subcontent', locals: {docs: Article.more_negative_votes(block.owner, block.limit), title: _("Most disliked articles"), html_class: 'mdisliked'}
  13 + - if block.show_most_voted
  14 + = render partial: 'blocks/relevant_content/subcontent', locals: {docs: Article.most_voted(block.owner, block.limit), title: _("Most voted articles"), html_class: 'mvoted'}
plugins/relevant_content/views/blocks/relevant_content/_doc.slim 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +li
  2 + = link_to(h(doc.title), doc.url)
plugins/relevant_content/views/blocks/relevant_content/_subcontent.slim 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +- unless docs.blank?
  2 + div class="block #{html_class}"
  3 + span class="title #{html_class}"
  4 + = title
  5 + ul
  6 + = render partial: 'blocks/relevant_content/doc', collection: docs
plugins/require_auth_to_comment/views/require_auth_to_comment_plugin_admin/index.html.erb
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 </strong> 13 </strong>
14 </div> 14 </div>
15 15
16 - <% button_bar do %> 16 + <%= button_bar do %>
17 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 17 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
18 <% end %> 18 <% end %>
19 19
plugins/responsive/lib/ext/application_helper.rb
@@ -5,7 +5,7 @@ module ApplicationHelper @@ -5,7 +5,7 @@ module ApplicationHelper
5 protected 5 protected
6 6
7 module ResponsiveMethods 7 module ResponsiveMethods
8 - FORM_CONTROL_CLASS = "form-control" 8 + FORM_CONTROL_CLASS = 'form-control'
9 9
10 def button(type, label, url, html_options = {}) 10 def button(type, label, url, html_options = {})
11 return super unless theme_responsive? 11 return super unless theme_responsive?
@@ -13,15 +13,14 @@ module ApplicationHelper @@ -13,15 +13,14 @@ module ApplicationHelper
13 option = html_options.delete(:option) || 'default' 13 option = html_options.delete(:option) || 'default'
14 size = html_options.delete(:size) || 'xs' 14 size = html_options.delete(:size) || 'xs'
15 the_class = "with-text btn btn-#{size} btn-#{option} icon-#{type}" 15 the_class = "with-text btn btn-#{size} btn-#{option} icon-#{type}"
16 - if html_options.has_key?(:class)  
17 - the_class << ' ' << html_options[:class]  
18 - end  
19 - #button_without_text type, label, url, html_options.merge(:class => the_class) 16 + the_class << ' ' << html_options[:class] if html_options.has_key?(:class)
  17 +
  18 + #button_without_text type, label, url, html_options.merge(class: the_class)
20 the_title = html_options[:title] || label 19 the_title = html_options[:title] || label
21 if html_options[:disabled] 20 if html_options[:disabled]
22 - content_tag('a', content_tag('span', label), html_options.merge(class: the_class, title: the_title)) 21 + content_tag(:a, content_tag(:span, label), html_options.merge(class: the_class, title: the_title))
23 else 22 else
24 - link_to(content_tag('span', label), url, html_options.merge(class: the_class, title: the_title)) 23 + link_to(content_tag(:span, label), url, html_options.merge(class: the_class, title: the_title))
25 end 24 end
26 end 25 end
27 26
@@ -36,7 +35,7 @@ module ApplicationHelper @@ -36,7 +35,7 @@ module ApplicationHelper
36 end 35 end
37 the_title = html_options[:title] || label 36 the_title = html_options[:title] || label
38 if html_options[:disabled] 37 if html_options[:disabled]
39 - content_tag('a', '', html_options.merge(class: the_class, title: the_title)) 38 + content_tag(:a, '', html_options.merge(class: the_class, title: the_title))
40 else 39 else
41 link_to('', url, html_options.merge(class: the_class, title: the_title)) 40 link_to('', url, html_options.merge(class: the_class, title: the_title))
42 end 41 end
@@ -91,7 +90,7 @@ module ApplicationHelper @@ -91,7 +90,7 @@ module ApplicationHelper
91 if html_options.has_key?(:class) 90 if html_options.has_key?(:class)
92 the_class << ' ' << html_options[:class] 91 the_class << ' ' << html_options[:class]
93 end 92 end
94 - content_tag('div', '', html_options.merge(class: the_class)) 93 + content_tag(:div, '', html_options.merge(class: the_class))
95 end 94 end
96 95
97 def icon_button(type, text, url, html_options = {}) 96 def icon_button(type, text, url, html_options = {})
@@ -104,16 +103,21 @@ module ApplicationHelper @@ -104,16 +103,21 @@ module ApplicationHelper
104 the_class << ' ' << html_options[:class] 103 the_class << ' ' << html_options[:class]
105 end 104 end
106 105
107 - link_to(content_tag('span', text), url, html_options.merge(class: the_class, title: text)) 106 + link_to(content_tag(:span, text), url, html_options.merge(class: the_class, title: text))
108 end 107 end
109 108
110 - def button_bar(options = {}, &block) 109 + def button_bar options = {}, &block
111 return super unless theme_responsive? 110 return super unless theme_responsive?
112 111
113 - options[:class].nil? ?  
114 - options[:class]='button-bar' :  
115 - options[:class]+=' button-bar'  
116 - concat(content_tag('div', capture(&block).to_s + tag('br', style: 'clear: left;'), options)) 112 + options[:class] ||= ''
  113 + options[:class] << 'button-bar'
  114 +
  115 + content_tag :div, options do
  116 + [
  117 + capture(&block).to_s,
  118 + tag('br', style: 'clear: left;'),
  119 + ].safe_join
  120 + end
117 end 121 end
118 122
119 def expirable_button(content, action, text, url, html_options = {}) 123 def expirable_button(content, action, text, url, html_options = {})
@@ -128,143 +132,93 @@ module ApplicationHelper @@ -128,143 +132,93 @@ module ApplicationHelper
128 def search_contents_menu 132 def search_contents_menu
129 return super unless theme_responsive? 133 return super unless theme_responsive?
130 134
131 - host = environment.default_hostname  
132 -  
133 - output = '<li class="dropdown">'  
134 - output += link_to(_('Contents'), '#', :class=>"dropdown-toggle icon-menu-articles", title: _('Contents'), :'data-toggle'=>"dropdown", :'data-hover'=>"dropdown")  
135 - output += '<ul class="dropdown-menu" role="menu">'  
136 -  
137 - output += '<li>' + link_to(_('All contents'), {host: host, controller: "search", action: 'contents', category_path: ''}) + '</li>'  
138 - 135 + host = environment.default_hostname
139 links = [ 136 links = [
140 - {s_('contents|More recent') => {:href => url_for({host: host, :controller => 'search', :action => 'contents', :filter => 'more_recent'})}},  
141 - {s_('contents|More viewed') => {:href => url_for({host: host, :controller => 'search', :action => 'contents', :filter => 'more_popular'})}},  
142 - {s_('contents|Most commented') => {:href => url_for({host: host, :controller => 'search', :action => 'contents', :filter => 'more_comments'})}} 137 + [_('All contents'), {host: host, controller: :search, action: :contents, category_path: ''}],
  138 + [s_('contents|More recent'), {host: host, controller: :search, action: :contents, filter: 'more_recent'}],
  139 + [s_('contents|More viewed'), {host: host, controller: :search, action: :contents, filter: 'more_popular'}],
  140 + [s_('contents|Most commented'), {host: host, controller: :search, action: :contents, filter: 'more_comments'}],
143 ] 141 ]
144 if logged_in? 142 if logged_in?
145 - links.push(_('New content') => modal_options({href: url_for({controller: 'cms', action: 'new', profile: current_user.login, cms: true})})) 143 + links.push [_('New content'), '', modal_options({href: url_for({controller: 'cms', action: 'new', profile: current_user.login, cms: true})})]
146 end 144 end
147 145
148 - links.each do |link|  
149 - link.each do |name, options|  
150 - output += content_tag(:li,content_tag(:a,name,options))  
151 - end 146 + content_tag :li, class: 'dropdown' do
  147 + [
  148 + link_to('#', class: 'dropdown-toggle icon-menu-articles', title: _('Contents'), data: {toggle: 'dropdown', hover: 'dropdown'}) do
  149 + content_tag :span, _('Contents')
  150 + end,
  151 + content_tag(:ul, class: 'dropdown-menu', role: 'menu') do
  152 + links.map do |(name, url)|
  153 + content_tag :li do
  154 + link_to name, url
  155 + end
  156 + end.safe_join
  157 + end,
  158 + ].safe_join
152 end 159 end
153 -  
154 - output += '</ul>'  
155 - output += '</li>'  
156 - output  
157 end 160 end
158 161
159 def search_people_menu 162 def search_people_menu
160 return super unless theme_responsive? 163 return super unless theme_responsive?
161 164
162 - host = environment.default_hostname  
163 -  
164 - output = '<li class="dropdown">'  
165 - output += link_to(_('People'), '#', :class=>"dropdown-toggle icon-menu-people", title: _('People'), :'data-toggle'=>"dropdown", :'data-hover'=>"dropdown")  
166 - output += '<ul class="dropdown-menu" role="menu">'  
167 -  
168 - output += '<li>' + link_to(_('All people'), {host: host, controller: "search", action: 'people', category_path: ''}) + '</li>'  
169 - 165 + host = environment.default_hostname
170 links = [ 166 links = [
171 - {s_('people|More recent') => {:href => url_for({host: host, :controller => 'search', :action => 'people', :filter => 'more_recent'})}},  
172 - {s_('people|More active') => {:href => url_for({host: host, :controller => 'search', :action => 'people', :filter => 'more_active'})}},  
173 - {s_('people|More popular') => {:href => url_for({host: host, :controller => 'search', :action => 'people', :filter => 'more_popular'})}} 167 + [_('All people'), {host: host, controller: :search, action: :people, category_path: ''}],
  168 + [s_('people|More recent'), {host: host, controller: :search, action: :people, filter: 'more_recent'}],
  169 + [s_('people|More active'), {host: host, controller: :search, action: :people, filter: 'more_active'}],
  170 + [s_('people|More popular'), {host: host, controller: :search, action: :people, filter: 'more_popular'}],
174 ] 171 ]
175 if logged_in? 172 if logged_in?
176 - links.push(_('My friends') => {href: url_for({profile: current_user.login, controller: 'friends'})})  
177 - links.push(_('Invite friends') => {href: url_for({profile: current_user.login, controller: 'invite', action: 'friends'})}) 173 + links.push [_('My friends'), {profile: current_user.login, controller: 'friends'}]
  174 + links.push [_('Invite friends'), {profile: current_user.login, controller: 'invite', action: 'friends'}]
178 end 175 end
179 176
180 - links.each do |link|  
181 - link.each do |name, url|  
182 - output += '<li><a href="'+url[:href]+'">' + name + '</a></li>'  
183 - end 177 + content_tag :li, class: 'dropdown' do
  178 + [
  179 + link_to('#', class: "dropdown-toggle icon-menu-people", title: _('People'), data: {toggle: 'dropdown', hover: 'dropdown'}) do
  180 + content_tag :span, _('People')
  181 + end,
  182 + content_tag(:ul, class: 'dropdown-menu', role: 'menu') do
  183 + links.map do |params|
  184 + content_tag :li do
  185 + link_to *params
  186 + end
  187 + end.safe_join
  188 + end
  189 + ].safe_join
184 end 190 end
185 -  
186 - output += '</ul>'  
187 - output += '</li>'  
188 - output  
189 end 191 end
190 192
191 def search_communities_menu 193 def search_communities_menu
192 return super unless theme_responsive? 194 return super unless theme_responsive?
193 195
194 - host = environment.default_hostname  
195 -  
196 - output = '<li class="dropdown">'  
197 - output += link_to(_('Communities'), '#', :class=>"dropdown-toggle icon-menu-community", title: _('Communities'), :'data-toggle'=>"dropdown", :'data-hover'=>"dropdown")  
198 - output += '<ul class="dropdown-menu" role="menu">'  
199 -  
200 - output += '<li>' + link_to(_('All communities'), {host: host, controller: "search", action: 'communities', category_path: ''}) + '</li>'  
201 - 196 + host = environment.default_hostname
202 links = [ 197 links = [
203 - {s_('communities|More recent') => {:href => url_for({host: host, :controller => 'search', :action => 'communities', :filter => 'more_recent'})}},  
204 - {s_('communities|More active') => {:href => url_for({host: host, :controller => 'search', :action => 'communities', :filter => 'more_active'})}},  
205 - {s_('communities|More popular') => {:href => url_for({host: host, :controller => 'search', :action => 'communities', :filter => 'more_popular'})}} 198 + [_('All communities'), {host: host, controller: :search, action: :communities, category_path: ''}],
  199 + [s_('communities|More recent'), {host: host, controller: :search, action: :communities, filter: 'more_recent'}],
  200 + [s_('communities|More active'), {host: host, controller: :search, action: :communities, filter: 'more_active'}],
  201 + [s_('communities|More popular'), {host: host, controller: :search, action: :communities, filter: 'more_popular'}],
206 ] 202 ]
207 if logged_in? 203 if logged_in?
208 - links.push(_('My communities') => {href: url_for({profile: current_user.login, controller: 'memberships'})})  
209 - links.push(_('New community') => {href: url_for({profile: current_user.login, controller: 'memberships', action: 'new_community'})}) 204 + links.push [_('My communities'), {profile: current_user.login, controller: 'memberships'}]
  205 + links.push [_('New community'), {profile: current_user.login, controller: 'memberships', action: 'new_community'}]
210 end 206 end
211 207
212 - links.each do |link|  
213 - link.each do |name, url|  
214 - output += '<li><a href="'+url[:href]+'">' + name + '</a></li>'  
215 - end  
216 - end  
217 -  
218 - output += '</ul>'  
219 - output += '</li>'  
220 - output  
221 - end  
222 -  
223 - def usermenu_logged_in  
224 - return super unless theme_responsive?  
225 -  
226 - output = '<li class="dropdown">'  
227 -  
228 - pending_tasks_count = ''  
229 - count = user ? Task.to(user).pending.count : -1  
230 - if count > 0  
231 - pending_tasks_count = "<span class=\"badge\" onclick=\"document.location='#{url_for(user.tasks_url)}'\" title=\"#{_("Manage your pending tasks")}\">" + count.to_s + '</span>' 208 + content_tag :li, class: 'dropdown' do
  209 + [
  210 + link_to('#', class: 'dropdown-toggle icon-menu-community', title: _('Communities'), data: {toggle: 'dropdown', hover: 'dropdown'}) do
  211 + content_tag :span, _('Communities')
  212 + end,
  213 + content_tag(:ul, class: 'dropdown-menu', role: 'menu') do
  214 + links.map do |params|
  215 + content_tag :li do
  216 + link_to *params
  217 + end
  218 + end.safe_join
  219 + end
  220 + ].safe_join
232 end 221 end
233 -  
234 - output += link_to("<img class=\"menu-user-gravatar\" src=\"#{user.profile_custom_icon(gravatar_default)}\"><strong>#{user.identifier}</strong> #{pending_tasks_count}", '#', id: "homepage-link", title: _('Go to your homepage'), :class=>"dropdown-toggle", :'data-toggle'=>"dropdown", :'data-target'=>"", :'data-hover'=>"dropdown")  
235 -  
236 -  
237 - output += '<ul class="dropdown-menu" role="menu">'  
238 - output += '<li>' + link_to('<span class="icon-person">'+_('Profile')+'</span>', user.public_profile_url, id: "homepage-link", title: _('Go to your homepage')) + '</li>'  
239 -  
240 - output += '<li class="divider"></li>'  
241 -  
242 - #TODO  
243 - #render_environment_features(:usermenu) +  
244 -  
245 - #admin_link  
246 - admin_link_str = admin_link  
247 - output += admin_link_str.present? ? '<li>' + admin_link_str + '</li>' : ''  
248 -  
249 - #control_panel link  
250 - output += '<li>' + link_to('<i class="icon-menu-ctrl-panel"></i><strong>' + _('Control panel') + '</strong>', user.admin_url, class: 'ctrl-panel', title: _("Configure your personal account and content")) + '</li>'  
251 -  
252 - output += chat_user_status_menu('icon-menu-offline', _('Offline'))  
253 -  
254 - #manage_enterprises  
255 - manage_enterprises_str = manage_enterprises  
256 - output += manage_enterprises_str.present? ? '<li>' + manage_enterprises_str + '</li>' : ''  
257 -  
258 - #manage_communities  
259 - manage_communities_str = manage_communities  
260 - output += manage_communities_str.present? ? '<li>' + manage_communities_str + '</li>' : ''  
261 -  
262 - output += '<li class="divider"></li>'  
263 -  
264 - output += '<li>' + link_to('<i class="icon-menu-logout"></i><strong>' + _('Logout') + '</strong>', { controller: 'account', action: 'logout'} , id: "logout", title: _("Leave the system")) + '</li>'  
265 -  
266 - output += '</ul>'  
267 - output  
268 end 222 end
269 223
270 def manage_link(list, kind, title) 224 def manage_link(list, kind, title)
@@ -274,17 +228,22 @@ module ApplicationHelper @@ -274,17 +228,22 @@ module ApplicationHelper
274 link_to_all = nil 228 link_to_all = nil
275 if list.count > 5 229 if list.count > 5
276 list = list.first(5) 230 list = list.first(5)
277 - link_to_all = link_to(content_tag('strong', _('See all')), :controller => 'memberships', :profile => user.identifier) 231 + link_to_all = link_to(content_tag(:strong, _('See all')), controller: 'memberships', profile: user.identifier)
278 end 232 end
279 link = list.map do |element| 233 link = list.map do |element|
280 - link_to(content_tag('strong', element.short_name(25)), element.admin_url, :class => "icon-menu-"+element.class.identification.underscore, :title => _('Manage %s') % element.short_name) 234 + link_to(content_tag(:strong, element.short_name(25)), element.admin_url, class: "icon-menu-"+element.class.identification.underscore, title: _('Manage %s') % element.short_name)
281 end 235 end
282 if link_to_all 236 if link_to_all
283 link << link_to_all 237 link << link_to_all
284 end 238 end
285 - content_tag('li', nil, class: 'divider') +  
286 - content_tag('li', title, class: 'dropdown-header') +  
287 - link.map{ |l| content_tag 'li', l }.join 239 +
  240 + [
  241 + content_tag(:li, nil, class: 'divider'),
  242 + content_tag(:li, title, class: 'dropdown-header'),
  243 + link.map do |l|
  244 + content_tag :li, l
  245 + end.safe_join
  246 + ].safe_join
288 end 247 end
289 end 248 end
290 249
@@ -301,15 +260,24 @@ module ApplicationHelper @@ -301,15 +260,24 @@ module ApplicationHelper
301 unless html_options[:style].present? and html_options[:style] =~ /display *: *none/ 260 unless html_options[:style].present? and html_options[:style] =~ /display *: *none/
302 menu_content << '<br/>' unless first 261 menu_content << '<br/>' unless first
303 first = false 262 first = false
304 - menu_content << content_tag(:a,link_label,html_options) 263 + menu_content << content_tag(:a, link_label,html_options)
305 end 264 end
306 end 265 end
307 end 266 end
308 end 267 end
309 268
310 option = html_options.delete(:option) || 'default' 269 option = html_options.delete(:option) || 'default'
311 - size = html_options.delete(:size) || 'xs'  
312 - "<button class='btn btn-#{size} btn-#{option} btn-popover-menu icon-parent-folder' data-toggle='popover' data-html='true' data-placement='top' data-trigger='focus' data-content=\""+CGI::escapeHTML(menu_content)+'" data-title="'+menu_title+'"></button>' 270 + size = html_options.delete(:size) || 'xs'
  271 + button_tag '',
  272 + class: "btn btn-#{size} btn-#{option} btn-popover-menu icon-parent-folder",
  273 + data: {
  274 + html: 'true',
  275 + toggle: 'popover',
  276 + placement: 'top',
  277 + trigger: 'focus',
  278 + content: menu_content,
  279 + title: menu_title,
  280 + }
313 end 281 end
314 282
315 283
@@ -406,12 +374,7 @@ module ApplicationHelper @@ -406,12 +374,7 @@ module ApplicationHelper
406 end 374 end
407 375
408 include ResponsiveChecks 376 include ResponsiveChecks
409 - if RUBY_VERSION >= '2.0.0'  
410 - prepend ResponsiveMethods  
411 - else  
412 - extend ActiveSupport::Concern  
413 - included { include ResponsiveMethods }  
414 - end 377 + prepend ResponsiveMethods
415 378
416 # TODO: apply theme_responsive? condition 379 # TODO: apply theme_responsive? condition
417 class NoosferoFormBuilder 380 class NoosferoFormBuilder
@@ -440,13 +403,16 @@ module ApplicationHelper @@ -440,13 +403,16 @@ module ApplicationHelper
440 403
441 if options[:horizontal] 404 if options[:horizontal]
442 label_html = content_tag :label, gettext(text), class: 'control-label col-sm-3 col-md-2 col-lg-2', for: field_id 405 label_html = content_tag :label, gettext(text), class: 'control-label col-sm-3 col-md-2 col-lg-2', for: field_id
443 - result = content_tag :div, label_html + content_tag('div',field_html, class: 'col-sm-9 col-md-6 col-lg-6'), class: 'form-group' 406 + content = [
  407 + label_html,
  408 + content_tag(:div, field_html.html_safe, class: 'col-sm-9 col-md-6 col-lg-6'),
  409 + ].safe_join
  410 + content_tag :div, content, class: 'form-group'
444 else 411 else
445 label_html = content_tag :label, gettext(text), class: 'control-label', for: field_id 412 label_html = content_tag :label, gettext(text), class: 'control-label', for: field_id
446 - result = content_tag :div, label_html + field_html, class: 'form-group' 413 + content = [label_html, field_html.html_safe].safe_join
  414 + content_tag :div, content, class: 'form-group'
447 end 415 end
448 -  
449 - result  
450 end 416 end
451 end 417 end
452 418
plugins/responsive/lib/ext/boxes_helper.rb
@@ -62,12 +62,7 @@ module BoxesHelper @@ -62,12 +62,7 @@ module BoxesHelper
62 end 62 end
63 63
64 include ResponsiveChecks 64 include ResponsiveChecks
65 - if RUBY_VERSION >= '2.0.0'  
66 - prepend ResponsiveMethods  
67 - else  
68 - extend ActiveSupport::Concern  
69 - included { include ResponsiveMethods }  
70 - end 65 + prepend ResponsiveMethods
71 66
72 end 67 end
73 68
plugins/responsive/lib/ext/chat_helper.rb
@@ -23,12 +23,7 @@ module ChatHelper @@ -23,12 +23,7 @@ module ChatHelper
23 end 23 end
24 24
25 include ResponsiveChecks 25 include ResponsiveChecks
26 - if RUBY_VERSION >= '2.0.0'  
27 - prepend ResponsiveMethods  
28 - else  
29 - extend ActiveSupport::Concern  
30 - included { include ResponsiveMethods }  
31 - end 26 + prepend ResponsiveMethods
32 27
33 end 28 end
34 29
plugins/responsive/lib/ext/forms_helper.rb
@@ -11,8 +11,15 @@ module FormsHelper @@ -11,8 +11,15 @@ module FormsHelper
11 return super unless theme_responsive? 11 return super unless theme_responsive?
12 12
13 options[:id] ||= 'radio-' + FormsHelper.next_id_number 13 options[:id] ||= 'radio-' + FormsHelper.next_id_number
14 - content_tag( 'label', radio_button_tag( name, value, checked, options ) + ' ' +  
15 - human_name, for: options[:id], class: 'radio-inline' ) 14 + content_tag :div, class:'radio-inline' do
  15 + content_tag :label, for: options[:id] do
  16 + [
  17 + radio_button_tag(name, value, checked, options),
  18 + ' ',
  19 + human_name,
  20 + ].safe_join
  21 + end
  22 + end
16 end 23 end
17 24
18 # add -inline class 25 # add -inline class
@@ -20,8 +27,18 @@ module FormsHelper @@ -20,8 +27,18 @@ module FormsHelper
20 return super unless theme_responsive? 27 return super unless theme_responsive?
21 28
22 options[:id] ||= 'checkbox-' + FormsHelper.next_id_number 29 options[:id] ||= 'checkbox-' + FormsHelper.next_id_number
23 - hidden_field_tag(name, '0') +  
24 - content_tag( 'label', check_box_tag( name, value, checked, options ) + ' ' + human_name, for: options[:id], class: 'checkbox-inline') 30 + [
  31 + hidden_field_tag(name, '0'),
  32 + content_tag(:div, class:'checkbox-inline') do
  33 + content_tag :label, for: options[:id] do
  34 + [
  35 + check_box_tag(name, value, checked, options),
  36 + ' ',
  37 + human_name,
  38 + ].safe_join
  39 + end
  40 + end
  41 + ].safe_join
25 end 42 end
26 43
27 def submit_button(type, label, html_options = {}) 44 def submit_button(type, label, html_options = {})
@@ -43,42 +60,34 @@ module FormsHelper @@ -43,42 +60,34 @@ module FormsHelper
43 html_options.delete(:cancel) 60 html_options.delete(:cancel)
44 bt_submit = button_tag(label, html_options.merge(class: the_class)) 61 bt_submit = button_tag(label, html_options.merge(class: the_class))
45 62
46 - bt_submit + bt_cancel 63 + [bt_submit + bt_cancel].safe_join
47 end 64 end
48 65
49 - %w[select select_tag text_field_tag number_field_tag password_field_tag].each do |method|  
50 - define_method method do |*args, &block|  
51 - #return super(*args, &block) unless theme_responsive? 66 + bt_submit + bt_cancel
  67 + end
52 68
53 - options = args.extract_options!  
54 - if options['class']  
55 - options['class'] = "#{options['class']} form-control"  
56 - else  
57 - options[:class] = "#{options[:class]} form-control"  
58 - end  
59 - super(*(args << options), &block) 69 + %w[
  70 + select_tag
  71 + text_field_tag text_area_tag
  72 + number_field_tag password_field_tag url_field_tag email_field_tag
  73 + month_field_tag date_field_tag
  74 + ].each do |method|
  75 + define_method method do |name, value=nil, options={}, &block|
  76 + responsive_add_field_class! options
  77 + super(name, value, options, &block).html_safe
60 end 78 end
61 end 79 end
62 %w[select_month select_year].each do |method| 80 %w[select_month select_year].each do |method|
63 define_method method do |date, options={}, html_options={}| 81 define_method method do |date, options={}, html_options={}|
64 - if html_options['class']  
65 - html_options['class'] = "#{html_options['class']} form-control"  
66 - else  
67 - html_options[:class] = "#{html_options[:class]} form-control"  
68 - end  
69 - super date, options, html_options 82 + responsive_add_field_class! html_options
  83 + super(date, options, html_options).html_safe
70 end 84 end
71 end 85 end
72 86
73 end 87 end
74 88
75 include ResponsiveChecks 89 include ResponsiveChecks
76 - if RUBY_VERSION >= '2.0.0'  
77 - prepend ResponsiveMethods  
78 - else  
79 - extend ActiveSupport::Concern  
80 - included { include ResponsiveMethods }  
81 - end 90 + prepend ResponsiveMethods
82 91
83 end 92 end
84 93
plugins/responsive/lib/ext/input_helper.rb
@@ -4,16 +4,15 @@ module InputHelper @@ -4,16 +4,15 @@ module InputHelper
4 protected 4 protected
5 5
6 def input_group_addon addon, options = {}, &block 6 def input_group_addon addon, options = {}, &block
7 - content_tag :div,  
8 - content_tag(:span, addon, class: 'input-group-addon') + yield,  
9 - class: 'input-group' 7 + content_tag :div, class: 'input-group' do
  8 + [
  9 + content_tag(:span, addon, class: 'input-group-addon'),
  10 + capture(&block),
  11 + ].safe_join
  12 + end
10 end 13 end
11 14
12 end 15 end
13 16
14 -module ApplicationHelper  
15 -  
16 - include InputHelper  
17 -  
18 -end 17 +ApplicationHelper.include InputHelper
19 18
plugins/responsive/lib/responsive_plugin.rb
@@ -13,7 +13,7 @@ class ResponsivePlugin &lt; Noosfero::Plugin @@ -13,7 +13,7 @@ class ResponsivePlugin &lt; Noosfero::Plugin
13 end 13 end
14 14
15 def head_ending 15 def head_ending
16 - '<meta name="viewport" content="width=device-width, initial-scale=1">' 16 + '<meta name="viewport" content="width=device-width, initial-scale=1">'.html_safe
17 end 17 end
18 18
19 def body_ending 19 def body_ending
plugins/responsive/views/invite/select_friends.html.erb
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 <%= labelled_form_field(_('Invitation text:'), text_area_tag(:mail_template, @mail_template, :cols => 72, :rows => 8)) %> 39 <%= labelled_form_field(_('Invitation text:'), text_area_tag(:mail_template, @mail_template, :cols => 72, :rows => 8)) %>
40 </div> 40 </div>
41 41
42 - <% button_bar do %> 42 + <%= button_bar do %>
43 <%= submit_button(:ok, _("Invite my friends!")) %> 43 <%= submit_button(:ok, _("Invite my friends!")) %>
44 <% end %> 44 <% end %>
45 <% end %> 45 <% end %>
plugins/responsive/views/layouts/_menu_responsive.html.erb
@@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
1 -<div>  
2 -<nav id="top-bar" class="navbar navbar-default" role="navigation">  
3 - <div class="container">  
4 - <!-- Brand and toggle get grouped for better mobile display -->  
5 - <div class="navbar-header">  
6 - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-user-collapse">  
7 - <span class="sr-only"><%= _('User menu') %></span>  
8 - <span class="fa fa-user navbar-toggle-icon"></span>  
9 - </button>  
10 - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-search-collapse">  
11 - <span class="sr-only"><%= _('Search') %></span>  
12 - <span class="fa fa-search navbar-toggle-icon"></span>  
13 - </button>  
14 - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-navigation-collapse">  
15 - <span class="sr-only"><%= _('Navigation') %></span>  
16 - <span class="icon-bar"></span>  
17 - <span class="icon-bar"></span>  
18 - <span class="icon-bar"></span>  
19 - </button>  
20 -  
21 - </div>  
22 -  
23 - <!-- Collect the nav links, forms, and other content for toggling -->  
24 - <div class="collapse navbar-collapse" id="navbar-navigation-collapse">  
25 - <ul class="nav navbar-nav menu-navigation">  
26 - <%= theme_extra_navigation %>  
27 - <li class="dropdown" id="search-dropdown-menu">  
28 - <a href="#" class="dropdown-toggle icon-search" data-hover="dropdown" data-toggle="dropdown" title="<%= _('Search') %>"><span><%= _('Search') %></span></a>  
29 - <ul class="dropdown-menu" role="menu">  
30 - <li>  
31 - <form action="/search" id="top-search" method="get" role="search">  
32 - <div class="form-group col-lg-12 col-md-12 col-sm-12">  
33 - <input name="query" title="<%=_('Search...')%>" placeholder="<%=_('Search...')%>" type="text" class="form-control input-sm"/>  
34 - </div>  
35 - </form>  
36 - </li>  
37 - </ul>  
38 - </li>  
39 - </ul>  
40 - </div>  
41 - <div class="collapse navbar-collapse" id="navbar-search-collapse">  
42 - <form action="/search" id="top-search" class="navbar-form navbar-left" method="get" role="search">  
43 - <div class="form-group">  
44 - <input name="query" title="<%=_('Search...')%>" placeholder="<%=_('Search...')%>" type="text" class="form-control"/>  
45 - </div>  
46 - </form>  
47 - </div>  
48 - <div class="collapse navbar-collapse" id="navbar-user-collapse">  
49 - <ul class="nav navbar-nav pull-right">  
50 - <% if user.present? %>  
51 - <%= usermenu_logged_in %>  
52 - <% else %>  
53 - <li>  
54 - <%= modal_inline_link_to('<i class="icon-menu-login"></i><strong>' + _('Login') + '</strong>', login_url, '#inlineLoginBox', :id => 'link_login') %>  
55 - <%= @plugins.dispatch(:alternative_authentication_link).collect { |content| instance_exec(&content) }.join("") #TODO review this  
56 - %>  
57 - </li>  
58 - <% unless @plugins.dispatch(:allow_user_registration).include?(false) %>  
59 - <li>  
60 - <%= link_to('<strong>' + _('Sign up') + '</strong>', :controller => 'account', :action => 'signup')%>  
61 - </li>  
62 - <% end %>  
63 - <% end %>  
64 - </ul>  
65 - </div><!-- /.navbar-collapse -->  
66 - </div><!-- /.container-fluid -->  
67 -</nav>  
68 -</div>  
69 -<div id='inlineLoginBox' style='display: none;'>  
70 - <%= render :file => 'account/login', :locals => { :is_thickbox => true } %>  
71 -</div>  
plugins/responsive/views/layouts/_menu_responsive.html.slim 0 → 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +div
  2 + nav#top-bar.navbar.navbar-default.navbar-static-top role="navigation"
  3 + .container
  4 + /! Brand and toggle get grouped for better mobile display
  5 + .navbar-header
  6 + button.navbar-toggle data-target="#navbar-user-collapse" data-toggle="collapse" type="button"
  7 + span.sr-only= _('User menu')
  8 + span.fa.fa-user.navbar-toggle-icon
  9 +
  10 + button.navbar-toggle data-target="#navbar-search-collapse" data-toggle="collapse" type="button"
  11 + span.sr-only= _('Search')
  12 + span.fa.fa-search.navbar-toggle-icon
  13 +
  14 + button.navbar-toggle data-target="#navbar-navigation-collapse" data-toggle="collapse" type="button"
  15 + span.sr-only= _('Navigation')
  16 + span.icon-bar
  17 + span.icon-bar
  18 + span.icon-bar
  19 + a.navbar-brand href="#{environment.top_url}"
  20 + = theme_site_title
  21 + span#navbar-brand-site-title
  22 + = h @environment.name
  23 +
  24 + /! Collect the nav links, forms, and other content for toggling
  25 + #navbar-navigation-collapse.collapse.navbar-collapse
  26 + ul.nav.navbar-nav.menu-navigation
  27 + = theme_extra_navigation
  28 + li#search-dropdown-menu.dropdown
  29 + a.dropdown-toggle.icon-search data-hover="dropdown" data-toggle="dropdown" href="#" title="#{_('Search')}"
  30 + span= _('Search')
  31 + ul.dropdown-menu role="menu"
  32 + li
  33 + form#top-search action="/search" method="get" role="search"
  34 + .form-group.col-lg-12.col-md-12.col-sm-12
  35 + input.form-control.input-sm name="query" placeholder="#{_('Search...')}" title="#{_('Search...')}" type="text" /
  36 +
  37 + #navbar-search-collapse.collapse.navbar-collapse
  38 + form#top-search.navbar-form.navbar-left action="/search" method="get" role="search"
  39 + .form-group
  40 + input.form-control name="query" placeholder="#{_('Search...')}" title="#{_('Search...')}" type="text" /
  41 +
  42 + #navbar-user-collapse.collapse.navbar-collapse
  43 + ul.nav.navbar-nav.pull-right
  44 + - if user.present?
  45 + = render 'layouts/usermenu_logged_in'
  46 + - else
  47 + li
  48 + = modal_inline_link_to "<i class='icon-menu-login'></i><strong>#{_('Login')}</strong>".html_safe, login_url, '#inlineLoginBox', id: 'link_login'
  49 + = @plugins.dispatch(:alternative_authentication_link).collect{ |content| instance_exec(&content) }.safe_join
  50 + - unless @plugins.dispatch(:allow_user_registration).include? false
  51 + li= link_to content_tag(:strong, _('Sign up')), controller: :account, action: :signup
  52 +
  53 +#inlineLoginBox style="display: none;"
  54 + = render file: 'account/login', locals: {is_thickbox: true}
plugins/responsive/views/layouts/_usermenu_logged_in.html.slim 0 → 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +- pending_tasks_count = Task.to(user).pending.count if user
  2 +
  3 +li.dropdown
  4 + = link_to '#', id: "homepage-link", title: _('Go to your homepage'), class: 'dropdown-toggle', data: {toggle: 'dropdown', hover: 'dropdown'}
  5 + = image_tag user.profile_custom_icon(gravatar_default), class: 'menu-user-gravatar'
  6 + = content_tag :strong, user.identifier
  7 + - if pending_tasks_count
  8 + span class='badge' onclick="document.location='#{url_for(user.tasks_url)}'" title="#{_("Manage your pending tasks")}"
  9 + count
  10 +
  11 + ul class='dropdown-menu' role='menu'
  12 + li
  13 + = link_to user.public_profile_url, id: "homepage-link", title: _('Go to your homepage')
  14 + span class='icon-person' = _('Profile')
  15 + li.divider
  16 +
  17 + /TODO
  18 + /= render_environment_features(:usermenu)
  19 +
  20 + li = admin_link
  21 +
  22 + li
  23 + = link_to user.admin_url, class: 'ctrl-panel', title: _("Configure your personal account and content")
  24 + i class='icon-menu-ctrl-panel'
  25 + strong = _('Control panel')
  26 +
  27 + - if environment.enabled? 'xmpp_chat'
  28 + = responsive_chat_user_status_menu 'icon-menu-offline', _('Offline')
  29 +
  30 + li = manage_enterprises
  31 + li = manage_communities
  32 +
  33 + li.divider
  34 +
  35 + li
  36 + = link_to({controller: 'account', action: 'logout'}, id: "logout", title: _("Leave the system"))
  37 + i class='icon-menu-logout'
  38 + strong = _('Logout')
  39 +
plugins/responsive/views/layouts/application-responsive.html.erb
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%= html_language %>" lang="<%= html_language %>" class="<%= h html_tag_classes %>"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%= html_language %>" lang="<%= html_language %>" class="<%= h html_tag_classes %>">
3 <head> 3 <head>
4 - <title><%= h page_title %></title> 4 + <title><%= h page_title.html_safe %></title>
5 <%= yield(:feeds) %> 5 <%= yield(:feeds) %>
6 <!--<meta http-equiv="refresh" content="1"/>--> 6 <!--<meta http-equiv="refresh" content="1"/>-->
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <%= 22 <%=
23 @plugins.dispatch(:head_ending).map do |content| 23 @plugins.dispatch(:head_ending).map do |content|
24 if content.respond_to?(:call) then instance_exec(&content).to_s.html_safe else content.to_s.html_safe end 24 if content.respond_to?(:call) then instance_exec(&content).to_s.html_safe else content.to_s.html_safe end
25 - end.join("\n") 25 + end.safe_join
26 %> 26 %>
27 27
28 <script type="text/javascript"> 28 <script type="text/javascript">
@@ -68,7 +68,7 @@ @@ -68,7 +68,7 @@
68 <%= 68 <%=
69 @plugins.dispatch(:body_ending).map do |content| 69 @plugins.dispatch(:body_ending).map do |content|
70 if content.respond_to?(:call) then instance_exec(&content).html_safe else content.html_safe end 70 if content.respond_to?(:call) then instance_exec(&content).html_safe else content.html_safe end
71 - end.join("\n") 71 + end.safe_join
72 %> 72 %>
73 </body> 73 </body>
74 </html> 74 </html>
plugins/responsive/views/manage_products/_edit_name.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 </div> 12 </div>
13 </div> 13 </div>
14 14
15 - <% button_bar do %> 15 + <%= button_bar do %>
16 <%= submit_button :save, _('Save') %> 16 <%= submit_button :save, _('Save') %>
17 <%= cancel_edit_product_link(@product, 'name') %> 17 <%= cancel_edit_product_link(@product, 'name') %>
18 <% end %> 18 <% end %>
plugins/send_email/views/send_email_plugin_admin/index.html.erb
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <%= form_for :environment, :url => {:action => 'index'}, :html => {:method => 'post'} do |f| %> 3 <%= form_for :environment, :url => {:action => 'index'}, :html => {:method => 'post'} do |f| %>
4 <%= labelled_form_field(_("E-Mail addresses you want to allow to send"), f.text_area(:send_email_plugin_allow_to, :rows => 8)) %> 4 <%= labelled_form_field(_("E-Mail addresses you want to allow to send"), f.text_area(:send_email_plugin_allow_to, :rows => 8)) %>
5 <small><%= _('(list of email addresses separated by comma)') %></small> 5 <small><%= _('(list of email addresses separated by comma)') %></small>
6 - <% button_bar do %> 6 + <%= button_bar do %>
7 <%= submit_button 'save', c_('Save'), :cancel => {:controller => 'plugins'} %> 7 <%= submit_button 'save', c_('Save'), :cancel => {:controller => 'plugins'} %>
8 <% end %> 8 <% end %>
9 <% end %> 9 <% end %>
plugins/site_tour/views/site_tour_plugin_admin/index.html.erb
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <%= labelled_form_field _('Tooltips (CSV format: language, group name, selector, description)'), f.text_area(:actions_csv, :style => 'width: 100%', :class => 'actions-csv') %> 5 <%= labelled_form_field _('Tooltips (CSV format: language, group name, selector, description)'), f.text_area(:actions_csv, :style => 'width: 100%', :class => 'actions-csv') %>
6 <%= labelled_form_field _('Group Triggers (CSV format: group name, selector, event (e.g. mouseenter, click))'), f.text_area(:group_triggers_csv, :style => 'width: 100%', :class => 'groups-csv', :rows => 7) %> 6 <%= labelled_form_field _('Group Triggers (CSV format: group name, selector, event (e.g. mouseenter, click))'), f.text_area(:group_triggers_csv, :style => 'width: 100%', :class => 'groups-csv', :rows => 7) %>
7 7
8 - <% button_bar do %> 8 + <%= button_bar do %>
9 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 9 <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
10 <% end %> 10 <% end %>
11 11
plugins/sniffer/views/sniffer_plugin_myprofile/edit.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 16
17 </div> 17 </div>
18 18
19 - <% button_bar do %> 19 + <%= button_bar do %>
20 <%= submit_button(:save, _('Save')) %> 20 <%= submit_button(:save, _('Save')) %>
21 <%= button :back, _('Back to control panel'), controller: 'profile_editor' %> 21 <%= button :back, _('Back to control panel'), controller: 'profile_editor' %>
22 <% end %> 22 <% end %>
plugins/social_share_privacy/test/unit/social_share_privacy_test.rb
1 require 'test_helper' 1 require 'test_helper'
2 2
3 -class SocialSharePrivacyPluginTest < ActiveSupport::TestCase 3 +class SocialSharePrivacyPluginTest < ActionView::TestCase
4 4
5 include NoosferoTestHelper 5 include NoosferoTestHelper
6 6
plugins/social_share_privacy/views/social_share_privacy_plugin_admin/index.html.erb
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 <%= _('The same order in which you arrange the social networks here will be used for arranging the share buttons.') %> 38 <%= _('The same order in which you arrange the social networks here will be used for arranging the share buttons.') %>
39 </p> 39 </p>
40 40
41 - <% button_bar do %> 41 + <%= button_bar do %>
42 <%= submit_button 'save', _('Save'), :cancel => {:controller => 'plugins', :action => 'index'} %> 42 <%= submit_button 'save', _('Save'), :cancel => {:controller => 'plugins', :action => 'index'} %>
43 <% end %> 43 <% end %>
44 <% end %> 44 <% end %>
plugins/spaminator/views/spaminator_plugin_admin/index.html.erb
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %> 30 <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %>
31 <% end %> 31 <% end %>
32 32
33 - <% button_bar do %> 33 + <%= button_bar do %>
34 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 34 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
35 <% end %> 35 <% end %>
36 </div> 36 </div>
plugins/spaminator/views/spaminator_plugin_admin/reports.html.erb
@@ -29,6 +29,6 @@ @@ -29,6 +29,6 @@
29 29
30 <br style='clear: both'/> 30 <br style='clear: both'/>
31 31
32 -<% button_bar do %> 32 +<%= button_bar do %>
33 <%= button(:back, c_('Back'), :action => 'index') %> 33 <%= button(:back, c_('Back'), :action => 'index') %>
34 <% end %> 34 <% end %>
plugins/statistics/lib/statistics_block.rb
@@ -93,6 +93,7 @@ class StatisticsBlock &lt; Block @@ -93,6 +93,7 @@ class StatisticsBlock &lt; Block
93 end 93 end
94 94
95 def products 95 def products
  96 + return [] unless environment.plugin_enabled?('ProductsPlugin')
96 if owner.kind_of?(Environment) 97 if owner.kind_of?(Environment)
97 owner.products.where("profiles.enabled = true and profiles.visible = true").count 98 owner.products.where("profiles.enabled = true and profiles.visible = true").count
98 elsif owner.kind_of?(Enterprise) 99 elsif owner.kind_of?(Enterprise)
plugins/statistics/test/unit/statistics_block_test.rb
@@ -145,6 +145,7 @@ class StatisticsBlockTest &lt; ActiveSupport::TestCase @@ -145,6 +145,7 @@ class StatisticsBlockTest &lt; ActiveSupport::TestCase
145 145
146 b = StatisticsBlock.new 146 b = StatisticsBlock.new
147 e = fast_create(Environment) 147 e = fast_create(Environment)
  148 + e.enable_plugin('ProductsPlugin')
148 149
149 e1 = fast_create(Enterprise, :visible => true, :enabled => true, :environment_id => e.id) 150 e1 = fast_create(Enterprise, :visible => true, :enabled => true, :environment_id => e.id)
150 e2 = fast_create(Enterprise, :visible => true, :enabled => false, :environment_id => e.id) 151 e2 = fast_create(Enterprise, :visible => true, :enabled => false, :environment_id => e.id)
@@ -168,6 +169,8 @@ class StatisticsBlockTest &lt; ActiveSupport::TestCase @@ -168,6 +169,8 @@ class StatisticsBlockTest &lt; ActiveSupport::TestCase
168 b = StatisticsBlock.new 169 b = StatisticsBlock.new
169 170
170 e = fast_create(Enterprise) 171 e = fast_create(Enterprise)
  172 + environment = e.environment
  173 + environment.enable_plugin('ProductsPlugin')
171 174
172 fast_create(Product, :profile_id => e.id) 175 fast_create(Product, :profile_id => e.id)
173 fast_create(Product, :profile_id => e.id) 176 fast_create(Product, :profile_id => e.id)
plugins/sub_organizations/views/sub_organizations_plugin_myprofile/index.html.erb
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 <% end %> 10 <% end %>
11 11
12 <%= form_tag do %> 12 <%= form_tag do %>
13 - <% button_bar do %> 13 + <%= button_bar do %>
14 <%= button(:add, _('Create a new sub-community'), :controller => 'memberships', :action => 'new_community', :profile => user.identifier, :sub_organizations_plugin_parent_to_be => profile.id) %> 14 <%= button(:add, _('Create a new sub-community'), :controller => 'memberships', :action => 'new_community', :profile => user.identifier, :sub_organizations_plugin_parent_to_be => profile.id) %>
15 <%= button :add, _('Register a new sub-enterprise'), :controller => 'enterprise_registration', :sub_organizations_plugin_parent_to_be => profile.id if environment.enabled?('enterprise_registration') %> 15 <%= button :add, _('Register a new sub-enterprise'), :controller => 'enterprise_registration', :sub_organizations_plugin_parent_to_be => profile.id if environment.enabled?('enterprise_registration') %>
16 <% end %> 16 <% end %>
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 :hint_text => _('Type in a search term for a group'), 21 :hint_text => _('Type in a search term for a group'),
22 :pre_populate => @tokenized_children}) %> 22 :pre_populate => @tokenized_children}) %>
23 23
24 - <% button_bar do %> 24 + <%= button_bar do %>
25 <%= submit_button('save', c_('Save'))%> 25 <%= submit_button('save', c_('Save'))%>
26 <%= button('cancel', c_('Cancel'), {:controller => 'profile_editor'})%> 26 <%= button('cancel', c_('Cancel'), {:controller => 'profile_editor'})%>
27 <% end %> 27 <% end %>
plugins/sub_organizations/views/sub_organizations_plugin_profile/_full_related_organizations.html.erb
@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 <%= pagination_links(organizations, {:param_name => 'npage', :page_links => true}) %> 51 <%= pagination_links(organizations, {:param_name => 'npage', :page_links => true}) %>
52 </div> 52 </div>
53 53
54 - <% button_bar(:class => "related-organizations-button-bar") do %> 54 + <%= button_bar(:class => "related-organizations-button-bar") do %>
55 <%= button :back, c_('Go back'), { :controller => 'profile' } %> 55 <%= button :back, c_('Go back'), { :controller => 'profile' } %>
56 <%= button :add, _("Add a new %s") % organization_type, :controller => 'sub_organizations_plugin_myprofile', :action => 'index' if logged_in? && user.has_permission?(:edit_profile, profile) && !environment.enabled?("disable_asset_#{organization_type.pluralize}") %> 56 <%= button :add, _("Add a new %s") % organization_type, :controller => 'sub_organizations_plugin_myprofile', :action => 'index' if logged_in? && user.has_permission?(:edit_profile, profile) && !environment.enabled?("disable_asset_#{organization_type.pluralize}") %>
57 57
plugins/sub_organizations/views/sub_organizations_plugin_profile/_related_organizations.html.erb
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <% if organizations.length == 0 %> 9 <% if organizations.length == 0 %>
10 <li><%= _("There are no sub-%s yet.") % organization_type.pluralize %></li> 10 <li><%= _("There are no sub-%s yet.") % organization_type.pluralize %></li>
11 <% end %> 11 <% end %>
12 - <% button_bar(:class => "related-organizations-button-bar") do %> 12 + <%= button_bar(:class => "related-organizations-button-bar") do %>
13 <%= button :back, c_('Go back'), { :controller => 'profile' } %> 13 <%= button :back, c_('Go back'), { :controller => 'profile' } %>
14 <%= button :add, _("Add a new %s") % organization_type, :controller => 'sub_organizations_plugin_myprofile', :action => 'index' if logged_in? && user.has_permission?(:edit_profile, profile) && !environment.enabled?("disable_asset_#{organization_type.pluralize}") %> 14 <%= button :add, _("Add a new %s") % organization_type, :controller => 'sub_organizations_plugin_myprofile', :action => 'index' if logged_in? && user.has_permission?(:edit_profile, profile) && !environment.enabled?("disable_asset_#{organization_type.pluralize}") %>
15 15
plugins/suppliers/views/suppliers_plugin/manage_products/_distribution_tab.html.slim
@@ -10,5 +10,5 @@ @@ -10,5 +10,5 @@
10 = check_box_tag "consumers[#{consumer.id}]", '1', distributed_consumers.include?(consumer.profile) 10 = check_box_tag "consumers[#{consumer.id}]", '1', distributed_consumers.include?(consumer.profile)
11 = label_tag "consumers[#{consumer.id}]", consumer.name 11 = label_tag "consumers[#{consumer.id}]", consumer.name
12 12
13 - - button_bar do 13 + = button_bar do
14 = submit_button :save, _('Save') 14 = submit_button :save, _('Save')
plugins/tolerance_time/views/tolerance_time_plugin_myprofile/index.html.erb
@@ -11,13 +11,13 @@ @@ -11,13 +11,13 @@
11 f.text_field(:content_tolerance, :size => 2, :style => 'font-size: 14px; text-align: right') + 11 f.text_field(:content_tolerance, :size => 2, :style => 'font-size: 14px; text-align: right') +
12 select_tag(:content_tolerance_unit, options_for_select(time_units, @content_default_unit) )) %> 12 select_tag(:content_tolerance_unit, options_for_select(time_units, @content_default_unit) )) %>
13 <% end %> 13 <% end %>
14 - <%= labelled_form_field(_('Comment edition tolerance time'),  
15 - f.text_field(:comment_tolerance, :size => 2, :style => 'font-size: 14px; text-align: right') + 14 + <%= labelled_form_field(_('Comment edition tolerance time'),
  15 + f.text_field(:comment_tolerance, :size => 2, :style => 'font-size: 14px; text-align: right') +
16 select_tag(:comment_tolerance_unit, options_for_select(time_units, @comment_default_unit) )) %> 16 select_tag(:comment_tolerance_unit, options_for_select(time_units, @comment_default_unit) )) %>
17 17
18 <%= content_tag( 'small', _('Empty means unlimited and zero means right away.') ) %> 18 <%= content_tag( 'small', _('Empty means unlimited and zero means right away.') ) %>
19 19
20 - <% button_bar do %> 20 + <%= button_bar do %>
21 <%= submit_button('save', c_('Save'))%> 21 <%= submit_button('save', c_('Save'))%>
22 <%= button('back', c_('Back'), {:controller => 'profile_editor'})%> 22 <%= button('back', c_('Back'), {:controller => 'profile_editor'})%>
23 <% end %> 23 <% end %>
plugins/vote/views/vote_plugin_admin/index.html.erb
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 <%= labelled_form_field _('Limit of voters to display:'), f.text_field(:voters_limit, :size => 3) %> 13 <%= labelled_form_field _('Limit of voters to display:'), f.text_field(:voters_limit, :size => 3) %>
14 </strong> 14 </strong>
15 15
16 - <% button_bar do %> 16 + <%= button_bar do %>
17 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> 17 <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
18 <% end %> 18 <% end %>
19 19
plugins/work_assignment/views/work_assignment_plugin_myprofile/edit_visibility.html.erb
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 <%= visibility_options(@article, @tokenized_children) %> 12 <%= visibility_options(@article, @tokenized_children) %>
13 </div> 13 </div>
14 14
15 - <% button_bar do %> 15 + <%= button_bar do %>
16 <%= submit_button :save, _('Save') %> 16 <%= submit_button :save, _('Save') %>
17 <%= button :cancel, _('Cancel'), @back_to %> 17 <%= button :cancel, _('Cancel'), @back_to %>
18 <% end %> 18 <% end %>
test/api/activities_test.rb
@@ -27,8 +27,8 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -27,8 +27,8 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
27 assert_equal 403, last_response.status 27 assert_equal 403, last_response.status
28 end 28 end
29 29
30 - should 'not get community activities if not member' do  
31 - community = fast_create(Community) 30 + should 'not get community activities if not member and community is private' do
  31 + community = fast_create(Community, public_profile: false)
32 other_person = fast_create(Person) 32 other_person = fast_create(Person)
33 community.add_member(other_person) # so there is an activity in community 33 community.add_member(other_person) # so there is an activity in community
34 34
@@ -68,6 +68,15 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -68,6 +68,15 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
68 assert_equivalent other_person.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]} 68 assert_equivalent other_person.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]}
69 end 69 end
70 70
  71 + should 'get activities for non logged user in a public community' do
  72 + community = fast_create(Community)
  73 + create_activity(community)
  74 + community.add_member(person)
  75 + get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}"
  76 + json = JSON.parse(last_response.body)
  77 + assert_equivalent community.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]}
  78 + end
  79 +
71 def create_activity(target) 80 def create_activity(target)
72 activity = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => target 81 activity = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => target
73 ProfileActivity.create! profile_id: target.id, activity: activity 82 ProfileActivity.create! profile_id: target.id, activity: activity
test/api/articles_test.rb
@@ -7,6 +7,26 @@ class ArticlesTest &lt; ActiveSupport::TestCase @@ -7,6 +7,26 @@ class ArticlesTest &lt; ActiveSupport::TestCase
7 login_api 7 login_api
8 end 8 end
9 9
  10 + should 'remove article' do
  11 + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
  12 + delete "/api/v1/articles/#{article.id}?#{params.to_query}"
  13 + json = JSON.parse(last_response.body)
  14 +
  15 + assert_not_equal 401, last_response.status
  16 + assert_equal true, json['success']
  17 +
  18 + assert !Article.exists?(article.id)
  19 + end
  20 +
  21 + should 'not remove article without permission' do
  22 + otherPerson = fast_create(Person, :name => "Other Person")
  23 + article = fast_create(Article, :profile_id => otherPerson.id, :name => "Some thing")
  24 + delete "/api/v1/articles/#{article.id}?#{params.to_query}"
  25 + json = JSON.parse(last_response.body)
  26 + assert_equal 403, last_response.status
  27 + assert Article.exists?(article.id)
  28 + end
  29 +
10 should 'list articles' do 30 should 'list articles' do
11 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") 31 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
12 get "/api/v1/articles/?#{params.to_query}" 32 get "/api/v1/articles/?#{params.to_query}"
@@ -14,6 +34,17 @@ class ArticlesTest &lt; ActiveSupport::TestCase @@ -14,6 +34,17 @@ class ArticlesTest &lt; ActiveSupport::TestCase
14 assert_includes json["articles"].map { |a| a["id"] }, article.id 34 assert_includes json["articles"].map { |a| a["id"] }, article.id
15 end 35 end
16 36
  37 + should 'list all text articles' do
  38 + profile = Community.create(identifier: 'my-community', name: 'name-my-community')
  39 + a1 = fast_create(TextArticle, :profile_id => profile.id)
  40 + a2 = fast_create(TextileArticle, :profile_id => profile.id)
  41 + a3 = fast_create(TinyMceArticle, :profile_id => profile.id)
  42 + params['content_type']='TextArticle'
  43 + get "api/v1/communities/#{profile.id}/articles?#{params.to_query}"
  44 + json = JSON.parse(last_response.body)
  45 + assert_equal 3, json['articles'].count
  46 + end
  47 +
17 should 'get profile homepage' do 48 should 'get profile homepage' do
18 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") 49 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
19 person.home_page=article 50 person.home_page=article
@@ -104,6 +135,17 @@ class ArticlesTest &lt; ActiveSupport::TestCase @@ -104,6 +135,17 @@ class ArticlesTest &lt; ActiveSupport::TestCase
104 assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] } 135 assert_equivalent [child1.id, child2.id], json["articles"].map { |a| a["id"] }
105 end 136 end
106 137
  138 + should 'list all text articles of children' do
  139 + article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
  140 + child1 = fast_create(TextArticle, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing 1")
  141 + child2 = fast_create(TextileArticle, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing 2")
  142 + child3 = fast_create(TinyMceArticle, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing 3")
  143 + get "/api/v1/articles/#{article.id}/children?#{params.to_query}"
  144 + json = JSON.parse(last_response.body)
  145 + assert_equivalent [child1.id, child2.id, child3.id], json["articles"].map { |a| a["id"] }
  146 + end
  147 +
  148 +
107 should 'list public article children for not logged in access' do 149 should 'list public article children for not logged in access' do
108 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing") 150 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
109 child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing") 151 child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing")
@@ -744,4 +786,12 @@ class ArticlesTest &lt; ActiveSupport::TestCase @@ -744,4 +786,12 @@ class ArticlesTest &lt; ActiveSupport::TestCase
744 assert_not_includes json['article']['children'].map {|a| a['id']}, child.id 786 assert_not_includes json['article']['children'].map {|a| a['id']}, child.id
745 end 787 end
746 788
  789 + should 'list article permissions when get an article' do
  790 + community = fast_create(Community)
  791 + give_permission(person, 'post_content', community)
  792 + article = fast_create(Article, :profile_id => community.id)
  793 + get "/api/v1/articles/#{article.id}?#{params.to_query}"
  794 + json = JSON.parse(last_response.body)
  795 + assert_includes json["article"]["permissions"], 'allow_post_content'
  796 + end
747 end 797 end
test/api/boxes_test.rb
@@ -47,4 +47,46 @@ class BoxesTest &lt; ActiveSupport::TestCase @@ -47,4 +47,46 @@ class BoxesTest &lt; ActiveSupport::TestCase
47 json = JSON.parse(last_response.body) 47 json = JSON.parse(last_response.body)
48 assert !json["boxes"].first["blocks"].first.key?('api_content') 48 assert !json["boxes"].first["blocks"].first.key?('api_content')
49 end 49 end
  50 +
  51 + should 'get blocks from boxes' do
  52 + Environment.delete_all
  53 + environment = fast_create(Environment, :is_default => true)
  54 + box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment')
  55 + block = fast_create(Block, box_id: box.id)
  56 + get "/api/v1/environments/default/boxes?#{params.to_query}"
  57 + json = JSON.parse(last_response.body)
  58 + assert_equal [block.id], json["boxes"].first["blocks"].map {|b| b['id']}
  59 + end
  60 +
  61 + should 'not list a block for not logged users' do
  62 + logout_api
  63 + profile = fast_create(Profile)
  64 + box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name)
  65 + block = fast_create(Block, box_id: box.id)
  66 + block.display = 'never'
  67 + block.save!
  68 + get "/api/v1/profiles/#{profile.id}/boxes?#{params.to_query}"
  69 + json = JSON.parse(last_response.body)
  70 + assert_equal [], json["boxes"].first["blocks"].map {|b| b['id']}
  71 + end
  72 +
  73 + should 'list a block with logged in display_user for a logged user' do
  74 + profile = fast_create(Profile)
  75 + box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name)
  76 + block = fast_create(Block, box_id: box.id)
  77 + block.display_user = 'logged'
  78 + block.save!
  79 + get "/api/v1/profiles/#{profile.id}/boxes?#{params.to_query}"
  80 + json = JSON.parse(last_response.body)
  81 + assert_equal [block.id], json["boxes"].first["blocks"].map {|b| b['id']}
  82 + end
  83 +
  84 + should 'not list boxes for user without permission' do
  85 + profile = fast_create(Profile, public_profile: false)
  86 + box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name)
  87 + block = fast_create(Block, box_id: box.id)
  88 + get "/api/v1/profiles/#{profile.id}/boxes?#{params.to_query}"
  89 + json = JSON.parse(last_response.body)
  90 + assert_equal 403, last_response.status
  91 + end
50 end 92 end
test/api/comments_test.rb
@@ -70,6 +70,16 @@ class CommentsTest &lt; ActiveSupport::TestCase @@ -70,6 +70,16 @@ class CommentsTest &lt; ActiveSupport::TestCase
70 assert_equal body, json['comment']['body'] 70 assert_equal body, json['comment']['body']
71 end 71 end
72 72
  73 + should 'not create comment when an article does not accept comments' do
  74 + login_api
  75 + article = fast_create(Article, :profile_id => @local_person.id, :name => "Some thing", accept_comments: false)
  76 + body = 'My comment'
  77 + params.merge!({:body => body})
  78 + post "/api/v1/articles/#{article.id}/comments?#{params.to_query}"
  79 + json = JSON.parse(last_response.body)
  80 + assert_equal 403, last_response.status
  81 + end
  82 +
73 should 'logged user not comment an archived article' do 83 should 'logged user not comment an archived article' do
74 login_api 84 login_api
75 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true) 85 article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing", :archived => true)
@@ -186,4 +196,53 @@ class CommentsTest &lt; ActiveSupport::TestCase @@ -186,4 +196,53 @@ class CommentsTest &lt; ActiveSupport::TestCase
186 assert_equal [comment1.id], json["comments"].map { |c| c['id'] } 196 assert_equal [comment1.id], json["comments"].map { |c| c['id'] }
187 end 197 end
188 198
  199 + should 'delete comment successfully' do
  200 + login_api
  201 + article = fast_create(Article, profile_id: person.id, name: "Some thing")
  202 + comment = article.comments.create!(body: "some comment", author: person)
  203 + delete "api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
  204 + json = JSON.parse(last_response.body)
  205 + assert_equal 200, last_response.status
  206 + assert_equal comment.id, json['comment']['id']
  207 + assert_not_includes article.comments, comment
  208 + end
  209 +
  210 + should 'not delete a comment when user is not logged' do
  211 + article = fast_create(Article, profile_id: person.id, name: "Some thing")
  212 + comment = article.comments.create!(body: "some comment", author: person)
  213 + delete "api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
  214 + json = JSON.parse(last_response.body)
  215 + assert_equal 403, last_response.status
  216 + assert_includes article.comments, comment
  217 + end
  218 +
  219 + should 'not delete a comment when user does not have permission' do
  220 + login_api
  221 + article = fast_create(Article, profile_id: @local_person.id, name: "Some thing")
  222 + comment = article.comments.create!(body: "some comment", author: @local_person)
  223 + delete "api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
  224 + json = JSON.parse(last_response.body)
  225 + assert_equal 403, last_response.status
  226 + assert_includes article.comments, comment
  227 + end
  228 +
  229 + should 'return not found when delete a inexistent comment' do
  230 + article = fast_create(Article, profile_id: person.id, name: "Some thing")
  231 + comment = article.comments.create!(body: "some comment", author: person)
  232 + delete "api/v1/articles/#{article.id}/comments/0?#{params.to_query}"
  233 + json = JSON.parse(last_response.body)
  234 + assert_equal 404, last_response.status
  235 + assert_includes article.comments, comment
  236 + end
  237 +
  238 + should 'return error when failed to delete comment' do
  239 + login_api
  240 + article = fast_create(Article, profile_id: person.id, name: "Some thing")
  241 + comment = article.comments.create!(body: "some comment", author: person)
  242 + Comment.any_instance.expects(:destroy).raises(StandardError)
  243 + delete "api/v1/articles/#{article.id}/comments/#{comment.id}?#{params.to_query}"
  244 + json = JSON.parse(last_response.body)
  245 + assert_equal 500, last_response.status
  246 + assert_includes article.comments, comment
  247 + end
189 end 248 end
test/api/helpers_test.rb
@@ -99,7 +99,7 @@ class Api::HelpersTest &lt; ActiveSupport::TestCase @@ -99,7 +99,7 @@ class Api::HelpersTest &lt; ActiveSupport::TestCase
99 end 99 end
100 100
101 should 'parse_content_type return all content types as an array' do 101 should 'parse_content_type return all content types as an array' do
102 - assert_equivalent ['TextArticle','TinyMceArticle'], parse_content_type("TextArticle,TinyMceArticle") 102 + assert_equivalent ['TextileArticle','TinyMceArticle'], parse_content_type("TextileArticle,TinyMceArticle")
103 end 103 end
104 104
105 should 'find_article return article by id in list passed for user with permission' do 105 should 'find_article return article by id in list passed for user with permission' do
test/api/profiles_test.rb
@@ -146,4 +146,49 @@ class ProfilesTest &lt; ActiveSupport::TestCase @@ -146,4 +146,49 @@ class ProfilesTest &lt; ActiveSupport::TestCase
146 refute json.has_key?('Rating') 146 refute json.has_key?('Rating')
147 end 147 end
148 148
  149 + [Community, Enterprise].each do |klass|
  150 + should "update #{klass.name}" do
  151 + login_api
  152 + profile = fast_create(klass)
  153 + profile.add_admin(person)
  154 + params[:profile] = {}
  155 + params[:profile][:custom_header] = "Another Header"
  156 + post "/api/v1/profiles/#{profile.id}?#{params.to_query}"
  157 + assert_equal "Another Header", profile.reload.custom_header
  158 + end
  159 +
  160 + should "not update a #{klass.name} if user does not have permission" do
  161 + login_api
  162 + profile = fast_create(klass)
  163 + params[:profile] = {}
  164 + params[:profile][:custom_header] = "Another Header"
  165 + post "/api/v1/profiles/#{profile.id}?#{params.to_query}"
  166 + assert_equal 403, last_response.status
  167 + end
  168 +
  169 + should "not update a #{klass.name} if user is not logged in" do
  170 + profile = fast_create(klass)
  171 + params[:profile] = {}
  172 + params[:profile][:custom_header] = "Another Header"
  173 + post "/api/v1/profiles/#{profile.id}?#{params.to_query}"
  174 + assert_equal 401, last_response.status
  175 + end
  176 + end
  177 +
  178 + should 'update person' do
  179 + login_api
  180 + params[:profile] = {}
  181 + params[:profile][:custom_header] = "Another Header"
  182 + post "/api/v1/profiles/#{person.id}?#{params.to_query}"
  183 + assert_equal "Another Header", person.reload.custom_header
  184 + end
  185 +
  186 + should 'not update person information if user does not have permission' do
  187 + login_api
  188 + profile = fast_create(Person)
  189 + params[:profile] = {}
  190 + params[:profile][:custom_header] = "Another Header"
  191 + post "/api/v1/profiles/#{profile.id}?#{params.to_query}"
  192 + assert_equal 403, last_response.status
  193 + end
149 end 194 end
test/functional/application_controller_test.rb
@@ -224,7 +224,7 @@ class ApplicationControllerTest &lt; ActionController::TestCase @@ -224,7 +224,7 @@ class ApplicationControllerTest &lt; ActionController::TestCase
224 end 224 end
225 225
226 should 'display theme test panel when testing theme' do 226 should 'display theme test panel when testing theme' do
227 - @request.session[:theme] = 'my-test-theme' 227 + @request.session[:user_theme] = 'my-test-theme'
228 theme = mock 228 theme = mock
229 profile = mock 229 profile = mock
230 theme.expects(:owner).returns(profile).at_least_once 230 theme.expects(:owner).returns(profile).at_least_once
@@ -506,6 +506,21 @@ class ApplicationControllerTest &lt; ActionController::TestCase @@ -506,6 +506,21 @@ class ApplicationControllerTest &lt; ActionController::TestCase
506 assert_redirected_to :controller => 'account', :action => 'login' 506 assert_redirected_to :controller => 'account', :action => 'login'
507 end 507 end
508 508
  509 + should 'override user when current is an admin' do
  510 + user = create_user
  511 + other_user = create_user
  512 + environment = Environment.default
  513 + login_as user.login
  514 + @controller.stubs(:environment).returns(environment)
  515 +
  516 + get :index, override_user: other_user.id
  517 + assert_equal user, assigns(:current_user)
  518 +
  519 + environment.add_admin user.person
  520 + get :index, override_user: other_user.id
  521 + assert_equal other_user, assigns(:current_user)
  522 + end
  523 +
509 should 'do not allow member not included in whitelist to access an restricted environment' do 524 should 'do not allow member not included in whitelist to access an restricted environment' do
510 user = create_user 525 user = create_user
511 e = Environment.default 526 e = Environment.default
@@ -576,4 +591,36 @@ class ApplicationControllerTest &lt; ActionController::TestCase @@ -576,4 +591,36 @@ class ApplicationControllerTest &lt; ActionController::TestCase
576 assert_redirected_to :controller => 'test', :action => 'index', :profile => profile.identifier 591 assert_redirected_to :controller => 'test', :action => 'index', :profile => profile.identifier
577 end 592 end
578 593
  594 + should 'set session theme if a params theme is passed as parameter' do
  595 + current_theme = 'my-test-theme'
  596 + environment = Environment.default
  597 + Theme.stubs(:system_themes).returns([Theme.new(current_theme)])
  598 + environment.themes = [current_theme]
  599 + environment.save!
  600 + assert_nil @request.session[:theme]
  601 + get :index, :theme => current_theme
  602 + assert_equal current_theme, @request.session[:theme]
  603 + end
  604 +
  605 + should 'set session theme only in environment available themes' do
  606 + environment = Environment.default
  607 + assert_nil @request.session[:theme]
  608 + environment.stubs(:theme_ids).returns(['another_theme'])
  609 + get :index, :theme => 'my-test-theme'
  610 + assert_nil @request.session[:theme]
  611 + end
  612 +
  613 + should 'unset session theme if not environment available themes is defined' do
  614 + environment = Environment.default
  615 + current_theme = 'my-test-theme'
  616 + Theme.stubs(:system_themes).returns([Theme.new(current_theme)])
  617 + environment.themes = [current_theme]
  618 + environment.save!
  619 + get :index, :theme => current_theme
  620 + assert_equal current_theme, @request.session[:theme]
  621 +
  622 + get :index, :theme => 'another_theme'
  623 + assert_nil @request.session[:theme]
  624 + end
  625 +
579 end 626 end
test/functional/cms_controller_test.rb
@@ -528,7 +528,7 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -528,7 +528,7 @@ class CmsControllerTest &lt; ActionController::TestCase
528 post :new, :type => TextileArticle.name, :profile => profile.identifier, :article => { :name => 'adding-categories-test', :category_ids => [ c1.id, c3.id, c3.id ] } 528 post :new, :type => TextileArticle.name, :profile => profile.identifier, :article => { :name => 'adding-categories-test', :category_ids => [ c1.id, c3.id, c3.id ] }
529 529
530 saved = profile.articles.find_by(name: 'adding-categories-test') 530 saved = profile.articles.find_by(name: 'adding-categories-test')
531 - assert_equal [c1, c3], saved.categories.all 531 + assert_equivalent [c1, c3], saved.categories.all
532 end 532 end
533 533
534 should 'filter html with white_list from tiny mce article name' do 534 should 'filter html with white_list from tiny mce article name' do
test/functional/profile_themes_controller_test.rb
@@ -231,7 +231,7 @@ class ProfileThemesControllerTest &lt; ActionController::TestCase @@ -231,7 +231,7 @@ class ProfileThemesControllerTest &lt; ActionController::TestCase
231 theme = Theme.create('theme-under-test', :owner => profile) 231 theme = Theme.create('theme-under-test', :owner => profile)
232 post :start_test, :profile => 'testinguser', :id => 'theme-under-test' 232 post :start_test, :profile => 'testinguser', :id => 'theme-under-test'
233 233
234 - assert_equal 'theme-under-test', session[:theme] 234 + assert_equal 'theme-under-test', session[:user_theme]
235 assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page' 235 assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page'
236 end 236 end
237 237
@@ -239,7 +239,7 @@ class ProfileThemesControllerTest &lt; ActionController::TestCase @@ -239,7 +239,7 @@ class ProfileThemesControllerTest &lt; ActionController::TestCase
239 theme = Theme.create('theme-under-test', :owner => profile) 239 theme = Theme.create('theme-under-test', :owner => profile)
240 post :stop_test, :profile => 'testinguser', :id => 'theme-under-test' 240 post :stop_test, :profile => 'testinguser', :id => 'theme-under-test'
241 241
242 - assert_nil session[:theme] 242 + assert_nil session[:user_theme]
243 assert_redirected_to :action => 'index' 243 assert_redirected_to :action => 'index'
244 end 244 end
245 245
test/integration/blocks_test.rb
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
1 -require_relative "../test_helper"  
2 -  
3 -class BlocksTest < ActionDispatch::IntegrationTest  
4 -  
5 - def blog_on_article_block_bootstrap  
6 - profile = fast_create(Profile)  
7 - blog = fast_create(Blog, :name => 'Blog', :profile_id => profile.id)  
8 - fast_create(TinyMceArticle, :name => "First Post", :profile_id => profile.id, :parent_id => blog.id, :body => '<p> Wasserstoffbombe </p>')  
9 - fast_create(TinyMceArticle, :name => "A Post", :profile_id => profile.id, :parent_id => blog.id, :body => '<p>Lorem ipsum dolor sit amet</p> <p>Second paragraph</p>')  
10 - block = ArticleBlock.new  
11 - block.article = blog  
12 - profile.boxes << Box.new  
13 - profile.boxes.first.blocks << block  
14 - return block  
15 - end  
16 -  
17 - should 'allow blog as article block content' do  
18 - block = blog_on_article_block_bootstrap  
19 - get "/profile/#{block.owner.identifier}"  
20 - assert_match(/Lorem ipsum dolor sit amet/, @response.body)  
21 - end  
22 -  
23 - should 'display short version for block posts on article block' do  
24 - block = blog_on_article_block_bootstrap  
25 - get "/profile/#{block.owner.identifier}"  
26 - assert_no_match(/Second paragraph/, @response.body)  
27 - end  
28 -  
29 - should 'display full version for block posts on article block' do  
30 - block = blog_on_article_block_bootstrap  
31 - block.visualization_format = 'full'  
32 - block.save!  
33 - get "/profile/#{block.owner.identifier}"  
34 - assert_match(/Second paragraph/, @response.body)  
35 - end  
36 -  
37 - should 'display configured number of blog posts on article block' do  
38 - block = blog_on_article_block_bootstrap  
39 - block.posts_per_page = 2  
40 - block.save!  
41 - get "/profile/#{block.owner.identifier}"  
42 - assert_match(/Lorem ipsum dolor sit amet/, @response.body)  
43 - assert_match(/Wasserstoffbombe/, @response.body)  
44 - end  
45 -  
46 -end  
test/integration/profile_blocks_test.rb 0 → 100644
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +require_relative "../test_helper"
  2 +
  3 +class ProfileBlocksTest < ActionDispatch::IntegrationTest
  4 +
  5 + def blog_on_article_block_bootstrap
  6 + profile = fast_create(Profile)
  7 + blog = fast_create(Blog, :name => 'Blog', :profile_id => profile.id)
  8 + fast_create(TinyMceArticle, :name => "First Post", :profile_id => profile.id, :parent_id => blog.id, :body => '<p> Wasserstoffbombe </p>')
  9 + fast_create(TinyMceArticle, :name => "A Post", :profile_id => profile.id, :parent_id => blog.id, :body => '<p>Lorem ipsum dolor sit amet</p> <p>Second paragraph</p>')
  10 + block = ArticleBlock.new
  11 + block.article = blog
  12 + profile.boxes << Box.new
  13 + profile.boxes.first.blocks << block
  14 + return block
  15 + end
  16 +
  17 + should 'allow blog as article block content' do
  18 + block = blog_on_article_block_bootstrap
  19 + get "/profile/#{block.owner.identifier}"
  20 + assert_match(/Lorem ipsum dolor sit amet/, @response.body)
  21 + end
  22 +
  23 + should 'display short version for block posts on article block' do
  24 + block = blog_on_article_block_bootstrap
  25 + get "/profile/#{block.owner.identifier}"
  26 + assert_no_match(/Second paragraph/, @response.body)
  27 + end
  28 +
  29 + should 'display full version for block posts on article block' do
  30 + block = blog_on_article_block_bootstrap
  31 + block.visualization_format = 'full'
  32 + block.save!
  33 + get "/profile/#{block.owner.identifier}"
  34 + assert_match(/Second paragraph/, @response.body)
  35 + end
  36 +
  37 + should 'display configured number of blog posts on article block' do
  38 + block = blog_on_article_block_bootstrap
  39 + block.posts_per_page = 2
  40 + block.save!
  41 + get "/profile/#{block.owner.identifier}"
  42 + assert_match(/Lorem ipsum dolor sit amet/, @response.body)
  43 + assert_match(/Wasserstoffbombe/, @response.body)
  44 + end
  45 +
  46 +end
test/integration/safe_strings_test.rb
@@ -163,4 +163,16 @@ class SafeStringsTest &lt; ActionDispatch::IntegrationTest @@ -163,4 +163,16 @@ class SafeStringsTest &lt; ActionDispatch::IntegrationTest
163 get url_for(action: :edit, controller: :profile_design, profile: person.identifier, id: block.id) 163 get url_for(action: :edit, controller: :profile_design, profile: person.identifier, id: block.id)
164 assert_select '.block-config-options .image-data-line' 164 assert_select '.block-config-options .image-data-line'
165 end 165 end
  166 +
  167 + should 'not escape icons options editing link_list block' do
  168 + create_user('jimi', :password => 'test', :password_confirmation => 'test').activate
  169 + profile = Person['jimi']
  170 + login 'jimi', 'test'
  171 + profile.blocks.each(&:destroy)
  172 + profile.boxes.first.blocks << LinkListBlock.new
  173 + block = profile.boxes.first.blocks.first
  174 + get "/myprofile/#{profile.identifier}/profile_design/edit/#{block.id}"
  175 + assert_select '.icon-selector .icon-edit'
  176 + end
  177 +
166 end 178 end
test/support/noosfero_test_helper.rb
  1 +##
  2 +# DEPRECATED ActionView::TestCase already provide all needed
  3 +#
1 module NoosferoTestHelper 4 module NoosferoTestHelper
2 5
3 - def link_to(content, url, options = {})  
4 - "<a href='#{url.inspect}'>#{content}</a>"  
5 - end  
6 -  
7 - def content_tag(tag, content, options = {})  
8 - tag_attr = options.blank? ? '' : ' ' + options.collect{ |o| "#{o[0]}=\"#{o[1]}\"" }.join(' ')  
9 - "<#{tag}#{tag_attr}>#{content}</#{tag}>"  
10 - end  
11 6
12 def submit_tag(content, options = {}) 7 def submit_tag(content, options = {})
13 content 8 content
@@ -17,11 +12,6 @@ module NoosferoTestHelper @@ -17,11 +12,6 @@ module NoosferoTestHelper
17 '' 12 ''
18 end 13 end
19 14
20 - def tag(tag, args = {})  
21 - attrs = args.map{|k,v| "#{k}='#{v}'"}.join(' ')  
22 - "<#{tag} #{attrs} />"  
23 - end  
24 -  
25 def options_from_collection_for_select(collection, value_method, content_method) 15 def options_from_collection_for_select(collection, value_method, content_method)
26 "<option value='fake value'>fake content</option>" 16 "<option value='fake value'>fake content</option>"
27 end 17 end
test/unit/add_member_test.rb
@@ -149,4 +149,11 @@ class AddMemberTest &lt; ActiveSupport::TestCase @@ -149,4 +149,11 @@ class AddMemberTest &lt; ActiveSupport::TestCase
149 149
150 assert_no_match(/\(#{task.requestor.email}\)/, task.target_notification_description) 150 assert_no_match(/\(#{task.requestor.email}\)/, task.target_notification_description)
151 end 151 end
  152 +
  153 + should 'have cancel notification message with explanation' do
  154 + explanation_message = 'some explanation'
  155 + task = AddMember.new(:person => person, :organization => community,
  156 + :reject_explanation => explanation_message)
  157 + assert_match(/#{explanation_message}/, task.task_cancelled_message)
  158 + end
152 end 159 end
test/unit/application_helper_test.rb
@@ -466,7 +466,7 @@ class ApplicationHelperTest &lt; ActionView::TestCase @@ -466,7 +466,7 @@ class ApplicationHelperTest &lt; ActionView::TestCase
466 should 'use theme passed via param when in development mode' do 466 should 'use theme passed via param when in development mode' do
467 stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) 467 stubs(:environment).returns(build(Environment, :theme => 'environment-theme'))
468 Rails.env.stubs(:development?).returns(true) 468 Rails.env.stubs(:development?).returns(true)
469 - self.stubs(:params).returns({:theme => 'skyblue'}) 469 + self.stubs(:params).returns({:user_theme => 'skyblue'})
470 assert_equal 'skyblue', current_theme 470 assert_equal 'skyblue', current_theme
471 end 471 end
472 472
@@ -682,29 +682,6 @@ class ApplicationHelperTest &lt; ActionView::TestCase @@ -682,29 +682,6 @@ class ApplicationHelperTest &lt; ActionView::TestCase
682 assert_nil default_folder_for_image_upload(profile) 682 assert_nil default_folder_for_image_upload(profile)
683 end 683 end
684 684
685 - should 'envelop a html with button-bar div' do  
686 - result = button_bar { '<b>foo</b>' }  
687 - assert_equal '<div class="button-bar"><b>foo</b>'+  
688 - '<br style=\'clear: left;\' /></div>', result  
689 - end  
690 -  
691 - should 'add more classes to button-bar envelope' do  
692 - result = button_bar :class=>'test' do  
693 - '<b>foo</b>'  
694 - end  
695 - assert_equal '<div class="test button-bar"><b>foo</b>'+  
696 - '<br style=\'clear: left;\' /></div>', result  
697 - end  
698 -  
699 - should 'add more attributes to button-bar envelope' do  
700 - result = button_bar :id=>'bt1' do  
701 - '<b>foo</b>'  
702 - end  
703 - assert_tag_in_string result, :tag =>'div', :attributes => {:class => 'button-bar', :id => 'bt1'}  
704 - assert_tag_in_string result, :tag =>'b', :content => 'foo', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}}  
705 - assert_tag_in_string result, :tag =>'br', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}}  
706 - end  
707 -  
708 should 'not filter html if source does not have macros' do 685 should 'not filter html if source does not have macros' do
709 class Plugin1 < Noosfero::Plugin 686 class Plugin1 < Noosfero::Plugin
710 end 687 end
@@ -871,7 +848,7 @@ class ApplicationHelperTest &lt; ActionView::TestCase @@ -871,7 +848,7 @@ class ApplicationHelperTest &lt; ActionView::TestCase
871 html = fullscreen_buttons("#article") 848 html = fullscreen_buttons("#article")
872 assert html.include?("<script>fullscreenPageLoad('#article')</script>") 849 assert html.include?("<script>fullscreenPageLoad('#article')</script>")
873 assert html.include?("class=\"button with-text icon-fullscreen\"") 850 assert html.include?("class=\"button with-text icon-fullscreen\"")
874 - assert html.include?("onClick=\"toggle_fullwidth('#article')\"") 851 + assert html.include?("onClick=\"toggle_fullwidth(&#39;#article&#39;)\"")
875 end 852 end
876 853
877 should "return the related class string" do 854 should "return the related class string" do
test/unit/block_test.rb
@@ -23,10 +23,6 @@ class BlockTest &lt; ActiveSupport::TestCase @@ -23,10 +23,6 @@ class BlockTest &lt; ActiveSupport::TestCase
23 assert_nil Block.new.owner 23 assert_nil Block.new.owner
24 end 24 end
25 25
26 - should 'provide no footer by default' do  
27 - assert_nil Block.new.footer  
28 - end  
29 -  
30 should 'provide an empty default title' do 26 should 'provide an empty default title' do
31 assert_equal '', Block.new.default_title 27 assert_equal '', Block.new.default_title
32 end 28 end
test/unit/buttons_helper_test.rb
1 -# encoding: UTF-8  
2 require_relative "../test_helper" 1 require_relative "../test_helper"
3 2
4 class ButtonsHelperTest < ActionView::TestCase 3 class ButtonsHelperTest < ActionView::TestCase
  4 +
5 include ButtonsHelper 5 include ButtonsHelper
6 6
7 should 'append with-text class and keep existing classes' do 7 should 'append with-text class and keep existing classes' do
8 expects(:button_without_text).with('type', 'label', 'url', { :class => 'with-text class1'}) 8 expects(:button_without_text).with('type', 'label', 'url', { :class => 'with-text class1'})
9 button('type', 'label', 'url', { :class => 'class1' }) 9 button('type', 'label', 'url', { :class => 'class1' })
10 end 10 end
11 -end  
12 \ No newline at end of file 11 \ No newline at end of file
  12 +
  13 + should 'envelop a html with button-bar div' do
  14 + result = button_bar { content_tag :b, 'foo' }
  15 + assert_equal '<div class=" button-bar"><b>foo</b>'+
  16 + '<br style="clear: left;" /></div>', result
  17 + end
  18 +
  19 + should 'add more classes to button-bar envelope' do
  20 + result = button_bar :class=>'test' do
  21 + content_tag :b, 'foo'
  22 + end
  23 + assert_equal '<div class="test button-bar"><b>foo</b>'+
  24 + '<br style="clear: left;" /></div>', result
  25 + end
  26 +
  27 + should 'add more attributes to button-bar envelope' do
  28 + result = button_bar :id=>'bt1' do
  29 + content_tag :b, 'foo'
  30 + end
  31 + assert_tag_in_string result, :tag =>'div', :attributes => {:class => ' button-bar', :id => 'bt1'}
  32 + assert_tag_in_string result, :tag =>'b', :content => 'foo', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}}
  33 + assert_tag_in_string result, :tag =>'br', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}}
  34 + end
  35 +
  36 +end
test/unit/comment_handler_test.rb
@@ -21,4 +21,14 @@ class CommentHandlerTest &lt; ActiveSupport::TestCase @@ -21,4 +21,14 @@ class CommentHandlerTest &lt; ActiveSupport::TestCase
21 handler.perform 21 handler.perform
22 end 22 end
23 23
  24 + should 'save locale from creation context and not change current locale' do
  25 + FastGettext.stubs(:locale).returns("pt")
  26 + handler = CommentHandler.new(5, :whatever_method)
  27 +
  28 + FastGettext.stubs(:locale).returns("en")
  29 + assert_equal "pt", handler.locale
  30 +
  31 + handler.perform
  32 + assert_equal "en", FastGettext.locale
  33 + end
24 end 34 end
test/unit/comment_helper_test.rb
1 require_relative "../test_helper" 1 require_relative "../test_helper"
2 2
3 -class CommentHelperTest < ActiveSupport::TestCase 3 +class CommentHelperTest < ActionView::TestCase
4 4
5 include CommentHelper 5 include CommentHelper
6 - include ActionView::Helpers::TagHelper  
7 - include NoosferoTestHelper 6 +
  7 + helper ApplicationHelper
8 8
9 def setup 9 def setup
10 @user = create_user('usertest').person 10 @user = create_user('usertest').person
@@ -12,6 +12,7 @@ class CommentHelperTest &lt; ActiveSupport::TestCase @@ -12,6 +12,7 @@ class CommentHelperTest &lt; ActiveSupport::TestCase
12 self.stubs(:logged_in?).returns(true) 12 self.stubs(:logged_in?).returns(true)
13 self.stubs(:report_abuse).returns('<a href="#">link</a>') 13 self.stubs(:report_abuse).returns('<a href="#">link</a>')
14 self.stubs(:expirable_comment_link).returns('<a href="#">link</a>') 14 self.stubs(:expirable_comment_link).returns('<a href="#">link</a>')
  15 + self.stubs(:url_for)
15 @plugins = mock 16 @plugins = mock
16 @plugins.stubs(:dispatch).returns([]) 17 @plugins.stubs(:dispatch).returns([])
17 end 18 end
@@ -140,9 +141,5 @@ class CommentHelperTest &lt; ActiveSupport::TestCase @@ -140,9 +141,5 @@ class CommentHelperTest &lt; ActiveSupport::TestCase
140 assert_match /plugin_action/, Nokogiri::HTML.fragment(html).css('.comments-action-bar').to_html 141 assert_match /plugin_action/, Nokogiri::HTML.fragment(html).css('.comments-action-bar').to_html
141 end 142 end
142 143
143 - def link_to_function(content, url, options = {})  
144 - link_to(content, url, options)  
145 - end  
146 -  
147 end 144 end
148 145
test/unit/content_viewer_helper_test.rb
@@ -3,6 +3,8 @@ require_relative &quot;../test_helper&quot; @@ -3,6 +3,8 @@ require_relative &quot;../test_helper&quot;
3 class ContentViewerHelperTest < ActionView::TestCase 3 class ContentViewerHelperTest < ActionView::TestCase
4 4
5 include ActionView::Helpers::TagHelper 5 include ActionView::Helpers::TagHelper
  6 + include ActionView::Helpers::TextHelper
  7 +
6 include ContentViewerHelper 8 include ContentViewerHelper
7 include DatesHelper 9 include DatesHelper
8 include ApplicationHelper 10 include ApplicationHelper
@@ -99,14 +101,14 @@ class ContentViewerHelperTest &lt; ActionView::TestCase @@ -99,14 +101,14 @@ class ContentViewerHelperTest &lt; ActionView::TestCase
99 end 101 end
100 102
101 should 'theme provides addthis custom icon' do 103 should 'theme provides addthis custom icon' do
102 - stubs(:session).returns({:theme => 'base'}) 104 + stubs(:session).returns({:user_theme => 'base'})
103 File.expects(:exists?).with(anything).returns(true) 105 File.expects(:exists?).with(anything).returns(true)
104 Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') 106 Environment.any_instance.stubs(:default_hostname).returns('noosfero.org')
105 assert_match 'addthis.gif', addthis_image_tag 107 assert_match 'addthis.gif', addthis_image_tag
106 end 108 end
107 109
108 should 'use default addthis icon if theme has no addthis.gif image' do 110 should 'use default addthis icon if theme has no addthis.gif image' do
109 - stubs(:session).returns({:theme => 'base'}) 111 + stubs(:session).returns({:user_theme => 'base'})
110 File.expects(:exists?).with(anything).returns(false) 112 File.expects(:exists?).with(anything).returns(false)
111 Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') 113 Environment.any_instance.stubs(:default_hostname).returns('noosfero.org')
112 assert_match 'bt-bookmark.gif', addthis_image_tag 114 assert_match 'bt-bookmark.gif', addthis_image_tag
@@ -148,11 +150,4 @@ class ContentViewerHelperTest &lt; ActionView::TestCase @@ -148,11 +150,4 @@ class ContentViewerHelperTest &lt; ActionView::TestCase
148 assert_match /February 1, 2007/, result 150 assert_match /February 1, 2007/, result
149 end 151 end
150 152
151 - protected  
152 - include NoosferoTestHelper  
153 - include ActionView::Helpers::TextHelper  
154 - def url_for(args = {})  
155 - ['http:/', args[:host], args[:profile], args[:page]].join('/')  
156 - end  
157 -  
158 end 153 end
test/unit/environment_test.rb
@@ -457,6 +457,22 @@ class EnvironmentTest &lt; ActiveSupport::TestCase @@ -457,6 +457,22 @@ class EnvironmentTest &lt; ActiveSupport::TestCase
457 assert_equal ['new-theme', 'other-theme'], Environment.default.themes.map(&:id) 457 assert_equal ['new-theme', 'other-theme'], Environment.default.themes.map(&:id)
458 end 458 end
459 459
  460 + should 'return the theme ids' do
  461 + env = Environment.default
  462 + t1 = 'theme_1'
  463 + t2 = 'theme_2'
  464 + Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2)])
  465 + env.themes = [t1, t2]
  466 + env.save!
  467 + assert_equivalent [t1, t2], Environment.default.theme_ids
  468 + end
  469 + should 'theme_ids be an empty array if there is no settings themes defined' do
  470 + env = Environment.default
  471 + env.settings[:themes] = nil
  472 + env.save!
  473 + assert Environment.default.theme_ids.empty?
  474 + end
  475 +
460 should 'create templates' do 476 should 'create templates' do
461 e = create(Environment, :name => 'test_env') 477 e = create(Environment, :name => 'test_env')
462 e.reload 478 e.reload
test/unit/events_helper_test.rb
1 require_relative "../test_helper" 1 require_relative "../test_helper"
2 2
3 -class EventsHelperTest < ActiveSupport::TestCase 3 +class EventsHelperTest < ActionView::TestCase
4 4
5 include EventsHelper 5 include EventsHelper
6 6
test/unit/forum_helper_test.rb
1 require_relative "../test_helper" 1 require_relative "../test_helper"
2 2
3 -class ForumHelperTest < ActiveSupport::TestCase 3 +class ForumHelperTest < ActionView::TestCase
4 4
5 include BlogHelper 5 include BlogHelper
6 include ForumHelper 6 include ForumHelper
@@ -58,7 +58,7 @@ class ForumHelperTest &lt; ActiveSupport::TestCase @@ -58,7 +58,7 @@ class ForumHelperTest &lt; ActiveSupport::TestCase
58 assert_match result, out 58 assert_match result, out
59 assert_match 'a2', out 59 assert_match 'a2', out
60 60
61 - assert_match(/#{result} by <a href='[^']+'>a2<\/a>/, last_topic_update(some_post)) 61 + assert_match(/#{result} by <a href="[^"]+">a2<\/a>/, last_topic_update(some_post))
62 end 62 end
63 63
64 should "return last comment author's name from unauthenticated user" do 64 should "return last comment author's name from unauthenticated user" do
test/unit/link_list_block_test.rb
@@ -79,13 +79,6 @@ class LinkListBlockTest &lt; ActiveSupport::TestCase @@ -79,13 +79,6 @@ class LinkListBlockTest &lt; ActiveSupport::TestCase
79 assert_tag_in_string render_block_content(l), :tag => 'a', :attributes => { :href => '/prefix/bar' } 79 assert_tag_in_string render_block_content(l), :tag => 'a', :attributes => { :href => '/prefix/bar' }
80 end 80 end
81 81
82 - should 'display options for icons' do  
83 - l = LinkListBlock.new  
84 - l.icons_options.each do |option|  
85 - assert_match(/<span title=\".+\" class=\"icon-.+\" onclick=\"changeIcon\(this, '.+'\)\"><\/span>/, option)  
86 - end  
87 - end  
88 -  
89 should 'link with icon' do 82 should 'link with icon' do
90 l = LinkListBlock.new(:links => [{:icon => 'save', :name => 'test', :address => 'test.com'}]) 83 l = LinkListBlock.new(:links => [{:icon => 'save', :name => 'test', :address => 'test.com'}])
91 assert_match /a class="icon-[^"]+"/, render_block_content(l) 84 assert_match /a class="icon-[^"]+"/, render_block_content(l)
test/unit/organization_test.rb
@@ -567,4 +567,24 @@ class OrganizationTest &lt; ActiveSupport::TestCase @@ -567,4 +567,24 @@ class OrganizationTest &lt; ActiveSupport::TestCase
567 assert_not_includes person_orgs, o7 567 assert_not_includes person_orgs, o7
568 assert_includes env_admin_orgs, o7 568 assert_includes env_admin_orgs, o7
569 end 569 end
  570 +
  571 + should 'return true at display_private_info_to? when profile is public and user is nil' do
  572 + organization = fast_create(Organization, public_profile: true)
  573 + assert organization.display_private_info_to?(nil)
  574 + end
  575 +
  576 + should 'return false at display_private_info_to? when profile is public and secret' do
  577 + organization = fast_create(Organization, public_profile: true, secret: true)
  578 + assert !organization.display_private_info_to?(nil)
  579 + end
  580 +
  581 + should 'return false at display_private_info_to? when profile is public and not visible' do
  582 + organization = fast_create(Organization, public_profile: true, visible: false)
  583 + assert !organization.display_private_info_to?(nil)
  584 + end
  585 +
  586 + should 'return false at display_private_info_to? when profile is private and user is nil' do
  587 + organization = fast_create(Organization, public_profile: false)
  588 + assert !organization.display_private_info_to?(nil)
  589 + end
570 end 590 end
test/unit/theme_loader_helper_test.rb
@@ -20,7 +20,7 @@ class ThemeLoaderHelperTest &lt; ActionView::TestCase @@ -20,7 +20,7 @@ class ThemeLoaderHelperTest &lt; ActionView::TestCase
20 end 20 end
21 21
22 should 'override theme with testing theme from session' do 22 should 'override theme with testing theme from session' do
23 - stubs(:session).returns(:theme => 'theme-under-test') 23 + stubs(:session).returns(:user_theme => 'theme-under-test')
24 assert_equal 'theme-under-test', current_theme 24 assert_equal 'theme-under-test', current_theme
25 end 25 end
26 26
@@ -30,7 +30,17 @@ class ThemeLoaderHelperTest &lt; ActionView::TestCase @@ -30,7 +30,17 @@ class ThemeLoaderHelperTest &lt; ActionView::TestCase
30 end 30 end
31 31
32 should 'point to user theme path when testing theme' do 32 should 'point to user theme path when testing theme' do
33 - stubs(:session).returns({:theme => 'theme-under-test'}) 33 + stubs(:session).returns({:user_theme => 'theme-under-test'})
34 assert_equal '/user_themes/theme-under-test', theme_path 34 assert_equal '/user_themes/theme-under-test', theme_path
35 end 35 end
36 -end  
37 \ No newline at end of file 36 \ No newline at end of file
  37 +
  38 + should 'point to session theme is defined' do
  39 + session = mock
  40 + stubs(:session).returns(session)
  41 + my_session_theme = 'session_theme'
  42 + session.stubs(:[]).with(:user_theme).returns(nil)
  43 + session.stubs(:[]).with(:theme).returns(my_session_theme)
  44 + assert_equal '/designs/themes/' + my_session_theme, theme_path
  45 + end
  46 +
  47 +end
test/unit/url_helper_test.rb 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +require 'test_helper'
  2 +
  3 +class UrlHelperTest < ActionView::TestCase
  4 +
  5 + include UrlHelper
  6 +
  7 + def setup
  8 + end
  9 +
  10 + should 'preserve override_user if present' do
  11 + params[:override_user] = 1
  12 + assert_equal default_url_options[:override_user], params[:override_user]
  13 + end
  14 +
  15 +end