Commit f176dfb255821be039fbe6a78892fc73469c5ea7

Authored by Victor Costa
2 parents cf889378 81a0039e

Merge branch 'production' of gitlab.com:participa/noosfero into production

Showing 270 changed files with 21902 additions and 7639 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 270 files displayed.

INSTALL.https.md
... ... @@ -11,8 +11,8 @@ as below:
11 11  
12 12 # mkdir /etc/noosfero/ssl
13 13 # cd /etc/noosfero/ssl
14   - # openssl genrsa 1024 > noosfero.key
15   - # openssl req -new -x509 -nodes -sha1 -days $[10*365] -key noosfero.key > noosfero.cert
  14 + # openssl genrsa 2048 > noosfero.key
  15 + # openssl req -new -x509 -sha256 -nodes -days $[10*365] -key noosfero.key > noosfero.cert
16 16 # cat noosfero.key noosfero.cert > noosfero.pem
17 17  
18 18 ## Web server configuration
... ...
INSTALL.md
... ... @@ -74,7 +74,7 @@ downloading from git
74 74  
75 75 Here we are cloning the noosfero repository from git. Note: you will need to install git before.
76 76  
77   - $ git clone git://gitorious.org/noosfero/noosfero.git current
  77 + $ git clone https://gitlab.com/noosfero/noosfero.git current
78 78 $ cd current
79 79 $ git checkout -b stable origin/stable
80 80  
... ...
app/controllers/admin/admin_panel_controller.rb
... ... @@ -71,22 +71,4 @@ class AdminPanelController < AdminController
71 71 end
72 72 end
73 73 end
74   -
75   - def manage_organizations_status
76   - scope = environment.organizations
77   - @filter = params[:filter] || 'any'
78   - @title = "Organization profiles"
79   - @title = @title+" - "+@filter if @filter != 'any'
80   -
81   - if @filter == 'enabled'
82   - scope = scope.visible
83   - elsif @filter == 'disabled'
84   - scope = scope.disabled
85   - end
86   -
87   - scope = scope.order('name ASC')
88   -
89   - @q = params[:q]
90   - @collection = find_by_contents(:organizations, environment, scope, @q, {:per_page => 10, :page => params[:npage]})[:results]
91   - end
92 74 end
... ...
app/controllers/admin/organizations_controller.rb 0 → 100644
... ... @@ -0,0 +1,66 @@
  1 +class OrganizationsController < AdminController
  2 +
  3 + protect 'manage_environment_organizations', :environment
  4 +
  5 + def index
  6 + @filter = params[:filter] || 'any'
  7 + @title = _('Organization profiles')
  8 + @type = params[:type] || "any"
  9 + @types_filter = [[_('All'), 'any'], [_('Community'), 'Community'], [_('Enterprise'), 'Enterprise']]
  10 + @types_filter = @types_filter | @plugins.dispatch(:organization_types_filter_options)
  11 +
  12 + scope = @plugins.dispatch_first(:filter_manage_organization_scope, @type)
  13 + if scope.blank?
  14 + scope = environment.organizations
  15 + scope = scope.where(:type => @type) if @type != 'any'
  16 + end
  17 +
  18 + if @filter == 'enabled'
  19 + scope = scope.visible
  20 + elsif @filter == 'disabled'
  21 + scope = scope.disabled
  22 + end
  23 +
  24 + scope = scope.order('name ASC')
  25 +
  26 + @q = params[:q]
  27 + @collection = find_by_contents(:organizations, environment, scope, @q, {:per_page => per_page, :page => params[:npage]})[:results]
  28 + end
  29 +
  30 + def activate
  31 + organization = environment.organizations.find(params[:id])
  32 + if organization.enable
  33 + render :text => (_('%s enabled') % organization.name).to_json
  34 + else
  35 + render :text => (_('%s could not be enabled') % organization.name).to_json
  36 + end
  37 + end
  38 +
  39 + def deactivate
  40 + organization = environment.organizations.find(params[:id])
  41 + if organization.disable
  42 + render :text => (_('%s disabled') % organization.name).to_json
  43 + else
  44 + render :text => (_('%s could not be disable') % organization.name).to_json
  45 + end
  46 + end
  47 +
  48 + def destroy
  49 + if request.post?
  50 + organization = environment.organizations.find(params[:id])
  51 + if organization && organization.destroy
  52 + render :text => (_('%s removed') % organization.name).to_json
  53 + else
  54 + render :text => (_('%s could not be removed') % organization.name).to_json
  55 + end
  56 + else
  57 + render :nothing => true
  58 + end
  59 + end
  60 +
  61 + private
  62 +
  63 + def per_page
  64 + 10
  65 + end
  66 +end
... ...
app/controllers/my_profile/tasks_controller.rb
1 1 class TasksController < MyProfileController
2 2  
3   - protect 'perform_task', :profile
  3 + protect [:perform_task, :view_tasks], :profile, :only => [:index]
  4 + protect :perform_task, :profile, :except => [:index]
4 5  
5 6 def index
6 7 @filter_type = params[:filter_type].presence
... ... @@ -14,7 +15,9 @@ class TasksController &lt; MyProfileController
14 15  
15 16 @failed = params ? params[:failed] : {}
16 17  
17   - @responsible_candidates = profile.members.by_role(profile.roles.reject {|r| !r.has_permission?('perform_task')})
  18 + @responsible_candidates = profile.members.by_role(profile.roles.reject {|r| !r.has_permission?('perform_task')}) if profile.organization?
  19 +
  20 + @view_only = !current_person.has_permission?(:perform_task, profile)
18 21 end
19 22  
20 23 def processed
... ...
app/controllers/public/chat_controller.rb
... ... @@ -2,6 +2,7 @@ class ChatController &lt; PublicController
2 2  
3 3 before_filter :login_required
4 4 before_filter :check_environment_feature
  5 + before_filter :can_send_message, :only => :register_message
5 6  
6 7 def start_session
7 8 login = user.jid
... ... @@ -54,6 +55,16 @@ class ChatController &lt; PublicController
54 55 end
55 56 end
56 57  
  58 + def avatars
  59 + profiles = environment.profiles.where(:identifier => params[:profiles])
  60 + avatar_map = profiles.inject({}) do |result, profile|
  61 + result[profile.identifier] = profile_icon(profile, :minor)
  62 + result
  63 + end
  64 +
  65 + render_json avatar_map
  66 + end
  67 +
57 68 def update_presence_status
58 69 if request.xhr?
59 70 current_user.update_attributes({:chat_status_at => DateTime.now}.merge(params[:status] || {}))
... ... @@ -62,11 +73,17 @@ class ChatController &lt; PublicController
62 73 end
63 74  
64 75 def save_message
65   - to = environment.profiles.find_by_identifier(params[:to])
66   - body = params[:body]
67   -
68   - ChatMessage.create!(:to => to, :from => user, :body => body)
69   - render :text => 'ok'
  76 + if request.post?
  77 + to = environment.profiles.where(:identifier => params[:to]).first
  78 + body = params[:body]
  79 +
  80 + begin
  81 + ChatMessage.create!(:to => to, :from => user, :body => body)
  82 + return render_json({:status => 0})
  83 + rescue Exception => exception
  84 + return render_json({:status => 3, :message => exception.to_s, :backtrace => exception.backtrace})
  85 + end
  86 + end
70 87 end
71 88  
72 89 def recent_messages
... ... @@ -90,8 +107,9 @@ class ChatController &lt; PublicController
90 107 end
91 108  
92 109 def recent_conversations
93   - conversations_order = ActiveRecord::Base.connection.execute("select profiles.identifier from profiles inner join (select distinct r.id as id, MAX(r.created_at) as created_at from (select from_id, to_id, created_at, (case when from_id=#{user.id} then to_id else from_id end) as id from chat_messages where from_id=#{user.id} or to_id=#{user.id}) as r group by id order by created_at desc, id) as t on profiles.id=t.id order by t.created_at desc").entries.map {|e| e['identifier']}
94   - render :json => {:order => conversations_order.reverse, :domain => environment.default_hostname.gsub('.','-')}.to_json
  110 + profiles = Profile.find_by_sql("select profiles.* from profiles inner join (select distinct r.id as id, MAX(r.created_at) as created_at from (select from_id, to_id, created_at, (case when from_id=#{user.id} then to_id else from_id end) as id from chat_messages where from_id=#{user.id} or to_id=#{user.id}) as r group by id order by created_at desc, id) as t on profiles.id=t.id order by t.created_at desc")
  111 + jids = profiles.map(&:jid).reverse
  112 + render :json => jids.to_json
95 113 end
96 114  
97 115 #TODO Ideally this is done through roster table on ejabberd.
... ... @@ -108,4 +126,14 @@ class ChatController &lt; PublicController
108 126 end
109 127 end
110 128  
  129 + def can_send_message
  130 + return render_json({:status => 1, :message => 'Missing parameters!'}) if params[:from].nil? || params[:to].nil? || params[:message].nil?
  131 + return render_json({:status => 2, :message => 'You can not send message as another user!'}) if params[:from] != user.jid
  132 + # TODO Maybe register the jid in a table someday to avoid this below
  133 + return render_json({:status => 3, :messsage => 'You can not send messages to strangers!'}) if user.friends.where(:identifier => params[:to].split('@').first).blank?
  134 + end
  135 +
  136 + def render_json(result)
  137 + render :text => result.to_json
  138 + end
