Commit 9bcf5758 authored by Holger Just's avatar Holger Just

Merge branch 'release-v2.3.0' into stable

parents 296de668 9af56d07
...@@ -14,8 +14,8 @@ group :test do ...@@ -14,8 +14,8 @@ group :test do
gem 'edavis10-object_daddy', :require => 'object_daddy' gem 'edavis10-object_daddy', :require => 'object_daddy'
gem 'mocha' gem 'mocha'
platforms :mri_18 do gem 'ruby-debug' end platforms :mri_18, :mingw_18 do gem 'ruby-debug' end
platforms :mri_19 do gem 'ruby-debug19', :require => 'ruby-debug' end platforms :mri_19, :mingw_19 do gem 'ruby-debug19', :require => 'ruby-debug' end
end end
group :openid do group :openid do
...@@ -32,7 +32,7 @@ end ...@@ -32,7 +32,7 @@ end
# orders of magnitude compared to their native counterparts. You have been # orders of magnitude compared to their native counterparts. You have been
# warned. # warned.
platforms :mri do platforms :mri, :mingw do
group :mysql do group :mysql do
gem "mysql" gem "mysql"
# gem "ruby-mysql" # gem "ruby-mysql"
...@@ -48,13 +48,13 @@ platforms :mri do ...@@ -48,13 +48,13 @@ platforms :mri do
end end
end end
platforms :mri_18 do platforms :mri_18, :mingw_18 do
group :sqlite do group :sqlite do
gem "sqlite3-ruby", "< 1.3", :require => "sqlite3" gem "sqlite3-ruby", "< 1.3", :require => "sqlite3"
end end
end end
platforms :mri_19 do platforms :mri_19, :mingw_19 do
group :sqlite do group :sqlite do
gem "sqlite3" gem "sqlite3"
end end
......
...@@ -286,7 +286,7 @@ private ...@@ -286,7 +286,7 @@ private
render_error l(:error_no_tracker_in_project) render_error l(:error_no_tracker_in_project)
return false return false
end end
@issue.start_date ||= User.current.today @issue.start_date ||= User.current.today if Setting.issue_startdate_is_adddate?
if params[:issue].is_a?(Hash) if params[:issue].is_a?(Hash)
@issue.safe_attributes = params[:issue] @issue.safe_attributes = params[:issue]
if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record? if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record?
......
...@@ -208,7 +208,10 @@ class Query < ActiveRecord::Base ...@@ -208,7 +208,10 @@ class Query < ActiveRecord::Base
@available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty?
if User.current.logged? if User.current.logged?
@available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } # populate the watcher list with the same user list as other user filters if the user has the :view_issue_watchers permission in at least one project
# TODO: this could be differentiated more, e.g. all users could watch issues in public projects, but won't necessarily be shown here
watcher_values = User.current.allowed_to_globally?(:view_issue_watchers, {}) ? user_values : [["<< #{l(:label_me)} >>", "me"]]
@available_filters["watcher_id"] = { :type => :list, :order => 15, :values => watcher_values }
end end
if project if project
...@@ -442,8 +445,21 @@ class Query < ActiveRecord::Base ...@@ -442,8 +445,21 @@ class Query < ActiveRecord::Base
elsif field == 'watcher_id' elsif field == 'watcher_id'
db_table = Watcher.table_name db_table = Watcher.table_name
db_field = 'user_id' db_field = 'user_id'
sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND " if User.current.admin?
sql << sql_for_field(field, '=', v, db_table, db_field) + ')' # Admins can always see all watchers
sql << "#{Issue.table_name}.id #{operator == '=' ? 'IN' : 'NOT IN'} (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND #{sql_for_field field, '=', v, db_table, db_field})"
else
sql_parts = []
if User.current.logged? && user_id = v.delete(User.current.id.to_s)
# a user can always see his own watched issues
sql_parts << "#{Issue.table_name}.id #{operator == '=' ? 'IN' : 'NOT IN'} (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND #{sql_for_field field, '=', [user_id], db_table, db_field})"
end
# filter watchers only in projects the user has the permission to view watchers in
project_ids = User.current.projects_by_role.collect {|r,p| p if r.permissions.include? :view_issue_watchers}.flatten.compact.collect(&:id).uniq
sql_parts << "#{Issue.table_name}.id #{operator == '=' ? 'IN' : 'NOT IN'} (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' AND #{sql_for_field field, '=', v, db_table, db_field})"\
" AND #{Project.table_name}.id IN (#{project_ids.join(',')})" unless project_ids.empty?
sql << "(#{sql_parts.join(' OR ')})"
end
elsif field == "member_of_group" # named field elsif field == "member_of_group" # named field
if operator == '*' # Any group if operator == '*' # Any group
groups = Group.all groups = Group.all
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
</div> </div>
<% if @project.new_record? %> <% if @project.new_record? %>
<fieldset class="box"><legend><%= l(:label_module_plural) %></legend> <fieldset class="box" id="project_modules"><legend><%= l(:label_module_plural) %> <span style="font-size:0.9em">(<%= check_all_links 'project_modules' %>)</span></legend>
<% Redmine::AccessControl.available_project_modules.each do |m| %> <% Redmine::AccessControl.available_project_modules.each do |m| %>
<label class="floating"> <label class="floating">
<%= check_box_tag 'project[enabled_module_names][]', m, @project.module_enabled?(m), :id => "project_enabled_module_names_#{m}" %> <%= check_box_tag 'project[enabled_module_names][]', m, @project.module_enabled?(m), :id => "project_enabled_module_names_#{m}" %>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<% if @project.new_record? || @project.module_enabled?('issue_tracking') %> <% if @project.new_record? || @project.module_enabled?('issue_tracking') %>
<% unless @trackers.empty? %> <% unless @trackers.empty? %>
<fieldset class="box" id="project_trackers"><legend><%=l(:label_tracker_plural)%></legend> <fieldset class="box" id="project_trackers"><legend><%=l(:label_tracker_plural)%> <span style="font-size:0.9em">(<%= check_all_links 'project_trackers' %>)</span></legend>
<% @trackers.each do |tracker| %> <% @trackers.each do |tracker| %>
<label class="floating"> <label class="floating">
<%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %> <%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<% end %> <% end %>
<% unless @issue_custom_fields.empty? %> <% unless @issue_custom_fields.empty? %>
<fieldset class="box" id="project_issue_custom_fields"><legend><%=l(:label_custom_field_plural)%></legend> <fieldset class="box" id="project_issue_custom_fields"><legend><%=l(:label_custom_field_plural)%> <span style="font-size:0.9em">(<%= check_all_links 'project_issue_custom_fields' %>)</span></legend>
<% @issue_custom_fields.each do |custom_field| %> <% @issue_custom_fields.each do |custom_field| %>
<label class="floating"> <label class="floating">
<%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %> <%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
<p><%= setting_check_box :display_subprojects_issues %></p> <p><%= setting_check_box :display_subprojects_issues %></p>
<p><%= setting_check_box :issue_startdate_is_adddate %></p>
<p><%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %></p> <p><%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %></p>
<p><%= setting_text_field :issues_export_limit, :size => 6 %></p> <p><%= setting_text_field :issues_export_limit, :size => 6 %></p>
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
<p> <p>
<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_from.version %> <%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_from.version %>
<em>(<%= @diff.content_from.author ? link_to_user(@diff.content_from.author) : l(:label_user_anonymous) %>, <%= format_time(@diff.content_from.updated_on) %>)</em> <em>(<%= @diff.content_from.user ? link_to_user(@diff.content_from.user) : l(:label_user_anonymous) %>, <%= format_time(@diff.content_from.updated_on) %>)</em>
&#8594; &#8594;
<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_to.version %>/<%= @page.content.version %> <%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => @diff.content_to.version %>/<%= @page.content.version %>
<em>(<%= @diff.content_to.author ? link_to_user(@diff.content_to.author) : l(:label_user_anonymous) %>, <%= format_time(@diff.content_to.updated_on) %>)</em> <em>(<%= @diff.content_to.user ? link_to_user(@diff.content_to.user) : l(:label_user_anonymous) %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
</p> </p>
<div class="text-diff"> <div class="text-diff">
......
...@@ -964,3 +964,4 @@ bg: ...@@ -964,3 +964,4 @@ bg:
label_path_encoding: Кодиране на пътищата label_path_encoding: Кодиране на пътищата
text_mercurial_repo_example: локално хранилище (например /hgrepo, c:\hgrepo) text_mercurial_repo_example: локално хранилище (например /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -978,3 +978,4 @@ bs: ...@@ -978,3 +978,4 @@ bs:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -967,3 +967,4 @@ ca: ...@@ -967,3 +967,4 @@ ca:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1188,3 +1188,4 @@ cs: ...@@ -1188,3 +1188,4 @@ cs:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -980,3 +980,4 @@ da: ...@@ -980,3 +980,4 @@ da:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -370,6 +370,7 @@ de: ...@@ -370,6 +370,7 @@ de:
setting_start_of_week: Wochenanfang setting_start_of_week: Wochenanfang
setting_rest_api_enabled: REST-Schnittstelle aktivieren setting_rest_api_enabled: REST-Schnittstelle aktivieren
setting_cache_formatted_text: Formatierten Text im Cache speichern setting_cache_formatted_text: Formatierten Text im Cache speichern
setting_issue_startdate_is_adddate: Neue Tickets haben "Heute" als Anfangsdatum
permission_add_project: Projekt erstellen permission_add_project: Projekt erstellen
permission_add_subprojects: Unterprojekte erstellen permission_add_subprojects: Unterprojekte erstellen
......
...@@ -964,3 +964,4 @@ el: ...@@ -964,3 +964,4 @@ el:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -370,6 +370,7 @@ en-GB: ...@@ -370,6 +370,7 @@ en-GB:
setting_commit_logtime_enabled: Enable time logging setting_commit_logtime_enabled: Enable time logging
setting_commit_logtime_activity_id: Activity for logged time setting_commit_logtime_activity_id: Activity for logged time
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
setting_issue_startdate_is_adddate: Use current date as start date for new issues
permission_add_project: Create project permission_add_project: Create project
permission_add_subprojects: Create subprojects permission_add_subprojects: Create subprojects
......
...@@ -366,6 +366,7 @@ en: ...@@ -366,6 +366,7 @@ en:
setting_commit_logtime_enabled: Enable time logging setting_commit_logtime_enabled: Enable time logging
setting_commit_logtime_activity_id: Activity for logged time setting_commit_logtime_activity_id: Activity for logged time
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
setting_issue_startdate_is_adddate: Use current date as start date for new issues
permission_add_project: Create project permission_add_project: Create project
permission_add_subprojects: Create subprojects permission_add_subprojects: Create subprojects
......
...@@ -1001,3 +1001,4 @@ es: ...@@ -1001,3 +1001,4 @@ es:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -968,3 +968,4 @@ eu: ...@@ -968,3 +968,4 @@ eu:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -967,3 +967,4 @@ fa: ...@@ -967,3 +967,4 @@ fa:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -985,3 +985,4 @@ fi: ...@@ -985,3 +985,4 @@ fi:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -367,6 +367,7 @@ fr: ...@@ -367,6 +367,7 @@ fr:
setting_commit_logtime_enabled: Permettre la saisie de temps setting_commit_logtime_enabled: Permettre la saisie de temps
setting_commit_logtime_activity_id: Activité pour le temps saisi setting_commit_logtime_activity_id: Activité pour le temps saisi
setting_gantt_items_limit: Nombre maximum d'éléments affichés sur le gantt setting_gantt_items_limit: Nombre maximum d'éléments affichés sur le gantt
setting_issue_startdate_is_adddate: Utiliser "aujourd'hui" comme début pour les nouvelles demandes
permission_add_project: Créer un projet permission_add_project: Créer un projet
permission_add_subprojects: Créer des sous-projets permission_add_subprojects: Créer des sous-projets
......
...@@ -976,3 +976,4 @@ gl: ...@@ -976,3 +976,4 @@ gl:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -969,3 +969,4 @@ he: ...@@ -969,3 +969,4 @@ he:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -971,3 +971,4 @@ hr: ...@@ -971,3 +971,4 @@ hr:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -983,3 +983,4 @@ ...@@ -983,3 +983,4 @@
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -972,3 +972,4 @@ id: ...@@ -972,3 +972,4 @@ id:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -965,3 +965,4 @@ it: ...@@ -965,3 +965,4 @@ it:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -986,3 +986,4 @@ ja: ...@@ -986,3 +986,4 @@ ja:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1016,3 +1016,4 @@ ko: ...@@ -1016,3 +1016,4 @@ ko:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1024,3 +1024,4 @@ lt: ...@@ -1024,3 +1024,4 @@ lt:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -959,3 +959,4 @@ lv: ...@@ -959,3 +959,4 @@ lv:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -964,3 +964,4 @@ mk: ...@@ -964,3 +964,4 @@ mk:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -965,3 +965,4 @@ mn: ...@@ -965,3 +965,4 @@ mn:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -946,3 +946,4 @@ nl: ...@@ -946,3 +946,4 @@ nl:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -951,3 +951,4 @@ ...@@ -951,3 +951,4 @@
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -981,3 +981,4 @@ pl: ...@@ -981,3 +981,4 @@ pl:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -909,6 +909,7 @@ pt-BR: ...@@ -909,6 +909,7 @@ pt-BR:
setting_rest_api_enabled: Habilitar REST web service setting_rest_api_enabled: Habilitar REST web service
label_missing_api_access_key: Chave de acesso a API faltando label_missing_api_access_key: Chave de acesso a API faltando
label_missing_feeds_access_key: Chave de acesso ao RSS faltando label_missing_feeds_access_key: Chave de acesso ao RSS faltando
setting_issue_startdate_is_adddate: Usar data corrente como data inicial para novas tarefas
text_line_separated: Múltiplos valores permitidos (uma linha para cada valor). text_line_separated: Múltiplos valores permitidos (uma linha para cada valor).
setting_mail_handler_body_delimiters: Truncar e-mails após uma destas linhas setting_mail_handler_body_delimiters: Truncar e-mails após uma destas linhas
permission_add_subprojects: Criar subprojetos permission_add_subprojects: Criar subprojetos
......
...@@ -968,3 +968,4 @@ pt: ...@@ -968,3 +968,4 @@ pt:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -957,3 +957,4 @@ ro: ...@@ -957,3 +957,4 @@ ro:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -242,7 +242,7 @@ ru: ...@@ -242,7 +242,7 @@ ru:
button_quote: Цитировать button_quote: Цитировать
button_rename: Переименовать button_rename: Переименовать
button_reply: Ответить button_reply: Ответить
button_reset: Перезапустить button_reset: Сбросить
button_rollback: Вернуться к данной версии button_rollback: Вернуться к данной версии
button_save: Сохранить button_save: Сохранить
button_sort: Сортировать button_sort: Сортировать
...@@ -259,7 +259,7 @@ ru: ...@@ -259,7 +259,7 @@ ru:
default_activity_design: Проектирование default_activity_design: Проектирование
default_activity_development: Разработка default_activity_development: Разработка
default_doc_category_tech: Техническая документация default_doc_category_tech: Техническая документация
default_doc_category_user: Документация пользователя default_doc_category_user: Пользовательская документация
default_issue_status_in_progress: В работе default_issue_status_in_progress: В работе
default_issue_status_closed: Закрыта default_issue_status_closed: Закрыта
default_issue_status_feedback: Обратная связь default_issue_status_feedback: Обратная связь
...@@ -273,7 +273,7 @@ ru: ...@@ -273,7 +273,7 @@ ru:
default_priority_urgent: Срочный default_priority_urgent: Срочный
default_role_developer: Разработчик default_role_developer: Разработчик
default_role_manager: Менеджер default_role_manager: Менеджер
default_role_reporter: Генератор отчетов default_role_reporter: Репортёр
default_role_non_member: Non member default_role_non_member: Non member
default_role_anonymous: Anonymous default_role_anonymous: Anonymous
default_tracker_bug: Ошибка default_tracker_bug: Ошибка
...@@ -302,25 +302,25 @@ ru: ...@@ -302,25 +302,25 @@ ru:
field_assigned_to: Назначена field_assigned_to: Назначена
field_attr_firstname: Имя field_attr_firstname: Имя
field_attr_lastname: Фамилия field_attr_lastname: Фамилия
field_attr_login: Атрибут Регистрация field_attr_login: Атрибут Login
field_attr_mail: email field_attr_mail: email
field_author: Автор field_author: Автор
field_auth_source: Режим аутентификации field_auth_source: Режим аутентификации
field_base_dn: BaseDN field_base_dn: BaseDN
field_category: Категория field_category: Категория
field_column_names: Колонки field_column_names: Столбцы
field_comments: Комментарий field_comments: Комментарий
field_comments_sorting: Отображение комментариев field_comments_sorting: Отображение комментариев
field_content: Content field_content: Content
field_created_on: Создан field_created_on: Создано
field_default_value: Значение по умолчанию field_default_value: Значение по умолчанию
field_delay: Отложить field_delay: Отложить
field_description: Описание field_description: Описание
field_done_ratio: Готовность в % field_done_ratio: Готовность
field_downloads: Загрузки field_downloads: Загрузки
field_due_date: Дата выполнения field_due_date: Дата выполнения
field_editable: Редактируемый field_editable: Редактируемое
field_estimated_hours: Оцененное время field_estimated_hours: Оценка времени
field_field_format: Формат field_field_format: Формат
field_filename: Файл field_filename: Файл
field_filesize: Размер field_filesize: Размер
...@@ -372,11 +372,11 @@ ru: ...@@ -372,11 +372,11 @@ ru:
field_status: Статус field_status: Статус
field_subject: Тема field_subject: Тема
field_subproject: Подпроект field_subproject: Подпроект
field_summary: Сводка field_summary: Краткое описание
field_text: Текстовое поле field_text: Текстовое поле
field_time_entries: Затраченное время field_time_entries: Затраченное время
field_time_zone: Часовой пояс field_time_zone: Часовой пояс
field_title: Название field_title: Заголовок
field_tracker: Трекер field_tracker: Трекер
field_type: Тип field_type: Тип
field_updated_on: Обновлено field_updated_on: Обновлено
...@@ -392,9 +392,9 @@ ru: ...@@ -392,9 +392,9 @@ ru:
general_first_day_of_week: '1' general_first_day_of_week: '1'
general_lang_name: 'Russian (Русский)' general_lang_name: 'Russian (Русский)'
general_pdf_encoding: UTF-8 general_pdf_encoding: UTF-8
general_text_no: 'Нет' general_text_no: 'нет'
general_text_No: 'Нет' general_text_No: 'Нет'
general_text_yes: 'Да' general_text_yes: 'да'
general_text_Yes: 'Да' general_text_Yes: 'Да'
gui_validation_error: 1 ошибка gui_validation_error: 1 ошибка
...@@ -402,7 +402,7 @@ ru: ...@@ -402,7 +402,7 @@ ru:
gui_validation_error_plural2: "%{count} ошибки" gui_validation_error_plural2: "%{count} ошибки"
gui_validation_error_plural5: "%{count} ошибок" gui_validation_error_plural5: "%{count} ошибок"
label_activity: Активность label_activity: Действия
label_add_another_file: Добавить ещё один файл label_add_another_file: Добавить ещё один файл
label_added_time_by: "Добавил(а) %{author} %{age} назад" label_added_time_by: "Добавил(а) %{author} %{age} назад"
label_added: добавлено label_added: добавлено
...@@ -435,7 +435,7 @@ ru: ...@@ -435,7 +435,7 @@ ru:
label_board_plural: Форумы label_board_plural: Форумы
label_boolean: Логический label_boolean: Логический
label_browse: Обзор label_browse: Обзор
label_bulk_edit_selected_issues: Редактировать все выбранные вопросы label_bulk_edit_selected_issues: Редактировать все выбранные задачи
label_calendar: Календарь label_calendar: Календарь
label_calendar_filter: Включая label_calendar_filter: Включая
label_calendar_no_assigned: не мои label_calendar_no_assigned: не мои
...@@ -444,9 +444,9 @@ ru: ...@@ -444,9 +444,9 @@ ru:
label_change_status: Изменить статус label_change_status: Изменить статус
label_change_view_all: Просмотреть все изменения label_change_view_all: Просмотреть все изменения
label_changes_details: Подробности по всем изменениям label_changes_details: Подробности по всем изменениям
label_changeset_plural: Хранилище label_changeset_plural: Изменения
label_chronological_order: В хронологическом порядке label_chronological_order: В хронологическом порядке
label_closed_issues: закрыт label_closed_issues: закрыто
label_closed_issues_plural: закрыто label_closed_issues_plural: закрыто
label_closed_issues_plural2: закрыто label_closed_issues_plural2: закрыто
label_closed_issues_plural5: закрыто label_closed_issues_plural5: закрыто
...@@ -475,11 +475,11 @@ ru: ...@@ -475,11 +475,11 @@ ru:
label_date: Дата label_date: Дата
label_day_plural: дней(я) label_day_plural: дней(я)
label_default: По умолчанию label_default: По умолчанию
label_default_columns: Колонки по умолчанию label_default_columns: Столбцы по умолчанию
label_deleted: удалено label_deleted: удалено
label_descending: По убыванию label_descending: По убыванию
label_details: Подробности label_details: Подробности
label_diff_inline: вставкой label_diff_inline: в тексте
label_diff_side_by_side: рядом label_diff_side_by_side: рядом
label_disabled: отключено label_disabled: отключено
label_display: Отображение label_display: Отображение
...@@ -498,9 +498,9 @@ ru: ...@@ -498,9 +498,9 @@ ru:
label_end_to_end: с конца к концу label_end_to_end: с конца к концу
label_end_to_start: с конца к началу label_end_to_start: с конца к началу
label_enumeration_new: Новое значение label_enumeration_new: Новое значение
label_enumerations: Справочники label_enumerations: Списки значений
label_environment: Окружение label_environment: Окружение
label_equals: соответствует label_equals: является
label_example: Пример label_example: Пример
label_export_to: Экспортировать в label_export_to: Экспортировать в
label_feed_plural: RSS label_feed_plural: RSS
...@@ -539,9 +539,9 @@ ru: ...@@ -539,9 +539,9 @@ ru:
label_issue_plural: Задачи label_issue_plural: Задачи
label_issues_by: "Сортировать по %{value}" label_issues_by: "Сортировать по %{value}"
label_issue_status_new: Новый статус label_issue_status_new: Новый статус
label_issue_status_plural: Статусы задачи label_issue_status_plural: Статусы задач
label_issue_status: Статус задачи label_issue_status: Статус задачи
label_issue_tracking: Ситуация по задачам label_issue_tracking: Задачи
label_issue_updated: Обновлена задача label_issue_updated: Обновлена задача
label_issue_view_all: Просмотреть все задачи label_issue_view_all: Просмотреть все задачи
label_issue_watchers: Наблюдатели label_issue_watchers: Наблюдатели
...@@ -551,7 +551,7 @@ ru: ...@@ -551,7 +551,7 @@ ru:
label_last_login: Последнее подключение label_last_login: Последнее подключение
label_last_month: последний месяц label_last_month: последний месяц
label_last_n_days: "последние %{count} дней" label_last_n_days: "последние %{count} дней"
label_last_week: последняя неделю label_last_week: последняя неделя
label_latest_revision: Последняя редакция label_latest_revision: Последняя редакция
label_latest_revision_plural: Последние редакции label_latest_revision_plural: Последние редакции
label_ldap_authentication: Авторизация с помощью LDAP label_ldap_authentication: Авторизация с помощью LDAP
...@@ -559,7 +559,7 @@ ru: ...@@ -559,7 +559,7 @@ ru:
label_less_than_ago: менее, чем дней(я) назад label_less_than_ago: менее, чем дней(я) назад
label_list: Список label_list: Список
label_loading: Загрузка... label_loading: Загрузка...
label_logged_as: Вошел как label_logged_as: Вошли как
label_login: Войти label_login: Войти
label_login_with_open_id_option: или войти с помощью OpenID label_login_with_open_id_option: или войти с помощью OpenID
label_logout: Выйти label_logout: Выйти
...@@ -588,30 +588,30 @@ ru: ...@@ -588,30 +588,30 @@ ru:
label_my_page_block: Блок моей страницы label_my_page_block: Блок моей страницы
label_my_projects: Мои проекты label_my_projects: Мои проекты
label_new: Новый label_new: Новый
label_new_statuses_allowed: Разрешены новые статусы label_new_statuses_allowed: Разрешенные новые статусы
label_news_added: Новость добавлена label_news_added: Добавлена новость
label_news_latest: Последние новости label_news_latest: Последние новости
label_news_new: Добавить новость label_news_new: Добавить новость
label_news_plural: Новости label_news_plural: Новости
label_news_view_all: Посмотреть все новости label_news_view_all: Посмотреть все новости
label_news: Новости label_news: Новости
label_next: Следующий label_next: Следующее
label_nobody: никто label_nobody: никто
label_no_change_option: (Нет изменений) label_no_change_option: (Нет изменений)
label_no_data: Нет данных для отображения label_no_data: Нет данных для отображения
label_none: отсутствует label_none: отсутствует
label_not_contains: не содержит label_not_contains: не содержит
label_not_equals: не соответствует label_not_equals: не является
label_open_issues: открыт label_open_issues: открыто
label_open_issues_plural: открыто label_open_issues_plural: открыто
label_open_issues_plural2: открыто label_open_issues_plural2: открыто
label_open_issues_plural5: открыто label_open_issues_plural5: открыто
label_optional_description: Описание (опционально) label_optional_description: Описание (необязательно)
label_options: Опции label_options: Опции
label_overall_activity: Сводная активность label_overall_activity: Сводный отчет действий
label_overview: Просмотр label_overview: Просмотр
label_password_lost: Восстановление пароля label_password_lost: Восстановление пароля
label_permissions_report: Отчет о правах доступа label_permissions_report: Отчет по правам доступа
label_permissions: Права доступа label_permissions: Права доступа
label_per_page: На страницу label_per_page: На страницу
label_personalize_page: Персонализировать данную страницу label_personalize_page: Персонализировать данную страницу
...@@ -620,10 +620,10 @@ ru: ...@@ -620,10 +620,10 @@ ru:
label_plugins: Модули label_plugins: Модули
label_precedes: предыдущая label_precedes: предыдущая
label_preferences: Предпочтения label_preferences: Предпочтения
label_preview: Предварительный просмотр label_preview: Предпросмотр
label_previous: Предыдущий label_previous: Предыдущее
label_profile: Профиль label_profile: Профиль
label_project: проект label_project: Проект
label_project_all: Все проекты label_project_all: Все проекты
label_project_copy_notifications: Отправлять уведомления по электронной почте при копировании проекта label_project_copy_notifications: Отправлять уведомления по электронной почте при копировании проекта
label_project_latest: Последние проекты label_project_latest: Последние проекты
...@@ -664,7 +664,7 @@ ru: ...@@ -664,7 +664,7 @@ ru:
label_role_and_permissions: Роли и права доступа label_role_and_permissions: Роли и права доступа
label_role_new: Новая роль label_role_new: Новая роль
label_role_plural: Роли label_role_plural: Роли
label_scm: 'Тип хранилища' label_scm: Тип хранилища
label_search: Поиск label_search: Поиск
label_search_titles_only: Искать только в названиях label_search_titles_only: Искать только в названиях
label_send_information: Отправить пользователю информацию по учетной записи label_send_information: Отправить пользователю информацию по учетной записи
...@@ -702,7 +702,7 @@ ru: ...@@ -702,7 +702,7 @@ ru:
label_updated_time_by: "Обновлено %{author} %{age} назад" label_updated_time_by: "Обновлено %{author} %{age} назад"
label_used_by: Используется label_used_by: Используется
label_user: Пользователь label_user: Пользователь
label_user_activity: "Активность пользователя %{value}" label_user_activity: "Действия пользователя %{value}"
label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам" label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам"
label_user_mail_option_all: "О всех событиях во всех моих проектах" label_user_mail_option_all: "О всех событиях во всех моих проектах"
label_user_mail_option_selected: "О всех событиях только в выбранном проекте..." label_user_mail_option_selected: "О всех событиях только в выбранном проекте..."
...@@ -760,8 +760,8 @@ ru: ...@@ -760,8 +760,8 @@ ru:
mail_body_account_activation_request: "Зарегистрирован новый пользователь (%{value}). Учетная запись ожидает Вашего утверждения:" mail_body_account_activation_request: "Зарегистрирован новый пользователь (%{value}). Учетная запись ожидает Вашего утверждения:"
mail_body_account_information: Информация о Вашей учетной записи mail_body_account_information: Информация о Вашей учетной записи
mail_body_account_information_external: "Вы можете использовать Вашу %{value} учетную запись для входа." mail_body_account_information_external: "Вы можете использовать Вашу %{value} учетную запись для входа."
mail_body_lost_password: 'Для изменения пароля зайдите по следующей ссылке:' mail_body_lost_password: 'Для изменения пароля пройдите по следующей ссылке:'
mail_body_register: 'Для активации учетной записи зайдите по следующей ссылке:' mail_body_register: 'Для активации учетной записи пройдите по следующей ссылке:'
mail_body_reminder: "%{count} назначенных на Вас задач на следующие %{days} дней:" mail_body_reminder: "%{count} назначенных на Вас задач на следующие %{days} дней:"
mail_subject_account_activation_request: "Запрос на активацию пользователя в системе %{value}" mail_subject_account_activation_request: "Запрос на активацию пользователя в системе %{value}"
mail_subject_lost_password: "Ваш %{value} пароль" mail_subject_lost_password: "Ваш %{value} пароль"
...@@ -772,8 +772,8 @@ ru: ...@@ -772,8 +772,8 @@ ru:
notice_account_invalid_creditentials: Неправильное имя пользователя или пароль notice_account_invalid_creditentials: Неправильное имя пользователя или пароль
notice_account_lost_email_sent: Вам отправлено письмо с инструкциями по выбору нового пароля. notice_account_lost_email_sent: Вам отправлено письмо с инструкциями по выбору нового пароля.
notice_account_password_updated: Пароль успешно обновлен. notice_account_password_updated: Пароль успешно обновлен.
notice_account_pending: "Ваша учетная запись уже создана и ожидает подтверждения администратора." notice_account_pending: "Ваша учетная запись создана и ожидает подтверждения администратора."
notice_account_register_done: Учетная запись успешно создана. Для активации Вашей учетной записи зайдите по ссылке, которая выслана Вам по электронной почте. notice_account_register_done: Учетная запись успешно создана. Для активации Вашей учетной записи пройдите по ссылке, которая выслана Вам по электронной почте.
notice_account_unknown_email: Неизвестный пользователь. notice_account_unknown_email: Неизвестный пользователь.
notice_account_updated: Учетная запись успешно обновлена. notice_account_updated: Учетная запись успешно обновлена.
notice_account_wrong_password: Неверный пароль notice_account_wrong_password: Неверный пароль
...@@ -783,15 +783,15 @@ ru: ...@@ -783,15 +783,15 @@ ru:
notice_email_sent: "Отправлено письмо %{value}" notice_email_sent: "Отправлено письмо %{value}"
notice_failed_to_save_issues: "Не удалось сохранить %{count} пункт(ов) из %{total} выбранных: %{ids}." notice_failed_to_save_issues: "Не удалось сохранить %{count} пункт(ов) из %{total} выбранных: %{ids}."
notice_failed_to_save_members: "Не удалось сохранить участника(ов): %{errors}." notice_failed_to_save_members: "Не удалось сохранить участника(ов): %{errors}."
notice_feeds_access_key_reseted: Ваш ключ доступа RSS был перезапущен. notice_feeds_access_key_reseted: Ваш ключ доступа RSS был сброшен.
notice_file_not_found: Страница, на которую Вы пытаетесь зайти, не существует или удалена. notice_file_not_found: Страница, на которую Вы пытаетесь зайти, не существует или удалена.
notice_locking_conflict: Информация обновлена другим пользователем. notice_locking_conflict: Информация обновлена другим пользователем.
notice_no_issue_selected: "Не выбрано ни одной задачи! Пожалуйста, отметьте задачи, которые Вы хотите отредактировать." notice_no_issue_selected: "Не выбрано ни одной задачи! Пожалуйста, отметьте задачи, которые Вы хотите отредактировать."
notice_not_authorized: У Вас нет прав для посещения данной страницы. notice_not_authorized: У Вас нет прав для посещения данной страницы.
notice_successful_connection: Подключение успешно установлено. notice_successful_connection: Подключение успешно установлено.
notice_successful_create: Создание успешно завершено. notice_successful_create: Создание успешно.
notice_successful_delete: Удаление успешно завершено. notice_successful_delete: Удаление успешно.
notice_successful_update: Обновление успешно завершено. notice_successful_update: Обновление успешно.
notice_unable_delete_version: Невозможно удалить версию. notice_unable_delete_version: Невозможно удалить версию.
permission_add_issues: Добавление задач permission_add_issues: Добавление задач
...@@ -800,7 +800,7 @@ ru: ...@@ -800,7 +800,7 @@ ru:
permission_add_messages: Отправка сообщений permission_add_messages: Отправка сообщений
permission_browse_repository: Просмотр хранилища permission_browse_repository: Просмотр хранилища
permission_comment_news: Комментирование новостей permission_comment_news: Комментирование новостей
permission_commit_access: Разрешение фиксации permission_commit_access: Изменение файлов в хранилище
permission_delete_issues: Удаление задач permission_delete_issues: Удаление задач
permission_delete_messages: Удаление сообщений permission_delete_messages: Удаление сообщений
permission_delete_own_messages: Удаление собственных сообщений permission_delete_own_messages: Удаление собственных сообщений
...@@ -819,7 +819,7 @@ ru: ...@@ -819,7 +819,7 @@ ru:
permission_log_time: Учет затраченного времени permission_log_time: Учет затраченного времени
permission_view_changesets: Просмотр изменений хранилища permission_view_changesets: Просмотр изменений хранилища
permission_view_time_entries: Просмотр затраченного времени permission_view_time_entries: Просмотр затраченного времени
permission_manage_project_activities: Управление активностью проекта permission_manage_project_activities: Управление типами действий для проекта
permission_manage_boards: Управление форумами permission_manage_boards: Управление форумами
permission_manage_categories: Управление категориями задач permission_manage_categories: Управление категориями задач
permission_manage_documents: Управление документами permission_manage_documents: Управление документами
...@@ -857,13 +857,13 @@ ru: ...@@ -857,13 +857,13 @@ ru:
project_module_gantt: Диаграмма Ганта project_module_gantt: Диаграмма Ганта
project_module_calendar: Календарь project_module_calendar: Календарь
setting_activity_days_default: Количество дней, отображаемых в Активности setting_activity_days_default: Количество дней, отображаемых в Действиях
setting_app_subtitle: Подзаголовок приложения setting_app_subtitle: Подзаголовок приложения
setting_app_title: Название приложения setting_app_title: Название приложения
setting_attachment_max_size: Максимальный размер вложения setting_attachment_max_size: Максимальный размер вложения
setting_autofetch_changesets: Автоматически следить за изменениями хранилища setting_autofetch_changesets: Автоматически следить за изменениями хранилища
setting_autologin: Автоматический вход setting_autologin: Автоматический вход
setting_bcc_recipients: Использовать скрытые списки (BCC) setting_bcc_recipients: Использовать скрытые копии (BCC)
setting_cache_formatted_text: Кешировать форматированный текст setting_cache_formatted_text: Кешировать форматированный текст
setting_commit_fix_keywords: Назначение ключевых слов setting_commit_fix_keywords: Назначение ключевых слов
setting_commit_logs_encoding: Кодировка комментариев в хранилище setting_commit_logs_encoding: Кодировка комментариев в хранилище
...@@ -881,19 +881,19 @@ ru: ...@@ -881,19 +881,19 @@ ru:
setting_file_max_size_displayed: Максимальный размер текстового файла для отображения setting_file_max_size_displayed: Максимальный размер текстового файла для отображения
setting_gravatar_enabled: Использовать аватар пользователя из Gravatar setting_gravatar_enabled: Использовать аватар пользователя из Gravatar
setting_host_name: Имя компьютера setting_host_name: Имя компьютера
setting_issue_list_default_columns: Колонки, отображаемые в списке задач по умолчанию setting_issue_list_default_columns: Столбцы, отображаемые в списке задач по умолчанию
setting_issues_export_limit: Ограничение по экспортируемым задачам setting_issues_export_limit: Ограничение по экспортируемым задачам
setting_login_required: Необходима аутентификация setting_login_required: Необходима аутентификация
setting_mail_from: email адрес для передачи информации setting_mail_from: Исходящий email адрес
setting_mail_handler_api_enabled: Включить веб-сервис для входящих сообщений setting_mail_handler_api_enabled: Включить веб-сервис для входящих сообщений
setting_mail_handler_api_key: API ключ setting_mail_handler_api_key: API ключ
setting_openid: Разрешить OpenID для входа и регистрации setting_openid: Разрешить OpenID для входа и регистрации
setting_per_page_options: Количество строк на страницу setting_per_page_options: Количество записей на страницу
setting_plain_text_mail: Только простой текст (без HTML) setting_plain_text_mail: Только простой текст (без HTML)
setting_protocol: Протокол setting_protocol: Протокол
setting_repositories_encodings: Кодировки хранилища setting_repositories_encodings: Кодировки хранилища
setting_repository_log_display_limit: Максимальное количество редакций, отображаемых в журнале изменений setting_repository_log_display_limit: Максимальное количество редакций, отображаемых в журнале изменений
setting_self_registration: Возможна саморегистрация setting_self_registration: Саморегистрация
setting_sequential_project_identifiers: Генерировать последовательные идентификаторы проектов setting_sequential_project_identifiers: Генерировать последовательные идентификаторы проектов
setting_sys_api_enabled: Включить веб-сервис для управления хранилищем setting_sys_api_enabled: Включить веб-сервис для управления хранилищем
setting_text_formatting: Форматирование текста setting_text_formatting: Форматирование текста
...@@ -907,14 +907,14 @@ ru: ...@@ -907,14 +907,14 @@ ru:
status_registered: зарегистрирован status_registered: зарегистрирован
text_are_you_sure_with_children: Удалить задачу и все ее подзадачи? text_are_you_sure_with_children: Удалить задачу и все ее подзадачи?
text_are_you_sure: Подтвердите text_are_you_sure: Вы уверены?
text_assign_time_entries_to_project: Прикрепить зарегистрированное время к проекту text_assign_time_entries_to_project: Прикрепить зарегистрированное время к проекту
text_caracters_maximum: "Максимум %{count} символов(а)." text_caracters_maximum: "Максимум %{count} символов(а)."
text_caracters_minimum: "Должно быть не менее %{count} символов." text_caracters_minimum: "Должно быть не менее %{count} символов."
text_comma_separated: Допустимы несколько значений (через запятую). text_comma_separated: Допустимы несколько значений (через запятую).
text_custom_field_possible_values_info: 'По одному значению в каждой строке' text_custom_field_possible_values_info: 'По одному значению в каждой строке'
text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена
text_destroy_time_entries_question: Вы собираетесь удалить %{hours} часа(ов), прикрепленных за этой задачей. text_destroy_time_entries_question: "На эту задачу зарегистрировано %{hours} часа(ов) затраченного времени. Что Вы хотите предпринять?"
text_destroy_time_entries: Удалить зарегистрированное время text_destroy_time_entries: Удалить зарегистрированное время
text_diff_truncated: '... Этот diff ограничен, так как превышает максимальный отображаемый размер.' text_diff_truncated: '... Этот diff ограничен, так как превышает максимальный отображаемый размер.'
text_email_delivery_not_configured: "Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.\nНастроить параметры для Вашего SMTP-сервера Вы можете в файле config/configuration.yml. Для применения изменений перезапустите приложение." text_email_delivery_not_configured: "Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.\nНастроить параметры для Вашего SMTP-сервера Вы можете в файле config/configuration.yml. Для применения изменений перезапустите приложение."
...@@ -933,31 +933,31 @@ ru: ...@@ -933,31 +933,31 @@ ru:
text_journal_set_to: "Параметр %{label} изменился на %{value}" text_journal_set_to: "Параметр %{label} изменился на %{value}"
text_length_between: "Длина между %{min} и %{max} символов." text_length_between: "Длина между %{min} и %{max} символов."
text_load_default_configuration: Загрузить конфигурацию по умолчанию text_load_default_configuration: Загрузить конфигурацию по умолчанию
text_min_max_length_info: 0 означает отсутствие запретов text_min_max_length_info: 0 означает отсутствие ограничений
text_no_configuration_data: "Роли, трекеры, статусы задач и оперативный план не были сконфигурированы.\nНастоятельно рекомендуется загрузить конфигурацию по-умолчанию. Вы сможете её изменить потом." text_no_configuration_data: "Роли, трекеры, статусы задач и оперативный план не были сконфигурированы.\nНастоятельно рекомендуется загрузить конфигурацию по-умолчанию. Вы сможете её изменить потом."
text_plugin_assets_writable: Каталог для плагинов доступен по записи text_plugin_assets_writable: Каталог модулей доступен для записи
text_project_destroy_confirmation: Вы настаиваете на удалении данного проекта и всей относящейся к нему информации? text_project_destroy_confirmation: Вы настаиваете на удалении данного проекта и всей относящейся к нему информации?
text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier can not be changed.' text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier can not be changed.'
text_reassign_time_entries: 'Перенести зарегистрированное время на следующую задачу:' text_reassign_time_entries: 'Перенести зарегистрированное время на следующую задачу:'
text_regexp_info: напр. ^[A-Z0-9]+$ text_regexp_info: "например: ^[A-Z0-9]+$"
text_repository_usernames_mapping: "Выберите или обновите пользователя Redmine, связанного с найденными именами в журнале хранилища.\nПользователи с одинаковыми именами или email в Redmine и хранилище связываются автоматически." text_repository_usernames_mapping: "Выберите или обновите пользователя Redmine, связанного с найденными именами в журнале хранилища.\nПользователи с одинаковыми именами или email в Redmine и хранилище связываются автоматически."
text_rmagick_available: Доступно использование RMagick (опционально) text_rmagick_available: Доступно использование RMagick (опционально)
text_select_mail_notifications: Выберите действия, на которые будет отсылаться уведомление на электронную почту. text_select_mail_notifications: Выберите действия, при которых будет отсылаться уведомление на электронную почту.
text_select_project_modules: 'Выберите модули, которые будут использованы в проекте:' text_select_project_modules: 'Выберите модули, которые будут использованы в проекте:'
text_status_changed_by_changeset: "Реализовано в %{value} редакции." text_status_changed_by_changeset: "Реализовано в %{value} редакции."
text_subprojects_destroy_warning: "Подпроекты: %{value} также будут удалены." text_subprojects_destroy_warning: "Подпроекты: %{value} также будут удалены."
text_tip_issue_begin_day: дата начала задачи text_tip_issue_begin_day: дата начала задачи
text_tip_issue_begin_end_day: начало задачи и окончание ее в этот день text_tip_issue_begin_end_day: начало задачи и окончание ее в этот же день
text_tip_issue_end_day: дата завершения задачи text_tip_issue_end_day: дата завершения задачи
text_tracker_no_workflow: Для этого трекера последовательность действий не определена text_tracker_no_workflow: Для этого трекера последовательность действий не определена
text_unallowed_characters: Запрещенные символы text_unallowed_characters: Запрещенные символы
text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы, автором которых Вы являетесь или которые Вам назначены)." text_user_mail_option: "Для невыбранных проектов, Вы будете получать уведомления только о том, что просматриваете или в чем участвуете (например, задачи, автором которых Вы являетесь, или которые Вам назначены)."
text_user_wrote: "%{value} писал(а):" text_user_wrote: "%{value} писал(а):"
text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое? text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
warning_attachments_not_saved: "%{count} файл(ов) невозможно сохранить." warning_attachments_not_saved: "%{count} файл(ов) невозможно сохранить."
text_wiki_page_destroy_question: Эта страница имеет %{descendants} дочерних страниц и их потомков. Что вы хотите сделать? text_wiki_page_destroy_question: Эта страница имеет %{descendants} дочерних страниц и их потомков. Что вы хотите предпринять?
text_wiki_page_reassign_children: Переопределить дочерние страницы на текущую страницу text_wiki_page_reassign_children: Переопределить дочерние страницы на текущую страницу
text_wiki_page_nullify_children: Сделать дочерние страницы главными страницами text_wiki_page_nullify_children: Сделать дочерние страницы главными страницами
text_wiki_page_destroy_children: Удалить дочерние страницы и всех их потомков text_wiki_page_destroy_children: Удалить дочерние страницы и всех их потомков
...@@ -975,14 +975,14 @@ ru: ...@@ -975,14 +975,14 @@ ru:
label_tag: Метка label_tag: Метка
label_branch: Ветвь label_branch: Ветвь
error_no_tracker_in_project: С этим проектом не ассоциирован ни один трекер. Проверьте настройки проекта. error_no_tracker_in_project: С этим проектом не ассоциирован ни один трекер. Проверьте настройки проекта.
error_no_default_issue_status: Не определен статус задача по умолчанию. Проверьте настройки (см. "Администрирование -> Статусы задачи"). error_no_default_issue_status: Не определен статус задач по умолчанию. Проверьте настройки (см. "Администрирование -> Статусы задач").
label_group_plural: Группы label_group_plural: Группы
label_group: Группа label_group: Группа
label_group_new: Новая группа label_group_new: Новая группа
label_time_entry_plural: Затраченное время label_time_entry_plural: Затраченное время
text_journal_added: "%{label} %{value} добавлен" text_journal_added: "%{label} %{value} добавлен"
field_active: Активно field_active: Активно
enumeration_system_activity: Системная активность enumeration_system_activity: Системное
permission_delete_issue_watchers: Удаление наблюдателей permission_delete_issue_watchers: Удаление наблюдателей
version_status_closed: закрыт version_status_closed: закрыт
version_status_locked: заблокирован version_status_locked: заблокирован
...@@ -998,7 +998,7 @@ ru: ...@@ -998,7 +998,7 @@ ru:
label_version_sharing_descendants: С подпроектами label_version_sharing_descendants: С подпроектами
label_version_sharing_tree: С деревом проектов label_version_sharing_tree: С деревом проектов
label_version_sharing_none: Без совместного использования label_version_sharing_none: Без совместного использования
error_can_not_archive_project: Этот проект не может быть архивирован error_can_not_archive_project: Этот проект не может быть заархивирован
button_duplicate: Дублировать button_duplicate: Дублировать
button_copy_and_follow: Копировать и продолжить button_copy_and_follow: Копировать и продолжить
label_copy_source: Источник label_copy_source: Источник
...@@ -1009,7 +1009,7 @@ ru: ...@@ -1009,7 +1009,7 @@ ru:
setting_issue_done_ratio_issue_field: Готовность задачи setting_issue_done_ratio_issue_field: Готовность задачи
label_copy_same_as_target: То же, что и у цели label_copy_same_as_target: То же, что и у цели
label_copy_target: Цель label_copy_target: Цель
notice_issue_done_ratios_updated: Параметр готовность задач обновлен. notice_issue_done_ratios_updated: Параметр &laquo;готовность&raquo; обновлен.
error_workflow_copy_source: Выберите исходный трекер или роль error_workflow_copy_source: Выберите исходный трекер или роль
label_update_issue_done_ratios: Обновить готовность задач label_update_issue_done_ratios: Обновить готовность задач
setting_start_of_week: День начала недели setting_start_of_week: День начала недели
...@@ -1045,14 +1045,14 @@ ru: ...@@ -1045,14 +1045,14 @@ ru:
notice_not_authorized_archived_project: Запрашиваемый проект был архивирован. notice_not_authorized_archived_project: Запрашиваемый проект был архивирован.
label_principal_search: "Найти пользователя или группу:" label_principal_search: "Найти пользователя или группу:"
label_user_search: "Найти пользователя:" label_user_search: "Найти пользователя:"
field_visible: Видимый field_visible: Видимое
setting_emails_header: Заголовок письма setting_emails_header: Заголовок письма
setting_commit_logtime_activity_id: Activity for logged time setting_commit_logtime_activity_id: Действие для учета времени
text_time_logged_by_changeset: Applied in changeset %{value}. text_time_logged_by_changeset: Учтено в редакции %{value}.
setting_commit_logtime_enabled: Enable time logging setting_commit_logtime_enabled: Включить учет времени
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max}) notice_gantt_chart_truncated: Диаграмма будет усечена, поскольку превышено максимальное кол-во элементов, которые могут отображаться (%{max})
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart setting_gantt_items_limit: Максимальное кол-во элементов отображаемых на диаграмме Ганта
text_powered_by: Powered by %{link} text_powered_by: Powered by %{link}
label_cvs_module: Модуль label_cvs_module: Модуль
label_filesystem_path: Каталог label_filesystem_path: Каталог
...@@ -1061,19 +1061,20 @@ ru: ...@@ -1061,19 +1061,20 @@ ru:
label_cvs_path: CVSROOT label_cvs_path: CVSROOT
label_git_path: Путь к каталогу .git label_git_path: Путь к каталогу .git
label_mercurial_path: Каталог label_mercurial_path: Каталог
label_my_queries: My custom queries label_my_queries: Мои сохраненные запросы
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee label_additional_workflow_transitions_for_assignee: Дополнительные переходы, когда пользователь является исполнителем
text_journal_changed_no_detail: "%{label} updated" text_journal_changed_no_detail: "%{label} updated"
button_expand_all: Expand all button_expand_all: Развернуть все
button_collapse_all: Collapse all button_collapse_all: Свернуть все
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author label_additional_workflow_transitions_for_author: Дополнительные переходы, когда пользователь является автором
field_effective_date: Due date field_effective_date: Due date
label_news_comment_added: Comment added to a news label_news_comment_added: Comment added to a news
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text field_warn_on_leaving_unsaved: Предупреждать при закрытии страницы с несохраненным текстом
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page. text_warn_on_leaving_unsaved: Текущая страница содержит несохраненный текст, который будет потерян, если вы покинете эту страницу.
text_default_encoding: "Default: UTF-8" text_default_encoding: "Default: UTF-8"
text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo) text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo)
label_notify_member_plural: Email issue updates label_notify_member_plural: Email issue updates
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -959,3 +959,4 @@ sk: ...@@ -959,3 +959,4 @@ sk:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -960,3 +960,4 @@ sl: ...@@ -960,3 +960,4 @@ sl:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -964,3 +964,4 @@ sr-YU: ...@@ -964,3 +964,4 @@ sr-YU:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -965,3 +965,4 @@ sr: ...@@ -965,3 +965,4 @@ sr:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1006,3 +1006,4 @@ sv: ...@@ -1006,3 +1006,4 @@ sv:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -961,3 +961,4 @@ th: ...@@ -961,3 +961,4 @@ th:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -983,3 +983,4 @@ tr: ...@@ -983,3 +983,4 @@ tr:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -960,3 +960,4 @@ uk: ...@@ -960,3 +960,4 @@ uk:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1015,3 +1015,4 @@ vi: ...@@ -1015,3 +1015,4 @@ vi:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -1046,3 +1046,4 @@ ...@@ -1046,3 +1046,4 @@
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -978,3 +978,4 @@ zh: ...@@ -978,3 +978,4 @@ zh:
label_path_encoding: Path encoding label_path_encoding: Path encoding
text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo) text_mercurial_repo_example: local repository (e.g. /hgrepo, c:\hgrepo)
label_diff: diff label_diff: diff
setting_issue_startdate_is_adddate: Use current date as start date for new issues
...@@ -178,3 +178,5 @@ default_notification_option: ...@@ -178,3 +178,5 @@ default_notification_option:
default: 'only_my_events' default: 'only_my_events'
emails_header: emails_header:
default: '' default: ''
issue_startdate_is_adddate:
default: 1
\ No newline at end of file
...@@ -12,18 +12,24 @@ ...@@ -12,18 +12,24 @@
#++ #++
class MergeWikiVersionsWithJournals < ActiveRecord::Migration class MergeWikiVersionsWithJournals < ActiveRecord::Migration
def self.up # This is provided here for migrating up after the WikiContent::Version class has been removed
# This is provided here for migrating up after the WikiContent::Version class has been removed class WikiContent < ActiveRecord::Base
unless WikiContent.const_defined?("Version") class Version < ActiveRecord::Base
WikiContent.const_set("Version", Class.new(ActiveRecord::Base))
end end
end
def self.up
# avoid touching WikiContent on journal creation # avoid touching WikiContent on journal creation
WikiContentJournal.class_exec { WikiContentJournal.class_exec {
def touch_journaled_after_creation def touch_journaled_after_creation
end end
} }
# assign all wiki_contents w/o author to the anonymous user - they used to
# work w/o author but don't any more.
WikiContent.update_all({:author_id => User.anonymous.id}, :author_id => nil)
WikiContent::Version.update_all({:author_id => User.anonymous.id}, :author_id => nil)
WikiContent::Version.find_by_sql("SELECT * FROM wiki_content_versions").each do |wv| WikiContent::Version.find_by_sql("SELECT * FROM wiki_content_versions").each do |wv|
journal = WikiContentJournal.create!(:journaled_id => wv.wiki_content_id, :user_id => wv.author_id, journal = WikiContentJournal.create!(:journaled_id => wv.wiki_content_id, :user_id => wv.author_id,
:notes => wv.comments, :created_at => wv.updated_on, :activity_type => "wiki_edits") :notes => wv.comments, :created_at => wv.updated_on, :activity_type => "wiki_edits")
......
= ChiliProject changelog = ChiliProject changelog
== 2011-10-04 v2.3.0
* Bug #594: Wiki Diff somehow off
* Bug #617: Gemfile: Missing database related platform block for Windows + RubyInstaller
* Bug #619: Redmine.pm allows anonymous read access to repositories even if Anonymous role prohibits it
* Bug #633: Update from 1.x to 2.x impossible under rare but valid circumstances
* Feature #355: Turn on/off the if the start date will autofill by default
* Feature #566: The "Watcher" filter should show all users.
* Feature #644: Add Check/Uncheck all links to project form
== 2011-08-27 v2.2.0 == 2011-08-27 v2.2.0
* Bug #256: requires_redmine_plugin should defer loading plugins if not all dependencies are met * Bug #256: requires_redmine_plugin should defer loading plugins if not all dependencies are met
......
...@@ -318,7 +318,7 @@ sub access_handler { ...@@ -318,7 +318,7 @@ sub access_handler {
my $project_id = get_project_identifier($r); my $project_id = get_project_identifier($r);
$r->set_handlers(PerlAuthenHandler => [\&OK]) $r->set_handlers(PerlAuthenHandler => [\&OK])
if is_public_project($project_id, $r); if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);
return OK return OK
} }
...@@ -390,6 +390,29 @@ sub is_public_project { ...@@ -390,6 +390,29 @@ sub is_public_project {
$ret; $ret;
} }
sub anonymous_role_allows_browse_repository {
my $r = shift;
my $dbh = connect_database($r);
my $sth = $dbh->prepare(
"SELECT permissions FROM roles WHERE builtin = 2;"
);
$sth->execute();
my $ret = 0;
if (my @row = $sth->fetchrow_array) {
if ($row[0] =~ /:browse_repository/) {
$ret = 1;
}
}
$sth->finish();
undef $sth;
$dbh->disconnect();
undef $dbh;
$ret;
}
# perhaps we should use repository right (other read right) to check public access. # perhaps we should use repository right (other read right) to check public access.
# it could be faster BUT it doesn't work for the moment. # it could be faster BUT it doesn't work for the moment.
# sub is_public_project_by_file { # sub is_public_project_by_file {
......
...@@ -17,7 +17,7 @@ module ChiliProject ...@@ -17,7 +17,7 @@ module ChiliProject
module VERSION #:nodoc: module VERSION #:nodoc:
MAJOR = 2 MAJOR = 2
MINOR = 2 MINOR = 3
PATCH = 0 PATCH = 0
TINY = PATCH # Redmine compat TINY = PATCH # Redmine compat
......
...@@ -444,6 +444,101 @@ class QueryTest < ActiveSupport::TestCase ...@@ -444,6 +444,101 @@ class QueryTest < ActiveSupport::TestCase
end end
context "'watcher_id' filter" do
context "globally" do
context "for an anonymous user" do
should "not be present" do
assert ! @query.available_filters.keys.include?("watcher_id")
end
end
context "for a logged in user" do
setup do
User.current = User.find 1
end
teardown do
User.current = nil
end
should "be present" do
assert @query.available_filters.keys.include?("watcher_id")
end
should "be a list" do
assert_equal :list, @query.available_filters["watcher_id"][:type]
end
should "have a list of active users as values" do
assert @query.available_filters["watcher_id"][:values].include?(["<< me >>", "me"])
assert @query.available_filters["watcher_id"][:values].include?(["John Smith", "2"])
assert @query.available_filters["watcher_id"][:values].include?(["Dave Lopper", "3"])
assert @query.available_filters["watcher_id"][:values].include?(["redMine Admin", "1"])
assert @query.available_filters["watcher_id"][:values].include?(["User Misc", "8"])
end
should "not include active users not member of any project" do
assert ! @query.available_filters["watcher_id"][:values].include?(['Robert Hill','4'])
end
should "not include locked users as values" do
assert ! @query.available_filters["watcher_id"][:values].include?(['Dave2 Lopper2','5'])
end
should "not include the anonymous user as values" do
assert ! @query.available_filters["watcher_id"][:values].include?(['Anonymous','6'])
end
end
end
context "in a project" do
setup do
@query.project = Project.find(1)
end
context "for an anonymous user" do
should "not be present" do
assert ! @query.available_filters.keys.include?("watcher_id")
end
end
context "for a logged in user" do
setup do
User.current = User.find 1
end
teardown do
User.current = nil
end
should "be present" do
assert @query.available_filters.keys.include?("watcher_id")
end
should "be a list" do
assert_equal :list, @query.available_filters["watcher_id"][:type]
end
should "have a list of the project members as values" do
assert @query.available_filters["watcher_id"][:values].include?(["<< me >>", "me"])
assert @query.available_filters["watcher_id"][:values].include?(["John Smith", "2"])
assert @query.available_filters["watcher_id"][:values].include?(["Dave Lopper", "3"])
end
should "not include non-project members as values" do
assert ! @query.available_filters["watcher_id"][:values].include?(["redMine Admin", "1"])
end
should "not include locked project members as values" do
assert ! @query.available_filters["watcher_id"][:values].include?(['Dave2 Lopper2','5'])
end
should "not include the anonymous user as values" do
assert ! @query.available_filters["watcher_id"][:values].include?(['Anonymous','6'])
end
end
end
end
end end
context "#statement" do context "#statement" do
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment