Commit d168d5b8d7b39ff86aa693e1eaafe13f5e7b5e71
Exists in
master
and in
6 other branches
Merge branch 'master' into article_datetime
Showing
708 changed files
with
33534 additions
and
9743 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 708 files displayed.
AUTHORS.md
@@ -17,11 +17,13 @@ Ana Losnak <analosnak@gmail.com> | @@ -17,11 +17,13 @@ Ana Losnak <analosnak@gmail.com> | ||
17 | Ana Paula Vargas <anapaulavnoronha@gmail.com> | 17 | Ana Paula Vargas <anapaulavnoronha@gmail.com> |
18 | Andre Bedran <bedran.fleck@gmail.com> | 18 | Andre Bedran <bedran.fleck@gmail.com> |
19 | André Guedes <andrebsguedes@gmail.com> | 19 | André Guedes <andrebsguedes@gmail.com> |
20 | +Andrey Aleksanyants <aaleksanyants@yahoo.com> | ||
20 | Antonio Terceiro <terceiro@colivre.coop.br> | 21 | Antonio Terceiro <terceiro@colivre.coop.br> |
21 | Arthur Del Esposte <arthurmde@gmail.com> | 22 | Arthur Del Esposte <arthurmde@gmail.com> |
22 | Athos Ribeiro <athoscribeiro@gmail.com> | 23 | Athos Ribeiro <athoscribeiro@gmail.com> |
23 | Aurelio A. Heckert <aurelio@colivre.coop.br> | 24 | Aurelio A. Heckert <aurelio@colivre.coop.br> |
24 | Braulio Bhavamitra <braulio@eita.org.br> | 25 | Braulio Bhavamitra <braulio@eita.org.br> |
26 | +Brenddon Gontijo <brenddongontijo@msn.com> | ||
25 | Caio Formiga <caio.formiga@gmail.com> | 27 | Caio Formiga <caio.formiga@gmail.com> |
26 | Caio Salgado <caio.csalgado@gmail.com> | 28 | Caio Salgado <caio.csalgado@gmail.com> |
27 | Caio SBA <caio@colivre.coop.br> | 29 | Caio SBA <caio@colivre.coop.br> |
app/controllers/application_controller.rb
@@ -7,7 +7,10 @@ class ApplicationController < ActionController::Base | @@ -7,7 +7,10 @@ class ApplicationController < ActionController::Base | ||
7 | before_filter :detect_stuff_by_domain | 7 | before_filter :detect_stuff_by_domain |
8 | before_filter :init_noosfero_plugins | 8 | before_filter :init_noosfero_plugins |
9 | before_filter :allow_cross_domain_access | 9 | before_filter :allow_cross_domain_access |
10 | + | ||
11 | + before_filter :login_from_cookie | ||
10 | before_filter :login_required, :if => :private_environment? | 12 | before_filter :login_required, :if => :private_environment? |
13 | + | ||
11 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] | 14 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] |
12 | before_filter :redirect_to_current_user | 15 | before_filter :redirect_to_current_user |
13 | 16 |
app/controllers/my_profile/enterprise_validation_controller.rb
1 | class EnterpriseValidationController < MyProfileController | 1 | class EnterpriseValidationController < MyProfileController |
2 | 2 | ||
3 | protect 'validate_enterprise', :profile | 3 | protect 'validate_enterprise', :profile |
4 | - | 4 | + |
5 | def index | 5 | def index |
6 | @pending_validations = profile.pending_validations | 6 | @pending_validations = profile.pending_validations |
7 | end | 7 | end |
@@ -27,7 +27,7 @@ class EnterpriseValidationController < MyProfileController | @@ -27,7 +27,7 @@ class EnterpriseValidationController < MyProfileController | ||
27 | post_only :reject | 27 | post_only :reject |
28 | def reject | 28 | def reject |
29 | @pending = profile.find_pending_validation(params[:id]) | 29 | @pending = profile.find_pending_validation(params[:id]) |
30 | - if @pending | 30 | + if @pending |
31 | @pending.reject_explanation = params[:reject_explanation] | 31 | @pending.reject_explanation = params[:reject_explanation] |
32 | begin | 32 | begin |
33 | @pending.reject | 33 | @pending.reject |
app/controllers/my_profile/profile_editor_controller.rb
@@ -5,6 +5,7 @@ class ProfileEditorController < MyProfileController | @@ -5,6 +5,7 @@ class ProfileEditorController < MyProfileController | ||
5 | 5 | ||
6 | before_filter :access_welcome_page, :only => [:welcome_page] | 6 | before_filter :access_welcome_page, :only => [:welcome_page] |
7 | before_filter :back_to | 7 | before_filter :back_to |
8 | + before_filter :forbid_destroy_profile, :only => [:destroy_profile] | ||
8 | helper_method :has_welcome_page | 9 | helper_method :has_welcome_page |
9 | 10 | ||
10 | def index | 11 | def index |
@@ -109,7 +110,7 @@ class ProfileEditorController < MyProfileController | @@ -109,7 +110,7 @@ class ProfileEditorController < MyProfileController | ||
109 | profile = environment.profiles.find(params[:id]) | 110 | profile = environment.profiles.find(params[:id]) |
110 | if profile.disable | 111 | if profile.disable |
111 | profile.save | 112 | profile.save |
112 | - session[:notice] = _("The profile '#{profile.name}' was deactivated.") | 113 | + session[:notice] = _("The profile '%s' was deactivated.") % profile.name |
113 | else | 114 | else |
114 | session[:notice] = _('Could not deactivate profile.') | 115 | session[:notice] = _('Could not deactivate profile.') |
115 | end | 116 | end |
@@ -123,7 +124,7 @@ class ProfileEditorController < MyProfileController | @@ -123,7 +124,7 @@ class ProfileEditorController < MyProfileController | ||
123 | profile = environment.profiles.find(params[:id]) | 124 | profile = environment.profiles.find(params[:id]) |
124 | 125 | ||
125 | if profile.enable | 126 | if profile.enable |
126 | - session[:notice] = _("The profile '#{profile.name}' was activated.") | 127 | + session[:notice] = _("The profile '%s' was activated.") % profile.name |
127 | else | 128 | else |
128 | session[:notice] = _('Could not activate the profile.') | 129 | session[:notice] = _('Could not activate the profile.') |
129 | end | 130 | end |
@@ -155,4 +156,10 @@ class ProfileEditorController < MyProfileController | @@ -155,4 +156,10 @@ class ProfileEditorController < MyProfileController | ||
155 | end | 156 | end |
156 | end | 157 | end |
157 | 158 | ||
159 | + def forbid_destroy_profile | ||
160 | + if environment.enabled?('forbid_destroy_profile') && !current_person.is_admin?(environment) | ||
161 | + session[:notice] = _('You can not destroy the profile.') | ||
162 | + redirect_to_previous_location | ||
163 | + end | ||
164 | + end | ||
158 | end | 165 | end |
app/controllers/public/account_controller.rb
@@ -16,7 +16,7 @@ class AccountController < ApplicationController | @@ -16,7 +16,7 @@ class AccountController < ApplicationController | ||
16 | def activate | 16 | def activate |
17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] | 17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] |
18 | if @user | 18 | if @user |
19 | - unless @user.environment.enabled?('admin_must_approve_new_users') | 19 | + unless @user.environment.enabled?('admin_must_approve_new_users') |
20 | if @user.activate | 20 | if @user.activate |
21 | @message = _("Your account has been activated, now you can log in!") | 21 | @message = _("Your account has been activated, now you can log in!") |
22 | check_redirection | 22 | check_redirection |
@@ -30,7 +30,7 @@ class AccountController < ApplicationController | @@ -30,7 +30,7 @@ class AccountController < ApplicationController | ||
30 | @user.activation_code = nil | 30 | @user.activation_code = nil |
31 | @user.save! | 31 | @user.save! |
32 | redirect_to :controller => :home | 32 | redirect_to :controller => :home |
33 | - end | 33 | + end |
34 | end | 34 | end |
35 | else | 35 | else |
36 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") | 36 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") |
@@ -50,10 +50,12 @@ class AccountController < ApplicationController | @@ -50,10 +50,12 @@ class AccountController < ApplicationController | ||
50 | 50 | ||
51 | if logged_in? | 51 | if logged_in? |
52 | check_join_in_community(self.current_user) | 52 | check_join_in_community(self.current_user) |
53 | + | ||
53 | if params[:remember_me] == "1" | 54 | if params[:remember_me] == "1" |
54 | self.current_user.remember_me | 55 | self.current_user.remember_me |
55 | - cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } | 56 | + cookies[:auth_token] = {value: self.current_user.remember_token, expires: self.current_user.remember_token_expires_at} |
56 | end | 57 | end |
58 | + | ||
57 | if redirect? | 59 | if redirect? |
58 | go_to_initial_page | 60 | go_to_initial_page |
59 | session[:notice] = _("Logged in successfully") | 61 | session[:notice] = _("Logged in successfully") |
@@ -92,6 +94,7 @@ class AccountController < ApplicationController | @@ -92,6 +94,7 @@ class AccountController < ApplicationController | ||
92 | @invitation_code = params[:invitation_code] | 94 | @invitation_code = params[:invitation_code] |
93 | begin | 95 | begin |
94 | @user = User.new(params[:user]) | 96 | @user = User.new(params[:user]) |
97 | + @user.session = session | ||
95 | @user.terms_of_use = environment.terms_of_use | 98 | @user.terms_of_use = environment.terms_of_use |
96 | @user.environment = environment | 99 | @user.environment = environment |
97 | @terms_of_use = environment.terms_of_use | 100 | @terms_of_use = environment.terms_of_use |
@@ -435,7 +438,7 @@ class AccountController < ApplicationController | @@ -435,7 +438,7 @@ class AccountController < ApplicationController | ||
435 | end | 438 | end |
436 | 439 | ||
437 | def go_to_signup_initial_page | 440 | def go_to_signup_initial_page |
438 | - check_redirection_options(user, user.environment.redirection_after_signup, user.url) | 441 | + check_redirection_options user, user.environment.redirection_after_signup, user.url, signup: true |
439 | end | 442 | end |
440 | 443 | ||
441 | def redirect_if_logged_in | 444 | def redirect_if_logged_in |
@@ -455,8 +458,11 @@ class AccountController < ApplicationController | @@ -455,8 +458,11 @@ class AccountController < ApplicationController | ||
455 | 458 | ||
456 | protected | 459 | protected |
457 | 460 | ||
458 | - def check_redirection_options(user, condition, default) | ||
459 | - case condition | 461 | + def check_redirection_options user, condition, default, options={} |
462 | + if options[:signup] and target = session.delete(:after_signup_redirect_to) | ||
463 | + redirect_to target | ||
464 | + else | ||
465 | + case condition | ||
460 | when 'keep_on_same_page' | 466 | when 'keep_on_same_page' |
461 | redirect_back_or_default(user.admin_url) | 467 | redirect_back_or_default(user.admin_url) |
462 | when 'site_homepage' | 468 | when 'site_homepage' |
@@ -469,8 +475,11 @@ class AccountController < ApplicationController | @@ -469,8 +475,11 @@ class AccountController < ApplicationController | ||
469 | redirect_to user.admin_url | 475 | redirect_to user.admin_url |
470 | when 'welcome_page' | 476 | when 'welcome_page' |
471 | redirect_to :controller => :home, :action => :welcome, :template_id => (user.template && user.template.id) | 477 | redirect_to :controller => :home, :action => :welcome, :template_id => (user.template && user.template.id) |
472 | - else | ||
473 | - redirect_back_or_default(default) | 478 | + when 'custom_url' |
479 | + if (url = user.custom_url_redirection).present? then redirect_to url else redirect_back_or_default default end | ||
480 | + else | ||
481 | + redirect_back_or_default(default) | ||
482 | + end | ||
474 | end | 483 | end |
475 | end | 484 | end |
476 | 485 |
app/controllers/public/profile_controller.rb
@@ -6,6 +6,7 @@ class ProfileController < PublicController | @@ -6,6 +6,7 @@ class ProfileController < PublicController | ||
6 | before_filter :login_required, :only => [:add, :join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_activities, :view_more_network_activities, :report_abuse, :register_report, :leave_comment_on_activity, :send_mail] | 6 | before_filter :login_required, :only => [:add, :join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_activities, :view_more_network_activities, :report_abuse, :register_report, :leave_comment_on_activity, :send_mail] |
7 | 7 | ||
8 | helper TagsHelper | 8 | helper TagsHelper |
9 | + helper ActionTrackerHelper | ||
9 | 10 | ||
10 | protect 'send_mail_to_members', :profile, :only => [:send_mail] | 11 | protect 'send_mail_to_members', :profile, :only => [:send_mail] |
11 | 12 |
@@ -0,0 +1,94 @@ | @@ -0,0 +1,94 @@ | ||
1 | +module ActionTrackerHelper | ||
2 | + | ||
3 | + def create_article_description ta | ||
4 | + _('published an article: %{title}') % { title: link_to(truncate(ta.get_name), ta.get_url) } | ||
5 | + end | ||
6 | + | ||
7 | + def new_friendship_description ta | ||
8 | + n_('has made 1 new friend:<br />%{name}', 'has made %{num} new friends:<br />%{name}', ta.get_friend_name.size) % { | ||
9 | + num: ta.get_friend_name.size, | ||
10 | + name: ta.collect_group_with_index(:friend_name) do |n,i| | ||
11 | + link_to image_tag(ta.get_friend_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/person-icon.png")), | ||
12 | + ta.get_friend_url[i], title: n | ||
13 | + end.join | ||
14 | + } | ||
15 | + end | ||
16 | + | ||
17 | + def join_community_description ta | ||
18 | + n_('has joined 1 community:<br />%{name}', 'has joined %{num} communities:<br />%{name}', ta.get_resource_name.size) % { | ||
19 | + num: ta.get_resource_name.size, | ||
20 | + name: ta.collect_group_with_index(:resource_name) do |n,i| | ||
21 | + link_to image_tag(ta.get_resource_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/community-icon.png")), | ||
22 | + ta.get_resource_url[i], title: n | ||
23 | + end.join | ||
24 | + } | ||
25 | + end | ||
26 | + | ||
27 | + def add_member_in_community_description ta | ||
28 | + _('has joined the community.') | ||
29 | + end | ||
30 | + | ||
31 | + def upload_image_description ta | ||
32 | + total = ta.get_view_url.size | ||
33 | + (n_('uploaded 1 image', 'uploaded %d images', total) % total) + | ||
34 | + tag(:br) + | ||
35 | + ta.collect_group_with_index(:thumbnail_path) do |t,i| | ||
36 | + if total == 1 | ||
37 | + link_to image_tag(t), ta.get_view_url[i], class: 'upimg' | ||
38 | + else | ||
39 | + pos = total-i; | ||
40 | + morethen2 = pos>2 ? 'morethen2' : '' | ||
41 | + morethen5 = pos>5 ? 'morethen5' : '' | ||
42 | + t = t.gsub(/(.*)(display)(.*)/, '\\1thumb\\3') | ||
43 | + | ||
44 | + link_to ' '.html_safe, ta.get_view_url[i], | ||
45 | + style: "background-image:url(#{t})", | ||
46 | + class: "upimg pos#{pos} #{morethen2} #{morethen5}" | ||
47 | + end | ||
48 | + end.reverse.join + | ||
49 | + if total <= 5 then ''.html_safe else content_tag :span, '…'.html_safe, | ||
50 | + class: 'more', onclick: "this.parentNode.className+=' show-all'" end + | ||
51 | + tag(:br, style: 'clear: both') | ||
52 | + end | ||
53 | + | ||
54 | + def reply_scrap_description ta | ||
55 | + _('sent a message to %{receiver}: <br /> "%{message}"') % { | ||
56 | + receiver: link_to(ta.get_receiver_name, ta.get_receiver_url), | ||
57 | + message: auto_link_urls(ta.get_content) | ||
58 | + } | ||
59 | + end | ||
60 | + | ||
61 | + alias :leave_scrap_description :reply_scrap_description | ||
62 | + alias :reply_scrap_on_self_description :reply_scrap_description | ||
63 | + | ||
64 | + def leave_scrap_to_self_description ta | ||
65 | + _('wrote: <br /> "%{text}"') % { | ||
66 | + text: auto_link_urls(ta.get_content) | ||
67 | + } | ||
68 | + end | ||
69 | + | ||
70 | + def create_product_description | ||
71 | + _('created the product %{title}') % { | ||
72 | + title: link_to(truncate(ta.get_name), ta.get_url), | ||
73 | + } | ||
74 | + end | ||
75 | + | ||
76 | + def update_product_description | ||
77 | + _('updated the product %{title}') % { | ||
78 | + title: link_to(truncate(ta.get_name), ta.get_url), | ||
79 | + } | ||
80 | + end | ||
81 | + | ||
82 | + def remove_product_description | ||
83 | + _('removed the product %{title}') % { | ||
84 | + title: truncate(ta.get_name), | ||
85 | + } | ||
86 | + end | ||
87 | + | ||
88 | + def favorite_enterprise_description ta | ||
89 | + _('favorited enterprise %{title}') % { | ||
90 | + title: link_to(truncate(ta.get_enterprise_name), ta.get_enterprise_url), | ||
91 | + } | ||
92 | + end | ||
93 | + | ||
94 | +end |
app/helpers/layout_helper.rb
@@ -77,15 +77,8 @@ module LayoutHelper | @@ -77,15 +77,8 @@ module LayoutHelper | ||
77 | 77 | ||
78 | 78 | ||
79 | def icon_theme_stylesheet_path | 79 | def icon_theme_stylesheet_path |
80 | - icon_themes = [] | ||
81 | theme_icon_themes = theme_option(:icon_theme) || [] | 80 | theme_icon_themes = theme_option(:icon_theme) || [] |
82 | - for icon_theme in theme_icon_themes do | ||
83 | - theme_path = "designs/icons/#{icon_theme}/style.css" | ||
84 | - if File.exists?(Rails.root.join('public', theme_path)) | ||
85 | - icon_themes << theme_path | ||
86 | - end | ||
87 | - end | ||
88 | - icon_themes | 81 | + theme_icon_themes.map{ |it| "designs/icons/#{it}/style.css" } |
89 | end | 82 | end |
90 | 83 | ||
91 | def jquery_ui_theme_stylesheet_path | 84 | def jquery_ui_theme_stylesheet_path |
app/mailers/scrap_notifier.rb
1 | class ScrapNotifier < ActionMailer::Base | 1 | class ScrapNotifier < ActionMailer::Base |
2 | def notification(scrap) | 2 | def notification(scrap) |
3 | sender, receiver = scrap.sender, scrap.receiver | 3 | sender, receiver = scrap.sender, scrap.receiver |
4 | + # for tests | ||
5 | + return unless receiver.email | ||
6 | + | ||
4 | @recipient = receiver.name | 7 | @recipient = receiver.name |
5 | @sender = sender.name | 8 | @sender = sender.name |
6 | @sender_link = sender.url | 9 | @sender_link = sender.url |
app/models/add_member.rb
@@ -26,7 +26,8 @@ class AddMember < Task | @@ -26,7 +26,8 @@ class AddMember < Task | ||
26 | end | 26 | end |
27 | 27 | ||
28 | def information | 28 | def information |
29 | - {:message => _('%{requestor} wants to be a member of this community.')} | 29 | + {:message => _("%{requestor} wants to be a member of '%{organization}'."), |
30 | + variables: {requestor: requestor.name, organization: organization.name}} | ||
30 | end | 31 | end |
31 | 32 | ||
32 | def accept_details | 33 | def accept_details |
@@ -42,7 +43,7 @@ class AddMember < Task | @@ -42,7 +43,7 @@ class AddMember < Task | ||
42 | end | 43 | end |
43 | 44 | ||
44 | def target_notification_description | 45 | def target_notification_description |
45 | - _('%{requestor} wants to be a member of this community.') % {:requestor => requestor.name} | 46 | + _("%{requestor} wants to be a member of '%{organization}'.") % {:requestor => requestor.name, :organization => organization.name} |
46 | end | 47 | end |
47 | 48 | ||
48 | def target_notification_message | 49 | def target_notification_message |
app/models/community.rb
@@ -86,8 +86,8 @@ class Community < Organization | @@ -86,8 +86,8 @@ class Community < Organization | ||
86 | {:title => _('Community Info and settings'), :icon => 'edit-profile-group'} | 86 | {:title => _('Community Info and settings'), :icon => 'edit-profile-group'} |
87 | end | 87 | end |
88 | 88 | ||
89 | - def activities | ||
90 | - Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.target_id = #{self.id} and action_tracker.verb != 'join_community' and action_tracker.verb != 'leave_scrap' UNION SELECT at.id, at.updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} at INNER JOIN articles a ON at.target_id = a.id WHERE a.profile_id = #{self.id} AND at.target_type = 'Article' ORDER BY updated_at DESC") | 89 | + def exclude_verbs_on_activities |
90 | + %w[join_community leave_scrap] | ||
91 | end | 91 | end |
92 | 92 | ||
93 | end | 93 | end |
app/models/enterprise.rb
@@ -15,12 +15,15 @@ class Enterprise < Organization | @@ -15,12 +15,15 @@ class Enterprise < Organization | ||
15 | 15 | ||
16 | N_('Enterprise') | 16 | N_('Enterprise') |
17 | 17 | ||
18 | - has_many :products, :foreign_key => :profile_id, :dependent => :destroy, :order => 'name ASC' | 18 | + acts_as_trackable after_add: proc{ |p, t| notify_activity t } |
19 | + | ||
20 | + has_many :products, :foreign_key => :profile_id, :dependent => :destroy | ||
21 | + has_many :product_categories, :through => :products | ||
19 | has_many :inputs, :through => :products | 22 | has_many :inputs, :through => :products |
20 | has_many :production_costs, :as => :owner | 23 | has_many :production_costs, :as => :owner |
21 | 24 | ||
22 | has_many :favorite_enterprise_people | 25 | has_many :favorite_enterprise_people |
23 | - has_many :fans, through: :favorite_enterprise_people, source: :person | 26 | + has_many :fans, source: :person, through: :favorite_enterprise_people |
24 | 27 | ||
25 | def product_categories | 28 | def product_categories |
26 | ProductCategory.by_enterprise(self) | 29 | ProductCategory.by_enterprise(self) |
@@ -194,10 +197,6 @@ class Enterprise < Organization | @@ -194,10 +197,6 @@ class Enterprise < Organization | ||
194 | true | 197 | true |
195 | end | 198 | end |
196 | 199 | ||
197 | - def activities | ||
198 | - Scrap.find_by_sql("SELECT id, updated_at, 'Scrap' AS klass FROM scraps WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, 'ActionTracker::Record' AS klass FROM action_tracker WHERE action_tracker.target_id = #{self.id} UNION SELECT action_tracker.id, action_tracker.updated_at, 'ActionTracker::Record' AS klass FROM action_tracker INNER JOIN articles ON action_tracker.target_id = articles.id WHERE articles.profile_id = #{self.id} AND action_tracker.target_type = 'Article' ORDER BY updated_at DESC") | ||
199 | - end | ||
200 | - | ||
201 | def catalog_url | 200 | def catalog_url |
202 | { :profile => identifier, :controller => 'catalog'} | 201 | { :profile => identifier, :controller => 'catalog'} |
203 | end | 202 | end |
@@ -206,4 +205,9 @@ class Enterprise < Organization | @@ -206,4 +205,9 @@ class Enterprise < Organization | ||
206 | '' | 205 | '' |
207 | end | 206 | end |
208 | 207 | ||
208 | + def followed_by? person | ||
209 | + super or self.fans.where(id: person.id).count > 0 | ||
210 | + end | ||
211 | + | ||
212 | + | ||
209 | end | 213 | end |
app/models/environment.rb
@@ -128,6 +128,7 @@ class Environment < ActiveRecord::Base | @@ -128,6 +128,7 @@ class Environment < ActiveRecord::Base | ||
128 | 'disable_select_city_for_contact' => _('Disable state/city select for contact form'), | 128 | 'disable_select_city_for_contact' => _('Disable state/city select for contact form'), |
129 | 'disable_contact_person' => _('Disable contact for people'), | 129 | 'disable_contact_person' => _('Disable contact for people'), |
130 | 'disable_contact_community' => _('Disable contact for groups/communities'), | 130 | 'disable_contact_community' => _('Disable contact for groups/communities'), |
131 | + 'forbid_destroy_profile' => _('Forbid users of removing profiles'), | ||
131 | 132 | ||
132 | 'products_for_enterprises' => _('Enable products for enterprises'), | 133 | 'products_for_enterprises' => _('Enable products for enterprises'), |
133 | 'enterprise_registration' => _('Enterprise registration'), | 134 | 'enterprise_registration' => _('Enterprise registration'), |
@@ -167,7 +168,8 @@ class Environment < ActiveRecord::Base | @@ -167,7 +168,8 @@ class Environment < ActiveRecord::Base | ||
167 | 'site_homepage' => _('Redirects the user to the environment homepage.'), | 168 | 'site_homepage' => _('Redirects the user to the environment homepage.'), |
168 | 'user_profile_page' => _('Redirects the user to his profile page.'), | 169 | 'user_profile_page' => _('Redirects the user to his profile page.'), |
169 | 'user_homepage' => _('Redirects the user to his homepage.'), | 170 | 'user_homepage' => _('Redirects the user to his homepage.'), |
170 | - 'user_control_panel' => _('Redirects the user to his control panel.') | 171 | + 'user_control_panel' => _('Redirects the user to his control panel.'), |
172 | + 'custom_url' => _('Specify the URL to redirect to:'), | ||
171 | } | 173 | } |
172 | end | 174 | end |
173 | validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true | 175 | validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true |
@@ -248,6 +250,9 @@ class Environment < ActiveRecord::Base | @@ -248,6 +250,9 @@ class Environment < ActiveRecord::Base | ||
248 | # store the Environment settings as YAML-serialized Hash. | 250 | # store the Environment settings as YAML-serialized Hash. |
249 | acts_as_having_settings :field => :settings | 251 | acts_as_having_settings :field => :settings |
250 | 252 | ||
253 | + # introduce and explain to users something about the signup | ||
254 | + settings_items :signup_intro, :type => String | ||
255 | + | ||
251 | # the environment's terms of use: every user must accept them before registering. | 256 | # the environment's terms of use: every user must accept them before registering. |
252 | settings_items :terms_of_use, :type => String | 257 | settings_items :terms_of_use, :type => String |
253 | 258 | ||
@@ -282,7 +287,20 @@ class Environment < ActiveRecord::Base | @@ -282,7 +287,20 @@ class Environment < ActiveRecord::Base | ||
282 | settings_items :activation_blocked_text, :type => String | 287 | settings_items :activation_blocked_text, :type => String |
283 | settings_items :message_for_disabled_enterprise, :type => String, | 288 | settings_items :message_for_disabled_enterprise, :type => String, |
284 | :default => _('This enterprise needs to be enabled.') | 289 | :default => _('This enterprise needs to be enabled.') |
285 | - settings_items :location, :type => String | 290 | + |
291 | + settings_items :contact_phone, type: String | ||
292 | + settings_items :address, type: String | ||
293 | + settings_items :city, type: String | ||
294 | + settings_items :state, type: String | ||
295 | + settings_items :country_name, type: String | ||
296 | + settings_items :lat, type: Float | ||
297 | + settings_items :lng, type: Float | ||
298 | + settings_items :postal_code, type: String | ||
299 | + settings_items :location, type: String | ||
300 | + | ||
301 | + alias_method :zip_code=, :postal_code | ||
302 | + alias_method :zip_code, :postal_code | ||
303 | + | ||
286 | settings_items :layout_template, :type => String, :default => 'default' | 304 | settings_items :layout_template, :type => String, :default => 'default' |
287 | settings_items :homepage, :type => String | 305 | settings_items :homepage, :type => String |
288 | settings_items :description, :type => String, :default => '<div style="text-align: center"><a href="http://noosfero.org/"><img src="/images/noosfero-network.png" alt="Noosfero"/></a></div>' | 306 | settings_items :description, :type => String, :default => '<div style="text-align: center"><a href="http://noosfero.org/"><img src="/images/noosfero-network.png" alt="Noosfero"/></a></div>' |
app/models/favorite_enterprise_person.rb
1 | class FavoriteEnterprisePerson < ActiveRecord::Base | 1 | class FavoriteEnterprisePerson < ActiveRecord::Base |
2 | 2 | ||
3 | - self.table_name = :favorite_enteprises_people | 3 | + attr_accessible :person, :enterprise |
4 | + | ||
5 | + track_actions :favorite_enterprise, :after_create, keep_params: [:enterprise_name, :enterprise_url], if: proc{ |f| f.is_trackable? } | ||
4 | 6 | ||
5 | belongs_to :enterprise | 7 | belongs_to :enterprise |
6 | belongs_to :person | 8 | belongs_to :person |
7 | 9 | ||
10 | + protected | ||
11 | + | ||
12 | + def is_trackable? | ||
13 | + self.enterprise.public? | ||
14 | + end | ||
15 | + | ||
16 | + def enterprise_name | ||
17 | + self.enterprise.short_name(nil) | ||
18 | + end | ||
19 | + def enterprise_url | ||
20 | + self.enterprise.url | ||
21 | + end | ||
22 | + | ||
8 | end | 23 | end |
app/models/organization.rb
@@ -35,6 +35,10 @@ class Organization < Profile | @@ -35,6 +35,10 @@ class Organization < Profile | ||
35 | 35 | ||
36 | validate :presence_of_required_fieds, :unless => :is_template | 36 | validate :presence_of_required_fieds, :unless => :is_template |
37 | 37 | ||
38 | + def self.notify_activity tracked_action | ||
39 | + Delayed::Job.enqueue NotifyActivityToProfilesJob.new(tracked_action.id) | ||
40 | + end | ||
41 | + | ||
38 | def presence_of_required_fieds | 42 | def presence_of_required_fieds |
39 | self.required_fields.each do |field| | 43 | self.required_fields.each do |field| |
40 | if self.send(field).blank? | 44 | if self.send(field).blank? |
app/models/person.rb
@@ -81,6 +81,9 @@ roles] } | @@ -81,6 +81,9 @@ roles] } | ||
81 | 81 | ||
82 | has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id, :dependent => :destroy | 82 | has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id, :dependent => :destroy |
83 | 83 | ||
84 | + has_many :favorite_enterprise_people | ||
85 | + has_many :favorite_enterprises, source: :enterprise, through: :favorite_enterprise_people | ||
86 | + | ||
84 | has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people' | 87 | has_and_belongs_to_many :acepted_forums, :class_name => 'Forum', :join_table => 'terms_forum_people' |
85 | has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions' | 88 | has_and_belongs_to_many :articles_with_access, :class_name => 'Article', :join_table => 'article_privacy_exceptions' |
86 | 89 | ||
@@ -315,8 +318,6 @@ roles] } | @@ -315,8 +318,6 @@ roles] } | ||
315 | ] | 318 | ] |
316 | end | 319 | end |
317 | 320 | ||
318 | - has_and_belongs_to_many :favorite_enterprises, :class_name => 'Enterprise', :join_table => 'favorite_enteprises_people' | ||
319 | - | ||
320 | def email_domain | 321 | def email_domain |
321 | user && user.email_domain || environment.default_hostname(true) | 322 | user && user.email_domain || environment.default_hostname(true) |
322 | end | 323 | end |
@@ -496,8 +497,8 @@ roles] } | @@ -496,8 +497,8 @@ roles] } | ||
496 | user.save! | 497 | user.save! |
497 | end | 498 | end |
498 | 499 | ||
499 | - def activities | ||
500 | - Scrap.find_by_sql("SELECT id, updated_at, '#{Scrap.to_s}' AS klass FROM #{Scrap.table_name} WHERE scraps.receiver_id = #{self.id} AND scraps.scrap_id IS NULL UNION SELECT id, updated_at, '#{ActionTracker::Record.to_s}' AS klass FROM #{ActionTracker::Record.table_name} WHERE action_tracker.user_id = #{self.id} and action_tracker.verb != 'leave_scrap_to_self' and action_tracker.verb != 'add_member_in_community' and action_tracker.verb != 'reply_scrap_on_self' ORDER BY updated_at DESC") | 500 | + def exclude_verbs_on_activities |
501 | + %w[leave_scrap_to_self add_member_in_community reply_scrap_on_self] | ||
501 | end | 502 | end |
502 | 503 | ||
503 | # by default, all fields are private | 504 | # by default, all fields are private |
app/models/person_notifier.rb
@@ -76,7 +76,8 @@ class PersonNotifier | @@ -76,7 +76,8 @@ class PersonNotifier | ||
76 | 76 | ||
77 | class Mailer < ActionMailer::Base | 77 | class Mailer < ActionMailer::Base |
78 | 78 | ||
79 | - add_template_helper(ApplicationHelper) | 79 | + helper ApplicationHelper |
80 | + helper ActionTrackerHelper | ||
80 | 81 | ||
81 | def session | 82 | def session |
82 | {:theme => nil} | 83 | {:theme => nil} |
app/models/product.rb
@@ -17,13 +17,14 @@ class Product < ActiveRecord::Base | @@ -17,13 +17,14 @@ class Product < ActiveRecord::Base | ||
17 | 'full' | 17 | 'full' |
18 | end | 18 | end |
19 | 19 | ||
20 | - belongs_to :enterprise, :foreign_key => :profile_id, :class_name => 'Profile' | ||
21 | belongs_to :profile | 20 | belongs_to :profile |
21 | + # backwards compatibility | ||
22 | + belongs_to :enterprise, :foreign_key => :profile_id, :class_name => 'Profile' | ||
22 | alias_method :enterprise=, :profile= | 23 | alias_method :enterprise=, :profile= |
23 | alias_method :enterprise, :profile | 24 | alias_method :enterprise, :profile |
24 | 25 | ||
25 | - has_one :region, :through => :enterprise | ||
26 | - validates_presence_of :enterprise | 26 | + has_one :region, :through => :profile |
27 | + validates_presence_of :profile | ||
27 | 28 | ||
28 | belongs_to :product_category | 29 | belongs_to :product_category |
29 | 30 | ||
@@ -37,6 +38,10 @@ class Product < ActiveRecord::Base | @@ -37,6 +38,10 @@ class Product < ActiveRecord::Base | ||
37 | 38 | ||
38 | acts_as_having_settings :field => :data | 39 | acts_as_having_settings :field => :data |
39 | 40 | ||
41 | + track_actions :create_product, :after_create, :keep_params => [:name, :url ], :if => Proc.new { |a| a.is_trackable? }, :custom_user => :action_tracker_user | ||
42 | + track_actions :update_product, :before_update, :keep_params => [:name, :url], :if => Proc.new { |a| a.is_trackable? }, :custom_user => :action_tracker_user | ||
43 | + track_actions :remove_product, :before_destroy, :keep_params => [:name], :if => Proc.new { |a| a.is_trackable? }, :custom_user => :action_tracker_user | ||
44 | + | ||
40 | validates_uniqueness_of :name, :scope => :profile_id, :allow_nil => true, :if => :validate_uniqueness_of_column_name? | 45 | validates_uniqueness_of :name, :scope => :profile_id, :allow_nil => true, :if => :validate_uniqueness_of_column_name? |
41 | 46 | ||
42 | validates_presence_of :product_category_id | 47 | validates_presence_of :product_category_id |
@@ -54,10 +59,10 @@ class Product < ActiveRecord::Base | @@ -54,10 +59,10 @@ class Product < ActiveRecord::Base | ||
54 | after_update :save_image | 59 | after_update :save_image |
55 | 60 | ||
56 | def lat | 61 | def lat |
57 | - self.enterprise.lat | 62 | + self.profile.lat |
58 | end | 63 | end |
59 | def lng | 64 | def lng |
60 | - self.enterprise.lng | 65 | + self.profile.lng |
61 | end | 66 | end |
62 | 67 | ||
63 | xss_terminate :only => [ :name ], :on => 'validation' | 68 | xss_terminate :only => [ :name ], :on => 'validation' |
@@ -71,7 +76,7 @@ class Product < ActiveRecord::Base | @@ -71,7 +76,7 @@ class Product < ActiveRecord::Base | ||
71 | filter_iframes :description | 76 | filter_iframes :description |
72 | 77 | ||
73 | def iframe_whitelist | 78 | def iframe_whitelist |
74 | - enterprise && enterprise.environment && enterprise.environment.trusted_sites_for_iframe | 79 | + self.profile && self.profile.environment && self.profile.environment.trusted_sites_for_iframe |
75 | end | 80 | end |
76 | 81 | ||
77 | def name | 82 | def name |
@@ -109,16 +114,16 @@ class Product < ActiveRecord::Base | @@ -109,16 +114,16 @@ class Product < ActiveRecord::Base | ||
109 | end | 114 | end |
110 | 115 | ||
111 | def url | 116 | def url |
112 | - enterprise.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => id) | 117 | + self.profile.public_profile_url.merge(:controller => 'manage_products', :action => 'show', :id => id) |
113 | end | 118 | end |
114 | 119 | ||
115 | def public? | 120 | def public? |
116 | - enterprise.public? | 121 | + self.profile.public? |
117 | end | 122 | end |
118 | 123 | ||
119 | def formatted_value(method) | 124 | def formatted_value(method) |
120 | value = self[method] || self.send(method) | 125 | value = self[method] || self.send(method) |
121 | - ("%.2f" % value).to_s.gsub('.', enterprise.environment.currency_separator) if value | 126 | + ("%.2f" % value).to_s.gsub('.', self.profile.environment.currency_separator) if value |
122 | end | 127 | end |
123 | 128 | ||
124 | def price_with_discount | 129 | def price_with_discount |
@@ -223,16 +228,16 @@ class Product < ActiveRecord::Base | @@ -223,16 +228,16 @@ class Product < ActiveRecord::Base | ||
223 | end | 228 | end |
224 | 229 | ||
225 | def available_production_costs | 230 | def available_production_costs |
226 | - self.enterprise.environment.production_costs + self.enterprise.production_costs | 231 | + self.profile.environment.production_costs + self.profile.production_costs |
227 | end | 232 | end |
228 | 233 | ||
229 | include Rails.application.routes.url_helpers | 234 | include Rails.application.routes.url_helpers |
230 | def price_composition_bar_display_url | 235 | def price_composition_bar_display_url |
231 | - url_for({:host => enterprise.default_hostname, :controller => 'manage_products', :action => 'display_price_composition_bar', :profile => enterprise.identifier, :id => self.id }.merge(Noosfero.url_options)) | 236 | + url_for({:host => self.profile.default_hostname, :controller => 'manage_products', :action => 'display_price_composition_bar', :profile => self.profile.identifier, :id => self.id }.merge(Noosfero.url_options)) |
232 | end | 237 | end |
233 | 238 | ||
234 | def inputs_cost_update_url | 239 | def inputs_cost_update_url |
235 | - url_for({:host => enterprise.default_hostname, :controller => 'manage_products', :action => 'display_inputs_cost', :profile => enterprise.identifier, :id => self.id }.merge(Noosfero.url_options)) | 240 | + url_for({:host => self.profile.default_hostname, :controller => 'manage_products', :action => 'display_inputs_cost', :profile => self.profile.identifier, :id => self.id }.merge(Noosfero.url_options)) |
236 | end | 241 | end |
237 | 242 | ||
238 | def percentage_from_solidarity_economy | 243 | def percentage_from_solidarity_economy |
@@ -249,7 +254,7 @@ class Product < ActiveRecord::Base | @@ -249,7 +254,7 @@ class Product < ActiveRecord::Base | ||
249 | end | 254 | end |
250 | end | 255 | end |
251 | 256 | ||
252 | - delegate :enabled, :region, :region_id, :environment, :environment_id, :to => :enterprise | 257 | + delegate :enabled, :region, :region_id, :environment, :environment_id, :to => :profile, allow_nil: true |
253 | 258 | ||
254 | protected | 259 | protected |
255 | 260 | ||
@@ -257,4 +262,13 @@ class Product < ActiveRecord::Base | @@ -257,4 +262,13 @@ class Product < ActiveRecord::Base | ||
257 | true | 262 | true |
258 | end | 263 | end |
259 | 264 | ||
265 | + def is_trackable? | ||
266 | + # shopping_cart create products without profile | ||
267 | + self.profile.present? | ||
268 | + end | ||
269 | + | ||
270 | + def action_tracker_user | ||
271 | + self.profile | ||
272 | + end | ||
273 | + | ||
260 | end | 274 | end |
app/models/profile.rb
@@ -3,7 +3,9 @@ | @@ -3,7 +3,9 @@ | ||
3 | # which by default is the one returned by Environment:default. | 3 | # which by default is the one returned by Environment:default. |
4 | class Profile < ActiveRecord::Base | 4 | class Profile < ActiveRecord::Base |
5 | 5 | ||
6 | - attr_accessible :name, :identifier, :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :environment, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, :redirection_after_login, :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret | 6 | + attr_accessible :name, :identifier, :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :environment, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, |
7 | + :redirection_after_login, :custom_url_redirection, | ||
8 | + :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret | ||
7 | 9 | ||
8 | # use for internationalizable human type names in search facets | 10 | # use for internationalizable human type names in search facets |
9 | # reimplement on subclasses | 11 | # reimplement on subclasses |
@@ -144,6 +146,7 @@ class Profile < ActiveRecord::Base | @@ -144,6 +146,7 @@ class Profile < ActiveRecord::Base | ||
144 | 146 | ||
145 | acts_as_trackable :dependent => :destroy | 147 | acts_as_trackable :dependent => :destroy |
146 | 148 | ||
149 | + has_many :profile_activities | ||
147 | has_many :action_tracker_notifications, :foreign_key => 'profile_id' | 150 | has_many :action_tracker_notifications, :foreign_key => 'profile_id' |
148 | has_many :tracked_notifications, :through => :action_tracker_notifications, :source => :action_tracker, :order => 'updated_at DESC' | 151 | has_many :tracked_notifications, :through => :action_tracker_notifications, :source => :action_tracker, :order => 'updated_at DESC' |
149 | has_many :scraps_received, :class_name => 'Scrap', :foreign_key => :receiver_id, :order => "updated_at DESC", :dependent => :destroy | 152 | has_many :scraps_received, :class_name => 'Scrap', :foreign_key => :receiver_id, :order => "updated_at DESC", :dependent => :destroy |
@@ -741,7 +744,11 @@ private :generate_url, :url_options | @@ -741,7 +744,11 @@ private :generate_url, :url_options | ||
741 | include ActionView::Helpers::TextHelper | 744 | include ActionView::Helpers::TextHelper |
742 | def short_name(chars = 40) | 745 | def short_name(chars = 40) |
743 | if self[:nickname].blank? | 746 | if self[:nickname].blank? |
744 | - truncate self.name, :length => chars, :omission => '...' | 747 | + if chars |
748 | + truncate self.name, length: chars, omission: '...' | ||
749 | + else | ||
750 | + self.name | ||
751 | + end | ||
745 | else | 752 | else |
746 | self[:nickname] | 753 | self[:nickname] |
747 | end | 754 | end |
@@ -974,9 +981,13 @@ private :generate_url, :url_options | @@ -974,9 +981,13 @@ private :generate_url, :url_options | ||
974 | name | 981 | name |
975 | end | 982 | end |
976 | 983 | ||
977 | - # Override in your subclasses | 984 | + def exclude_verbs_on_activities |
985 | + %w[] | ||
986 | + end | ||
987 | + | ||
988 | + # Customize in subclasses | ||
978 | def activities | 989 | def activities |
979 | - [] | 990 | + self.profile_activities.includes(:activity).order('updated_at DESC') |
980 | end | 991 | end |
981 | 992 | ||
982 | def may_display_field_to? field, user = nil | 993 | def may_display_field_to? field, user = nil |
@@ -1023,6 +1034,7 @@ private :generate_url, :url_options | @@ -1023,6 +1034,7 @@ private :generate_url, :url_options | ||
1023 | def preferred_login_redirection | 1034 | def preferred_login_redirection |
1024 | redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login | 1035 | redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login |
1025 | end | 1036 | end |
1037 | + settings_items :custom_url_redirection, type: String, default: nil | ||
1026 | 1038 | ||
1027 | def remove_from_suggestion_list(person) | 1039 | def remove_from_suggestion_list(person) |
1028 | suggestion = person.suggested_profiles.find_by_suggestion_id self.id | 1040 | suggestion = person.suggested_profiles.find_by_suggestion_id self.id |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +class ProfileActivity < ActiveRecord::Base | ||
2 | + | ||
3 | + self.record_timestamps = false | ||
4 | + | ||
5 | + attr_accessible :profile_id, | ||
6 | + :profile, :activity | ||
7 | + | ||
8 | + belongs_to :profile | ||
9 | + belongs_to :activity, polymorphic: true | ||
10 | + | ||
11 | + # non polymorphic versions | ||
12 | + belongs_to :scrap, foreign_key: :activity_id, class_name: 'Scrap', conditions: {profile_activities: {activity_type: 'Scrap'}} | ||
13 | + belongs_to :action_tracker, foreign_key: :activity_id, class_name: 'ActionTracker::Record', conditions: {profile_activities: {activity_type: 'ActionTracker::Record'}} | ||
14 | + | ||
15 | + before_validation :copy_timestamps | ||
16 | + | ||
17 | + def self.update_activity activity | ||
18 | + profile_activity = ProfileActivity.where(activity_id: activity.id, activity_type: activity.class.base_class.name).first | ||
19 | + profile_activity.send :copy_timestamps | ||
20 | + profile_activity.save! | ||
21 | + profile_activity | ||
22 | + end | ||
23 | + | ||
24 | + protected | ||
25 | + | ||
26 | + def copy_timestamps | ||
27 | + self.created_at = self.activity.created_at | ||
28 | + self.updated_at = self.activity.updated_at | ||
29 | + end | ||
30 | + | ||
31 | +end |
app/models/profile_list_block.rb
@@ -16,19 +16,19 @@ class ProfileListBlock < Block | @@ -16,19 +16,19 @@ class ProfileListBlock < Block | ||
16 | 16 | ||
17 | def profile_list | 17 | def profile_list |
18 | result = nil | 18 | result = nil |
19 | - visible_profiles = profiles.visible.includes([:image,:domains,:preferred_domain,:environment]) | 19 | + public_profiles = profiles.public.includes([:image,:domains,:preferred_domain,:environment]) |
20 | if !prioritize_profiles_with_image | 20 | if !prioritize_profiles_with_image |
21 | - result = visible_profiles.all(:limit => get_limit, :order => 'profiles.updated_at DESC').sort_by{ rand } | 21 | +result = public_profiles.all(:limit => get_limit, :order => 'profiles.updated_at DESC').sort_by{ rand } |
22 | elsif profiles.visible.with_image.count >= get_limit | 22 | elsif profiles.visible.with_image.count >= get_limit |
23 | - result = visible_profiles.with_image.all(:limit => get_limit * 5, :order => 'profiles.updated_at DESC').sort_by{ rand } | 23 | + result = public_profiles.with_image.all(:limit => get_limit * 5, :order => 'profiles.updated_at DESC').sort_by{ rand } |
24 | else | 24 | else |
25 | - result = visible_profiles.with_image.sort_by{ rand } + visible_profiles.without_image.all(:limit => get_limit * 5, :order => 'profiles.updated_at DESC').sort_by{ rand } | 25 | + result = public_profiles.with_image.sort_by{ rand } + public_profiles.without_image.all(:limit => get_limit * 5, :order => 'profiles.updated_at DESC').sort_by{ rand } |
26 | end | 26 | end |
27 | result.slice(0..get_limit-1) | 27 | result.slice(0..get_limit-1) |
28 | end | 28 | end |
29 | 29 | ||
30 | def profile_count | 30 | def profile_count |
31 | - profiles.visible.length | 31 | + profiles.public.length |
32 | end | 32 | end |
33 | 33 | ||
34 | # the title of the block. Probably will be overriden in subclasses. | 34 | # the title of the block. Probably will be overriden in subclasses. |
app/models/scrap.rb
@@ -13,6 +13,11 @@ class Scrap < ActiveRecord::Base | @@ -13,6 +13,11 @@ class Scrap < ActiveRecord::Base | ||
13 | has_many :replies, :class_name => 'Scrap', :foreign_key => 'scrap_id', :dependent => :destroy | 13 | has_many :replies, :class_name => 'Scrap', :foreign_key => 'scrap_id', :dependent => :destroy |
14 | belongs_to :root, :class_name => 'Scrap', :foreign_key => 'scrap_id' | 14 | belongs_to :root, :class_name => 'Scrap', :foreign_key => 'scrap_id' |
15 | 15 | ||
16 | + has_many :profile_activities, foreign_key: :activity_id, conditions: {profile_activities: {activity_type: 'Scrap'}}, dependent: :destroy | ||
17 | + | ||
18 | + after_create :create_activity | ||
19 | + after_update :update_activity | ||
20 | + | ||
16 | scope :all_scraps, lambda {|profile| {:conditions => ["receiver_id = ? OR sender_id = ?", profile, profile], :limit => 30}} | 21 | scope :all_scraps, lambda {|profile| {:conditions => ["receiver_id = ? OR sender_id = ?", profile, profile], :limit => 30}} |
17 | 22 | ||
18 | scope :not_replies, :conditions => {:scrap_id => nil} | 23 | scope :not_replies, :conditions => {:scrap_id => nil} |
@@ -23,10 +28,7 @@ class Scrap < ActiveRecord::Base | @@ -23,10 +28,7 @@ class Scrap < ActiveRecord::Base | ||
23 | 28 | ||
24 | track_actions :reply_scrap_on_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.sender != s.receiver && s.sender == s.top_root.receiver} | 29 | track_actions :reply_scrap_on_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.sender != s.receiver && s.sender == s.top_root.receiver} |
25 | 30 | ||
26 | - after_create do |scrap| | ||
27 | - scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil? | ||
28 | - ScrapNotifier.notification(scrap).deliver if scrap.send_notification? | ||
29 | - end | 31 | + after_create :send_notification |
30 | 32 | ||
31 | before_validation :strip_all_html_tags | 33 | before_validation :strip_all_html_tags |
32 | 34 | ||
@@ -57,4 +59,21 @@ class Scrap < ActiveRecord::Base | @@ -57,4 +59,21 @@ class Scrap < ActiveRecord::Base | ||
57 | sender != receiver && (is_root? ? root.receiver.receives_scrap_notification? : receiver.receives_scrap_notification?) | 59 | sender != receiver && (is_root? ? root.receiver.receives_scrap_notification? : receiver.receives_scrap_notification?) |
58 | end | 60 | end |
59 | 61 | ||
62 | + protected | ||
63 | + | ||
64 | + def create_activity | ||
65 | + # do not scrap replies (when scrap_id is not nil) | ||
66 | + return if self.scrap_id.present? | ||
67 | + ProfileActivity.create! profile_id: self.receiver_id, activity: self | ||
68 | + end | ||
69 | + | ||
70 | + def update_activity | ||
71 | + ProfileActivity.update_activity self | ||
72 | + end | ||
73 | + | ||
74 | + def send_notification | ||
75 | + self.root.update_attribute('updated_at', DateTime.now) unless self.root.nil? | ||
76 | + ScrapNotifier.notification(self).deliver if self.send_notification? | ||
77 | + end | ||
78 | + | ||
60 | end | 79 | end |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +class Session < ActiveRecord::SessionStore::Session | ||
2 | + | ||
3 | + # removed and redefined on super class | ||
4 | + def self.find_by_session_id session_id | ||
5 | + super | ||
6 | + end | ||
7 | + | ||
8 | + belongs_to :user | ||
9 | + | ||
10 | + before_save :copy_to_columns | ||
11 | + | ||
12 | + protected | ||
13 | + | ||
14 | + def copy_to_columns | ||
15 | + self.user_id = self.data['user'] | ||
16 | + end | ||
17 | + | ||
18 | +end |
app/models/user.rb
@@ -15,6 +15,14 @@ class User < ActiveRecord::Base | @@ -15,6 +15,14 @@ class User < ActiveRecord::Base | ||
15 | :email => {:label => _('Email'), :weight => 5}, | 15 | :email => {:label => _('Email'), :weight => 5}, |
16 | } | 16 | } |
17 | 17 | ||
18 | + # see http://stackoverflow.com/a/2513456/670229 | ||
19 | + def self.current | ||
20 | + Thread.current[:current_user] | ||
21 | + end | ||
22 | + def self.current=(user) | ||
23 | + Thread.current[:current_user] = user | ||
24 | + end | ||
25 | + | ||
18 | def self.[](login) | 26 | def self.[](login) |
19 | self.find_by_login(login) | 27 | self.find_by_login(login) |
20 | end | 28 | end |
@@ -88,6 +96,10 @@ class User < ActiveRecord::Base | @@ -88,6 +96,10 @@ class User < ActiveRecord::Base | ||
88 | has_one :person, :dependent => :destroy | 96 | has_one :person, :dependent => :destroy |
89 | belongs_to :environment | 97 | belongs_to :environment |
90 | 98 | ||
99 | + has_many :sessions, dependent: :destroy | ||
100 | + # holds the current session, see lib/authenticated_system.rb | ||
101 | + attr_accessor :session | ||
102 | + | ||
91 | attr_protected :activated_at | 103 | attr_protected :activated_at |
92 | 104 | ||
93 | # Virtual attribute for the unencrypted password | 105 | # Virtual attribute for the unencrypted password |
@@ -241,8 +253,9 @@ class User < ActiveRecord::Base | @@ -241,8 +253,9 @@ class User < ActiveRecord::Base | ||
241 | 253 | ||
242 | # These create and unset the fields required for remembering users between browser closes | 254 | # These create and unset the fields required for remembering users between browser closes |
243 | def remember_me | 255 | def remember_me |
244 | - self.remember_token_expires_at = 2.weeks.from_now.utc | ||
245 | - self.remember_token = encrypt("#{email}--#{remember_token_expires_at}") | 256 | + self.remember_token_expires_at = 1.months.from_now.utc |
257 | + # if the user's email/password changes this won't be valid anymore | ||
258 | + self.remember_token = encrypt "#{email}-#{self.crypted_password}-#{remember_token_expires_at}" | ||
246 | save(:validate => false) | 259 | save(:validate => false) |
247 | end | 260 | end |
248 | 261 |
app/models/validation_info.rb
@@ -2,9 +2,10 @@ class ValidationInfo < ActiveRecord::Base | @@ -2,9 +2,10 @@ class ValidationInfo < ActiveRecord::Base | ||
2 | 2 | ||
3 | attr_accessible :validation_methodology, :restrictions, :organization | 3 | attr_accessible :validation_methodology, :restrictions, :organization |
4 | 4 | ||
5 | - validates_presence_of :validation_methodology | ||
6 | - | ||
7 | belongs_to :organization | 5 | belongs_to :organization |
8 | 6 | ||
7 | + validates_presence_of :organization | ||
8 | + validates_presence_of :validation_methodology | ||
9 | + | ||
9 | xss_terminate :only => [ :validation_methodology, :restrictions ], :on => 'validation' | 10 | xss_terminate :only => [ :validation_methodology, :restrictions ], :on => 'validation' |
10 | end | 11 | end |
app/views/account/login.html.erb
@@ -13,7 +13,14 @@ | @@ -13,7 +13,14 @@ | ||
13 | 13 | ||
14 | <%= f.password_field :password %> | 14 | <%= f.password_field :password %> |
15 | 15 | ||
16 | - <%= @plugins.dispatch(:login_extra_contents).collect { |content| instance_eval(&content) }.join("") %> | 16 | + <div class='checkbox'> |
17 | + <label> | ||
18 | + <%= check_box_tag :remember_me, '1', true %> | ||
19 | + <%= _'Keep me logged in' %> | ||
20 | + </label> | ||
21 | + </div> | ||
22 | + | ||
23 | + <%= @plugins.dispatch(:login_extra_contents).collect { |content| instance_exec(&content) }.join("") %> | ||
17 | 24 | ||
18 | <% button_bar do %> | 25 | <% button_bar do %> |
19 | <%= submit_button( 'login', _('Log in') )%> | 26 | <%= submit_button( 'login', _('Log in') )%> |
app/views/account/signup.html.erb
@@ -0,0 +1,5 @@ | @@ -0,0 +1,5 @@ | ||
1 | +<div class='description'> | ||
2 | + <%= _('This text will be shown to the user on the top of the sign up form.') %> | ||
3 | +</div> | ||
4 | + | ||
5 | +<%= labelled_form_field(_('Body'), text_area(:environment, :signup_intro, :cols => 40, :style => 'width: 100%', :class => 'mceEditor')) %> |
app/views/admin_panel/site_info.html.erb
@@ -17,6 +17,8 @@ | @@ -17,6 +17,8 @@ | ||
17 | :content => (render :partial => 'signup_welcome_text', :locals => {:f => f})} %> | 17 | :content => (render :partial => 'signup_welcome_text', :locals => {:f => f})} %> |
18 | <% tabs << {:title => _('Signup welcome page'), :id => 'signup-welcome-message', | 18 | <% tabs << {:title => _('Signup welcome page'), :id => 'signup-welcome-message', |
19 | :content => (render :partial => 'signup_welcome_screen', :locals => {:f => f}) }%> | 19 | :content => (render :partial => 'signup_welcome_screen', :locals => {:f => f}) }%> |
20 | + <% tabs << {:title => _('Signup introduction text'), :id => 'signup-intro', | ||
21 | + :content => (render :partial => 'signup_intro', :locals => {:f => f})} %> | ||
20 | <%= render_tabs(tabs) %> | 22 | <%= render_tabs(tabs) %> |
21 | <% button_bar do %> | 23 | <% button_bar do %> |
22 | <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %> | 24 | <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %> |
app/views/blocks/profile_info_actions/_enterprise.html.erb
1 | <ul> | 1 | <ul> |
2 | <%if logged_in? %> | 2 | <%if logged_in? %> |
3 | <%if !user.favorite_enterprises.include?(profile) %> | 3 | <%if !user.favorite_enterprises.include?(profile) %> |
4 | - <li><%= button(:add, _('Add as favorite'), { :profile => user.identifier, :controller => 'favorite_enterprises', :action => 'add', :id => profile.id }, :title => _('Add enterprise as favorite')) %></li> | 4 | + <li><%= button(:love, _('Add as favorite'), { profile: user.identifier, controller: 'favorite_enterprises', action: 'add', id: profile.id }, title: _('Add enterprise as favorite')) %></li> |
5 | <% end %> | 5 | <% end %> |
6 | <% end %> | 6 | <% end %> |
7 | <% if profile.enable_contact? %> | 7 | <% if profile.enable_contact? %> |
app/views/blocks/profile_info_actions/_join_leave_community.html.erb
1 | <div class='join-leave-button require-login-popup'> | 1 | <div class='join-leave-button require-login-popup'> |
2 | <% if logged_in? %> | 2 | <% if logged_in? %> |
3 | - <% if profile.members.include?(user) %> | ||
4 | - <%= button(:delete, content_tag('span', _('Leave community')), profile.leave_url, | ||
5 | - :class => 'leave-community', | ||
6 | - :title => _("Leave community"), | ||
7 | - :style => 'position: relative;') %> | ||
8 | - <%= button(:add, content_tag('span', _('Join')), profile.join_url, | ||
9 | - :class => 'join-community', | ||
10 | - :title => _("Join community"), | ||
11 | - :style => 'position: relative; display: none;') %> | 3 | + <% if profile.already_request_membership? user %> |
4 | + <%= _('Your membership is waiting for approval') %> | ||
12 | <% else %> | 5 | <% else %> |
13 | - <% unless profile.already_request_membership?(user) %> | ||
14 | - <%= button(:delete, content_tag('span', _('Leave community')), profile.leave_url, | ||
15 | - :class => 'leave-community', | ||
16 | - :title => _("Leave community"), | ||
17 | - :style => 'position: relative; display: none;') %> | ||
18 | - <%= button(:add, content_tag('span', _('Join')), profile.join_url, | ||
19 | - :class => 'join-community', | ||
20 | - :title => _("Join community"), | ||
21 | - :style => 'position: relative;') %> | 6 | + <% if user.in? profile.members %> |
7 | + <%= button :delete, content_tag('span', _('Leave community')), profile.leave_url, | ||
8 | + class: 'leave-community', | ||
9 | + style: 'position: relative;' %> | ||
10 | + <%= button :add, content_tag('span', _('Join this community')), profile.join_url, | ||
11 | + class: 'join-community', | ||
12 | + style: 'position: relative; display: none;' %> | ||
13 | + <% else %> | ||
14 | + <%= button :add, _('Join this community'), profile.join_url %> | ||
22 | <% end %> | 15 | <% end %> |
23 | <% end %> | 16 | <% end %> |
24 | <% else %> | 17 | <% else %> |
25 | - <%= button(:add, _('Join'), profile.join_not_logged_url, :title => _('Join this community')) %> | 18 | + <%= button :add, _('Join this community'), profile.join_not_logged_url %> |
26 | <% end %> | 19 | <% end %> |
27 | </div> | 20 | </div> |
21 | + | ||
22 | +<%= javascript_tag do %> | ||
23 | + noosfero.add_and_join.locales.leaveConfirmation = <%= (_("Please confirm to leave the community '%{name}'") % {name: profile.name}).to_json %> | ||
24 | +<% end %> | ||
25 | + |
app/views/cms/_blog.html.erb
@@ -53,7 +53,7 @@ | @@ -53,7 +53,7 @@ | ||
53 | %> | 53 | %> |
54 | </div> | 54 | </div> |
55 | 55 | ||
56 | -<%= labelled_form_field(_('Description:'), text_area(:article, :body, :rows => 10)) %> | 56 | +<%= labelled_form_field(_('Description:'), text_area(:article, :body, :rows => 10, :class => 'mceEditor')) %> |
57 | 57 | ||
58 | <%= f.fields_for :image_builder, @article.image do |i| %> | 58 | <%= f.fields_for :image_builder, @article.image do |i| %> |
59 | <%= file_field_or_thumbnail(_('Cover image:'), @article.image, i)%> | 59 | <%= file_field_or_thumbnail(_('Cover image:'), @article.image, i)%> |
app/views/content_viewer/_article_toolbar.html.erb
@@ -62,7 +62,7 @@ | @@ -62,7 +62,7 @@ | ||
62 | <% if @page.blog? and !@page.image.nil? %> | 62 | <% if @page.blog? and !@page.image.nil? %> |
63 | <div class="blog-cover"><%= image_tag(@page.image.public_filename())%></div> | 63 | <div class="blog-cover"><%= image_tag(@page.image.public_filename())%></div> |
64 | <% end %> | 64 | <% end %> |
65 | - <%= link_to(image_tag('/images/icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %> | 65 | + <%= button_without_text(:feed, _('RSS feed'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %> |
66 | <%= @plugins.dispatch(:article_header_extra_contents, @page).collect { |content| instance_exec(&content) }.join("") %> | 66 | <%= @plugins.dispatch(:article_header_extra_contents, @page).collect { |content| instance_exec(&content) }.join("") %> |
67 | <%= render :partial => 'article_title', :locals => {:no_link => true} %> | 67 | <%= render :partial => 'article_title', :locals => {:no_link => true} %> |
68 | <%= article_translations(@page) %> | 68 | <%= article_translations(@page) %> |
app/views/content_viewer/article_versions.html.erb
@@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
12 | <li> | 12 | <li> |
13 | <%= radio_button_tag 'v1', v.version, false, :onclick => 'versionInputClicked(this)' %> | 13 | <%= radio_button_tag 'v1', v.version, false, :onclick => 'versionInputClicked(this)' %> |
14 | <%= radio_button_tag 'v2', v.version, false, :onclick => 'versionInputClicked(this)' %> | 14 | <%= radio_button_tag 'v2', v.version, false, :onclick => 'versionInputClicked(this)' %> |
15 | - <%= link_to(_("Version #{v.version}"), @page.url.merge(:version => v.version)) %> | 15 | + <%= link_to(_("Version %s") % v.version, @page.url.merge(:version => v.version)) %> |
16 | <%= @page.version == v.version ? _('(current)') : '' %> | 16 | <%= @page.version == v.version ? _('(current)') : '' %> |
17 | <span class='updated-by'><%= _('by %{author}') % {:author => link_to(@page.author_name(v.version), @page.author_url(v.version))} %></span> | 17 | <span class='updated-by'><%= _('by %{author}') % {:author => link_to(@page.author_name(v.version), @page.author_url(v.version))} %></span> |
18 | <span class='updated-on'><%= show_time(v.updated_at) %></span> | 18 | <span class='updated-on'><%= show_time(v.updated_at) %></span> |
app/views/content_viewer/folder.html.erb
app/views/content_viewer/view_page.html.erb
@@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
24 | <%= render :partial => 'article_toolbar' %> | 24 | <%= render :partial => 'article_toolbar' %> |
25 | </div> | 25 | </div> |
26 | 26 | ||
27 | -<% if NOOSFERO_CONF['addthis_enabled'] %> | 27 | +<% if NOOSFERO_CONF['addthis_enabled'] and @page.public? %> |
28 | <%= render :partial => 'addthis' %> | 28 | <%= render :partial => 'addthis' %> |
29 | <% end %> | 29 | <% end %> |
30 | 30 |
app/views/file_presenter/_generic.html.erb
1 | -<span class="download-link"> | ||
2 | - <span>Download</span> | ||
3 | - <strong><%= link_to generic.filename, [Noosfero.root, generic.public_filename].join %></strong> | ||
4 | -</span> | ||
5 | - | ||
6 | <div class="uploaded-file-description <%= 'empty' if generic.abstract.blank? %>"> | 1 | <div class="uploaded-file-description <%= 'empty' if generic.abstract.blank? %>"> |
7 | <%= generic.abstract %> | 2 | <%= generic.abstract %> |
8 | </div> | 3 | </div> |
9 | 4 | ||
5 | +<%= button(:download, _('Download'), [Noosfero.root, generic.public_filename].join, class:'download-link', option:'primary', size:'lg') %> |
app/views/organizations/_results.html.erb
app/views/person_notifier/mailer/_default_activity.html.erb
@@ -4,7 +4,10 @@ | @@ -4,7 +4,10 @@ | ||
4 | </td> | 4 | </td> |
5 | <td> | 5 | <td> |
6 | <p> | 6 | <p> |
7 | - <span style="font-size: 14px;"><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></span> | 7 | + <span style="font-size: 14px;"> |
8 | + <%= link_to activity.user.name, activity.user.url %> | ||
9 | + <%= describe activity %> | ||
10 | + </span> | ||
8 | <span style="font-size: 10px; color: #929292; float: right;"><%= time_ago_in_words(activity.created_at) %></span> | 11 | <span style="font-size: 10px; color: #929292; float: right;"><%= time_ago_in_words(activity.created_at) %></span> |
9 | </p> | 12 | </p> |
10 | </td> | 13 | </td> |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +<div class='profile-activity-image'> | ||
2 | + <%= link_to image_tag(activity.target.default_image :minor), activity.target.url, class: 'product-pic' if activity.target.present? %> | ||
3 | +</div> | ||
4 | +<div class='profile-activity-description'> | ||
5 | + <p class='profile-activity-text'><%= link_to activity.user.short_name(nil), activity.user.url %> <%= describe activity %></p> | ||
6 | + <p class='profile-activity-time'><%= time_ago_as_sentence activity.created_at %></p> | ||
7 | + | ||
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 %> | ||
10 | + </div> | ||
11 | +</div> | ||
12 | + | ||
13 | +<div style="clear: both"></div> |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +<div class='profile-activity-image'> | ||
2 | + <%= link_to(profile_image(activity.user, :minor), activity.user.url) %> | ||
3 | +</div> | ||
4 | +<div class='profile-activity-description'> | ||
5 | + <p class='profile-activity-text'> | ||
6 | + <%= link_to activity.user.short_name(nil), activity.user.url %> <%= describe activity %> | ||
7 | + </p> | ||
8 | + <p class='profile-activity-time'><%= time_ago_as_sentence activity.created_at %></p> | ||
9 | + | ||
10 | + <div class='profile-wall-actions'> | ||
11 | + <%= 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 %> | ||
12 | + </div> | ||
13 | +</div> | ||
14 | + | ||
15 | +<div style="clear: both"></div> |
app/views/profile/_profile_activities_list.html.erb
1 | <% unless activities.nil? %> | 1 | <% unless activities.nil? %> |
2 | - <% activities.each do |a| %> | ||
3 | - <% activity = a.klass.constantize.find(a.id) %> | 2 | + <% activities.each do |profile_activity| %> |
3 | + <% activity = profile_activity.activity %> | ||
4 | <% if activity.kind_of?(ActionTracker::Record) %> | 4 | <% if activity.kind_of?(ActionTracker::Record) %> |
5 | <%= render :partial => 'profile_activity', :locals => { :activity => activity, :tab_action => 'wall' } if activity.visible? %> | 5 | <%= render :partial => 'profile_activity', :locals => { :activity => activity, :tab_action => 'wall' } if activity.visible? %> |
6 | <% else %> | 6 | <% else %> |
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +<div class='profile-activity-image'> | ||
2 | +</div> | ||
3 | +<div class='profile-activity-description'> | ||
4 | + <p class='profile-activity-text'><%= link_to activity.user.short_name(nil), activity.user.url %> <%= describe activity %></p> | ||
5 | + <p class='profile-activity-time'><%= time_ago_as_sentence activity.created_at %></p> | ||
6 | + | ||
7 | + <div class='profile-wall-actions'> | ||
8 | + <%= 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 | + </div> | ||
10 | +</div> | ||
11 | + | ||
12 | +<div style="clear: both"></div> |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +<div class='profile-activity-image'> | ||
2 | + <%= link_to image_tag(activity.target.default_image :minor), activity.target.url, class: 'product-pic' if activity.target.present? %> | ||
3 | +</div> | ||
4 | +<div class='profile-activity-description'> | ||
5 | + <p class='profile-activity-text'><%= link_to activity.user.short_name(nil), activity.user.url %> <%= describe activity %></p> | ||
6 | + <p class='profile-activity-time'><%= time_ago_as_sentence activity.created_at %></p> | ||
7 | + | ||
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 %> | ||
10 | + </div> | ||
11 | +</div> | ||
12 | + | ||
13 | +<div style="clear: both"></div> |
app/views/profile_editor/_redirection_after_login.html.erb
0 → 100644
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +<% content_for :head do %> | ||
2 | + <%= javascript_include_tag 'redirection_after_login' %> | ||
3 | +<% end %> | ||
4 | + | ||
5 | +<h2><%= _('Page to redirect after login') %></h2> | ||
6 | +<%= f.select :redirection_after_login, Environment.login_redirection_options.map{ |key,value| [value,key] }, selected: @profile.preferred_login_redirection %> | ||
7 | + | ||
8 | +<%= f.text_field :custom_url_redirection %> | ||
9 | + |
app/views/profile_editor/edit.html.erb
@@ -44,8 +44,7 @@ | @@ -44,8 +44,7 @@ | ||
44 | <% end %> | 44 | <% end %> |
45 | 45 | ||
46 | <% if environment.enabled?('allow_change_of_redirection_after_login') %> | 46 | <% if environment.enabled?('allow_change_of_redirection_after_login') %> |
47 | - <h2><%= _('Page to redirect after login') %></h2> | ||
48 | - <%= select 'profile_data', 'redirection_after_login', Environment.login_redirection_options.map{|key,value|[value,key]}, { :selected => @profile.preferred_login_redirection} %> | 47 | + <%= render 'redirection_after_login', f: f %> |
49 | <% end %> | 48 | <% end %> |
50 | 49 | ||
51 | <h2><%= _('Translations') %></h2> | 50 | <h2><%= _('Translations') %></h2> |
@@ -75,14 +74,23 @@ | @@ -75,14 +74,23 @@ | ||
75 | 74 | ||
76 | <% if user && user.has_permission?('destroy_profile', profile) %> | 75 | <% if user && user.has_permission?('destroy_profile', profile) %> |
77 | <% button_bar(:id => 'delete-profile') do %> | 76 | <% button_bar(:id => 'delete-profile') do %> |
78 | - <%= button(:remove, _('Delete profile'), {:action => :destroy_profile}) %> | ||
79 | 77 | ||
80 | - <% if environment.admins.include?(current_person) %> | 78 | + <% if !environment.enabled?('forbid_destroy_profile') || user.is_admin?(environment) %> |
79 | + <%= button(:remove, _('Delete profile'), {:action => :destroy_profile}) %> | ||
80 | + <% end %> | ||
81 | 81 | ||
82 | + <% if user.is_admin?(environment) %> | ||
82 | <% if profile.visible? %> | 83 | <% if profile.visible? %> |
83 | - <%= button(:remove, _('Deactivate profile'), {:action => :deactivate_profile, :id=>profile.id}, :id=>'deactivate_profile_button', :data => {:confirm=>_("Are you sure you want to deactivate this profile?")}) %> | 84 | + <%= button(:remove, _('Deactivate profile'), |
85 | + {:action => :deactivate_profile, :id=>profile.id}, | ||
86 | + :id=>'deactivate_profile_button', | ||
87 | + :data => {:confirm=>_("Are you sure you want to deactivate this profile?")}) | ||
88 | + %> | ||
84 | <% else %> | 89 | <% else %> |
85 | - <%= button(:add, _('Activate profile'), {:action => :activate_profile, :id=>profile.id}, :data => {:confirm=>_("Are you sure you want to deactivate this profile?")}) %> | 90 | + <%= button(:add, _('Activate profile'), |
91 | + {:action => :activate_profile, :id=>profile.id}, | ||
92 | + :data => {:confirm=>_("Are you sure you want to activate this profile?")}) | ||
93 | + %> | ||
86 | <% end %> | 94 | <% end %> |
87 | <% end %> | 95 | <% end %> |
88 | <% end %> | 96 | <% end %> |
app/views/profile_roles/assign.html.erb
1 | <%= javascript_include_tag('assign_role.js') %> | 1 | <%= javascript_include_tag('assign_role.js') %> |
2 | 2 | ||
3 | -<h1> <%= _("Assign #{@role.name}") %> </h1> | 3 | +<h1> <%= _("Assign %s") % @role.name %> </h1> |
4 | 4 | ||
5 | 5 | ||
6 | <%= labelled_form_for :role, :url => { :action => 'define', :id => @role.id } do |f| %> | 6 | <%= labelled_form_for :role, :url => { :action => 'define', :id => @role.id } do |f| %> |
app/views/profile_roles/destroy.html.erb
1 | -<h1> <%= _("Deleting #{@role.name}") %> </h1> | 1 | +<h1> <%= _("Deleting %s") % @role.name %> </h1> |
2 | 2 | ||
3 | <% if @members.nil? || @members.empty? %> | 3 | <% if @members.nil? || @members.empty? %> |
4 | <p><%= _('This role is not being currently used.')%></p> | 4 | <p><%= _('This role is not being currently used.')%></p> |
app/views/profile_roles/edit.html.erb
1 | -<h1> <%= _("Editing #{@role.name}") %> </h1> | 1 | +<h1> <%= _("Editing %s") % @role.name %> </h1> |
2 | 2 | ||
3 | <%= render :partial => 'form', :locals => { :mode => :edit, :role => @role, :permissions => [@role.kind] } %> | 3 | <%= render :partial => 'form', :locals => { :mode => :edit, :role => @role, :permissions => [@role.kind] } %> |
app/views/role/edit.html.erb
1 | -<h2> <%= _("Editing #{@role.name}") %> </h2> | 1 | +<h2> <%= _("Editing %s") % @role.name %> </h2> |
2 | 2 | ||
3 | <%= render :partial => 'form', :locals => { :mode => :edit, :role => @role, :permissions => role_available_permissions(@role) } %> | 3 | <%= render :partial => 'form', :locals => { :mode => :edit, :role => @role, :permissions => role_available_permissions(@role) } %> |
app/views/shared/_content_item.html.erb
@@ -6,6 +6,6 @@ | @@ -6,6 +6,6 @@ | ||
6 | <span class="item-description"> | 6 | <span class="item-description"> |
7 | <%= link_to(content.name, content.url) %> | 7 | <%= link_to(content.name, content.url) %> |
8 | </span> | 8 | </span> |
9 | - <span class="item-date"><%= _("Published at: #{show_date(content.updated_at)}") %></span> | 9 | + <span class="item-date"><%= _("Published at: %s") % show_date(content.updated_at) %></span> |
10 | </div> | 10 | </div> |
11 | </div> | 11 | </div> |
app/views/shared/_list_groups.html.erb
1 | <ul id="groups-list"> | 1 | <ul id="groups-list"> |
2 | -<% for group in groups %> | ||
3 | - <li> | ||
4 | - <div class='common-profile-list-block'> | ||
5 | - <%= profile_image_link(group, :portrait, 'div') %> | ||
6 | - </div> | ||
7 | - <span class='profile-details'> | ||
8 | - <strong><%= group.name %></strong><br/> | ||
9 | - <%= _('Role: %s') % rolename_for(profile, group) + '<br/>' if profile.role_assignments.find_by_resource_id(group.id) %> | ||
10 | - <%= _('Type: %s') % _(group.class.identification) %> <br/> | ||
11 | - <%= _('Description: %s') % group.description + '<br/>' if group.community? %> | ||
12 | - <%= _('Members: %s') % group.members_count.to_s %> <br/> | ||
13 | - <%= _('Created at: %s') % show_date(group.created_at) unless group.enterprise? %> <br/> | ||
14 | - <% button_bar do %> | ||
15 | - <% if user.has_permission?(:edit_profile, group) %> | ||
16 | - <%= button 'menu-ctrl-panel', _('Control panel of this group'), group.admin_url %> | ||
17 | - <% end %> | ||
18 | - <%= button 'menu-logout', _('Leave community'), group.leave_url(true), :class => 'leave-community' %> | ||
19 | - <% if (group.community? && user.has_permission?(:destroy_profile, group)) %> | ||
20 | - <%= button 'delete', _('Remove'), { :controller => 'profile_editor', :action => 'destroy_profile', :profile => group.identifier } %> | 2 | + <% for group in groups %> |
3 | + <li> | ||
4 | + <div class='common-profile-list-block'> | ||
5 | + <%= profile_image_link(group, :portrait, 'div') %> | ||
6 | + </div> | ||
7 | + <span class='profile-details'> | ||
8 | + <strong><%= group.name %></strong><br/> | ||
9 | + <%= _('Role: %s') % rolename_for(profile, group) + '<br/>' if profile.role_assignments.find_by_resource_id(group.id) %> | ||
10 | + <%= _('Type: %s') % _(group.class.identification) %> <br/> | ||
11 | + <%= _('Description: %s') % group.description + '<br/>' if group.community? %> | ||
12 | + <%= _('Members: %s') % group.members_count.to_s %> <br/> | ||
13 | + <%= _('Created at: %s') % show_date(group.created_at) unless group.enterprise? %> <br/> | ||
14 | + <% button_bar do %> | ||
15 | + <% if user.has_permission?(:edit_profile, group) %> | ||
16 | + <%= button 'menu-ctrl-panel', _('Control panel of this group'), group.admin_url %> | ||
17 | + <% end %> | ||
18 | + <%= button 'menu-logout', _('Leave community'), group.leave_url(true), :class => 'leave-community' %> | ||
19 | + | ||
20 | + <% if (user.has_permission?(:destroy_profile, group) && !environment.enabled?('forbid_destroy_profile')) || user.is_admin?(environment) %> | ||
21 | + <%= button 'delete', _('Remove'), | ||
22 | + { :controller => 'profile_editor', | ||
23 | + :action => 'destroy_profile', | ||
24 | + :profile => group.identifier } | ||
25 | + %> | ||
26 | + <% end %> | ||
21 | <% end %> | 27 | <% end %> |
22 | - <% end %> | ||
23 | - </span> | ||
24 | - <br class="may-clear" /> | ||
25 | - </li> | ||
26 | -<% end %> | 28 | + </span> |
29 | + <br class="may-clear" /> | ||
30 | + </li> | ||
31 | + <% end %> | ||
27 | </ul> | 32 | </ul> |
28 | - |
config/application.rb
@@ -126,7 +126,7 @@ module Noosfero | @@ -126,7 +126,7 @@ module Noosfero | ||
126 | # Make sure the secret is at least 30 characters and all random, | 126 | # Make sure the secret is at least 30 characters and all random, |
127 | # no regular words or you'll be exposed to dictionary attacks. | 127 | # no regular words or you'll be exposed to dictionary attacks. |
128 | config.secret_token = noosfero_session_secret | 128 | config.secret_token = noosfero_session_secret |
129 | - config.session_store :cookie_store, :key => '_noosfero_session' | 129 | + config.session_store :active_record_store, key: '_noosfero_session' |
130 | 130 | ||
131 | config.paths['db/migrate'] += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/db/migrate" | 131 | config.paths['db/migrate'] += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/db/migrate" |
132 | config.i18n.load_path += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/locales/*.{rb,yml}" | 132 | config.i18n.load_path += Dir.glob "#{Rails.root}/{baseplugins,config/plugins}/*/locales/*.{rb,yml}" |
config/initializers/action_tracker.rb
@@ -2,67 +2,51 @@ require 'noosfero/i18n' | @@ -2,67 +2,51 @@ require 'noosfero/i18n' | ||
2 | 2 | ||
3 | # ActionTracker plugin stuff | 3 | # ActionTracker plugin stuff |
4 | 4 | ||
5 | -@reply_scrap_description = proc { _('sent a message to %{receiver}: <br /> "%{message}"') % { :receiver => "{{link_to(ta.get_receiver_name, ta.get_receiver_url)}}", :message => "{{auto_link_urls(ta.get_content)}}" } } | ||
6 | - | ||
7 | ActionTrackerConfig.verbs = { | 5 | ActionTrackerConfig.verbs = { |
8 | 6 | ||
9 | - :create_article => { | ||
10 | - :description => proc { _('published an article: %{title}') % { :title => '{{link_to(truncate(ta.get_name), ta.get_url)}}' } } | 7 | + create_article: { |
8 | + }, | ||
9 | + | ||
10 | + new_friendship: { | ||
11 | + type: :groupable | ||
12 | + }, | ||
13 | + | ||
14 | + join_community: { | ||
15 | + type: :groupable | ||
11 | }, | 16 | }, |
12 | 17 | ||
13 | - :new_friendship => { | ||
14 | - :description => proc { n_('has made 1 new friend:<br />%{name}', 'has made %{num} new friends:<br />%{name}', get_friend_name.size) % { :num => get_friend_name.size, :name => '{{ta.collect_group_with_index(:friend_name){ |n,i| link_to(image_tag(ta.get_friend_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/person-icon.png")), ta.get_friend_url[i], :title => n)}.join}}' } }, | ||
15 | - :type => :groupable | 18 | + add_member_in_community: { |
16 | }, | 19 | }, |
17 | 20 | ||
18 | - :join_community => { | ||
19 | - :description => proc { n_('has joined 1 community:<br />%{name}', 'has joined %{num} communities:<br />%{name}', get_resource_name.size) % { :num => get_resource_name.size, :name => '{{ta.collect_group_with_index(:resource_name){ |n,i| link_to(image_tag(ta.get_resource_profile_custom_icon[i] || default_or_themed_icon("/images/icons-app/community-icon.png")), ta.get_resource_url[i], :title => n)}.join}}' } }, | ||
20 | - :type => :groupable | 21 | + upload_image: { |
22 | + type: :groupable | ||
21 | }, | 23 | }, |
22 | 24 | ||
23 | - :add_member_in_community => { | ||
24 | - :description => proc { _('has joined the community.') }, | 25 | + leave_scrap: { |
25 | }, | 26 | }, |
26 | 27 | ||
27 | - :upload_image => { | ||
28 | - :description => proc do | ||
29 | - total = get_view_url.size | ||
30 | - n_('uploaded 1 image', 'uploaded %d images', total) % total + | ||
31 | - '<br />{{'+ | ||
32 | - 'ta.collect_group_with_index(:thumbnail_path) { |t,i|' + | ||
33 | - " if ( #{total} == 1 );" + | ||
34 | - ' link_to( image_tag(t), ta.get_view_url[i], :class => \'upimg\' );' + | ||
35 | - ' else;' + | ||
36 | - " pos = #{total}-i;" + | ||
37 | - ' morethen2 = pos>2 ? \'morethen2\' : \'\';' + | ||
38 | - ' morethen5 = pos>5 ? \'morethen5\' : \'\';' + | ||
39 | - ' t = t.gsub(/(.*)(display)(.*)/, \'\\1thumb\\3\');' + | ||
40 | - ' link_to( \' \', ta.get_view_url[i],' + | ||
41 | - ' :style => "background-image:url(#{t})",' + | ||
42 | - ' :class => "upimg pos#{pos} #{morethen2} #{morethen5}" );' + | ||
43 | - ' end' + | ||
44 | - '}.reverse.join}}' + | ||
45 | - ( total > 5 ? | ||
46 | - '<span class="more" onclick="this.parentNode.className+=\' show-all\'">' + | ||
47 | - '…</span>' : '' ) + | ||
48 | - '<br style="clear: both;" />' | ||
49 | - end, | ||
50 | - :type => :groupable | 28 | + leave_scrap_to_self: { |
51 | }, | 29 | }, |
52 | 30 | ||
53 | - :leave_scrap => { | ||
54 | - :description => @reply_scrap_description | 31 | + reply_scrap_on_self: { |
55 | }, | 32 | }, |
56 | 33 | ||
57 | - :leave_scrap_to_self => { | ||
58 | - :description => proc { _('wrote: <br /> "%{text}"') % { :text => "{{auto_link_urls(ta.get_content)}}" } } | 34 | + create_product: { |
59 | }, | 35 | }, |
60 | 36 | ||
61 | - :reply_scrap_on_self => { | ||
62 | - :description => @reply_scrap_description | 37 | + update_product: { |
63 | }, | 38 | }, |
39 | + | ||
40 | + remove_product: { | ||
41 | + }, | ||
42 | + | ||
43 | + favorite_enterprise: { | ||
44 | + }, | ||
45 | + | ||
64 | } | 46 | } |
65 | 47 | ||
66 | -ActionTrackerConfig.current_user_method = :current_person | 48 | +ActionTrackerConfig.current_user = proc do |
49 | + User.current.person rescue nil | ||
50 | +end | ||
67 | 51 | ||
68 | ActionTrackerConfig.timeout = 24.hours | 52 | ActionTrackerConfig.timeout = 24.hours |
config/routes.rb
@@ -56,37 +56,37 @@ Noosfero::Application.routes.draw do | @@ -56,37 +56,37 @@ Noosfero::Application.routes.draw do | ||
56 | match 'search(/:action(/*category_path))', :controller => 'search' | 56 | match 'search(/:action(/*category_path))', :controller => 'search' |
57 | 57 | ||
58 | # events | 58 | # events |
59 | - match 'profile/:profile/events_by_day', :controller => 'events', :action => 'events_by_day', :profile => /#{Noosfero.identifier_format_in_url}/ | ||
60 | - match 'profile/:profile/events_by_month', :controller => 'events', :action => 'events_by_month', :profile => /#{Noosfero.identifier_format_in_url}/ | ||
61 | - match 'profile/:profile/events/:year/:month/:day', :controller => 'events', :action => 'events', :year => /\d*/, :month => /\d*/, :day => /\d*/, :profile => /#{Noosfero.identifier_format_in_url}/ | ||
62 | - match 'profile/:profile/events/:year/:month', :controller => 'events', :action => 'events', :year => /\d*/, :month => /\d*/, :profile => /#{Noosfero.identifier_format_in_url}/ | ||
63 | - match 'profile/:profile/events', :controller => 'events', :action => 'events', :profile => /#{Noosfero.identifier_format_in_url}/ | 59 | + match 'profile/:profile/events_by_day', :controller => 'events', :action => 'events_by_day', :profile => /#{Noosfero.identifier_format_in_url}/i |
60 | + match 'profile/:profile/events_by_month', :controller => 'events', :action => 'events_by_month', :profile => /#{Noosfero.identifier_format_in_url}/i | ||
61 | + match 'profile/:profile/events/:year/:month/:day', :controller => 'events', :action => 'events', :year => /\d*/, :month => /\d*/, :day => /\d*/, :profile => /#{Noosfero.identifier_format_in_url}/i | ||
62 | + match 'profile/:profile/events/:year/:month', :controller => 'events', :action => 'events', :year => /\d*/, :month => /\d*/, :profile => /#{Noosfero.identifier_format_in_url}/i | ||
63 | + match 'profile/:profile/events', :controller => 'events', :action => 'events', :profile => /#{Noosfero.identifier_format_in_url}/i | ||
64 | 64 | ||
65 | # catalog | 65 | # catalog |
66 | - match 'catalog/:profile', :controller => 'catalog', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/, :as => :catalog | 66 | + match 'catalog/:profile', :controller => 'catalog', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/i, :as => :catalog |
67 | 67 | ||
68 | # invite | 68 | # invite |
69 | - match 'profile/:profile/invite/friends', :controller => 'invite', :action => 'invite_friends', :profile => /#{Noosfero.identifier_format_in_url}/ | ||
70 | - match 'profile/:profile/invite/:action', :controller => 'invite', :profile => /#{Noosfero.identifier_format_in_url}/ | 69 | + match 'profile/:profile/invite/friends', :controller => 'invite', :action => 'invite_friends', :profile => /#{Noosfero.identifier_format_in_url}/i |
70 | + match 'profile/:profile/invite/:action', :controller => 'invite', :profile => /#{Noosfero.identifier_format_in_url}/i | ||
71 | 71 | ||
72 | # feeds per tag | 72 | # feeds per tag |
73 | - match 'profile/:profile/tags/:id/feed', :controller => 'profile', :action =>'tag_feed', :id => /.+/, :profile => /#{Noosfero.identifier_format_in_url}/, :as => :tag_feed | 73 | + match 'profile/:profile/tags/:id/feed', :controller => 'profile', :action =>'tag_feed', :id => /.+/, :profile => /#{Noosfero.identifier_format_in_url}/i, :as => :tag_feed |
74 | 74 | ||
75 | # profile tags | 75 | # profile tags |
76 | - match 'profile/:profile/tags/:id', :controller => 'profile', :action => 'content_tagged', :id => /.+/, :profile => /#{Noosfero.identifier_format_in_url}/ | ||
77 | - match 'profile/:profile/tags(/:id)', :controller => 'profile', :action => 'tags', :profile => /#{Noosfero.identifier_format_in_url}/ | 76 | + match 'profile/:profile/tags/:id', :controller => 'profile', :action => 'content_tagged', :id => /.+/, :profile => /#{Noosfero.identifier_format_in_url}/i |
77 | + match 'profile/:profile/tags(/:id)', :controller => 'profile', :action => 'tags', :profile => /#{Noosfero.identifier_format_in_url}/i | ||
78 | 78 | ||
79 | # profile search | 79 | # profile search |
80 | - match 'profile/:profile/search', :controller => 'profile_search', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/ | 80 | + match 'profile/:profile/search', :controller => 'profile_search', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/i |
81 | 81 | ||
82 | # comments | 82 | # comments |
83 | - match 'profile/:profile/comment/:action/:id', :controller => 'comment', :profile => /#{Noosfero.identifier_format_in_url}/ | 83 | + match 'profile/:profile/comment/:action/:id', :controller => 'comment', :profile => /#{Noosfero.identifier_format_in_url}/i |
84 | 84 | ||
85 | # public profile information | 85 | # public profile information |
86 | - match 'profile/:profile(/:action(/:id))', :controller => 'profile', :action => 'index', :id => /[^\/]*/, :profile => /#{Noosfero.identifier_format_in_url}/, :as => :profile | 86 | + match 'profile/:profile(/:action(/:id))', :controller => 'profile', :action => 'index', :id => /[^\/]*/, :profile => /#{Noosfero.identifier_format_in_url}/i, :as => :profile |
87 | 87 | ||
88 | # contact | 88 | # contact |
89 | - match 'contact/:profile/:action(/:id)', :controller => 'contact', :action => 'index', :id => /.*/, :profile => /#{Noosfero.identifier_format_in_url}/ | 89 | + match 'contact/:profile/:action(/:id)', :controller => 'contact', :action => 'index', :id => /.*/, :profile => /#{Noosfero.identifier_format_in_url}/i |
90 | 90 | ||
91 | # map balloon | 91 | # map balloon |
92 | match 'map_balloon/:action/:id', :controller => 'map_balloon', :id => /.*/ | 92 | match 'map_balloon/:action/:id', :controller => 'map_balloon', :id => /.*/ |
@@ -98,8 +98,8 @@ Noosfero::Application.routes.draw do | @@ -98,8 +98,8 @@ Noosfero::Application.routes.draw do | ||
98 | ## Controllers that are profile-specific (for profile admins ) | 98 | ## Controllers that are profile-specific (for profile admins ) |
99 | ###################################################### | 99 | ###################################################### |
100 | # profile customization - "My profile" | 100 | # profile customization - "My profile" |
101 | - match 'myprofile/:profile', :controller => 'profile_editor', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/ | ||
102 | - match 'myprofile/:profile/:controller(/:action(/:id))', :controller => Noosfero.pattern_for_controllers_in_directory('my_profile'), :profile => /#{Noosfero.identifier_format_in_url}/, :as => :myprofile | 101 | + match 'myprofile/:profile', :controller => 'profile_editor', :action => 'index', :profile => /#{Noosfero.identifier_format_in_url}/i |
102 | + match 'myprofile/:profile/:controller(/:action(/:id))', :controller => Noosfero.pattern_for_controllers_in_directory('my_profile'), :profile => /#{Noosfero.identifier_format_in_url}/i, :as => :myprofile | ||
103 | 103 | ||
104 | 104 | ||
105 | ###################################################### | 105 | ###################################################### |
@@ -127,14 +127,14 @@ Noosfero::Application.routes.draw do | @@ -127,14 +127,14 @@ Noosfero::Application.routes.draw do | ||
127 | # cache stuff - hack | 127 | # cache stuff - hack |
128 | match 'public/:action/:id', :controller => 'public' | 128 | match 'public/:action/:id', :controller => 'public' |
129 | 129 | ||
130 | - match ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format_in_url}/, :constraints => EnvironmentDomainConstraint.new | 130 | + match ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format_in_url}/i, :constraints => EnvironmentDomainConstraint.new |
131 | match '*page/versions', :controller => 'content_viewer', :action => 'article_versions' | 131 | match '*page/versions', :controller => 'content_viewer', :action => 'article_versions' |
132 | 132 | ||
133 | - match ':profile/*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff', :profile => /#{Noosfero.identifier_format_in_url}/, :constraints => EnvironmentDomainConstraint.new | 133 | + match ':profile/*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff', :profile => /#{Noosfero.identifier_format_in_url}/i, :constraints => EnvironmentDomainConstraint.new |
134 | match '*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff' | 134 | match '*page/versions_diff', :controller => 'content_viewer', :action => 'versions_diff' |
135 | 135 | ||
136 | # match requests for profiles that don't have a custom domain | 136 | # match requests for profiles that don't have a custom domain |
137 | - match ':profile(/*page)', :controller => 'content_viewer', :action => 'view_page', :profile => /#{Noosfero.identifier_format_in_url}/, :constraints => EnvironmentDomainConstraint.new | 137 | + match ':profile(/*page)', :controller => 'content_viewer', :action => 'view_page', :profile => /#{Noosfero.identifier_format_in_url}/i, :constraints => EnvironmentDomainConstraint.new |
138 | 138 | ||
139 | # match requests for content in domains hosted for profiles | 139 | # match requests for content in domains hosted for profiles |
140 | match '/(*page)', :controller => 'content_viewer', :action => 'view_page' | 140 | match '/(*page)', :controller => 'content_viewer', :action => 'view_page' |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +class CreateProfileActivity < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + ActiveRecord::Base.transaction do | ||
4 | + create_table :profile_activities do |t| | ||
5 | + t.integer :profile_id | ||
6 | + t.integer :activity_id | ||
7 | + t.string :activity_type | ||
8 | + t.timestamps | ||
9 | + end | ||
10 | + add_index :profile_activities, :profile_id | ||
11 | + add_index :profile_activities, [:activity_id, :activity_type] | ||
12 | + add_index :profile_activities, :activity_type | ||
13 | + | ||
14 | + Scrap.find_each batch_size: 50 do |scrap| | ||
15 | + scrap.send :create_activity | ||
16 | + end | ||
17 | + ActionTracker::Record.find_each batch_size: 50 do |action_tracker| | ||
18 | + action_tracker.send :create_activity | ||
19 | + end | ||
20 | + end | ||
21 | + end | ||
22 | + | ||
23 | + def down | ||
24 | + drop_table :profile_activities | ||
25 | + end | ||
26 | +end |
db/migrate/20150310132902_add_id_to_favorite_enterprises_people.rb
0 → 100644
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +class AddIdToFavoriteEnterprisesPeople < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + rename_table :favorite_enteprises_people, :favorite_enterprise_people | ||
4 | + | ||
5 | + change_table :favorite_enterprise_people do |t| | ||
6 | + t.timestamps | ||
7 | + end | ||
8 | + add_column :favorite_enterprise_people, :id, :primary_key | ||
9 | + | ||
10 | + add_index :favorite_enterprise_people, [:person_id, :enterprise_id] | ||
11 | + add_index :favorite_enterprise_people, :person_id | ||
12 | + add_index :favorite_enterprise_people, :enterprise_id | ||
13 | + end | ||
14 | + | ||
15 | + def down | ||
16 | + rename_table :favorite_enterprise_people, :favorite_enteprises_people | ||
17 | + | ||
18 | + remove_column :favorite_enteprises_people, :id | ||
19 | + remove_column :favorite_enteprises_people, :created_at | ||
20 | + remove_column :favorite_enteprises_people, :updated_at | ||
21 | + | ||
22 | + remove_index :favorite_enteprises_people, [:person_id, :enterprise_id] | ||
23 | + remove_index :favorite_enteprises_people, :person_id | ||
24 | + remove_index :favorite_enteprises_people, :enterprise_id | ||
25 | + end | ||
26 | +end |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +class AddUserIdToSession < ActiveRecord::Migration | ||
2 | + | ||
3 | + def change | ||
4 | + add_column :sessions, :user_id, :integer | ||
5 | + add_index :sessions, :user_id | ||
6 | + end | ||
7 | + | ||
8 | + def up | ||
9 | + Session.reset_column_information | ||
10 | + | ||
11 | + # cleanup data: {} | ||
12 | + Session.where(data: "BAh7AA==\n").delete_all | ||
13 | + # cleanup data with lang key only | ||
14 | + Session.where("data ~ 'BAh7BjoJbGFuZyIH.{3,3}=\n'").delete_all | ||
15 | + | ||
16 | + # very slow migration, only do for the last month | ||
17 | + Session.where('updated_at > ?', 1.month.ago).find_each batch_size: 50 do |session| | ||
18 | + begin | ||
19 | + # this calls Session#copy_to_columns | ||
20 | + session.save! | ||
21 | + rescue ArgumentError | ||
22 | + # old ActionController::Flash::FlashHash from rails 2.3 | ||
23 | + session.destroy | ||
24 | + end | ||
25 | + | ||
26 | + # limit limitless allocations | ||
27 | + GC.start | ||
28 | + end | ||
29 | + end | ||
30 | + | ||
31 | +end |
db/schema.rb
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | # | 11 | # |
12 | # It's strongly recommended to check this file into your version control system. | 12 | # It's strongly recommended to check this file into your version control system. |
13 | 13 | ||
14 | -ActiveRecord::Schema.define(:version => 20150603182105) do | 14 | +ActiveRecord::Schema.define(:version => 20150712130827) do |
15 | 15 | ||
16 | create_table "abuse_reports", :force => true do |t| | 16 | create_table "abuse_reports", :force => true do |t| |
17 | t.integer "reporter_id" | 17 | t.integer "reporter_id" |
@@ -351,11 +351,17 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | @@ -351,11 +351,17 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | ||
351 | add_index "external_feeds", ["enabled"], :name => "index_external_feeds_on_enabled" | 351 | add_index "external_feeds", ["enabled"], :name => "index_external_feeds_on_enabled" |
352 | add_index "external_feeds", ["fetched_at"], :name => "index_external_feeds_on_fetched_at" | 352 | add_index "external_feeds", ["fetched_at"], :name => "index_external_feeds_on_fetched_at" |
353 | 353 | ||
354 | - create_table "favorite_enteprises_people", :id => false, :force => true do |t| | ||
355 | - t.integer "person_id" | ||
356 | - t.integer "enterprise_id" | 354 | + create_table "favorite_enterprise_people", :force => true do |t| |
355 | + t.integer "person_id" | ||
356 | + t.integer "enterprise_id" | ||
357 | + t.datetime "created_at" | ||
358 | + t.datetime "updated_at" | ||
357 | end | 359 | end |
358 | 360 | ||
361 | + add_index "favorite_enterprise_people", ["enterprise_id"], :name => "index_favorite_enterprise_people_on_enterprise_id" | ||
362 | + add_index "favorite_enterprise_people", ["person_id", "enterprise_id"], :name => "index_favorite_enterprise_people_on_person_id_and_enterprise_id" | ||
363 | + add_index "favorite_enterprise_people", ["person_id"], :name => "index_favorite_enterprise_people_on_person_id" | ||
364 | + | ||
359 | create_table "friendships", :force => true do |t| | 365 | create_table "friendships", :force => true do |t| |
360 | t.integer "person_id" | 366 | t.integer "person_id" |
361 | t.integer "friend_id" | 367 | t.integer "friend_id" |
@@ -489,6 +495,18 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | @@ -489,6 +495,18 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | ||
489 | add_index "products", ["product_category_id"], :name => "index_products_on_product_category_id" | 495 | add_index "products", ["product_category_id"], :name => "index_products_on_product_category_id" |
490 | add_index "products", ["profile_id"], :name => "index_products_on_profile_id" | 496 | add_index "products", ["profile_id"], :name => "index_products_on_profile_id" |
491 | 497 | ||
498 | + create_table "profile_activities", :force => true do |t| | ||
499 | + t.integer "profile_id" | ||
500 | + t.integer "activity_id" | ||
501 | + t.string "activity_type" | ||
502 | + t.datetime "created_at", :null => false | ||
503 | + t.datetime "updated_at", :null => false | ||
504 | + end | ||
505 | + | ||
506 | + add_index "profile_activities", ["activity_id", "activity_type"], :name => "index_profile_activities_on_activity_id_and_activity_type" | ||
507 | + add_index "profile_activities", ["activity_type"], :name => "index_profile_activities_on_activity_type" | ||
508 | + add_index "profile_activities", ["profile_id"], :name => "index_profile_activities_on_profile_id" | ||
509 | + | ||
492 | create_table "profile_suggestions", :force => true do |t| | 510 | create_table "profile_suggestions", :force => true do |t| |
493 | t.integer "person_id" | 511 | t.integer "person_id" |
494 | t.integer "suggestion_id" | 512 | t.integer "suggestion_id" |
@@ -555,6 +573,8 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | @@ -555,6 +573,8 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | ||
555 | add_index "profiles", ["identifier"], :name => "index_profiles_on_identifier" | 573 | add_index "profiles", ["identifier"], :name => "index_profiles_on_identifier" |
556 | add_index "profiles", ["members_count"], :name => "index_profiles_on_members_count" | 574 | add_index "profiles", ["members_count"], :name => "index_profiles_on_members_count" |
557 | add_index "profiles", ["region_id"], :name => "index_profiles_on_region_id" | 575 | add_index "profiles", ["region_id"], :name => "index_profiles_on_region_id" |
576 | + add_index "profiles", ["user_id", "type"], :name => "index_profiles_on_user_id_and_type" | ||
577 | + add_index "profiles", ["user_id"], :name => "index_profiles_on_user_id" | ||
558 | 578 | ||
559 | create_table "qualifier_certifiers", :force => true do |t| | 579 | create_table "qualifier_certifiers", :force => true do |t| |
560 | t.integer "qualifier_id" | 580 | t.integer "qualifier_id" |
@@ -645,10 +665,12 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | @@ -645,10 +665,12 @@ ActiveRecord::Schema.define(:version => 20150603182105) do | ||
645 | t.text "data" | 665 | t.text "data" |
646 | t.datetime "created_at" | 666 | t.datetime "created_at" |
647 | t.datetime "updated_at" | 667 | t.datetime "updated_at" |
668 | + t.integer "user_id" | ||
648 | end | 669 | end |
649 | 670 | ||
650 | add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id" | 671 | add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id" |
651 | add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at" | 672 | add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at" |
673 | + add_index "sessions", ["user_id"], :name => "index_sessions_on_user_id" | ||
652 | 674 | ||
653 | create_table "suggestion_connections", :force => true do |t| | 675 | create_table "suggestion_connections", :force => true do |t| |
654 | t.integer "suggestion_id", :null => false | 676 | t.integer "suggestion_id", :null => false |
debian/changelog
1 | +noosfero (1.2) wheezy; urgency=low | ||
2 | + | ||
3 | + * Noosfero 1.2 | ||
4 | + | ||
5 | + -- Antonio Terceiro <terceiro@colivre.coop.br> Fri, 07 Aug 2015 13:39:14 -0300 | ||
6 | + | ||
7 | +noosfero (1.2~rc2) wheezy; urgency=low | ||
8 | + | ||
9 | + * Noosfero 1.2 RC2 | ||
10 | + | ||
11 | + -- Antonio Terceiro <terceiro@colivre.coop.br> Mon, 27 Jul 2015 09:56:55 -0300 | ||
12 | + | ||
1 | noosfero (1.2~rc1) wheezy; urgency=medium | 13 | noosfero (1.2~rc1) wheezy; urgency=medium |
2 | 14 | ||
3 | [ Joenio Costa ] | 15 | [ Joenio Costa ] |
features/accept_member.feature
@@ -14,6 +14,16 @@ Feature: accept member | @@ -14,6 +14,16 @@ Feature: accept member | ||
14 | And the community "My Community" is closed | 14 | And the community "My Community" is closed |
15 | And "Mario Souto" is admin of "My Community" | 15 | And "Mario Souto" is admin of "My Community" |
16 | 16 | ||
17 | + Scenario: a user should see its merbership is pending | ||
18 | + Given I am logged in as "mario" | ||
19 | + And the following communities | ||
20 | + | owner | identifier | name | closed | | ||
21 | + | marie | private-community | Private Community | true | | ||
22 | + And I go to private-community's homepage | ||
23 | + When I follow "Join this community" | ||
24 | + And I go to private-community's homepage | ||
25 | + Then I should see "Your membership is waiting for approval" | ||
26 | + | ||
17 | @selenium | 27 | @selenium |
18 | Scenario: approve a task to accept a member as admin in a closed community | 28 | Scenario: approve a task to accept a member as admin in a closed community |
19 | Given "Marie Curie" asked to join "My Community" | 29 | Given "Marie Curie" asked to join "My Community" |
features/members_block.feature
@@ -9,8 +9,8 @@ Feature: | @@ -9,8 +9,8 @@ Feature: | ||
9 | | joaosilva | Joao Silva | | 9 | | joaosilva | Joao Silva | |
10 | | mariasilva | Maria Silva | | 10 | | mariasilva | Maria Silva | |
11 | And the following communities | 11 | And the following communities |
12 | - | owner | identifier | name | | ||
13 | - | joaosilva | sample-community | Sample Community | | 12 | + | owner | identifier | name | |
13 | + | joaosilva | sample-community | Sample Community | | ||
14 | And the following blocks | 14 | And the following blocks |
15 | | owner | type | | 15 | | owner | type | |
16 | | sample-community | MembersBlock | | 16 | | sample-community | MembersBlock | |
@@ -24,7 +24,7 @@ Feature: | @@ -24,7 +24,7 @@ Feature: | ||
24 | Scenario: a user can join in a community by members block's button | 24 | Scenario: a user can join in a community by members block's button |
25 | Given I am logged in as "mariasilva" | 25 | Given I am logged in as "mariasilva" |
26 | And I go to sample-community's homepage | 26 | And I go to sample-community's homepage |
27 | - When I follow "Join" within ".members-block" | 27 | + When I follow "Join this community" within ".members-block" |
28 | And I go to mariasilva's control panel | 28 | And I go to mariasilva's control panel |
29 | And I follow "Manage my groups" | 29 | And I follow "Manage my groups" |
30 | Then I should see "Sample Community" | 30 | Then I should see "Sample Community" |
@@ -41,7 +41,7 @@ Feature: | @@ -41,7 +41,7 @@ Feature: | ||
41 | Scenario: a not logged in user can log in by members block's button | 41 | Scenario: a not logged in user can log in by members block's button |
42 | Given I am not logged in | 42 | Given I am not logged in |
43 | When I go to sample-community's homepage | 43 | When I go to sample-community's homepage |
44 | - And I follow "Join" within ".members-block" | 44 | + And I follow "Join this community" within ".members-block" |
45 | Then I should see "Username / Email" | 45 | Then I should see "Username / Email" |
46 | 46 | ||
47 | Scenario: the join-leave button do not appear if the checkbox show-join-leave-button is not checked | 47 | Scenario: the join-leave button do not appear if the checkbox show-join-leave-button is not checked |
@@ -51,5 +51,5 @@ Feature: | @@ -51,5 +51,5 @@ Feature: | ||
51 | And I uncheck "Show join leave button" | 51 | And I uncheck "Show join leave button" |
52 | And I press "Save" | 52 | And I press "Save" |
53 | When I go to sample-community's homepage | 53 | When I go to sample-community's homepage |
54 | - Then I should not see "Join" within ".members-block" | 54 | + Then I should not see "Join this community" within ".members-block" |
55 | And I should not see "Leave community" within ".members-block" | 55 | And I should not see "Leave community" within ".members-block" |
lib/authenticated_system.rb
1 | module AuthenticatedSystem | 1 | module AuthenticatedSystem |
2 | + | ||
2 | protected | 3 | protected |
4 | + | ||
5 | + # See impl. from http://stackoverflow.com/a/2513456/670229 | ||
6 | + def self.included? base | ||
7 | + base.around_filter do | ||
8 | + begin | ||
9 | + User.current = current_user | ||
10 | + yield | ||
11 | + ensure | ||
12 | + # to address the thread variable leak issues in Puma/Thin webserver | ||
13 | + User.current = nil | ||
14 | + end | ||
15 | + end | ||
16 | + end | ||
17 | + | ||
3 | # Returns true or false if the user is logged in. | 18 | # Returns true or false if the user is logged in. |
4 | # Preloads @current_user with the user model if they're logged in. | 19 | # Preloads @current_user with the user model if they're logged in. |
5 | def logged_in? | 20 | def logged_in? |
@@ -8,7 +23,13 @@ module AuthenticatedSystem | @@ -8,7 +23,13 @@ module AuthenticatedSystem | ||
8 | 23 | ||
9 | # Accesses the current user from the session. | 24 | # Accesses the current user from the session. |
10 | def current_user | 25 | def current_user |
11 | - @current_user ||= (session[:user] && User.find_by_id(session[:user])) || nil | 26 | + @current_user ||= begin |
27 | + id = session[:user] | ||
28 | + user = User.where(id: id).first if id | ||
29 | + user.session = session if user | ||
30 | + User.current = user | ||
31 | + user | ||
32 | + end | ||
12 | end | 33 | end |
13 | 34 | ||
14 | # Store the given user in the session. | 35 | # Store the given user in the session. |
@@ -17,9 +38,10 @@ module AuthenticatedSystem | @@ -17,9 +38,10 @@ module AuthenticatedSystem | ||
17 | session.delete(:user) | 38 | session.delete(:user) |
18 | else | 39 | else |
19 | session[:user] = new_user.id | 40 | session[:user] = new_user.id |
41 | + new_user.session = session | ||
20 | new_user.register_login | 42 | new_user.register_login |
21 | end | 43 | end |
22 | - @current_user = new_user | 44 | + @current_user = User.current = new_user |
23 | end | 45 | end |
24 | 46 | ||
25 | # Check if the user is authorized. | 47 | # Check if the user is authorized. |
@@ -121,14 +143,9 @@ module AuthenticatedSystem | @@ -121,14 +143,9 @@ module AuthenticatedSystem | ||
121 | # When called with before_filter :login_from_cookie will check for an :auth_token | 143 | # When called with before_filter :login_from_cookie will check for an :auth_token |
122 | # cookie and log the user back in if apropriate | 144 | # cookie and log the user back in if apropriate |
123 | def login_from_cookie | 145 | def login_from_cookie |
124 | - return unless cookies[:auth_token] && !logged_in? | ||
125 | - user = User.find_by_remember_token(cookies[:auth_token]) | ||
126 | - if user && user.remember_token? | ||
127 | - user.remember_me | ||
128 | - self.current_user = user | ||
129 | - cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } | ||
130 | - flash[:notice] = "Logged in successfully" | ||
131 | - end | 146 | + return if cookies[:auth_token].blank? or logged_in? |
147 | + user = User.where(remember_token: cookies[:auth_token]).first | ||
148 | + self.current_user = user if user and user.remember_token? | ||
132 | end | 149 | end |
133 | 150 | ||
134 | private | 151 | private |
lib/needs_profile.rb
@@ -21,7 +21,11 @@ module NeedsProfile | @@ -21,7 +21,11 @@ module NeedsProfile | ||
21 | protected | 21 | protected |
22 | 22 | ||
23 | def load_profile | 23 | def load_profile |
24 | - @profile ||= environment.profiles.find_by_identifier(params[:profile]) | 24 | + if params[:profile] |
25 | + params[:profile].downcase! | ||
26 | + @profile ||= environment.profiles.where(identifier: params[:profile]).first | ||
27 | + end | ||
28 | + | ||
25 | if @profile | 29 | if @profile |
26 | profile_hostname = @profile.hostname | 30 | profile_hostname = @profile.hostname |
27 | if profile_hostname && profile_hostname != request.host | 31 | if profile_hostname && profile_hostname != request.host |
lib/noosfero/action_tracker_ext.rb
1 | Rails.configuration.to_prepare do | 1 | Rails.configuration.to_prepare do |
2 | - ActionTracker::Record.module_eval do | 2 | + ActionTracker::Record.class_eval do |
3 | extend CacheCounterHelper | 3 | extend CacheCounterHelper |
4 | 4 | ||
5 | after_create do |record| | 5 | after_create do |record| |
@@ -9,6 +9,11 @@ Rails.configuration.to_prepare do | @@ -9,6 +9,11 @@ Rails.configuration.to_prepare do | ||
9 | end | 9 | end |
10 | end | 10 | end |
11 | 11 | ||
12 | + has_many :profile_activities, foreign_key: :activity_id, conditions: {profile_activities: {activity_type: 'ActionTracker::Record'}}, dependent: :destroy | ||
13 | + | ||
14 | + after_create :create_activity | ||
15 | + after_update :update_activity | ||
16 | + | ||
12 | after_destroy do |record| | 17 | after_destroy do |record| |
13 | if record.created_at >= ActionTracker::Record::RECENT_DELAY.days.ago | 18 | if record.created_at >= ActionTracker::Record::RECENT_DELAY.days.ago |
14 | ActionTracker::Record.update_cache_counter(:activities_count, record.user, -1) | 19 | ActionTracker::Record.update_cache_counter(:activities_count, record.user, -1) |
@@ -17,5 +22,17 @@ Rails.configuration.to_prepare do | @@ -17,5 +22,17 @@ Rails.configuration.to_prepare do | ||
17 | end | 22 | end |
18 | end | 23 | end |
19 | end | 24 | end |
25 | + | ||
26 | + protected | ||
27 | + | ||
28 | + def create_activity | ||
29 | + target = if self.target.is_a? Profile then self.target else self.target.profile rescue self.user end | ||
30 | + return if self.verb.in? target.exclude_verbs_on_activities | ||
31 | + ProfileActivity.create! profile: target, activity: self | ||
32 | + end | ||
33 | + def update_activity | ||
34 | + ProfileActivity.update_activity self | ||
35 | + end | ||
36 | + | ||
20 | end | 37 | end |
21 | end | 38 | end |
lib/noosfero/plugin/routes.rb
@@ -19,15 +19,15 @@ Dir.glob(Rails.root.join(plugins_root, '*', 'controllers')) do |controllers_dir| | @@ -19,15 +19,15 @@ Dir.glob(Rails.root.join(plugins_root, '*', 'controllers')) do |controllers_dir| | ||
19 | controllers.each do |controller| | 19 | controllers.each do |controller| |
20 | controller_name = controller.gsub("#{plugin_name}_plugin_",'') | 20 | controller_name = controller.gsub("#{plugin_name}_plugin_",'') |
21 | if %w[profile myprofile].include?(folder.to_s) | 21 | if %w[profile myprofile].include?(folder.to_s) |
22 | - match "#{prefixes_by_folder[folder]}/#{plugin_name}/#{controller_name}(/:action(/:id))", :controller => controller, :profile => /#{Noosfero.identifier_format}/ | 22 | + match "#{prefixes_by_folder[folder]}/#{plugin_name}/#{controller_name}(/:action(/:id))", controller: controller, profile: /#{Noosfero.identifier_format_in_url}/i |
23 | else | 23 | else |
24 | - match "#{prefixes_by_folder[folder]}/#{plugin_name}/#{controller_name}(/:action(/:id))", :controller => controller | 24 | + match "#{prefixes_by_folder[folder]}/#{plugin_name}/#{controller_name}(/:action(/:id))", controller: controller |
25 | end | 25 | end |
26 | end | 26 | end |
27 | end | 27 | end |
28 | 28 | ||
29 | - match 'plugin/' + plugin_name + '(/:action(/:id))', :controller => plugin_name + '_plugin' | ||
30 | - match 'profile/:profile/plugin/' + plugin_name + '(/:action(/:id))', :controller => plugin_name + '_plugin_profile', :profile => /#{Noosfero.identifier_format}/ | ||
31 | - match 'myprofile/:profile/plugin/' + plugin_name + '(/:action(/:id))', :controller => plugin_name + '_plugin_myprofile', :profile => /#{Noosfero.identifier_format}/ | ||
32 | - match 'admin/plugin/' + plugin_name + '(/:action(/:id))', :controller => plugin_name + '_plugin_admin' | 29 | + match 'plugin/' + plugin_name + '(/:action(/:id))', controller: plugin_name + '_plugin' |
30 | + match 'profile/:profile/plugin/' + plugin_name + '(/:action(/:id))', controller: plugin_name + '_plugin_profile', profile: /#{Noosfero.identifier_format_in_url}/i | ||
31 | + match 'myprofile/:profile/plugin/' + plugin_name + '(/:action(/:id))', controller: plugin_name + '_plugin_myprofile', profile: /#{Noosfero.identifier_format_in_url}/i | ||
32 | + match 'admin/plugin/' + plugin_name + '(/:action(/:id))', controller: plugin_name + '_plugin_admin' | ||
33 | end | 33 | end |
lib/noosfero/version.rb
lib/notify_activity_to_profiles_job.rb
@@ -22,6 +22,12 @@ class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id) | @@ -22,6 +22,12 @@ class NotifyActivityToProfilesJob < Struct.new(:tracked_action_id) | ||
22 | # Notify all friends | 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})") | 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 | 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_enteprises_people where enterprise_id = #{tracked_action.user.id}" else "" end | ||
29 | + end | ||
30 | + | ||
25 | if target.is_a?(Community) | 31 | if target.is_a?(Community) |
26 | ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb) | 32 | ActionTrackerNotification.create(:profile_id => target.id, :action_tracker_id => tracked_action.id) unless NOT_NOTIFY_COMMUNITY.include?(tracked_action.verb) |
27 | 33 |
lib/tasks/ci.rake
@@ -37,6 +37,11 @@ namespace :ci do | @@ -37,6 +37,11 @@ namespace :ci do | ||
37 | tests << t unless tests.include?(t) | 37 | tests << t unless tests.include?(t) |
38 | end | 38 | end |
39 | end | 39 | end |
40 | + if f =~ %r{^app/views/(\w*)/} | ||
41 | + controller = $1 | ||
42 | + t = "test/functional/#{controller}_controller_test.rb" | ||
43 | + tests << t if File.exists?(t) && !tests.include?(t) | ||
44 | + end | ||
40 | end | 45 | end |
41 | 46 | ||
42 | if tests.empty? && features.empty? && changed_plugins.empty? | 47 | if tests.empty? && features.empty? && changed_plugins.empty? |
lib/tasks/enable_plugins.rake
1 | namespace :noosfero do | 1 | namespace :noosfero do |
2 | namespace :plugins do | 2 | namespace :plugins do |
3 | + desc 'Enable all installed plugins on all environment' | ||
3 | task :enable_all => :environment do | 4 | task :enable_all => :environment do |
4 | Environment.all.each do |env| | 5 | Environment.all.each do |env| |
5 | puts "Plugins Activated on #{env.name}" if env.enable_all_plugins | 6 | puts "Plugins Activated on #{env.name}" if env.enable_all_plugins |
lib/tasks/gettext.rake
@@ -60,6 +60,8 @@ task :updatepo do | @@ -60,6 +60,8 @@ task :updatepo do | ||
60 | 60 | ||
61 | puts 'Extracting strings from source. This may take a while ...' | 61 | puts 'Extracting strings from source. This may take a while ...' |
62 | 62 | ||
63 | + # XXX this list is duplicated in test/unit/i18n_test.rb; if you change it | ||
64 | + # here, please also update it there. | ||
63 | files_to_translate = [ | 65 | files_to_translate = [ |
64 | "{app,lib}/**/*.{rb,rhtml,erb}", | 66 | "{app,lib}/**/*.{rb,rhtml,erb}", |
65 | 'config/initializers/*.rb', | 67 | 'config/initializers/*.rb', |
@@ -98,7 +100,7 @@ Dir.glob('plugins/*').each do |plugindir| | @@ -98,7 +100,7 @@ Dir.glob('plugins/*').each do |plugindir| | ||
98 | } | 100 | } |
99 | ) | 101 | ) |
100 | plugin_pot = File.join(po_root, "#{plugin}.pot") | 102 | plugin_pot = File.join(po_root, "#{plugin}.pot") |
101 | - if File.exists?(plugin_pot) && system("LANG=C msgfmt --statistics --output /dev/null #{plugin_pot} 2>&1 | grep -q '^0 translated messages.'") | 103 | + if File.exists?(plugin_pot) && system("LANG=C msgfmt --statistics --output /dev/null #{plugin_pot} 2>&1 | grep -q '^0 translated messages.$'") |
102 | rm_f plugin_pot | 104 | rm_f plugin_pot |
103 | end | 105 | end |
104 | sh 'find', po_root, '-type', 'd', '-empty', '-delete' | 106 | sh 'find', po_root, '-type', 'd', '-empty', '-delete' |
@@ -106,8 +108,25 @@ Dir.glob('plugins/*').each do |plugindir| | @@ -106,8 +108,25 @@ Dir.glob('plugins/*').each do |plugindir| | ||
106 | end | 108 | end |
107 | end | 109 | end |
108 | 110 | ||
111 | +def checkpo(po_files) | ||
112 | + max = po_files.map(&:size).max | ||
113 | + po_files.each do |po| | ||
114 | + printf "%#{max}s: ", po | ||
115 | + system "msgfmt --statistics --output /dev/null " + po | ||
116 | + end | ||
117 | +end | ||
118 | + | ||
119 | +desc "checks core translation files" | ||
109 | task :checkpo do | 120 | task :checkpo do |
110 | - sh 'for po in po/*/noosfero.po; do echo -n "$po: "; msgfmt --statistics --output /dev/null $po; done' | 121 | + checkpo(Dir.glob('po/*/noosfero.po')) |
122 | +end | ||
123 | + | ||
124 | +languages = Dir.glob('po/*').select { |d| File.directory?(d) }.map { |d| File.basename(d) } | ||
125 | +languages.each do |lang| | ||
126 | + desc "checks #{lang} translation files" | ||
127 | + task "checkpo:#{lang}" do | ||
128 | + checkpo(Dir.glob("po/#{lang}/*.po") + Dir.glob("plugins/*/po/#{lang}/*.po")) | ||
129 | + end | ||
111 | end | 130 | end |
112 | 131 | ||
113 | # vim: ft=ruby | 132 | # vim: ft=ruby |
lib/tasks/release.rake
@@ -121,6 +121,10 @@ EOF | @@ -121,6 +121,10 @@ EOF | ||
121 | desc "uploads the packages to the repository" | 121 | desc "uploads the packages to the repository" |
122 | task :upload_packages, :target do |t, args| | 122 | task :upload_packages, :target do |t, args| |
123 | target = args[:target] || 'stable' | 123 | target = args[:target] || 'stable' |
124 | + source = Dir['pkg/noosfero-*.tar.gz'].first | ||
125 | + sh "gpg --detach-sign #{source}" | ||
126 | + sh "sha256sum #{source} > #{source}.sha256sum" | ||
127 | + sh "scp #{source}* download.noosfero.org:repos/source/" | ||
124 | sh "dput --unchecked noosfero-#{target} #{Dir['pkg/*.changes'].first}" | 128 | sh "dput --unchecked noosfero-#{target} #{Dir['pkg/*.changes'].first}" |
125 | end | 129 | end |
126 | 130 | ||
@@ -189,6 +193,14 @@ EOF | @@ -189,6 +193,14 @@ EOF | ||
189 | abort if missing | 193 | abort if missing |
190 | end | 194 | end |
191 | 195 | ||
196 | + task :tag do | ||
197 | + sh "git tag -s -m 'Noosfero #{$version}' #{$version.gsub('~','-')}" | ||
198 | + end | ||
199 | + | ||
200 | + task :pushtag do | ||
201 | + sh "git push origin #{$version.gsub('~','-')}" | ||
202 | + end | ||
203 | + | ||
192 | desc 'prepares a release tarball' | 204 | desc 'prepares a release tarball' |
193 | task :release, :target do |t, args| | 205 | task :release, :target do |t, args| |
194 | target = args[:target] | 206 | target = args[:target] |
@@ -220,15 +232,14 @@ EOF | @@ -220,15 +232,14 @@ EOF | ||
220 | Rake::Task['noosfero:debian_packages'].invoke | 232 | Rake::Task['noosfero:debian_packages'].invoke |
221 | 233 | ||
222 | if confirm("Create tag for version #{$version}") | 234 | if confirm("Create tag for version #{$version}") |
223 | - sh "git tag #{$version.gsub('~','-')}" | ||
224 | - | 235 | + Rake::Task['noosfero:tag'].invoke |
225 | if confirm('Push new version tag') | 236 | if confirm('Push new version tag') |
226 | - repository = ask('Repository name', 'origin') | ||
227 | puts "==> Uploading tags..." | 237 | puts "==> Uploading tags..." |
228 | - sh "git push #{repository} #{$version.gsub('~','-')}" | 238 | + Rake::Task['noosfero:pushtag'].invoke |
229 | end | 239 | end |
230 | end | 240 | end |
231 | 241 | ||
242 | + Rake::Task['noosfero:upload'].invoke | ||
232 | if confirm('Upload the packages') | 243 | if confirm('Upload the packages') |
233 | puts "==> Uploading debian packages..." | 244 | puts "==> Uploading debian packages..." |
234 | Rake::Task['noosfero:upload_packages'].invoke(target) | 245 | Rake::Task['noosfero:upload_packages'].invoke(target) |
@@ -239,6 +250,9 @@ EOF | @@ -239,6 +250,9 @@ EOF | ||
239 | rm_f "tmp/pending-release" | 250 | rm_f "tmp/pending-release" |
240 | end | 251 | end |
241 | 252 | ||
253 | + desc "finishes the release" | ||
254 | + task 'release:finish' => ['noosfero:upload_packages', 'noosfero:tag', 'noosfero:pushtag'] | ||
255 | + | ||
242 | desc 'Build Debian packages' | 256 | desc 'Build Debian packages' |
243 | task :debian_packages => :package do | 257 | task :debian_packages => :package do |
244 | target = "pkg/noosfero-#{$version}" | 258 | target = "pkg/noosfero-#{$version}" |
plugins/analytics/po/pt/analytics.po
@@ -11,12 +11,12 @@ | @@ -11,12 +11,12 @@ | ||
11 | # | 11 | # |
12 | msgid "" | 12 | msgid "" |
13 | msgstr "" | 13 | msgstr "" |
14 | -"Project-Id-Version: 1.0-690-gcb6e853\n" | ||
15 | -"POT-Creation-Date: 2015-03-05 12:10-0300\n" | 14 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
15 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
16 | "PO-Revision-Date: 2015-07-21 09:23-0300\n" | 16 | "PO-Revision-Date: 2015-07-21 09:23-0300\n" |
17 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 17 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
18 | -"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero" | ||
19 | -"/plugin-solr/pt/>\n" | 18 | +"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" |
19 | +"plugin-solr/pt/>\n" | ||
20 | "Language: pt\n" | 20 | "Language: pt\n" |
21 | "MIME-Version: 1.0\n" | 21 | "MIME-Version: 1.0\n" |
22 | "Content-Type: text/plain; charset=UTF-8\n" | 22 | "Content-Type: text/plain; charset=UTF-8\n" |
@@ -24,6 +24,5 @@ msgstr "" | @@ -24,6 +24,5 @@ msgstr "" | ||
24 | "Plural-Forms: nplurals=2; plural=n != 1;\n" | 24 | "Plural-Forms: nplurals=2; plural=n != 1;\n" |
25 | "X-Generator: Weblate 2.3-dev\n" | 25 | "X-Generator: Weblate 2.3-dev\n" |
26 | 26 | ||
27 | -msgid "Select the set of communities and users to track" | ||
28 | -msgstr "Seleciona o conjunto de comunidades e usuários para rastrear" | ||
29 | - | 27 | +#~ msgid "Select the set of communities and users to track" |
28 | +#~ msgstr "Seleciona o conjunto de comunidades e usuários para rastrear" |
@@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
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: 1.2~rc2-23-g29aba34\n" | ||
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | +"PO-Revision-Date: 2015-08-06 17:21-0300\n" | ||
12 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
13 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
14 | +"Language: \n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | ||
19 | + | ||
20 | +#: plugins/anti_spam/lib/anti_spam_plugin.rb:8 | ||
21 | +msgid "" | ||
22 | +"Tests comments and suggested articles against a spam checking service " | ||
23 | +"compatible with the Akismet API" | ||
24 | +msgstr "" | ||
25 | + | ||
26 | +#: plugins/anti_spam/views/anti_spam_plugin_admin/index.html.erb:1 | ||
27 | +msgid "AntiSpam settings" | ||
28 | +msgstr "" | ||
29 | + | ||
30 | +#: plugins/anti_spam/views/anti_spam_plugin_admin/index.html.erb:5 | ||
31 | +msgid "Host" | ||
32 | +msgstr "" | ||
33 | + | ||
34 | +#: plugins/anti_spam/views/anti_spam_plugin_admin/index.html.erb:7 | ||
35 | +msgid "API key" | ||
36 | +msgstr "" |
plugins/anti_spam/po/de/anti_spam.po
@@ -6,8 +6,8 @@ | @@ -6,8 +6,8 @@ | ||
6 | # | 6 | # |
7 | msgid "" | 7 | msgid "" |
8 | msgstr "" | 8 | msgstr "" |
9 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
10 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" | 11 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" |
12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/" | 13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/" |
plugins/anti_spam/po/pt/anti_spam.po
@@ -11,8 +11,8 @@ | @@ -11,8 +11,8 @@ | ||
11 | # | 11 | # |
12 | msgid "" | 12 | msgid "" |
13 | msgstr "" | 13 | msgstr "" |
14 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
15 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 14 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
15 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" | 16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" |
17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" | 17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" |
18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" | 18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" |
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
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: 1.2~rc2-23-g29aba34\n" | ||
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | +"PO-Revision-Date: 2015-08-06 17:21-0300\n" | ||
12 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
13 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
14 | +"Language: \n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | ||
19 | + | ||
20 | +#: plugins/breadcrumbs/lib/breadcrumbs_plugin.rb:8 | ||
21 | +msgid "A plugin that add a block to display breadcrumbs." | ||
22 | +msgstr "" | ||
23 | + | ||
24 | +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:10 | ||
25 | +msgid "Content Breadcrumbs" | ||
26 | +msgstr "" | ||
27 | + | ||
28 | +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:14 | ||
29 | +msgid "This block displays breadcrumb trail." | ||
30 | +msgstr "" | ||
31 | + | ||
32 | +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:68 | ||
33 | +msgid "Upload Files" | ||
34 | +msgstr "" | ||
35 | + | ||
36 | +#: plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.html.erb:2 | ||
37 | +msgid "Show cms action" | ||
38 | +msgstr "" | ||
39 | + | ||
40 | +#: plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.html.erb:3 | ||
41 | +msgid "Show profile" | ||
42 | +msgstr "" | ||
43 | + | ||
44 | +#: plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.html.erb:4 | ||
45 | +msgid "Show section name" | ||
46 | +msgstr "" |
plugins/breadcrumbs/po/pt/breadcrumbs.po
@@ -11,8 +11,8 @@ | @@ -11,8 +11,8 @@ | ||
11 | # | 11 | # |
12 | msgid "" | 12 | msgid "" |
13 | msgstr "" | 13 | msgstr "" |
14 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
15 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 14 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
15 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" | 16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" |
17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" | 17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" |
18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" | 18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" |
plugins/breadcrumbs/test/functional/profile_design_controller_test.rb
@@ -37,8 +37,8 @@ class ProfileDesignControllerTest < ActionController::TestCase | @@ -37,8 +37,8 @@ class ProfileDesignControllerTest < ActionController::TestCase | ||
37 | post :save, :id => @block.id, :profile => @profile.identifier, :block => {:title => 'breadcrumbs', :show_cms_action => false, :show_profile => false} | 37 | post :save, :id => @block.id, :profile => @profile.identifier, :block => {:title => 'breadcrumbs', :show_cms_action => false, :show_profile => false} |
38 | @block.reload | 38 | @block.reload |
39 | assert_equal 'breadcrumbs', @block.title | 39 | assert_equal 'breadcrumbs', @block.title |
40 | - assert !@block.show_profile | ||
41 | - assert !@block.show_cms_action | 40 | + refute @block.show_profile |
41 | + refute @block.show_cms_action | ||
42 | end | 42 | end |
43 | 43 | ||
44 | should 'be able save breadcrumbs block with show_section_name option' do | 44 | should 'be able save breadcrumbs block with show_section_name option' do |
plugins/breadcrumbs/test/unit/breadcrumbs_plugin_test.rb
@@ -7,11 +7,11 @@ class BreadcrumbsPluginTest < ActiveSupport::TestCase | @@ -7,11 +7,11 @@ class BreadcrumbsPluginTest < ActiveSupport::TestCase | ||
7 | end | 7 | end |
8 | 8 | ||
9 | should 'has a name' do | 9 | should 'has a name' do |
10 | - assert !BreadcrumbsPlugin.plugin_name.blank? | 10 | + refute BreadcrumbsPlugin.plugin_name.blank? |
11 | end | 11 | end |
12 | 12 | ||
13 | should 'has a description' do | 13 | should 'has a description' do |
14 | - assert !BreadcrumbsPlugin.plugin_description.blank? | 14 | + refute BreadcrumbsPlugin.plugin_description.blank? |
15 | end | 15 | end |
16 | 16 | ||
17 | should 'add a block' do | 17 | should 'add a block' do |
plugins/breadcrumbs/test/unit/content_breadcrumbs_block_test.rb
@@ -69,7 +69,7 @@ class ContentBreadcrumbsBlockTest < ActiveSupport::TestCase | @@ -69,7 +69,7 @@ class ContentBreadcrumbsBlockTest < ActiveSupport::TestCase | ||
69 | end | 69 | end |
70 | 70 | ||
71 | should 'not be cacheable' do | 71 | should 'not be cacheable' do |
72 | - assert !@block.cacheable? | 72 | + refute @block.cacheable? |
73 | end | 73 | end |
74 | 74 | ||
75 | end | 75 | end |
plugins/bsc/lib/bsc_plugin/ext/product.rb
@@ -12,4 +12,14 @@ class Product | @@ -12,4 +12,14 @@ class Product | ||
12 | def display_supplier_on_search? | 12 | def display_supplier_on_search? |
13 | false | 13 | false |
14 | end | 14 | end |
15 | + | ||
16 | + def action_tracker_user | ||
17 | + return self.enterprise if self.enterprise.validated | ||
18 | + | ||
19 | + if self.enterprise.bsc | ||
20 | + self.enterprise.bsc | ||
21 | + else | ||
22 | + self.enterprise | ||
23 | + end | ||
24 | + end | ||
15 | end | 25 | end |
@@ -0,0 +1,351 @@ | @@ -0,0 +1,351 @@ | ||
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: 1.2~rc2-23-g29aba34\n" | ||
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | +"PO-Revision-Date: 2015-08-06 17:21-0300\n" | ||
12 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
13 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
14 | +"Language: \n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | ||
19 | + | ||
20 | +#: plugins/bsc/lib/bsc_plugin.rb:10 | ||
21 | +msgid "Adds the Bsc feature" | ||
22 | +msgstr "" | ||
23 | + | ||
24 | +#: plugins/bsc/lib/bsc_plugin.rb:14 | ||
25 | +msgid "Create Bsc" | ||
26 | +msgstr "" | ||
27 | + | ||
28 | +#: plugins/bsc/lib/bsc_plugin.rb:15 | ||
29 | +msgid "Validate Enterprises" | ||
30 | +msgstr "" | ||
31 | + | ||
32 | +#: plugins/bsc/lib/bsc_plugin.rb:20 | ||
33 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_associated_enterprises.html.erb:1 | ||
34 | +msgid "Manage associated enterprises" | ||
35 | +msgstr "" | ||
36 | + | ||
37 | +#: plugins/bsc/lib/bsc_plugin.rb:21 plugins/bsc/lib/bsc_plugin.rb:27 | ||
38 | +msgid "Transfer ownership" | ||
39 | +msgstr "" | ||
40 | + | ||
41 | +#: plugins/bsc/lib/bsc_plugin.rb:22 | ||
42 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:1 | ||
43 | +msgid "Manage contracts" | ||
44 | +msgstr "" | ||
45 | + | ||
46 | +#: plugins/bsc/lib/bsc_plugin.rb:98 | ||
47 | +msgid "Bsc" | ||
48 | +msgstr "" | ||
49 | + | ||
50 | +#: plugins/bsc/lib/bsc_plugin.rb:109 | ||
51 | +#: plugins/bsc/views/shared/_fields.html.erb:53 | ||
52 | +msgid "Contact" | ||
53 | +msgstr "" | ||
54 | + | ||
55 | +#: plugins/bsc/lib/bsc_plugin/bsc.rb:28 | ||
56 | +msgid "Bsc info and settings" | ||
57 | +msgstr "" | ||
58 | + | ||
59 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:10 | ||
60 | +msgid "BSC association" | ||
61 | +msgstr "" | ||
62 | + | ||
63 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:18 | ||
64 | +msgid "%{requestor} wants to associate this enterprise with %{linked_subject}." | ||
65 | +msgstr "" | ||
66 | + | ||
67 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:35 | ||
68 | +msgid "%{enterprise} accepted your request to associate it with %{bsc}." | ||
69 | +msgstr "" | ||
70 | + | ||
71 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:39 | ||
72 | +msgid "%{enterprise} rejected your request to associate it with %{bsc}." | ||
73 | +msgstr "" | ||
74 | + | ||
75 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:41 | ||
76 | +msgid "" | ||
77 | +"Here is the reject explanation left by the administrator:\n" | ||
78 | +"\n" | ||
79 | +"%{reject_explanation}" | ||
80 | +msgstr "" | ||
81 | + | ||
82 | +#: plugins/bsc/lib/bsc_plugin/associate_enterprise.rb:46 | ||
83 | +msgid "%{requestor} wants assoaciate %{bsc} as your BSC." | ||
84 | +msgstr "" | ||
85 | + | ||
86 | +#: plugins/bsc/lib/bsc_plugin/mailer.rb:7 | ||
87 | +msgid "[%s] Bsc management transferred to you." | ||
88 | +msgstr "" | ||
89 | + | ||
90 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:33 | ||
91 | +msgid "Opened" | ||
92 | +msgstr "" | ||
93 | + | ||
94 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:33 | ||
95 | +msgid "Negotiating" | ||
96 | +msgstr "" | ||
97 | + | ||
98 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:33 | ||
99 | +msgid "Executing" | ||
100 | +msgstr "" | ||
101 | + | ||
102 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:33 | ||
103 | +msgid "Closed" | ||
104 | +msgstr "" | ||
105 | + | ||
106 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:46 | ||
107 | +msgid "Federal" | ||
108 | +msgstr "" | ||
109 | + | ||
110 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:59 | ||
111 | +msgid "ProjectA" | ||
112 | +msgstr "" | ||
113 | + | ||
114 | +#: plugins/bsc/lib/bsc_plugin/contract.rb:59 | ||
115 | +msgid "ProjectB" | ||
116 | +msgstr "" | ||
117 | + | ||
118 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:38 | ||
119 | +msgid "This Bsc associations were saved successfully." | ||
120 | +msgstr "" | ||
121 | + | ||
122 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:42 | ||
123 | +msgid "This Bsc associations couldn't be saved." | ||
124 | +msgstr "" | ||
125 | + | ||
126 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:71 | ||
127 | +msgid "Enterprise ownership transferred." | ||
128 | +msgstr "" | ||
129 | + | ||
130 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:85 | ||
131 | +msgid "Enterprise was created in association with %s." | ||
132 | +msgstr "" | ||
133 | + | ||
134 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:117 | ||
135 | +msgid "Contract created." | ||
136 | +msgstr "" | ||
137 | + | ||
138 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:120 | ||
139 | +msgid "Contract created but some products could not be added." | ||
140 | +msgstr "" | ||
141 | + | ||
142 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:131 | ||
143 | +msgid "Contract doesn't exists! Maybe it was already removed." | ||
144 | +msgstr "" | ||
145 | + | ||
146 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:140 | ||
147 | +msgid "Could not edit such contract." | ||
148 | +msgstr "" | ||
149 | + | ||
150 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:170 | ||
151 | +msgid "Contract edited." | ||
152 | +msgstr "" | ||
153 | + | ||
154 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:173 | ||
155 | +msgid "Contract edited but some products could not be added." | ||
156 | +msgstr "" | ||
157 | + | ||
158 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:183 | ||
159 | +msgid "Contract removed." | ||
160 | +msgstr "" | ||
161 | + | ||
162 | +#: plugins/bsc/controllers/bsc_plugin_myprofile_controller.rb:185 | ||
163 | +msgid "Contract could not be removed. Sorry! ^^" | ||
164 | +msgstr "" | ||
165 | + | ||
166 | +#: plugins/bsc/controllers/bsc_plugin_admin_controller.rb:11 | ||
167 | +msgid "Your Bsc was created." | ||
168 | +msgstr "" | ||
169 | + | ||
170 | +#: plugins/bsc/controllers/bsc_plugin_admin_controller.rb:21 | ||
171 | +msgid "Enterprises validated." | ||
172 | +msgstr "" | ||
173 | + | ||
174 | +#: plugins/bsc/controllers/bsc_plugin_admin_controller.rb:24 | ||
175 | +msgid "Enterprise validations couldn't be saved." | ||
176 | +msgstr "" | ||
177 | + | ||
178 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_associated_enterprises.html.erb:4 | ||
179 | +msgid "Associations awaiting approval:" | ||
180 | +msgstr "" | ||
181 | + | ||
182 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_associated_enterprises.html.erb:16 | ||
183 | +#: plugins/bsc/views/bsc_plugin_admin/validate_enterprises.html.erb:5 | ||
184 | +msgid "Type in a search term for enterprise" | ||
185 | +msgstr "" | ||
186 | + | ||
187 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_associated_enterprises.html.erb:19 | ||
188 | +msgid "Add new enterprise" | ||
189 | +msgstr "" | ||
190 | + | ||
191 | +#: plugins/bsc/views/bsc_plugin_myprofile/new_contract.html.erb:1 | ||
192 | +#: plugins/bsc/views/bsc_plugin_myprofile/edit_contract.html.erb:1 | ||
193 | +msgid "New contract" | ||
194 | +msgstr "" | ||
195 | + | ||
196 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:6 | ||
197 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:7 | ||
198 | +msgid "Client type" | ||
199 | +msgstr "" | ||
200 | + | ||
201 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:7 | ||
202 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:8 | ||
203 | +msgid "Business type" | ||
204 | +msgstr "" | ||
205 | + | ||
206 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:10 | ||
207 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:11 | ||
208 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:5 | ||
209 | +msgid "Status" | ||
210 | +msgstr "" | ||
211 | + | ||
212 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:18 | ||
213 | +msgid "Type in search term for enterprise" | ||
214 | +msgstr "" | ||
215 | + | ||
216 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:23 | ||
217 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:27 | ||
218 | +msgid "Quantity" | ||
219 | +msgstr "" | ||
220 | + | ||
221 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:24 | ||
222 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:28 | ||
223 | +msgid "Unit price" | ||
224 | +msgstr "" | ||
225 | + | ||
226 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:27 | ||
227 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:38 | ||
228 | +msgid "Total" | ||
229 | +msgstr "" | ||
230 | + | ||
231 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:31 | ||
232 | +msgid "Add new product" | ||
233 | +msgstr "" | ||
234 | + | ||
235 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:35 | ||
236 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:13 | ||
237 | +msgid "Supply period" | ||
238 | +msgstr "" | ||
239 | + | ||
240 | +#: plugins/bsc/views/bsc_plugin_myprofile/_contract_form.html.erb:57 | ||
241 | +msgid "Type in a search term for product" | ||
242 | +msgstr "" | ||
243 | + | ||
244 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:5 | ||
245 | +#: plugins/bsc/views/shared/_fields.html.erb:5 | ||
246 | +msgid "Basic information" | ||
247 | +msgstr "" | ||
248 | + | ||
249 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:12 | ||
250 | +msgid "Number of producers" | ||
251 | +msgstr "" | ||
252 | + | ||
253 | +#: plugins/bsc/views/bsc_plugin_myprofile/view_contract.html.erb:48 | ||
254 | +msgid "Annotations" | ||
255 | +msgstr "" | ||
256 | + | ||
257 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:17 | ||
258 | +msgid "Sort by" | ||
259 | +msgstr "" | ||
260 | + | ||
261 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:18 | ||
262 | +msgid "Date(newest first)" | ||
263 | +msgstr "" | ||
264 | + | ||
265 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:18 | ||
266 | +msgid "Date(oldest first)" | ||
267 | +msgstr "" | ||
268 | + | ||
269 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:19 | ||
270 | +msgid "Client name(A-Z)" | ||
271 | +msgstr "" | ||
272 | + | ||
273 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:19 | ||
274 | +msgid "Client name(Z-A)" | ||
275 | +msgstr "" | ||
276 | + | ||
277 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:24 | ||
278 | +msgid "There are no contracts at all." | ||
279 | +msgstr "" | ||
280 | + | ||
281 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:35 | ||
282 | +msgid "Are you sure?" | ||
283 | +msgstr "" | ||
284 | + | ||
285 | +#: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:45 | ||
286 | +msgid "Create new contract" | ||
287 | +msgstr "" | ||
288 | + | ||
289 | +#: plugins/bsc/views/bsc_plugin_myprofile/_similar_enterprises.html.erb:2 | ||
290 | +msgid "Existing enterprises:" | ||
291 | +msgstr "" | ||
292 | + | ||
293 | +#: plugins/bsc/views/bsc_plugin_myprofile/_similar_enterprises.html.erb:3 | ||
294 | +msgid "" | ||
295 | +"Were found %{count} enterprises with similar names on the same city, you can " | ||
296 | +"decide to associate one of them or create the new enterprise confirming the " | ||
297 | +"informations you typed in." | ||
298 | +msgstr "" | ||
299 | + | ||
300 | +#: plugins/bsc/views/bsc_plugin_myprofile/_similar_enterprises.html.erb:20 | ||
301 | +msgid "Associate" | ||
302 | +msgstr "" | ||
303 | + | ||
304 | +#: plugins/bsc/views/bsc_plugin_myprofile/transfer_ownership.html.erb:1 | ||
305 | +msgid "Transfer Ownership" | ||
306 | +msgstr "" | ||
307 | + | ||
308 | +#: plugins/bsc/views/bsc_plugin_myprofile/transfer_ownership.html.erb:4 | ||
309 | +msgid "" | ||
310 | +"This option allows you to transfer this enterprise's management to another " | ||
311 | +"user. This action will remove all the current administrators. Be careful " | ||
312 | +"when confirming this procedure." | ||
313 | +msgstr "" | ||
314 | + | ||
315 | +#: plugins/bsc/views/bsc_plugin_myprofile/transfer_ownership.html.erb:8 | ||
316 | +msgid "Current administrators:" | ||
317 | +msgstr "" | ||
318 | + | ||
319 | +#: plugins/bsc/views/bsc_plugin_myprofile/transfer_ownership.html.erb:19 | ||
320 | +msgid "Administrator:" | ||
321 | +msgstr "" | ||
322 | + | ||
323 | +#: plugins/bsc/views/bsc_plugin_myprofile/transfer_ownership.html.erb:22 | ||
324 | +msgid "Type in a search term for the new administrator" | ||
325 | +msgstr "" | ||
326 | + | ||
327 | +#: plugins/bsc/views/shared/_fields.html.erb:39 | ||
328 | +msgid "" | ||
329 | +"You are about to change the address, and this will break external links to " | ||
330 | +"this bsc or to posts inside it. Do you really want to change?" | ||
331 | +msgstr "" | ||
332 | + | ||
333 | +#: plugins/bsc/views/bsc_plugin/mailer/admin_notification.html.erb:1 | ||
334 | +msgid "The management of %{bsc} was transferred to you." | ||
335 | +msgstr "" | ||
336 | + | ||
337 | +#: plugins/bsc/views/profile/_profile_tab.html.erb:2 | ||
338 | +msgid "Contact phone: " | ||
339 | +msgstr "" | ||
340 | + | ||
341 | +#: plugins/bsc/views/profile/_profile_tab.html.erb:3 | ||
342 | +msgid "Email: " | ||
343 | +msgstr "" | ||
344 | + | ||
345 | +#: plugins/bsc/views/bsc_plugin_admin/new.html.erb:2 | ||
346 | +msgid "BSC registration" | ||
347 | +msgstr "" | ||
348 | + | ||
349 | +#: plugins/bsc/views/bsc_plugin_admin/validate_enterprises.html.erb:1 | ||
350 | +msgid "Validate enterprises" | ||
351 | +msgstr "" |
plugins/bsc/po/de/bsc.po
@@ -6,8 +6,8 @@ | @@ -6,8 +6,8 @@ | ||
6 | # | 6 | # |
7 | msgid "" | 7 | msgid "" |
8 | msgstr "" | 8 | msgstr "" |
9 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
10 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" | 11 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" |
12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/" | 13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/" |
plugins/bsc/po/es/bsc.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
10 | "PO-Revision-Date: 2014-11-03 15:52+0200\n" | 10 | "PO-Revision-Date: 2014-11-03 15:52+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/" | 12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/" |
plugins/bsc/po/fr/bsc.po
@@ -4,9 +4,9 @@ | @@ -4,9 +4,9 @@ | ||
4 | # , 2009. | 4 | # , 2009. |
5 | msgid "" | 5 | msgid "" |
6 | msgstr "" | 6 | msgstr "" |
7 | -"Project-Id-Version: 1.1-166-gaf47713\n" | 7 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
8 | "Report-Msgid-Bugs-To: \n" | 8 | "Report-Msgid-Bugs-To: \n" |
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" |
10 | "PO-Revision-Date: 2014-12-12 14:22+0200\n" | 10 | "PO-Revision-Date: 2014-12-12 14:22+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/noosfero/" | 12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/noosfero/" |
plugins/bsc/po/hy/bsc.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
10 | "PO-Revision-Date: 2009-10-26 16:20-0300\n" | 10 | "PO-Revision-Date: 2009-10-26 16:20-0300\n" |
11 | "Last-Translator: Anahit Minassian <anahit.minassian@cooperation.net>\n" | 11 | "Last-Translator: Anahit Minassian <anahit.minassian@cooperation.net>\n" |
12 | "Language-Team: LANGUAGE <LL@li.org>\n" | 12 | "Language-Team: LANGUAGE <LL@li.org>\n" |
plugins/bsc/po/pt/bsc.po
@@ -11,8 +11,8 @@ | @@ -11,8 +11,8 @@ | ||
11 | # | 11 | # |
12 | msgid "" | 12 | msgid "" |
13 | msgstr "" | 13 | msgstr "" |
14 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
15 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 14 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
15 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" | 16 | "PO-Revision-Date: 2014-12-18 18:40-0200\n" |
17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" | 17 | "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n" |
18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" | 18 | "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" |
plugins/bsc/po/ru/bsc.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
10 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" | 10 | "PO-Revision-Date: 2014-12-12 14:23+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/" | 12 | "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/" |
plugins/bsc/test/functional/bsc_plugin_admin_controller_test.rb
@@ -76,6 +76,6 @@ class BscPluginAdminControllerTest < ActionController::TestCase | @@ -76,6 +76,6 @@ class BscPluginAdminControllerTest < ActionController::TestCase | ||
76 | 76 | ||
77 | assert e1.validated | 77 | assert e1.validated |
78 | assert e2.validated | 78 | assert e2.validated |
79 | - assert !e3.validated | 79 | + refute e3.validated |
80 | end | 80 | end |
81 | end | 81 | end |
plugins/bsc/test/unit/bsc_plugin/bsc_test.rb
@@ -41,7 +41,7 @@ class BscPlugin::BscTest < ActiveSupport::TestCase | @@ -41,7 +41,7 @@ class BscPlugin::BscTest < ActiveSupport::TestCase | ||
41 | bsc.enterprise_requests.stubs(:pending).returns([task]) | 41 | bsc.enterprise_requests.stubs(:pending).returns([task]) |
42 | 42 | ||
43 | assert bsc.already_requested?(e1) | 43 | assert bsc.already_requested?(e1) |
44 | - assert !bsc.already_requested?(e2) | 44 | + refute bsc.already_requested?(e2) |
45 | end | 45 | end |
46 | 46 | ||
47 | should 'return associated enterprises products' do | 47 | should 'return associated enterprises products' do |
@@ -68,7 +68,7 @@ class BscPlugin::BscTest < ActiveSupport::TestCase | @@ -68,7 +68,7 @@ class BscPlugin::BscTest < ActiveSupport::TestCase | ||
68 | end | 68 | end |
69 | 69 | ||
70 | should 'not be able to create product' do | 70 | should 'not be able to create product' do |
71 | - assert !bsc.create_product? | 71 | + refute bsc.create_product? |
72 | end | 72 | end |
73 | 73 | ||
74 | should 'have many contracts' do | 74 | should 'have many contracts' do |
plugins/bsc/test/unit/bsc_plugin/contract_test.rb
@@ -14,7 +14,7 @@ class BscPlugin::ContractTest < ActiveSupport::TestCase | @@ -14,7 +14,7 @@ class BscPlugin::ContractTest < ActiveSupport::TestCase | ||
14 | 14 | ||
15 | contract.bsc = BscPlugin::Bsc.new | 15 | contract.bsc = BscPlugin::Bsc.new |
16 | contract.valid? | 16 | contract.valid? |
17 | - assert !contract.errors.invalid?(:bsc) | 17 | + refute contract.errors.invalid?(:bsc) |
18 | end | 18 | end |
19 | 19 | ||
20 | should 'associate contract with products through sales' do | 20 | should 'associate contract with products through sales' do |
plugins/bsc/test/unit/bsc_plugin/sale_test.rb
@@ -18,8 +18,8 @@ class BscPlugin::SaleTest < ActiveSupport::TestCase | @@ -18,8 +18,8 @@ class BscPlugin::SaleTest < ActiveSupport::TestCase | ||
18 | sale.product = product | 18 | sale.product = product |
19 | sale.contract = contract | 19 | sale.contract = contract |
20 | 20 | ||
21 | - assert !sale.errors.invalid?(product) | ||
22 | - assert !sale.errors.invalid?(contract) | 21 | + refute sale.errors.invalid?(product) |
22 | + refute sale.errors.invalid?(contract) | ||
23 | end | 23 | end |
24 | 24 | ||
25 | should 'validate uniqueness of product and contract composed' do | 25 | should 'validate uniqueness of product and contract composed' do |
@@ -43,7 +43,7 @@ class BscPlugin::SaleTest < ActiveSupport::TestCase | @@ -43,7 +43,7 @@ class BscPlugin::SaleTest < ActiveSupport::TestCase | ||
43 | 43 | ||
44 | sale.quantity = 3 | 44 | sale.quantity = 3 |
45 | sale.valid? | 45 | sale.valid? |
46 | - assert !sale.errors.invalid?(:quantity) | 46 | + refute sale.errors.invalid?(:quantity) |
47 | end | 47 | end |
48 | 48 | ||
49 | should 'set default price as product price if no price indicated' do | 49 | should 'set default price as product price if no price indicated' do |
@@ -0,0 +1,61 @@ | @@ -0,0 +1,61 @@ | ||
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: 1.2~rc2-23-g29aba34\n" | ||
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | +"PO-Revision-Date: 2015-08-06 17:21-0300\n" | ||
12 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
13 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
14 | +"Language: \n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | ||
19 | + | ||
20 | +#: plugins/classify_members/lib/classify_members_plugin.rb:3 | ||
21 | +msgid "Classify Members" | ||
22 | +msgstr "" | ||
23 | + | ||
24 | +#: plugins/classify_members/lib/classify_members_plugin.rb:7 | ||
25 | +msgid "" | ||
26 | +"Allows the association of communities with types of user profiles to " | ||
27 | +"classify and highlight them within the environment." | ||
28 | +msgstr "" | ||
29 | + | ||
30 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:1 | ||
31 | +msgid "Classify Members Plugin's config" | ||
32 | +msgstr "" | ||
33 | + | ||
34 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:5 | ||
35 | +msgid "Communities to classify people:" | ||
36 | +msgstr "" | ||
37 | + | ||
38 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:8 | ||
39 | +msgid "" | ||
40 | +"List of community identifiers and the applicable person label, line by line." | ||
41 | +msgstr "" | ||
42 | + | ||
43 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:12 | ||
44 | +msgid "Example:" | ||
45 | +msgstr "" | ||
46 | + | ||
47 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:13 | ||
48 | +msgid "teachers: Teacher" | ||
49 | +msgstr "" | ||
50 | + | ||
51 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:14 | ||
52 | +msgid "office-lawyers: Lawyer" | ||
53 | +msgstr "" | ||
54 | + | ||
55 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:15 | ||
56 | +msgid "salvador-ba: Soteropolitano" | ||
57 | +msgstr "" | ||
58 | + | ||
59 | +#: plugins/classify_members/views/classify_members_plugin_admin/index.html.erb:19 | ||
60 | +msgid "Save" | ||
61 | +msgstr "" |
plugins/comment_classification/po/comment_classification.pot
0 → 100644
@@ -0,0 +1,196 @@ | @@ -0,0 +1,196 @@ | ||
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: 1.2~rc2-23-g29aba34\n" | ||
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | +"PO-Revision-Date: 2015-08-06 17:21-0300\n" | ||
12 | +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||
13 | +"Language-Team: LANGUAGE <LL@li.org>\n" | ||
14 | +"Language: \n" | ||
15 | +"MIME-Version: 1.0\n" | ||
16 | +"Content-Type: text/plain; charset=UTF-8\n" | ||
17 | +"Content-Transfer-Encoding: 8bit\n" | ||
18 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" | ||
19 | + | ||
20 | +#: plugins/comment_classification/lib/comment_classification_plugin.rb:11 | ||
21 | +msgid "A plugin that allow classification of comments." | ||
22 | +msgstr "" | ||
23 | + | ||
24 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:16 | ||
25 | +msgid "Label created" | ||
26 | +msgstr "" | ||
27 | + | ||
28 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:19 | ||
29 | +msgid "Label could not be created" | ||
30 | +msgstr "" | ||
31 | + | ||
32 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:31 | ||
33 | +msgid "Label updated" | ||
34 | +msgstr "" | ||
35 | + | ||
36 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:34 | ||
37 | +msgid "Failed to edit label" | ||
38 | +msgstr "" | ||
39 | + | ||
40 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:45 | ||
41 | +msgid "Label removed" | ||
42 | +msgstr "" | ||
43 | + | ||
44 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:47 | ||
45 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_labels_controller.rb:50 | ||
46 | +msgid "Label could not be removed" | ||
47 | +msgstr "" | ||
48 | + | ||
49 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:15 | ||
50 | +msgid "Status created" | ||
51 | +msgstr "" | ||
52 | + | ||
53 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:18 | ||
54 | +msgid "Status could not be created" | ||
55 | +msgstr "" | ||
56 | + | ||
57 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:29 | ||
58 | +msgid "Status updated" | ||
59 | +msgstr "" | ||
60 | + | ||
61 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:32 | ||
62 | +msgid "Failed to edit status" | ||
63 | +msgstr "" | ||
64 | + | ||
65 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:43 | ||
66 | +msgid "Status removed" | ||
67 | +msgstr "" | ||
68 | + | ||
69 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:45 | ||
70 | +#: plugins/comment_classification/controllers/admin/comment_classification_plugin_status_controller.rb:48 | ||
71 | +msgid "Status could not be removed" | ||
72 | +msgstr "" | ||
73 | + | ||
74 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/_status_form.html.erb:6 | ||
75 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:9 | ||
76 | +#: plugins/comment_classification/views/comment/comment_extra.html.erb:12 | ||
77 | +msgid "Status" | ||
78 | +msgstr "" | ||
79 | + | ||
80 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/_status_form.html.erb:7 | ||
81 | +msgid "Reason:" | ||
82 | +msgstr "" | ||
83 | + | ||
84 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:1 | ||
85 | +msgid "Status for comment" | ||
86 | +msgstr "" | ||
87 | + | ||
88 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:16 | ||
89 | +msgid "" | ||
90 | +"<i>%{user}</i> added the status <i>%{status_name}</i> at <i>%{created_at}</" | ||
91 | +"i>." | ||
92 | +msgstr "" | ||
93 | + | ||
94 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:18 | ||
95 | +msgid "<i>Reason:</i> %s" | ||
96 | +msgstr "" | ||
97 | + | ||
98 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:24 | ||
99 | +#: plugins/comment_classification/views/comment_classification_plugin_status/create.html.erb:1 | ||
100 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:29 | ||
101 | +msgid "Add a new status" | ||
102 | +msgstr "" | ||
103 | + | ||
104 | +#: plugins/comment_classification/views/comment_classification_plugin_myprofile/index.html.erb:1 | ||
105 | +msgid "Manage comment classification" | ||
106 | +msgstr "" | ||
107 | + | ||
108 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/_form.html.erb:6 | ||
109 | +#: plugins/comment_classification/views/comment_classification_plugin_status/_form.html.erb:6 | ||
110 | +msgid "Name" | ||
111 | +msgstr "" | ||
112 | + | ||
113 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/_form.html.erb:7 | ||
114 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:10 | ||
115 | +msgid "Color" | ||
116 | +msgstr "" | ||
117 | + | ||
118 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/_form.html.erb:8 | ||
119 | +msgid "Enable this label?" | ||
120 | +msgstr "" | ||
121 | + | ||
122 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/edit.html.erb:1 | ||
123 | +msgid "Editing label %s" | ||
124 | +msgstr "" | ||
125 | + | ||
126 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/create.html.erb:1 | ||
127 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:29 | ||
128 | +msgid "Add a new label" | ||
129 | +msgstr "" | ||
130 | + | ||
131 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:1 | ||
132 | +msgid "Manage comments labels" | ||
133 | +msgstr "" | ||
134 | + | ||
135 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:5 | ||
136 | +msgid "(no label registered yet)" | ||
137 | +msgstr "" | ||
138 | + | ||
139 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:9 | ||
140 | +#: plugins/comment_classification/views/comment/comments_labels_select.html.erb:3 | ||
141 | +msgid "Label" | ||
142 | +msgstr "" | ||
143 | + | ||
144 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:11 | ||
145 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:10 | ||
146 | +msgid "Enabled" | ||
147 | +msgstr "" | ||
148 | + | ||
149 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:12 | ||
150 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:12 | ||
151 | +msgid "Actions" | ||
152 | +msgstr "" | ||
153 | + | ||
154 | +#: plugins/comment_classification/views/comment_classification_plugin_labels/index.html.erb:21 | ||
155 | +msgid "Are you sure you want to remove this label?" | ||
156 | +msgstr "" | ||
157 | + | ||
158 | +#: plugins/comment_classification/views/comment_classification_plugin_status/_form.html.erb:7 | ||
159 | +msgid "Enable this status?" | ||
160 | +msgstr "" | ||
161 | + | ||
162 | +#: plugins/comment_classification/views/comment_classification_plugin_status/edit.html.erb:1 | ||
163 | +msgid "Editing status %s" | ||
164 | +msgstr "" | ||
165 | + | ||
166 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:1 | ||
167 | +msgid "Manage comments status" | ||
168 | +msgstr "" | ||
169 | + | ||
170 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:5 | ||
171 | +msgid "(no status registered yet)" | ||
172 | +msgstr "" | ||
173 | + | ||
174 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:11 | ||
175 | +msgid "Reason enabled?" | ||
176 | +msgstr "" | ||
177 | + | ||
178 | +#: plugins/comment_classification/views/comment_classification_plugin_status/index.html.erb:21 | ||
179 | +msgid "Are you sure you want to remove this status?" | ||
180 | +msgstr "" | ||
181 | + | ||
182 | +#: plugins/comment_classification/views/comment/comments_labels_select.html.erb:3 | ||
183 | +msgid "[Select ...]" | ||
184 | +msgstr "" | ||
185 | + | ||
186 | +#: plugins/comment_classification/views/comment_classification_plugin_admin/index.html.erb:1 | ||
187 | +msgid "Comments classification options" | ||
188 | +msgstr "" | ||
189 | + | ||
190 | +#: plugins/comment_classification/views/comment_classification_plugin_admin/index.html.erb:4 | ||
191 | +msgid "Manage Labels" | ||
192 | +msgstr "" | ||
193 | + | ||
194 | +#: plugins/comment_classification/views/comment_classification_plugin_admin/index.html.erb:5 | ||
195 | +msgid "Manage Status" | ||
196 | +msgstr "" |
plugins/comment_classification/po/de/comment_classification.po
@@ -6,8 +6,8 @@ | @@ -6,8 +6,8 @@ | ||
6 | # | 6 | # |
7 | msgid "" | 7 | msgid "" |
8 | msgstr "" | 8 | msgstr "" |
9 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
10 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
10 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
11 | "PO-Revision-Date: 2015-02-23 11:38+0200\n" | 11 | "PO-Revision-Date: 2015-02-23 11:38+0200\n" |
12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-" | 13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/comment_classification/po/es/comment_classification.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" | ||
10 | "PO-Revision-Date: 2015-02-24 20:46+0200\n" | 10 | "PO-Revision-Date: 2015-02-24 20:46+0200\n" |
11 | "Last-Translator: Gonzalo Exequiel Pedone <hipersayan.x@gmail.com>\n" | 11 | "Last-Translator: Gonzalo Exequiel Pedone <hipersayan.x@gmail.com>\n" |
12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/comment_classification/po/fr/comment_classification.po
@@ -4,9 +4,9 @@ | @@ -4,9 +4,9 @@ | ||
4 | # , 2009. | 4 | # , 2009. |
5 | msgid "" | 5 | msgid "" |
6 | msgstr "" | 6 | msgstr "" |
7 | -"Project-Id-Version: 1.1-166-gaf47713\n" | 7 | +"Project-Id-Version: 1.2~rc2-23-g29aba34\n" |
8 | "Report-Msgid-Bugs-To: \n" | 8 | "Report-Msgid-Bugs-To: \n" |
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"POT-Creation-Date: 2015-08-06 18:47-0300\n" |
10 | "PO-Revision-Date: 2015-07-03 00:34+0200\n" | 10 | "PO-Revision-Date: 2015-07-03 00:34+0200\n" |
11 | "Last-Translator: Christophe DANIEL <papaeng@gmail.com>\n" | 11 | "Last-Translator: Christophe DANIEL <papaeng@gmail.com>\n" |
12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-" |