111 139 end
... ...
app/helpers/application_helper.rb
... ... @@ -881,7 +881,7 @@ module ApplicationHelper
881 881 field_html += capture(&block)
882 882 end
883 883  
884   - if controller.action_name == 'signup' || controller.action_name == 'new_community' || (controller.controller_name == "enterprise_registration" && controller.action_name == 'index')
  884 + if controller.action_name == 'signup' || controller.action_name == 'new_community' || (controller.controller_name == "enterprise_registration" && controller.action_name == 'index') || (controller.controller_name == 'home' && controller.action_name == 'index' && user.nil?)
885 885 if profile.signup_fields.include?(name)
886 886 result = field_html
887 887 end
... ...
app/helpers/boxes_helper.rb
... ... @@ -122,7 +122,7 @@ module BoxesHelper
122 122 end
123 123  
124 124 def wrap_main_content(content)
125   - (1..8).to_a.reverse.inject(content) { |acc,n| content_tag('div', acc, :id => 'main-content-wrapper-' + n.to_s) }
  125 + content_tag('div', content, :class => 'main-content')
126 126 end
127 127  
128 128 def extract_block_content(content)
... ...
app/helpers/chat_helper.rb
... ... @@ -9,12 +9,12 @@ module ChatHelper
9 9 avatar = profile_image(user, :portrait, :class => 'avatar')
10 10 content_tag('span',
11 11 link_to(avatar + content_tag('span', user.name) + ui_icon('ui-icon-triangle-1-s'),
12   - '#',
  12 + '',
13 13 :onclick => 'toggleMenu(this); return false',
14 14 :class => icon_class + ' simplemenu-trigger'
15 15 ) +
16 16 content_tag('ul',
17   - links.map{|link| content_tag('li', link_to(link[1], '#', :class => link[0], :id => link[2], 'data-jid' => user.jid), :class => 'simplemenu-item') }.join("\n"),
  17 + links.map{|link| content_tag('li', link_to(link[1], '', :class => link[0], :id => link[2], 'data-jid' => user.jid), :class => 'simplemenu-item') }.join("\n"),
18 18 :style => 'display: none; z-index: 100',
19 19 :class => 'simplemenu-submenu'
20 20 ),
... ...
app/helpers/profile_editor_helper.rb
... ... @@ -141,8 +141,9 @@ module ProfileEditorHelper
141 141 )
142 142 end
143 143  
144   - def control_panel_button(title, icon, url)
145   - link_to title, url, :class => 'control-panel-%s' % icon
  144 + def control_panel_button(title, icon, url, html_options = {})
  145 + html_options ||= {}
  146 + link_to title, url, html_options.merge(:class => 'control-panel-%s' % icon)
146 147 end
147 148  
148 149 def unchangeable_privacy_field(profile)
... ...
app/helpers/search_helper.rb
... ... @@ -106,6 +106,10 @@ module SearchHelper
106 106 end
107 107 end
108 108  
  109 + def city_with_state_for_profile(p)
  110 + city_with_state(p.region) || [p.city, p.state].compact.reject(&:blank?).join(', ')
  111 + end
  112 +
109 113 def display_selector(asset, display, float = 'right')
110 114 display = nil if display.blank?
111 115 display ||= asset_class(asset).default_search_display
... ...
app/helpers/users_helper.rb
... ... @@ -14,7 +14,7 @@ module UsersHelper
14 14 select_field = select_tag(:filter, options, :onchange => onchange)
15 15 content_tag('div',
16 16 content_tag('strong', _('Filter')) + ': ' + select_field,
17   - :class => "environment-users-customize-search"
  17 + :class => "environment-profiles-customize-search"
18 18 )
19 19 end
20 20  
... ...
app/models/article.rb
... ... @@ -96,6 +96,8 @@ class Article &lt; ActiveRecord::Base
96 96 belongs_to :translation_of, :class_name => 'Article', :foreign_key => :translation_of_id
97 97 before_destroy :rotate_translations
98 98  
  99 + acts_as_voteable
  100 +
99 101 before_create do |article|
100 102 article.published_at ||= Time.now
101 103 if article.reference_article && !article.parent
... ...
app/models/block.rb
... ... @@ -2,7 +2,7 @@ class Block &lt; ActiveRecord::Base
2 2  
3 3 attr_accessible :title, :display, :limit, :box_id, :posts_per_page,
4 4 :visualization_format, :language, :display_user,
5   - :box, :edit_modes, :move_modes
  5 + :box, :edit_modes, :move_modes, :mirror
6 6  
7 7 # to be able to generate HTML
8 8 include ActionView::Helpers::UrlHelper
... ... @@ -15,11 +15,23 @@ class Block &lt; ActiveRecord::Base
15 15  
16 16 acts_as_list :scope => :box
17 17 belongs_to :box
  18 + belongs_to :mirror_block, :class_name => "Block"
  19 + has_many :observers, :class_name => "Block", :foreign_key => "mirror_block_id"
18 20  
19 21 acts_as_having_settings
20 22  
21 23 scope :enabled, :conditions => { :enabled => true }
22 24  
  25 + after_save do |block|
  26 + if block.owner.kind_of?(Profile) && block.owner.is_template? && block.mirror?
  27 + block.observers.each do |observer|
  28 + observer.copy_from(block)
  29 + observer.title = block.title
  30 + observer.save
  31 + end
  32 + end
  33 + end
  34 +
23 35 def embedable?
24 36 false
25 37 end
... ... @@ -299,6 +311,10 @@ class Block &lt; ActiveRecord::Base
299 311 self.position = block.position
300 312 end
301 313  
  314 + def add_observer(block)
  315 + self.observers << block
  316 + end
  317 +
302 318 private
303 319  
304 320 def home_page_path
... ...
app/models/chat_message.rb
... ... @@ -4,4 +4,5 @@ class ChatMessage &lt; ActiveRecord::Base
4 4 belongs_to :to, :class_name => 'Profile'
5 5 belongs_to :from, :class_name => 'Profile'
6 6  
  7 + validates_presence_of :from, :to
7 8 end
... ...
app/models/comment.rb
... ... @@ -48,6 +48,8 @@ class Comment &lt; ActiveRecord::Base
48 48  
49 49 xss_terminate :only => [ :body, :title, :name ], :on => 'validation'
50 50  
  51 + acts_as_voteable
  52 +
51 53 def comment_root
52 54 (reply_of && reply_of.comment_root) || self
53 55 end
... ...
app/models/environment.rb
... ... @@ -29,6 +29,7 @@ class Environment &lt; ActiveRecord::Base
29 29 'manage_environment_roles' => N_('Manage environment roles'),
30 30 'manage_environment_validators' => N_('Manage environment validators'),
31 31 'manage_environment_users' => N_('Manage environment users'),
  32 + 'manage_environment_organizations' => N_('Manage environment organizations'),
32 33 'manage_environment_templates' => N_('Manage environment templates'),
33 34 'manage_environment_licenses' => N_('Manage environment licenses'),
34 35 'manage_environment_trusted_sites' => N_('Manage environment trusted sites'),
... ... @@ -74,7 +75,8 @@ class Environment &lt; ActiveRecord::Base
74 75 'edit_profile_design',
75 76 'manage_products',
76 77 'manage_friends',
77   - 'perform_task'
  78 + 'perform_task',
  79 + 'view_tasks'
78 80 ]
79 81 )
80 82 end
... ...
app/models/person.rb
... ... @@ -111,6 +111,8 @@ roles] }
111 111  
112 112 belongs_to :user, :dependent => :delete
113 113  
  114 + acts_as_voter
  115 +
114 116 def can_change_homepage?
115 117 !environment.enabled?('cant_change_homepage') || is_admin?
116 118 end
... ...
app/models/product_category.rb
... ... @@ -10,6 +10,9 @@ class ProductCategory &lt; Category
10 10 :joins => :products,
11 11 :conditions => ['products.profile_id = ?', enterprise.id]
12 12 }}
  13 + scope :by_environment, lambda { |environment| {
  14 + :conditions => ['environment_id = ?', environment.id]
  15 + }}
13 16 scope :unique_by_level, lambda { |level| {
14 17 :select => "DISTINCT ON (filtered_category) split_part(path, '/', #{level}) AS filtered_category, categories.*"
15 18 }}
... ...
app/models/profile.rb
... ... @@ -99,6 +99,7 @@ class Profile &lt; ActiveRecord::Base
99 99 'manage_friends' => N_('Manage friends'),
100 100 'validate_enterprise' => N_('Validate enterprise'),
101 101 'perform_task' => N_('Perform task'),
  102 + 'view_tasks' => N_('View tasks'),
102 103 'moderate_comments' => N_('Moderate comments'),
103 104 'edit_appearance' => N_('Edit appearance'),
104 105 'view_private_content' => N_('View private content'),
... ... @@ -430,6 +431,9 @@ class Profile &lt; ActiveRecord::Base
430 431 new_block = block.class.new(:title => block[:title])
431 432 new_block.copy_from(block)
432 433 new_box.blocks << new_block
  434 + if block.mirror?
  435 + block.add_observer(new_block)
  436 + end
433 437 end
434 438 end
435 439 end
... ... @@ -1002,11 +1006,19 @@ private :generate_url, :url_options
1002 1006 self.save
1003 1007 end
1004 1008  
  1009 + def disabled?
  1010 + !visible
  1011 + end
  1012 +
1005 1013 def enable
1006 1014 self.visible = true
1007 1015 self.save
1008 1016 end
1009 1017  
  1018 + def enabled?
  1019 + visible
  1020 + end
  1021 +
1010 1022 def control_panel_settings_button
1011 1023 {:title => _('Edit Profile'), :icon => 'edit-profile'}
1012 1024 end
... ...
app/models/task.rb
... ... @@ -267,6 +267,19 @@ class Task &lt; ActiveRecord::Base
267 267  
268 268 include Spammable
269 269  
  270 + #FIXME make this test
  271 + def display_to?(user = nil)
  272 + return true if self.target == user
  273 + return false if !self.target.kind_of?(Environment) && self.target.person?
  274 +
  275 + if self.target.kind_of?(Environment)
  276 + user.is_admin?(self.target)
  277 + else
  278 + self.target.members.by_role(self.target.roles.reject {|r| !r.has_permission?('perform_task')}).include?(user)
  279 + end
  280 + end
  281 +
  282 +
270 283 protected
271 284  
272 285 # This method must be overrided in subclasses, and its implementation must do
... ...
app/views/admin_panel/index.html.erb
... ... @@ -19,9 +19,9 @@
19 19 <table>
20 20 <tr><td><%= link_to _('User roles'), :controller => 'role' %></td></tr>
21 21 <tr><td><%= link_to _('Users'), :controller => 'users' %></td></tr>
  22 + <tr><td><%= link_to _('Organizations'), :controller => 'organizations' %></td></tr>
22 23 <tr><td><%= link_to _('Profile templates'), :controller => 'templates' %></td></tr>
23 24 <tr><td><%= link_to _('Fields'), :controller => 'features', :action => 'manage_fields' %></td></tr>
24   - <tr><td><%= link_to _('Manage organizations status'), :action => 'manage_organizations_status' %></td></tr>
25 25 </table>
26 26  
27 27  
... ...
app/views/admin_panel/manage_organizations_status.html.erb
... ... @@ -1,69 +0,0 @@
1   -<h1><%= _('Manage organizations') %></h1>
2   -
3   -<%= form_tag( { :action => 'manage_organizations_status' }, :method => 'get', :class => 'users-search' ) do %>
4   -
5   - <div class="search-field">
6   - <span class="formfield">
7   - <%= text_field_tag 'q', @q, :title => _("Find profiles"), :style=>"width:85%" %>
8   - </span>
9   -
10   - <%= submit_button(:search, _('Search')) %>
11   - </div>
12   -
13   - <div class="environment-users-results-header">
14   - <div id='environment-users-filter-title'><%= @title %></div>
15   -
16   - <div id="environment-users-filter-filter">
17   - <strong><%= _("Filter by: ") %></strong>
18   -
19   - <select id="profile_filter_select">
20   - <%= options_for_select([['Any', 'any'],["Disabled profiles", "disabled"], ["Enabled profiles", "enabled"]], @filter) %>
21   - </select>
22   - </div>
23   - <div style="clear: both"></div>
24   - </div>
25   -
26   - <table>
27   - <colgroup>
28   - <col width="80%">
29   - <col width="20%">
30   - </colgroup>
31   -
32   - <tr>
33   - <th><%= _('Member') %></th>
34   - <th><%= _('Actions') %></th>
35   - </tr>
36   -
37   - <% @collection.each do |p| %>
38   - <tr title="<%= p.name %>">
39   - <td><%= link_to_profile p.short_name, p.identifier, :title => p.name %> </td>
40   -
41   - <td class='actions'>
42   - <div class="members-buttons-cell">
43   - <% if p.visible %>
44   - <%= button_without_text :'deactivate-user', _('Deactivate'), {:controller => "profile_editor", :action => 'deactivate_profile', :profile => p.identifier, :id => p.id}, :confirm => _("Do you want to deactivate this profile ?") %>
45   - <% else %>
46   - <%= button_without_text :'activate-user', _('Activate'), {:controller => "profile_editor", :action => 'activate_profile', :profile => p.identifier, :id => p.id}, :confirm => _("Do you want to activate this profile ?") %>
47   - <% end %>
48   - <%= button_without_text :'delete', _('Remove'), {:controller => "profile_editor", :action => 'destroy_profile', :profile => p.identifier, :id => p.id, :return_to => "/admin/admin_panel/manage_organizations_status"}, :method => :post, :confirm => _("Do you want to deactivate this profile ?") %>
49   - </div>
50   - </td>
51   - </tr>
52   - <% end %>
53   - </table>
54   -
55   -<% end %>
56   -
57   -<%= pagination_links @collection, {:param_name => 'npage', :page_links => true} %>
58   -
59   -<% button_bar do %>
60   - <%= button :back, _('Back'), :controller => 'admin_panel' %>
61   -<% end %>
62   -
63   -<script type="text/javascript">
64   - jQuery(document).ready(function(){
65   - jQuery("#profile_filter_select").change(function(){
66   - document.location.href = '/admin/admin_panel/manage_organizations_status?filter='+this.value;
67   - });
68   - });
69   -</script>
70 0 \ No newline at end of file
app/views/blocks/profile_info_actions/_common.html.erb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +<li><%= report_abuse(profile, :button) %></li>
  2 +<%= render_environment_features(:profile_actions) %></li>
... ...
app/views/blocks/profile_info_actions/_community.html.erb
... ... @@ -13,8 +13,6 @@
13 13 </li>
14 14 <% end %>
15 15  
16   - <li><%= report_abuse(profile, :button) %></li>
17   -
18   - <%= render_environment_features(:profile_actions) %>
  16 + <%= render :partial => 'blocks/profile_info_actions/common' %>
19 17 <% end %>
20 18 </ul>
... ...
app/views/blocks/profile_info_actions/_enterprise.html.erb
... ... @@ -8,5 +8,5 @@
8 8 <li><%= button(:'menu-mail', _('Send an e-mail'), {:profile => profile.identifier, :controller => 'contact', :action => 'new'}, {:id => 'enterprise-contact-button'} ) %></li>
9 9 <% end %>
10 10  
11   - <li><%= report_abuse(profile, :button) %></li>
  11 + <%= render :partial => 'blocks/profile_info_actions/common' %>
12 12 </ul>
... ...
app/views/blocks/profile_info_actions/_person.html.erb
... ... @@ -11,6 +11,6 @@
11 11 <li><%= button(:back, _('Send an e-mail'), {:profile => profile.identifier, :controller => 'contact', :action => 'new'}) %></li>
12 12 <% end %>
13 13  
14   - <li><%= report_abuse(profile, :button) %></li>
  14 + <%= render :partial => 'blocks/profile_info_actions/common' %>
15 15 <% end %>
16 16 </ul>
... ...
app/views/box_organizer/edit.html.erb
... ... @@ -25,6 +25,11 @@
25 25 </div>
26 26 <div class="move-modes">
27 27 <%= labelled_form_field _('Move options:'), select_tag('block[move_modes]', options_from_collection_for_select(@block.move_block_options, :first, :last, @block.move_modes)) %>
  28 + <% end %>
  29 +
  30 + <% if @block.owner.kind_of?(Profile) && @block.owner.is_template? %>
  31 + <div class="mirror_block">
  32 + <%= labelled_check_box(_("Mirror"), "block[mirror]", value = "1", checked = @block.mirror) %>
28 33 </div>
29 34 <% end %>
30 35  
... ...
app/views/chat/start_session_error.html.erb
1 1 <p>
2 2 <%= ui_icon('ui-icon-alert') %>
3   -<%= _('Could not connect to chat') %>, <a id='chat-retry' href='#' data-jid='<%= user.jid %>'><%= _('try again') %></a>.
  3 +<%= _('Could not connect to chat') %>, <a id='chat-retry' href='' data-jid='<%= user.jid %>'><%= _('try again') %></a>.
4 4 </p>
... ...
app/views/organizations/_results.html.erb 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +<div class='results'>
  2 + <table id='organizations-list'>
  3 + <colgroup>
  4 + <col width="60%">
  5 + <col width="20%">
  6 + <col width="20%">
  7 + </colgroup>
  8 +
  9 + <tr>
  10 + <th><%= _('Profile') %></th>
  11 + <th><%= _('Actions') %></th>
  12 + <th><%= _('Type') %>
  13 +
  14 + <%= select_tag(:type, options_for_select(@types_filter, @type)) %>
  15 + </th>
  16 + </tr>
  17 +
  18 + <% @collection.each do |p| %>
  19 + <tr title="<%= p.name %>">
  20 + <td><%= link_to_profile p.short_name, p.identifier, :title => p.name %> </td>
  21 +
  22 + <td class='actions'>
  23 + <div class="members-buttons-cell">
  24 + <% if p.visible %>
  25 + <%= button_without_text :'deactivate-user', _('Deactivate'), {:action => 'deactivate', :id => p.id}, :class => 'action', 'data-confirm' => _("Do you want to deactivate this organization?") %>
  26 + <% else %>
  27 + <%= button_without_text :'activate-user', _('Activate'), {:action => 'activate', :id => p.id}, :class => 'action', 'data-confirm' => _("Do you want to activate this organization?") %>
  28 + <% end %>
  29 + <%= button_without_text :'delete', _('Remove'), {:action => 'destroy', :id => p.id}, :class => 'action', 'data-method' => :post, 'data-confirm' => _("Do you want to destroy this organization?") %>
  30 + </div>
  31 + </td>
  32 +
  33 + <td> <%= _("#{p.type}") %> </td>
  34 + </tr>
  35 + <% end %>
  36 + </table>
  37 +
  38 + <div>
  39 + <%= pagination_links @collection, {:param_name => 'npage', :page_links => true} %>
  40 + </div>
  41 +</div>
... ...
app/views/organizations/index.html.erb 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +<h1><%= _('Organizations') %></h1>
  2 +
  3 +<%= form_tag( { :action => 'index' }, :method => 'get', :id => 'manage-profiles' ) do %>
  4 +
  5 + <div class="search-field">
  6 + <span class="formfield">
  7 + <%= text_field_tag 'q', @q, :title => _('Find organizations'), :style=>"width:85%" %>
  8 + </span>
  9 +
  10 + <%= submit_button(:search, _('Search')) %>
  11 + </div>
  12 +
  13 + <div class="environment-profiles-results-header">
  14 + <div id='environment-profiles-filter-title'><%= @title %></div>
  15 +
  16 + <div id="environment-profiles-filter-filter">
  17 + <strong><%= _("Filter by: ") %></strong>
  18 + <%= select_tag(:filter, options_for_select([[_('Any'), 'any'],[_('Disabled'), "disabled"], [_('Enabled') , "enabled"]], @filter)) %>
  19 + </div>
  20 + <div style="clear: both"></div>
  21 + </div>
  22 +
  23 + <%= render :partial => 'results' %>
  24 +
  25 + <% button_bar do %>
  26 + <%= button :back, _('Back'), :controller => 'admin_panel' %>
  27 + <% end %>
  28 +<% end %>
  29 +
  30 +<%= javascript_include_tag 'manage-organizations' %>
... ...
app/views/organizations/index.js.erb 0 → 120000
... ... @@ -0,0 +1 @@
  1 +../../views/shared/admin/profiles/index.js.rb
0 2 \ No newline at end of file
... ...
app/views/profile_editor/index.html.erb
... ... @@ -73,7 +73,7 @@
73 73 <%= control_panel_button(_('Edit welcome page'), 'welcome-page', :action => 'welcome_page') if has_welcome_page %>
74 74  
75 75 <% @plugins.dispatch(:control_panel_buttons).each do |button| %>
76   - <%= control_panel_button(button[:title], button[:icon], button[:url]) %>
  76 + <%= control_panel_button(button[:title], button[:icon], button[:url], button[:html_options]) %>
77 77 <% end %>
78 78  
79 79 <% end %>
... ...
app/views/shared/admin/profiles/index.js.rb 0 → 100644
... ... @@ -0,0 +1 @@
  1 +jQuery('#manage-profiles .results').replaceWith('<%= escape_javascript(render 'results') %>');
... ...
app/views/shared/logged_in/xmpp_chat.html.erb
... ... @@ -7,13 +7,13 @@
7 7 var $own_name = '<%= user.name %>';
8 8 var $muc_domain = '<%= "conference.#{environment.default_hostname}" %>';
9 9 var $bosh_service = '//<%= environment.default_hostname %>/http-bind';
10   - var $user_unavailable_error = '<%= _("<strong>ooops!</strong> The message could not be sent because the user is not online") %>';
  10 + var $user_unavailable_error = '<%= _("The user is not online now. He/She will receive these messages as soon as he/she gets online.") %>';
11 11 var $update_presence_status_every = <%= User.expires_chat_status_every.minutes %>;
12 12 var $presence = '<%= current_user.last_chat_status %>';
13 13 </script>
14 14  
15   -
16 15 <div id="chat-label">
  16 + <span id="unread-messages"></span>
17 17 <span class="right-arrow">&#9654;</span>
18 18 <span class="title"><%= _('Chat') %></span>
19 19 </div>
... ... @@ -98,10 +98,5 @@
98 98 </div>
99 99 </div>
100 100 </div>
101   -
102   - <div class="error-message">
103   - <span class='error'>%{text}</span>
104   - </div>
105   -
106 101 </div>
107 102 </div>
... ...
app/views/shared/profile_actions/xmpp_chat.html.erb 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +<% label_name = profile.person? ? _('Open chat') : _('Join chat room') %>
  2 +<% display = profile.person? ? profile.friends.include?(user) : profile.members.include?(user) %>
  3 +
  4 +<% if display %>
  5 + <li>
  6 + <%= button(:chat, label_name , {}, :class => 'open-conversation', 'data-jid' => profile.jid) %>
  7 + </li>
  8 +<% end %>
... ...
app/views/tasks/_task.html.erb
... ... @@ -2,7 +2,7 @@
2 2  
3 3 <%= render :partial => 'task_icon', :locals => {:task => task} %>
4 4  
5   - <% if profile.organization? && @responsible_candidates.present? %>
  5 + <% if !@view_only && profile.organization? && @responsible_candidates.present? %>
6 6 <div class="task_responsible">
7 7 <span class="label"><%= _('Assign to:') %></span>
8 8 <span>
... ... @@ -12,8 +12,16 @@
12 12 </div>
13 13 <% end %>
14 14  
  15 + <% if @view_only && task.responsible.present? %>
  16 + <div class="task_responsible">
  17 + <span class="label"><%= _('Assigned to:') %></span>
  18 + <span class="value"><%= task.responsible.name %></span>
  19 + </div>
  20 + <% end %>
  21 +
15 22 <div class="task_decisions">
16   - <%=
  23 + <% unless @view_only %>
  24 + <%=
17 25 labelled_radio_button(_("Accept"), "tasks[#{task.id}][decision]", 'finish', task.default_decision == 'accept',
18 26 :id => "decision-finish-#{task.id}",
19 27 :class => 'task_accept_radio',
... ... @@ -29,7 +37,8 @@
29 37 :class => 'task_skip_radio',
30 38 :disabled => task.skip_disabled?,
31 39 :task_id => "#{task.id}")
32   - %>
  40 + %>
  41 + <% end %>
33 42 </div><!-- class="task_decisions" -->
34 43  
35 44 <div class="task_date"><%= show_time(task.created_at) %></div>
... ...
app/views/tasks/index.html.erb
... ... @@ -29,9 +29,11 @@
29 29 <p>
30 30 <%= labelled_text_field(_("Text filter")+': ', :filter_text, nil, {:id => 'filter-text',:value => @filter_text}) %>
31 31 </p>
32   - <p>
33   - <%= labelled_select(_('Assigned to')+': ', :filter_responsible, :id, :name, @filter_responsible, [OpenStruct.new(:name => _('All'), :id => nil), OpenStruct.new(:name => _('Unassigned'), :id => -1)] + @responsible_candidates) %>
34   - </p>
  32 + <% if profile.organization? %>
  33 + <p>
  34 + <%= labelled_select(_('Assigned to')+': ', :filter_responsible, :id, :name, @filter_responsible, [OpenStruct.new(:name => _('All'), :id => nil), OpenStruct.new(:name => _('Unassigned'), :id => -1)] + @responsible_candidates, :class => 'filter_responsible') %>
  35 + </p>
  36 + <% end %>
35 37 <p>
36 38 <%= submit_button(:search, _('Search')) %>
37 39 </p>
... ... @@ -44,25 +46,30 @@
44 46 </p>
45 47 <% else %>
46 48 <%= form_tag :action => 'close' do%>
47   - <% button_bar do %>
  49 + <% button_bar(:class => 'task-actions') do %>
48 50 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %>
49 51 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %>
50 52 <%= submit_button :save, _("Apply!") %>
51 53 <%= button(:edit, _('View processed tasks'), :action => 'processed') %>
52 54 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
53   - <% end %>
  55 + <% end unless @view_only %>
54 56  
55 57 <ul class='task-list'>
56   - <p>
57   - <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "up-set-all-tasks-to") %>
58   - </p>
  58 + <% unless @view_only %>
  59 + <p>
  60 + <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "up-set-all-tasks-to") %>
  61 + </p>
  62 + <% end %>
59 63  
60 64 <div class="task_boxes">
61 65 <%= render :partial => 'task', :collection => @tasks %>
62 66 </div>
63   - <p>
64   - <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "down-set-all-tasks-to") %>
65   - </p>
  67 +
  68 + <% unless @view_only %>
  69 + <p>
  70 + <%= labelled_select(_("Set all to: "), 'set-decisions', 'first', 'last', nil, [['',""],['accept',_("Accept")],['reject',_("Reject")],['skip',_("Skip")]], :id => "down-set-all-tasks-to") %>
  71 + </p>
  72 + <% end %>
66 73 </ul>
67 74  
68 75 <script>
... ... @@ -74,13 +81,13 @@
74 81  
75 82 <%= pagination_links(@tasks)%>
76 83  
77   - <% button_bar do %>
  84 + <% button_bar(:class => 'task-actions') do %>
78 85 <%# FiXME button(:edit, _('View my requests'), :action => 'list_requested') %>
79 86 <%# FIXME button('menu-mail', _('Send request'), :action => 'new') %>
80 87 <%= submit_button :save, _("Apply!") %>
81 88 <%= button(:edit, _('View processed tasks'), :action => 'processed') %>
82 89 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
83   - <% end %>
  90 + <% end unless @view_only %>
84 91 <% end %>
85 92 <% end %>
86 93 </p>
... ...
app/views/users/_users_list.html.erb
1   -<div class="environment-users-results-header">
2   - <div id='environment-users-filter-title'><%= users_filter_title(@filter) %></div>
  1 +<div class="environment-profiles-results-header">
  2 + <div id='environment-profiles-filter-title'><%= users_filter_title(@filter) %></div>
3 3 <%= filter_selector(@filter) %>
4 4 <div style="clear: both"></div>
5 5 </div>
... ...
config.ru
... ... @@ -4,7 +4,7 @@ require ::File.expand_path(&#39;../config/environment&#39;, __FILE__)
4 4  
5 5 #use Rails::Rack::LogTailer
6 6 #use Rails::Rack::Static
7   -#run ActionController::Dispatcher.news
  7 +#run ActionController::Dispatcher.new
8 8  
9 9 rails_app = Rack::Builder.new do
10 10 run Noosfero::Application
... ...
config/initializers/delayed_job_config.rb
... ... @@ -23,3 +23,13 @@ end
23 23 # end
24 24 # alias_method_chain :handle_failed_job, :loggin
25 25 #end
  26 +
  27 +# Chain delayed job's handle_failed_job method to do exception notification
  28 +Delayed::Worker.class_eval do
  29 + def handle_failed_job_with_notification job, error
  30 + handle_failed_job_without_notification job, error
  31 + ExceptionNotifier.notify_exception error, exception_recipients: NOOSFERO_CONF['exception_recipients'],
  32 + data: {job: job, handler: job.handler} rescue nil
  33 + end
  34 + alias_method_chain :handle_failed_job, :notification
  35 +end
... ...
config/initializers/wrap_parameters.rb 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +# Be sure to restart your server when you modify this file.
  2 +# This file contains settings for ActionController::ParamsWrapper which
  3 +# is enabled by default.
  4 +
  5 +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
  6 +ActiveSupport.on_load(:action_controller) do
  7 + wrap_parameters :format => []
  8 +end
  9 +
  10 +# Disable root element in JSON by default.
  11 +ActiveSupport.on_load(:active_record) do
  12 + self.include_root_in_json = false
  13 +end
... ...
db/migrate/20140407013817_add_private_token_info_to_users.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +class AddPrivateTokenInfoToUsers < ActiveRecord::Migration
  2 + def self.up
  3 + add_column :users, :private_token, :string
  4 + add_column :users, :private_token_generated_at, :datetime
  5 + end
  6 +
  7 + def self.down
  8 + remove_column :users, :private_token
  9 + remove_column :users, :private_token_generated_at
  10 + end
  11 +end
... ...
db/migrate/20140820173129_create_chat_messages.rb
1 1 class CreateChatMessages < ActiveRecord::Migration
2   - def change
  2 + def up
3 3 create_table :chat_messages do |t|
4 4 t.integer :to_id
5 5 t.integer :from_id
... ... @@ -8,4 +8,8 @@ class CreateChatMessages &lt; ActiveRecord::Migration
8 8 t.timestamps
9 9 end
10 10 end
  11 +
  12 + def down
  13 + drop_table :chat_messages
  14 + end
11 15 end
... ...
db/migrate/20141014205254_change_chat_messages_columns_and_add_indexes.rb 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +class ChangeChatMessagesColumnsAndAddIndexes < ActiveRecord::Migration
  2 + def up
  3 + change_table :chat_messages do |t|
  4 + t.change :from_id, :integer, :null => false
  5 + t.change :to_id, :integer, :null => false
  6 + t.change :body, :text
  7 + end
  8 + add_index :chat_messages, :from_id
  9 + add_index :chat_messages, :to_id
  10 + add_index :chat_messages, :created_at
  11 + end
  12 +
  13 + def down
  14 + remove_index :chat_messages, :from_id
  15 + remove_index :chat_messages, :to_id
  16 + remove_index :chat_messages, :created_at
  17 + change_table :chat_messages do |t|
  18 + t.change :from_id, :integer, :null => true
  19 + t.change :to_id, :integer, :null => true
  20 + t.change :body, :string
  21 + end
  22 + end
  23 +end
... ...
db/migrate/20150223180807_add_private_token_info_to_users.rb
... ... @@ -1,11 +0,0 @@
1   -class AddPrivateTokenInfoToUsers < ActiveRecord::Migration
2   - def self.up
3   - add_column :users, :private_token, :string
4   - add_column :users, :private_token_generated_at, :datetime
5   - end
6   -
7   - def self.down
8   - remove_column :users, :private_token
9   - remove_column :users, :private_token_generated_at
10   - end
11   -end
db/migrate/20150429145001_add_mirror_to_block.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +class AddMirrorToBlock < ActiveRecord::Migration
  2 + def up
  3 + change_table :blocks do |t|
  4 + t.boolean :mirror, :default => false
  5 + t.references :mirror_block
  6 + t.references :observers
  7 + end
  8 + end
  9 +
  10 + def down
  11 + remove_column :blocks, :mirror
  12 + remove_column :blocks, :mirror_block_id
  13 + remove_column :blocks, :observers_id
  14 + end
  15 +end
... ...
db/schema.rb
... ... @@ -11,7 +11,7 @@
11 11 #
12 12 # It's strongly recommended to check this file into your version control system.
13 13  
14   -ActiveRecord::Schema.define(:version => 20150513213939) do
  14 +ActiveRecord::Schema.define(:version => 20150525101430) do
15 15  
16 16 create_table "abuse_reports", :force => true do |t|
17 17 t.integer "reporter_id"
... ... @@ -183,10 +183,13 @@ ActiveRecord::Schema.define(:version =&gt; 20150513213939) do
183 183 t.string "type"
184 184 t.text "settings"
185 185 t.integer "position"
186   - t.boolean "enabled", :default => true
  186 + t.boolean "enabled", :default => true
187 187 t.datetime "created_at"
188 188 t.datetime "updated_at"
189 189 t.datetime "fetched_at"
  190 + t.boolean "mirror", :default => false
  191 + t.integer "mirror_block_id"
  192 + t.integer "observers_id"
190 193 end
191 194  
192 195 add_index "blocks", ["box_id"], :name => "index_blocks_on_box_id"
... ... @@ -242,13 +245,17 @@ ActiveRecord::Schema.define(:version =&gt; 20150513213939) do
242 245 end
243 246  
244 247 create_table "chat_messages", :force => true do |t|
245   - t.integer "to_id"
246   - t.integer "from_id"
247   - t.string "body"
  248 + t.integer "from_id", :null => false
  249 + t.integer "to_id", :null => false
  250 + t.text "body"
248 251 t.datetime "created_at", :null => false
249 252 t.datetime "updated_at", :null => false
250 253 end
251 254  
  255 + add_index "chat_messages", ["created_at"], :name => "index_chat_messages_on_created_at"
  256 + add_index "chat_messages", ["from_id"], :name => "index_chat_messages_on_from_id"
  257 + add_index "chat_messages", ["to_id"], :name => "index_chat_messages_on_to_id"
  258 +
252 259 create_table "comments", :force => true do |t|
253 260 t.string "title"
254 261 t.text "body"
... ... @@ -264,6 +271,7 @@ ActiveRecord::Schema.define(:version =&gt; 20150513213939) do
264 271 t.string "user_agent"
265 272 t.string "referrer"
266 273 t.text "settings"
  274 + t.integer "paragraph_id"
267 275 end
268 276  
269 277 add_index "comments", ["source_id", "spam"], :name => "index_comments_on_source_id_and_spam"
... ... @@ -677,12 +685,13 @@ ActiveRecord::Schema.define(:version =&gt; 20150513213939) do
677 685 t.date "end_date"
678 686 t.integer "requestor_id"
679 687 t.integer "target_id"
680   - t.string "code", :limit => 40
  688 + t.string "code", :limit => 40
681 689 t.string "type"
682 690 t.datetime "created_at"
683 691 t.string "target_type"
684 692 t.integer "image_id"
685   - t.boolean "spam", :default => false
  693 + t.boolean "spam", :default => false
  694 + t.integer "responsible_id"
686 695 end
687 696  
688 697 add_index "tasks", ["requestor_id"], :name => "index_tasks_on_requestor_id"
... ...
debian/update-noosfero-apache
... ... @@ -21,6 +21,13 @@ if test -x /usr/share/noosfero/script/apacheconf; then
21 21 if ! test -e "$apache_site"; then
22 22 echo "Generating apache virtual host ..."
23 23 cd /usr/share/noosfero && su noosfero -c "RAILS_ENV=production ./script/apacheconf virtualhosts" > "$apache_site"
  24 + else
  25 + pattern="Include \/etc\/noosfero\/apache\/virtualhost.conf"
  26 + include="Include \/usr\/share\/noosfero\/util\/chat\/apache\/xmpp.conf"
  27 + if ! cat $apache_site | grep "^ *$include" > /dev/null ; then
  28 + echo "Updating apache virtual host ..."
  29 + sed -i "s/.*$pattern.*/ $include\n&/" $apache_site
  30 + fi
24 31 fi
25 32  
26 33 echo 'Noosfero Apache configuration updated.'
... ...
etc/pound.cfg
  1 +User "www-data"
  2 +Group "www-data"
1 3 LogLevel 1
2 4 Alive 10
3 5 Client 120
... ...
features/template_block_management.feature 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +Feature: user template
  2 + As an user
  3 + I want to create templates with mirror blocks
  4 + In order to keep these blocks always updated
  5 +
  6 + Background:
  7 + Given the following users
  8 + | login | name | is_template |
  9 + | person | person | true |
  10 + And the following blocks
  11 + | owner | type | mirror |
  12 + | person | ArticleBlock | true |
  13 + | person | RawHTMLBlock | false |
  14 + And I go to /account/signup
  15 + And I fill in "Username" with "mario"
  16 + And I fill in "Password" with "123456"
  17 + And I fill in "Password confirmation" with "123456"
  18 + And I fill in "e-Mail" with "mario@mario.com"
  19 + And I fill in "Full name" with "Mario"
  20 + And wait for the captcha signup time
  21 + And I press "Create my account"
  22 + And I am logged in as admin
  23 +
  24 + @selenium
  25 + Scenario: The block Article name is changed
  26 + Given I am on person's control panel
  27 + And I follow "Edit sideboxes"
  28 + And display ".button-bar"
  29 + And I follow "Edit" within ".article-block"
  30 + And I fill in "Custom title for this block:" with "Mirror"
  31 + And I press "Save"
  32 + And I go to /profile/mario
  33 + Then I should see "Mirror"
  34 +
  35 + @selenium
  36 + Scenario: The block LinkList is changed but the user's block doesnt change
  37 + Given I am on person's control panel
  38 + And I follow "Edit sideboxes"
  39 + And display ".button-bar"
  40 + And I follow "Edit" within ".raw-html-block"
  41 + And I fill in "Custom title for this block:" with "Raw HTML Block"
  42 + And I press "Save"
  43 + And I go to /profile/mario
  44 + Then I should not see "Raw HTML Block"
  45 +
  46 + @selenium
  47 + Scenario: The block Article cannot move or modify
  48 + Given I am on person's control panel
  49 + And I follow "Edit sideboxes"
  50 + And display ".button-bar"
  51 + And I follow "Edit" within ".article-block"
  52 + And I select "Cannot be moved" from "Move options:"
  53 + And I select "Cannot be modified" from "Edit options:"
  54 + And I press "Save"
  55 + And I follow "Logout"
  56 + And Mario's account is activated
  57 + And I follow "Login"
  58 + And I fill in "Username / Email" with "mario"
  59 + And I fill in "Password" with "123456"
  60 + And I press "Log in"
  61 + And I go to /myprofile/mario
  62 + And I follow "Edit sideboxes"
  63 + And display ".button-bar"
  64 + Then I should not see "Edit" within ".article-block"
... ...
lib/noosfero/api/api.rb
... ... @@ -44,6 +44,7 @@ module Noosfero
44 44 mount V1::People
45 45 mount V1::Enterprises
46 46 mount V1::Categories
  47 + mount V1::Tasks
47 48 mount Session
48 49  
49 50 # hook point which allow plugins to add Grape::API extensions to API::API
... ...
lib/noosfero/api/entities.rb
... ... @@ -107,6 +107,7 @@ module Noosfero
107 107 end
108 108  
109 109 class Task < Entity
  110 + root 'tasks', 'task'
110 111 expose :id
111 112 expose :type
112 113 end
... ...
lib/noosfero/api/helpers.rb
... ... @@ -50,6 +50,11 @@ module Noosfero
50 50 article.display_to?(current_user.person) ? article : forbidden!
51 51 end
52 52  
  53 + def find_task(tasks, id)
  54 + task = tasks.find(id)
  55 + task.display_to?(current_user.person) ? task : forbidden!
  56 + end
  57 +
53 58 def make_conditions_with_parameter(params = {})
54 59 parsed_params = parser_params(params)
55 60 conditions = {}
... ...
lib/noosfero/api/request_logger.rb
... ... @@ -9,7 +9,6 @@ module Noosfero
9 9 path: request.path,
10 10 params: request.params.to_hash.except('password'),
11 11 method: request.request_method,
12   - total: (duration * 1000).round(2),
13 12 }
14 13 end
15 14 end
... ...
lib/noosfero/api/v1/tasks.rb 0 → 100644
... ... @@ -0,0 +1,164 @@
  1 +module Noosfero
  2 + module API
  3 + module V1
  4 + class Tasks < Grape::API
  5 +# before { authenticate! }
  6 +
  7 +# ARTICLE_TYPES = Article.descendants.map{|a| a.to_s}
  8 +
  9 + resource :tasks do
  10 +
  11 + # Collect tasks
  12 + #
  13 + # Parameters:
  14 + # from - date where the search will begin. If nothing is passed the default date will be the date of the first article created
  15 + # oldest - Collect the oldest articles. If nothing is passed the newest articles are collected
  16 + # limit - amount of articles returned. The default value is 20
  17 + #
  18 + # Example Request:
  19 + # GET host/api/v1/tasks?from=2013-04-04-14:41:43&until=2015-04-04-14:41:43&limit=10&private_token=e96fff37c2238fdab074d1dcea8e6317
  20 + get do
  21 + #FIXME check for permission
  22 + tasks = select_filtered_collection_of(environment, 'tasks', params)
  23 + present tasks, :with => Entities::Task, :fields => params[:fields]
  24 + end
  25 +
  26 + desc "Return the task id"
  27 + get ':id' do
  28 + task = find_task(environment.tasks, params[:id])
  29 + present task, :with => Entities::Task, :fields => params[:fields]
  30 + end
  31 +
  32 +
  33 + end
  34 +
  35 + resource :communities do
  36 + segment '/:community_id' do
  37 + resource :tasks do
  38 + get do
  39 + #FIXME check for permission
  40 + community = environment.communities.find(params[:community_id])
  41 + tasks = select_filtered_collection_of(community, 'tasks', params)
  42 + present tasks, :with => Entities::Task, :fields => params[:fields]
  43 + end
  44 +
  45 + get ':id' do
  46 + community = environment.communities.find(params[:community_id])
  47 + task = find_task(community.tasks, params[:id])
  48 + present task, :with => Entities::Task, :fields => params[:fields]
  49 + end
  50 +
  51 + # Example Request:
  52 + # POST api/v1/communites/:community_id/articles?private_token=234298743290432&article[name]=title&article[body]=body
  53 + post do
  54 + community = environment.communities.find(params[:community_id])
  55 +#FIXME see the correct permission
  56 + return forbidden! unless current_person.can_post_content?(community)
  57 +#FIXME check the task type before create
  58 + klass_type= params[:content_type].nil? ? 'Task' : params[:content_type]
  59 +# return forbidden! unless ARTICLE_TYPES.include?(klass_type)
  60 +#
  61 + task = klass_type.constantize.new(params[:task])
  62 + task.requestor = current_person
  63 + task.target = community
  64 +
  65 + if !task.save
  66 + render_api_errors!(task.errors.full_messages)
  67 + end
  68 + present task, :with => Entities::Task, :fields => params[:fields]
  69 + end
  70 +
  71 + end
  72 + end
  73 +
  74 + end
  75 +
  76 + resource :people do
  77 + segment '/:person_id' do
  78 + resource :tasks do
  79 + get do
  80 +# person = environment.people.find(params[:person_id])
  81 +# articles = select_filtered_collection_of(person, 'articles', params)
  82 +# articles = articles.display_filter(current_person, person)
  83 +tasks = Task.all
  84 + present tasks, :with => Entities::Task, :fields => params[:fields]
  85 + end
  86 +
  87 + get ':id' do
  88 +# person = environment.people.find(params[:person_id])
  89 +# article = find_article(person.articles, params[:id])
  90 +task = Task.first
  91 + present task, :with => Entities::Task, :fields => params[:fields]
  92 + end
  93 +
  94 + post do
  95 +# person = environment.people.find(params[:person_id])
  96 +# return forbidden! unless current_person.can_post_content?(person)
  97 +#
  98 +# klass_type= params[:content_type].nil? ? 'TinyMceArticle' : params[:content_type]
  99 +# return forbidden! unless ARTICLE_TYPES.include?(klass_type)
  100 +#
  101 +# article = klass_type.constantize.new(params[:article])
  102 +# article.last_changed_by = current_person
  103 +# article.created_by= current_person
  104 +# article.profile = person
  105 +#
  106 +# if !article.save
  107 +# render_api_errors!(article.errors.full_messages)
  108 +# end
  109 +task = Task.first
  110 + present task, :with => Entities::Task, :fields => params[:fields]
  111 + end
  112 +
  113 + end
  114 + end
  115 +
  116 + end
  117 +
  118 + resource :enterprises do
  119 + segment '/:enterprise_id' do
  120 + resource :tasks do
  121 + get do
  122 +# enterprise = environment.enterprises.find(params[:enterprise_id])
  123 +# articles = select_filtered_collection_of(enterprise, 'articles', params)
  124 +# articles = articles.display_filter(current_person, enterprise)
  125 +tasks = Task.all
  126 + present tasks, :with => Entities::Task, :fields => params[:fields]
  127 + end
  128 +
  129 + get ':id' do
  130 +# enterprise = environment.enterprises.find(params[:enterprise_id])
  131 +# article = find_article(enterprise.articles, params[:id])
  132 +task = Task.first
  133 + present task, :with => Entities::Task, :fields => params[:fields]
  134 + end
  135 +
  136 + post do
  137 +# enterprise = environment.enterprises.find(params[:enterprise_id])
  138 +# return forbidden! unless current_person.can_post_content?(enterprise)
  139 +#
  140 +# klass_type= params[:content_type].nil? ? 'TinyMceArticle' : params[:content_type]
  141 +# return forbidden! unless ARTICLE_TYPES.include?(klass_type)
  142 +#
  143 +# article = klass_type.constantize.new(params[:article])
  144 +# article.last_changed_by = current_person
  145 +# article.created_by= current_person
  146 +# article.profile = enterprise
  147 +#
  148 +# if !article.save
  149 +# render_api_errors!(article.errors.full_messages)
  150 +# end
  151 +task = Task.first
  152 + present task, :with => Entities::Task, :fields => params[:fields]
  153 + end
  154 +
  155 + end
  156 + end
  157 +
  158 + end
  159 +
  160 +
  161 + end
  162 + end
  163 + end
  164 +end
... ...
lib/noosfero/geo_ref.rb 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +module Noosfero::GeoRef
  2 +
  3 + KM_LAT = 111.2 # aproximate distance in km for 1 degree latitude
  4 + KM_LNG = 85.3 # aproximate distance in km for 1 degree longitude
  5 +
  6 +end
... ...
lib/noosfero/plugin.rb
... ... @@ -205,9 +205,9 @@ class Noosfero::Plugin
205 205 def api_mount_points
206 206 []
207 207 end
  208 +
208 209 end
209 210  
210   - #FIXME make this test
211 211 def has_block?(block)
212 212 self.class.extra_blocks.keys.include?(block)
213 213 end
... ... @@ -263,10 +263,11 @@ class Noosfero::Plugin
263 263 end
264 264  
265 265 # -> Adds buttons to the control panel
266   - # returns = { :title => title, :icon => icon, :url => url }
267   - # title = name that will be displayed.
268   - # icon = css class name (for customized icons include them in a css file).
269   - # url = url or route to which the button will redirect.
  266 + # returns = { :title => title, :icon => icon, :url => url }
  267 + # title = name that will be displayed.
  268 + # icon = css class name (for customized icons include them in a css file).
  269 + # url = url or route to which the button will redirect.
  270 + # html_options = aditional html options.
270 271 def control_panel_buttons
271 272 nil
272 273 end
... ... @@ -309,6 +310,18 @@ class Noosfero::Plugin
309 310 nil
310 311 end
311 312  
  313 + # -> Filters the types of organizations that are shown on manage organizations
  314 + # returns a scope filtered by the specified type
  315 + def filter_manage_organization_scope type
  316 + nil
  317 + end
  318 +
  319 + # -> Add new options for manage organization filters
  320 + # returns an array of new options
  321 + # i.e [[_('Type'), 'type'], [_('Type2'), 'type2']]
  322 + def organization_types_filter_options
  323 + nil
  324 + end
312 325 # -> Adds content to profile editor info and settings
313 326 # returns = lambda block that creates html code or raw rhtml/html.erb
314 327 def profile_editor_extras
... ...
plugins/anti_spam/po/de/anti_spam.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ...
plugins/anti_spam/po/pt/anti_spam.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 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.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/breadcrumbs/po/pt/breadcrumbs.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ... @@ -28,15 +28,15 @@ msgstr &quot;&quot;
28 28 msgid "A plugin that add a block to display breadcrumbs."
29 29 msgstr "Um plugin que adiciona um bloco que mostra caminhos de pão."
30 30  
31   -#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:9
  31 +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:10
32 32 msgid "Content Breadcrumbs"
33 33 msgstr "Conteúdo de Caminho de Pão"
34 34  
35   -#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:13
  35 +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:14
36 36 msgid "This block displays breadcrumb trail."
37 37 msgstr "Esse bloco mostra o rastro de caminho de pão."
38 38  
39   -#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:56
  39 +#: plugins/breadcrumbs/lib/breadcrumbs_plugin/content_breadcrumbs_block.rb:68
40 40 msgid "Upload Files"
41 41 msgstr "Enviar Arquivos"
42 42  
... ... @@ -47,3 +47,8 @@ msgstr &quot;Mostrar cms&quot;
47 47 #: plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.html.erb:3
48 48 msgid "Show profile"
49 49 msgstr "Mostrar perfil"
  50 +
  51 +#: plugins/breadcrumbs/views/box_organizer/breadcrumbs_plugin/_content_breadcrumbs_block.html.erb:4
  52 +#, fuzzy
  53 +msgid "Show section name"
  54 +msgstr "Mostrar cms"
... ...
plugins/bsc/po/de/bsc.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ...
plugins/bsc/po/es/bsc.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-11-03 15:52+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/bsc/po/fr/bsc.po
... ... @@ -4,9 +4,9 @@
4 4 # , 2009.
5 5 msgid ""
6 6 msgstr ""
7   -"Project-Id-Version: 1.0-690-gcb6e853\n"
  7 +"Project-Id-Version: 1.1-166-gaf47713\n"
8 8 "Report-Msgid-Bugs-To: \n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-12-12 14:22+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: French <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ...
plugins/bsc/po/hy/bsc.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2009-10-26 16:20-0300\n"
11 11 "Last-Translator: Anahit Minassian <anahit.minassian@cooperation.net>\n"
12 12 "Language-Team: LANGUAGE <LL@li.org>\n"
... ...
plugins/bsc/po/pt/bsc.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/bsc/po/ru/bsc.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/comment_classification/po/de/comment_classification.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2015-02-23 11:38+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/comment_classification/po/es/comment_classification.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-24 20:46+0200\n"
11 11 "Last-Translator: Gonzalo Exequiel Pedone <hipersayan.x@gmail.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-"
... ... @@ -91,8 +91,8 @@ msgid &quot;&quot;
91 91 "<i>%{user}</i> added the status <i>%{status_name}</i> at <i>%{created_at}</"
92 92 "i>."
93 93 msgstr ""
94   -"<i>%{user}</i> ha agregado el estado <i>%{status_name}</i> en "
95   -"<i>%{created_at}</i>."
  94 +"<i>%{user}</i> ha agregado el estado <i>%{status_name}</i> en <i>"
  95 +"%{created_at}</i>."
96 96  
97 97 #: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:18
98 98 msgid "<i>Reason:</i> %s"
... ...
plugins/comment_classification/po/fr/comment_classification.po
... ... @@ -4,9 +4,9 @@
4 4 # , 2009.
5 5 msgid ""
6 6 msgstr ""
7   -"Project-Id-Version: 1.0-690-gcb6e853\n"
  7 +"Project-Id-Version: 1.1-166-gaf47713\n"
8 8 "Report-Msgid-Bugs-To: \n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-03-07 12:26+0200\n"
11 11 "Last-Translator: Tuux <tuxa@galaxie.eu.org>\n"
12 12 "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-"
... ... @@ -91,8 +91,8 @@ msgid &quot;&quot;
91 91 "<i>%{user}</i> added the status <i>%{status_name}</i> at <i>%{created_at}</"
92 92 "i>."
93 93 msgstr ""
94   -"<i>%{utilisateur}</i> ajout des statuts <i>%{nom_ du_statut}</i> à "
95   -"<i>%{creer_a}</i>."
  94 +"<i>%{utilisateur}</i> ajout des statuts <i>%{nom_ du_statut}</i> à <i>"
  95 +"%{creer_a}</i>."
96 96  
97 97 #: plugins/comment_classification/views/comment_classification_plugin_myprofile/add_status.html.erb:18
98 98 msgid "<i>Reason:</i> %s"
... ...
plugins/comment_classification/po/hy/comment_classification.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-23 11:37+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Armenian <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/comment_classification/po/pt/comment_classification.po
... ... @@ -11,12 +11,12 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2015-02-23 11:38+0200\n"
17 17 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
18   -"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero"
19   -"/plugin-comment-classification/pt/>\n"
  18 +"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
  19 +"plugin-comment-classification/pt/>\n"
20 20 "Language: pt\n"
21 21 "MIME-Version: 1.0\n"
22 22 "Content-Type: text/plain; charset=UTF-8\n"
... ...
plugins/comment_classification/po/ru/comment_classification.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-23 11:37+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/plugin-"
... ... @@ -15,8 +15,8 @@ msgstr &quot;&quot;
15 15 "MIME-Version: 1.0\n"
16 16 "Content-Type: text/plain; charset=UTF-8\n"
17 17 "Content-Transfer-Encoding: 8bit\n"
18   -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
19   -"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
  18 +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
  19 +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20 20 "X-Generator: Weblate 2.3-dev\n"
21 21  
22 22 #: plugins/comment_classification/lib/comment_classification_plugin.rb:11
... ...
plugins/comment_group/po/pt/comment_group.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/community_block/po/pt/community_block.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/community_track/po/de/community_track.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ...
plugins/community_track/po/es/community_track.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-24 19:06+0200\n"
11 11 "Last-Translator: Gonzalo Exequiel Pedone <hipersayan.x@gmail.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/community_track/po/pt/community_track.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/container_block/po/pt/container_block.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/context_content/po/pt/context_content.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/custom_forms/po/de/custom_forms.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2015-03-09 09:51+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/custom_forms/po/eo/custom_forms.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-11-05 13:05+0200\n"
11 11 "Last-Translator: Aurélio A. Heckert <aurelio@colivre.coop.br>\n"
12 12 "Language-Team: Esperanto <https://hosted.weblate.org/projects/noosfero/"
... ...
plugins/custom_forms/po/es/custom_forms.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-03-09 09:51+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/custom_forms/po/fr/custom_forms.po
... ... @@ -4,9 +4,9 @@
4 4 # , 2009.
5 5 msgid ""
6 6 msgstr ""
7   -"Project-Id-Version: 1.0-690-gcb6e853\n"
  7 +"Project-Id-Version: 1.1-166-gaf47713\n"
8 8 "Report-Msgid-Bugs-To: \n"
9   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-23 11:38+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/custom_forms/po/hy/custom_forms.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-02-23 11:37+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Armenian <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/custom_forms/po/pt/custom_forms.po
... ... @@ -11,12 +11,12 @@
11 11 #
12 12 msgid ""
13 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.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2015-03-12 15:13+0200\n"
17 17 "Last-Translator: daniel <dtygel@eita.org.br>\n"
18   -"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero"
19   -"/plugin-custom-forms/pt/>\n"
  18 +"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
  19 +"plugin-custom-forms/pt/>\n"
20 20 "Language: pt\n"
21 21 "MIME-Version: 1.0\n"
22 22 "Content-Type: text/plain; charset=UTF-8\n"
... ...
plugins/custom_forms/po/ru/custom_forms.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:10-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-03-09 09:51+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/plugin-"
... ... @@ -15,8 +15,8 @@ msgstr &quot;&quot;
15 15 "MIME-Version: 1.0\n"
16 16 "Content-Type: text/plain; charset=UTF-8\n"
17 17 "Content-Transfer-Encoding: 8bit\n"
18   -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
19   -"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
  18 +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
  19 +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20 20 "X-Generator: Weblate 2.3-dev\n"
21 21  
22 22 #: plugins/custom_forms/lib/custom_forms_plugin/form.rb:67
... ...
plugins/display_content/po/de/display_content.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2015-02-23 11:37+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/display_content/po/es/display_content.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-03-09 09:51+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-"
... ...
plugins/display_content/po/fr/display_content.po
... ... @@ -4,9 +4,9 @@
4 4 # , 2009.
5 5 msgid ""
6 6 msgstr ""
7   -"Project-Id-Version: 1.0-690-gcb6e853\n"
  7 +"Project-Id-Version: 1.1-166-gaf47713\n"
8 8 "Report-Msgid-Bugs-To: \n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-03-07 02:11+0200\n"
11 11 "Last-Translator: Tuux <tuxa@galaxie.eu.org>\n"
12 12 "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-"
... ... @@ -106,7 +106,8 @@ msgstr &quot;plus&quot;
106 106  
107 107 #: plugins/display_content/views/box_organizer/_choose_directly.html.erb:5
108 108 msgid "Dinamically load children of selected folders"
109   -msgstr "Dynamiquement charger les sous répertoires des répertoires sélectionnés"
  109 +msgstr ""
  110 +"Dynamiquement charger les sous répertoires des répertoires sélectionnés"
110 111  
111 112 #: plugins/display_content/views/box_organizer/_choose_directly.html.erb:9
112 113 msgid "Limit:"
... ...
plugins/display_content/po/hy/display_content.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2009-10-26 16:20-0300\n"
11 11 "Last-Translator: Anahit Minassian <anahit.minassian@cooperation.net>\n"
12 12 "Language-Team: LANGUAGE <LL@li.org>\n"
... ...
plugins/display_content/po/pt/display_content.po
... ... @@ -11,12 +11,12 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2015-03-12 15:14+0200\n"
17 17 "Last-Translator: daniel <dtygel@eita.org.br>\n"
18   -"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero"
19   -"/plugin-display-content/pt/>\n"
  18 +"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
  19 +"plugin-display-content/pt/>\n"
20 20 "Language: pt\n"
21 21 "MIME-Version: 1.0\n"
22 22 "Content-Type: text/plain; charset=UTF-8\n"
... ...
plugins/event/po/pt/event.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.1~rc4\n"
9   -"POT-Creation-Date: 2015-04-20 19:44-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2015-01-30 00:18-0000\n"
11 11 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12 12 "Language-Team: LANGUAGE <LL@li.org>\n"
... ... @@ -16,17 +16,6 @@ msgstr &quot;&quot;
16 16 "Content-Transfer-Encoding: 8bit\n"
17 17 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
18 18  
19   -#: plugins/event/lib/event_plugin.rb:4
20   -msgid "Event Extras"
21   -msgstr "Extras para Eventos"
22   -
23   -#: plugins/event/lib/event_plugin.rb:8
24   -msgid ""
25   -"Include a new block to show the environment's or profiles' events information"
26   -msgstr ""
27   -"Adiciona um novo bloco para apresentar as informações de eventos do ambiente "
28   -"ou dos perfis"
29   -
30 19 #: plugins/event/lib/event_plugin/event_block.rb:12
31 20 msgid "Events"
32 21 msgstr "Eventos"
... ... @@ -61,7 +50,24 @@ msgstr[1] &quot;%d dias para começar&quot;
61 50 msgid "One month left to start"
62 51 msgid_plural "%d months left to start"
63 52 msgstr[0] "Um mês para iniciar"
64   -msgstr[1] "% meses para iniciar"
  53 +msgstr[1] "%d meses para iniciar"
  54 +
  55 +#: plugins/event/lib/event_plugin.rb:4
  56 +msgid "Event Extras"
  57 +msgstr "Extras para Eventos"
  58 +
  59 +#: plugins/event/lib/event_plugin.rb:8
  60 +msgid ""
  61 +"Include a new block to show the environment's or profiles' events information"
  62 +msgstr ""
  63 +"Adiciona um novo bloco para apresentar as informações de eventos do ambiente "
  64 +"ou dos perfis"
  65 +
  66 +#: plugins/event/views/event_plugin/event_block_item.html.erb:6
  67 +msgid "Duration: 1 day"
  68 +msgid_plural "Duration: %s days"
  69 +msgstr[0] "Duração: 1 dia"
  70 +msgstr[1] "Duração: %s dias"
65 71  
66 72 #: plugins/event/views/profile_design/event_plugin/_event_block.html.erb:1
67 73 msgid "Limit of items"
... ... @@ -92,12 +98,6 @@ msgstr &quot;Limite de dias para mostrar&quot;
92 98 msgid "Only show events in this interval of days."
93 99 msgstr "Mostar somente os eventos nesse intervalo de dias"
94 100  
95   -#: plugins/event/views/event_plugin/event_block_item.html.erb:6
96   -msgid "Duration: 1 day"
97   -msgid_plural "Duration: %s days"
98   -msgstr[0] "Duração: 1 dia"
99   -msgstr[1] "Duração: %s dias"
100   -
101 101 #~ msgid "Started one day ago."
102 102 #~ msgid_plural "Started %d days ago."
103 103 #~ msgstr[0] "Iniciou a Um dia atrás."
... ...
plugins/foo/po/de/foo.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ... @@ -19,6 +19,6 @@ msgstr &quot;&quot;
19 19 "Plural-Forms: nplurals=2; plural=n != 1;\n"
20 20 "X-Generator: Weblate 2.2-dev\n"
21 21  
22   -#: plugins/foo/lib/foo_plugin.rb:8
  22 +#: plugins/foo/lib/foo_plugin.rb:9
23 23 msgid "A sample plugin to test autoload craziness."
24 24 msgstr "Ein Beispiel-Plugin, um die Autoload-Verrücktheit zu überprüfen."
... ...
plugins/foo/po/es/foo.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-11-03 15:52+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/"
... ... @@ -18,6 +18,6 @@ msgstr &quot;&quot;
18 18 "Plural-Forms: nplurals=2; plural=n != 1;\n"
19 19 "X-Generator: Weblate 2.0-dev\n"
20 20  
21   -#: plugins/foo/lib/foo_plugin.rb:8
  21 +#: plugins/foo/lib/foo_plugin.rb:9
22 22 msgid "A sample plugin to test autoload craziness."
23 23 msgstr "Un plugin de ejemplo para probar autocargar la locura."
... ...
plugins/foo/po/pt/foo.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ... @@ -24,6 +24,6 @@ msgstr &quot;&quot;
24 24 "Plural-Forms: nplurals=2; plural=n != 1;\n"
25 25 "X-Generator: Weblate 2.0\n"
26 26  
27   -#: plugins/foo/lib/foo_plugin.rb:8
  27 +#: plugins/foo/lib/foo_plugin.rb:9
28 28 msgid "A sample plugin to test autoload craziness."
29 29 msgstr "Um plugin de teste para testar a loucura do caregamento."
... ...
plugins/google_analytics/po/de/google_analytics.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ... @@ -22,3 +22,11 @@ msgstr &quot;&quot;
22 22 #: plugins/google_analytics/lib/google_analytics_plugin.rb:13
23 23 msgid "Tracking and web analytics to people and communities"
24 24 msgstr "Nachverfolgung und Webanalyse für Personen und Gemeinschaften"
  25 +
  26 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:2
  27 +msgid "Google Analytics Profile ID"
  28 +msgstr ""
  29 +
  30 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:3
  31 +msgid "See how to configure statistics for your profile"
  32 +msgstr ""
... ...
plugins/google_analytics/po/es/google_analytics.po
... ... @@ -5,8 +5,8 @@
5 5 #
6 6 msgid ""
7 7 msgstr ""
8   -"Project-Id-Version: 1.0-690-gcb6e853\n"
9   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  8 +"Project-Id-Version: 1.1-166-gaf47713\n"
  9 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
10 10 "PO-Revision-Date: 2014-11-03 15:52+0200\n"
11 11 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
12 12 "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/"
... ... @@ -21,3 +21,11 @@ msgstr &quot;&quot;
21 21 #: plugins/google_analytics/lib/google_analytics_plugin.rb:13
22 22 msgid "Tracking and web analytics to people and communities"
23 23 msgstr "Seguimiento y análisis web para las personas y las comunidades"
  24 +
  25 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:2
  26 +msgid "Google Analytics Profile ID"
  27 +msgstr ""
  28 +
  29 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:3
  30 +msgid "See how to configure statistics for your profile"
  31 +msgstr ""
... ...
plugins/google_analytics/po/pt/google_analytics.po
... ... @@ -11,8 +11,8 @@
11 11 #
12 12 msgid ""
13 13 msgstr ""
14   -"Project-Id-Version: 1.0-690-gcb6e853\n"
15   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  14 +"Project-Id-Version: 1.1-166-gaf47713\n"
  15 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
16 16 "PO-Revision-Date: 2014-12-18 18:40-0200\n"
17 17 "Last-Translator: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com>\n"
18 18 "Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/"
... ... @@ -27,3 +27,11 @@ msgstr &quot;&quot;
27 27 #: plugins/google_analytics/lib/google_analytics_plugin.rb:13
28 28 msgid "Tracking and web analytics to people and communities"
29 29 msgstr "Rastreamento e análise web para pessoas e comunidades"
  30 +
  31 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:2
  32 +msgid "Google Analytics Profile ID"
  33 +msgstr ""
  34 +
  35 +#: plugins/google_analytics/views/profile-editor-extras.html.erb:3
  36 +msgid "See how to configure statistics for your profile"
  37 +msgstr ""
... ...
plugins/google_cse/po/de/google_cse.po
... ... @@ -6,8 +6,8 @@
6 6 #
7 7 msgid ""
8 8 msgstr ""
9   -"Project-Id-Version: 1.0-690-gcb6e853\n"
10   -"POT-Creation-Date: 2015-03-05 12:09-0300\n"
  9 +"Project-Id-Version: 1.1-166-gaf47713\n"
  10 +"POT-Creation-Date: 2015-06-01 17:26-0300\n"
11 11 "PO-Revision-Date: 2014-12-12 14:23+0200\n"
12 12 "Last-Translator: Michal Čihař <michal@cihar.com>\n"
13 13 "Language-Team: German <https://hosted.weblate.org/projects/noosfero/noosfero/"
... ...