Compare commits

..
14 Commits
Author SHA1 Message Date
Jean-Philippe Lang 1919f61fa1 tagged version 0.9.2
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/0.9.2@3421 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-13 09:45:46 +00:00
Jean-Philippe Lang b5ee8c08ca Merged r3392 from trunk (0.9.2 update).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3393 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 12:48:56 +00:00
Jean-Philippe Lang 9487d8dd80 Merged r3389 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3391 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 12:37:12 +00:00
Jean-Philippe Lang f3bf588c82 Translations updated to trunk r3388.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3390 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 12:36:12 +00:00
Jean-Philippe Lang bd38623cca Merged r3379 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3387 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:58:42 +00:00
Jean-Philippe Lang bae86dc558 Merged r3377 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3386 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:57:49 +00:00
Jean-Philippe Lang 884c5be200 Backported r3368 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3385 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:56:49 +00:00
Jean-Philippe Lang ad24563b1e Merged r3378 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3384 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:53:17 +00:00
Jean-Philippe Lang cb8933ae55 Merged r3376 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3383 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:52:09 +00:00
Jean-Philippe Lang 5d75879046 Merged r3375 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3382 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:50:56 +00:00
Jean-Philippe Lang 69e5d91a2d Backported r3354 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3381 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:49:40 +00:00
Jean-Philippe Lang 7c1e877209 Merged r3357 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3380 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-07 11:45:31 +00:00
Eric Davis 76d9d01db0 Merged the Object Daddy exemplars from trunk. r3337, r3340, r3342
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3359 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-02-02 16:03:05 +00:00
Jean-Philippe Lang 27fa40d283 Merged r3351 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.9-stable@3352 e93f8b46-1217-0410-a6f0-8f06a7374b81
2010-01-30 11:24:10 +00:00
82 changed files with 692 additions and 67 deletions
+10 -7
View File
@@ -57,12 +57,13 @@ class IssuesController < ApplicationController
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h})) sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
if @query.valid? if @query.valid?
limit = per_page_option limit = case params[:format]
respond_to do |format| when 'csv', 'pdf'
format.html { } Setting.issues_export_limit.to_i
format.atom { limit = Setting.feeds_limit.to_i } when 'atom'
format.csv { limit = Setting.issues_export_limit.to_i } Setting.feeds_limit.to_i
format.pdf { limit = Setting.issues_export_limit.to_i } else
per_page_option
end end
@issue_count = @query.issue_count @issue_count = @query.issue_count
@@ -106,7 +107,7 @@ class IssuesController < ApplicationController
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC") @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
@journals.each_with_index {|j,i| j.indice = i+1} @journals.each_with_index {|j,i| j.indice = i+1}
@journals.reverse! if User.current.wants_comments_in_reverse_order? @journals.reverse! if User.current.wants_comments_in_reverse_order?
@changesets = @issue.changesets @changesets = @issue.changesets.visible.all
@changesets.reverse! if User.current.wants_comments_in_reverse_order? @changesets.reverse! if User.current.wants_comments_in_reverse_order?
@allowed_statuses = @issue.new_statuses_allowed_to(User.current) @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
@edit_allowed = User.current.allowed_to?(:edit_issues, @project) @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
@@ -358,6 +359,7 @@ class IssuesController < ApplicationController
def gantt def gantt
@gantt = Redmine::Helpers::Gantt.new(params) @gantt = Redmine::Helpers::Gantt.new(params)
retrieve_query retrieve_query
@query.group_by = nil
if @query.valid? if @query.valid?
events = [] events = []
# Issues that have start and due dates # Issues that have start and due dates
@@ -397,6 +399,7 @@ class IssuesController < ApplicationController
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month) @calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
retrieve_query retrieve_query
@query.group_by = nil
if @query.valid? if @query.valid?
events = [] events = []
events += @query.issues(:include => [:tracker, :assigned_to, :priority], events += @query.issues(:include => [:tracker, :assigned_to, :priority],
+13 -2
View File
@@ -41,6 +41,9 @@ class Changeset < ActiveRecord::Base
validates_uniqueness_of :revision, :scope => :repository_id validates_uniqueness_of :revision, :scope => :repository_id
validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
named_scope :visible, lambda {|*args| { :include => {:repository => :project},
:conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } }
def revision=(r) def revision=(r)
write_attribute :revision, (r.nil? ? nil : r.to_s) write_attribute :revision, (r.nil? ? nil : r.to_s)
end end
@@ -90,13 +93,13 @@ class Changeset < ActiveRecord::Base
# find any issue ID in the comments # find any issue ID in the comments
target_issue_ids = [] target_issue_ids = []
comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] } comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids) referenced_issues += find_referenced_issues_by_id(target_issue_ids)
end end
comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match| comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
action = match[0] action = match[0]
target_issue_ids = match[1].scan(/\d+/) target_issue_ids = match[1].scan(/\d+/)
target_issues = repository.project.issues.find_all_by_id(target_issue_ids) target_issues = find_referenced_issues_by_id(target_issue_ids)
if fix_status && fix_keywords.include?(action.downcase) if fix_status && fix_keywords.include?(action.downcase)
# update status of issues # update status of issues
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
@@ -148,6 +151,14 @@ class Changeset < ActiveRecord::Base
private private
# Finds issues that can be referenced by the commit message
# i.e. issues that belong to the repository project, a subproject or a parent project
def find_referenced_issues_by_id(ids)
Issue.find_all_by_id(ids, :include => :project).select {|issue|
project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
}
end
def split_comments def split_comments
comments =~ /\A(.+?)\r?\n(.*)$/m comments =~ /\A(.+?)\r?\n(.*)$/m
@short_comments = $1 || comments @short_comments = $1 || comments
+9 -2
View File
@@ -51,7 +51,7 @@ class Project < ActiveRecord::Base
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", :join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
:association_foreign_key => 'custom_field_id' :association_foreign_key => 'custom_field_id'
acts_as_nested_set :order => 'name', :dependent => :destroy acts_as_nested_set :order => 'name'
acts_as_attachable :view_permission => :view_files, acts_as_attachable :view_permission => :view_files,
:delete_permission => :manage_files :delete_permission => :manage_files
@@ -74,7 +74,7 @@ class Project < ActiveRecord::Base
# reserved words # reserved words
validates_exclusion_of :identifier, :in => %w( new ) validates_exclusion_of :identifier, :in => %w( new )
before_destroy :delete_all_members before_destroy :delete_all_members, :destroy_children
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } } named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"} named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
@@ -499,6 +499,13 @@ class Project < ActiveRecord::Base
private private
# Destroys children before destroying self
def destroy_children
children.each do |child|
child.destroy
end
end
# Copies wiki from +project+ # Copies wiki from +project+
def copy_wiki(project) def copy_wiki(project)
# Check that the source project has a wiki first # Check that the source project has a wiki first
+2
View File
@@ -15,6 +15,7 @@
<% end %> <% end %>
&nbsp; &nbsp;
<div class="autoscroll">
<table class="list"> <table class="list">
<thead><tr> <thead><tr>
<th><%=l(:label_project)%></th> <th><%=l(:label_project)%></th>
@@ -40,5 +41,6 @@
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
</div>
<% html_title(l(:label_project_plural)) -%> <% html_title(l(:label_project_plural)) -%>
-2
View File
@@ -1,7 +1,5 @@
<h2><%= link_to l(:label_group_plural), groups_path %> &#187; <%= l(:label_group_new) %></h2> <h2><%= link_to l(:label_group_plural), groups_path %> &#187; <%= l(:label_group_new) %></h2>
<%= error_messages_for :group %>
<% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %> <% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %> <%= render :partial => 'form', :locals => { :f => f } %>
<p><%= f.submit l(:button_create) %></p> <p><%= f.submit l(:button_create) %></p>
+2
View File
@@ -1,5 +1,6 @@
<% form_tag({}) do -%> <% form_tag({}) do -%>
<%= hidden_field_tag 'back_url', url_for(params) %> <%= hidden_field_tag 'back_url', url_for(params) %>
<div class="autoscroll">
<table class="list issues"> <table class="list issues">
<thead><tr> <thead><tr>
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;', <th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
@@ -31,4 +32,5 @@
<% end -%> <% end -%>
</tbody> </tbody>
</table> </table>
</div>
<% end -%> <% end -%>
+1 -1
View File
@@ -73,7 +73,7 @@
</div> </div>
<% if @changesets.any? && User.current.allowed_to?(:view_changesets, @project) %> <% if @changesets.any? %>
<div id="issue-changesets"> <div id="issue-changesets">
<h3><%=l(:label_associated_revisions)%></h3> <h3><%=l(:label_associated_revisions)%></h3>
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %> <%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="contextual"> <div class="contextual">
<%= watcher_tag(@topic, User.current) %> <%= watcher_tag(@topic, User.current) %>
<%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment' %> <%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment') unless @topic.locked? %>
<%= link_to(l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit') if @message.editable_by?(User.current) %> <%= link_to(l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit') if @message.editable_by?(User.current) %>
<%= link_to(l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') if @message.destroyable_by?(User.current) %> <%= link_to(l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') if @message.destroyable_by?(User.current) %>
</div> </div>
@@ -24,7 +24,7 @@
<% @replies.each do |message| %> <% @replies.each do |message| %>
<div class="message reply" id="<%= "message-#{message.id}" %>"> <div class="message reply" id="<%= "message-#{message.id}" %>">
<div class="contextual"> <div class="contextual">
<%= link_to_remote_if_authorized image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote) %> <%= link_to_remote_if_authorized(image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote)) unless @topic.locked? %>
<%= link_to(image_tag('edit.png'), {:action => 'edit', :id => message}, :title => l(:button_edit)) if message.editable_by?(User.current) %> <%= link_to(image_tag('edit.png'), {:action => 'edit', :id => message}, :title => l(:button_edit)) if message.editable_by?(User.current) %>
<%= link_to(image_tag('delete.png'), {:action => 'destroy', :id => message}, :method => :post, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) if message.destroyable_by?(User.current) %> <%= link_to(image_tag('delete.png'), {:action => 'destroy', :id => message}, :method => :post, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) if message.destroyable_by?(User.current) %>
</div> </div>
+1 -1
View File
@@ -1,7 +1,7 @@
<h3><%= l(:label_calendar) %></h3> <h3><%= l(:label_calendar) %></h3>
<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week) <% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week)
calendar.events = Issue.find :all, calendar.events = Issue.visible.find :all,
:conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt], :conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt],
:include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %> :include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %>
+2 -1
View File
@@ -15,6 +15,7 @@
<% end %> <% end %>
&nbsp; &nbsp;
<div class="autoscroll">
<table class="list"> <table class="list">
<thead><tr> <thead><tr>
<%= sort_header_tag('login', :caption => l(:field_login)) %> <%= sort_header_tag('login', :caption => l(:field_login)) %>
@@ -41,7 +42,7 @@
<% end -%> <% end -%>
</tbody> </tbody>
</table> </table>
</div>
<p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p> <p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
<% html_title(l(:label_user_plural)) -%> <% html_title(l(:label_user_plural)) -%>
+2
View File
@@ -25,6 +25,7 @@
<% form_tag({}, :id => 'workflow_form' ) do %> <% form_tag({}, :id => 'workflow_form' ) do %>
<%= hidden_field_tag 'tracker_id', @tracker.id %> <%= hidden_field_tag 'tracker_id', @tracker.id %>
<%= hidden_field_tag 'role_id', @role.id %> <%= hidden_field_tag 'role_id', @role.id %>
<div class="autoscroll">
<table class="list"> <table class="list">
<thead> <thead>
<tr> <tr>
@@ -52,6 +53,7 @@
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
</div>
<p><%= check_all_links 'workflow_form' %></p> <p><%= check_all_links 'workflow_form' %></p>
<%= submit_tag l(:button_save) %> <%= submit_tag l(:button_save) %>
+6
View File
@@ -876,3 +876,9 @@ bg:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -900,3 +900,8 @@ bs:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -879,3 +879,8 @@ ca:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -882,3 +882,8 @@ cs:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -902,3 +902,8 @@ da:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -902,3 +902,8 @@ de:
Sie sind dabei, einige oder alle ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr sehen oder editieren dürfen. Sie sind dabei, einige oder alle ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr sehen oder editieren dürfen.
Sind Sie wirklich sicher, dass Sie dies tun möchten? Sind Sie wirklich sicher, dass Sie dies tun möchten?
label_close_versions: Vollständige Versionen schließen label_close_versions: Vollständige Versionen schließen
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -882,3 +882,8 @@ el:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+6
View File
@@ -329,12 +329,14 @@ en:
setting_issue_done_ratio_issue_status: Use the issue status setting_issue_done_ratio_issue_status: Use the issue status
setting_start_of_week: Start calendars on setting_start_of_week: Start calendars on
setting_rest_api_enabled: Enable REST web service setting_rest_api_enabled: Enable REST web service
setting_cache_formatted_text: Cache formatted text
permission_add_project: Create project permission_add_project: Create project
permission_add_subprojects: Create subprojects permission_add_subprojects: Create subprojects
permission_edit_project: Edit project permission_edit_project: Edit project
permission_select_project_modules: Select project modules permission_select_project_modules: Select project modules
permission_manage_members: Manage members permission_manage_members: Manage members
permission_manage_project_activities: Manage project activities
permission_manage_versions: Manage versions permission_manage_versions: Manage versions
permission_manage_categories: Manage issue categories permission_manage_categories: Manage issue categories
permission_view_issues: View Issues permission_view_issues: View Issues
@@ -382,6 +384,7 @@ en:
permission_edit_own_messages: Edit own messages permission_edit_own_messages: Edit own messages
permission_delete_messages: Delete messages permission_delete_messages: Delete messages
permission_delete_own_messages: Delete own messages permission_delete_own_messages: Delete own messages
permission_export_wiki_pages: Export wiki pages
project_module_issue_tracking: Issue tracking project_module_issue_tracking: Issue tracking
project_module_time_tracking: Time tracking project_module_time_tracking: Time tracking
@@ -662,6 +665,8 @@ en:
label_board: Forum label_board: Forum
label_board_new: New forum label_board_new: New forum
label_board_plural: Forums label_board_plural: Forums
label_board_locked: Locked
label_board_sticky: Sticky
label_topic_plural: Topics label_topic_plural: Topics
label_message_plural: Messages label_message_plural: Messages
label_message_last: Last message label_message_last: Last message
@@ -880,3 +885,4 @@ en:
enumeration_doc_categories: Document categories enumeration_doc_categories: Document categories
enumeration_activities: Activities (time tracking) enumeration_activities: Activities (time tracking)
enumeration_system_activity: System Activity enumeration_system_activity: System Activity
+5
View File
@@ -926,3 +926,8 @@ es:
Está a punto de eliminar algún o todos sus permisos y podría perder la posibilidad de modificar este proyecto tras hacerlo. Está a punto de eliminar algún o todos sus permisos y podría perder la posibilidad de modificar este proyecto tras hacerlo.
¿Está seguro de querer continuar? ¿Está seguro de querer continuar?
label_close_versions: Cerrar versiones completadas label_close_versions: Cerrar versiones completadas
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -912,3 +912,8 @@ fi:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -352,6 +352,7 @@ fr:
setting_rest_api_enabled: Activer l'API REST setting_rest_api_enabled: Activer l'API REST
setting_gravatar_default: Image Gravatar par défaut setting_gravatar_default: Image Gravatar par défaut
setting_start_of_week: Jour de début des calendriers setting_start_of_week: Jour de début des calendriers
setting_cache_formatted_text: Mettre en cache le texte formaté
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
@@ -405,6 +406,8 @@ fr:
permission_edit_own_messages: Modifier ses propres messages permission_edit_own_messages: Modifier ses propres messages
permission_delete_messages: Supprimer les messages permission_delete_messages: Supprimer les messages
permission_delete_own_messages: Supprimer ses propres messages permission_delete_own_messages: Supprimer ses propres messages
permission_export_wiki_pages: Exporter les pages
permission_manage_project_activities: Gérer les activités
project_module_issue_tracking: Suivi des demandes project_module_issue_tracking: Suivi des demandes
project_module_time_tracking: Suivi du temps passé project_module_time_tracking: Suivi du temps passé
@@ -903,3 +906,5 @@ fr:
text_journal_deleted: "{{label}} {{old}} supprimé" text_journal_deleted: "{{label}} {{old}} supprimé"
text_journal_added: "{{label}} {{value}} ajouté" text_journal_added: "{{label}} {{value}} ajouté"
enumeration_system_activity: Activité système enumeration_system_activity: Activité système
label_board_sticky: Sticky
label_board_locked: Verrouillé
+5
View File
@@ -902,3 +902,8 @@ gl:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -886,3 +886,8 @@ he:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -889,3 +889,8 @@ hr:
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -907,3 +907,8 @@
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -894,3 +894,8 @@ id:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+6
View File
@@ -889,3 +889,9 @@ it:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+10 -5
View File
@@ -64,8 +64,8 @@ ja:
one: "1年以上" one: "1年以上"
other: "{{count}}年以上" other: "{{count}}年以上"
almost_x_years: almost_x_years:
one: "almost 1 year" one: "ほぼ1年"
other: "almost {{count}} years" other: "ほぼ{{count}}年"
number: number:
format: format:
@@ -321,6 +321,7 @@ ja:
setting_plain_text_mail: プレインテキストのみ(HTMLなし) setting_plain_text_mail: プレインテキストのみ(HTMLなし)
setting_host_name: ホスト名 setting_host_name: ホスト名
setting_text_formatting: テキストの書式 setting_text_formatting: テキストの書式
setting_cache_formatted_text: 書式化されたテキストをキャッシュする
setting_wiki_compression: Wiki履歴を圧縮する setting_wiki_compression: Wiki履歴を圧縮する
setting_feeds_limit: フィード内容の上限 setting_feeds_limit: フィード内容の上限
setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
@@ -398,6 +399,7 @@ ja:
permission_rename_wiki_pages: Wikiページ名の変更 permission_rename_wiki_pages: Wikiページ名の変更
permission_delete_wiki_pages: Wikiページの削除 permission_delete_wiki_pages: Wikiページの削除
permission_view_wiki_pages: Wikiの閲覧 permission_view_wiki_pages: Wikiの閲覧
permission_export_wiki_pages: Wikiページを他の形式に出力
permission_view_wiki_edits: Wiki履歴の閲覧 permission_view_wiki_edits: Wiki履歴の閲覧
permission_edit_wiki_pages: Wikiページの編集 permission_edit_wiki_pages: Wikiページの編集
permission_delete_wiki_pages_attachments: 添付ファイルの削除 permission_delete_wiki_pages_attachments: 添付ファイルの削除
@@ -534,6 +536,7 @@ ja:
label_version_new: 新しいバージョン label_version_new: 新しいバージョン
label_version_plural: バージョン label_version_plural: バージョン
label_confirmation: 確認 label_confirmation: 確認
label_close_versions: 完了したバージョンを終了にする
label_export_to: '他の形式に出力:' label_export_to: '他の形式に出力:'
label_read: 読む... label_read: 読む...
label_public_projects: 公開プロジェクト label_public_projects: 公開プロジェクト
@@ -587,8 +590,8 @@ ja:
label_query_new: 新しいクエリ label_query_new: 新しいクエリ
label_filter_add: フィルタ追加 label_filter_add: フィルタ追加
label_filter_plural: フィルタ label_filter_plural: フィルタ
label_equals: 含む label_equals: 等しい
label_not_equals: 含まない label_not_equals: 等しくない
label_in_less_than: が今日から○日後以前 label_in_less_than: が今日から○日後以前
label_in_more_than: が今日から○日後以降 label_in_more_than: が今日から○日後以降
label_greater_or_equal: 以上 label_greater_or_equal: 以上
@@ -692,6 +695,8 @@ ja:
label_board: フォーラム label_board: フォーラム
label_board_new: 新しいフォーラム label_board_new: 新しいフォーラム
label_board_plural: フォーラム label_board_plural: フォーラム
label_board_sticky: スティッキー
label_board_locked: ロック
label_topic_plural: トピック label_topic_plural: トピック
label_message_plural: メッセージ label_message_plural: メッセージ
label_message_last: 最新のメッセージ label_message_last: 最新のメッセージ
@@ -910,4 +915,4 @@ ja:
enumeration_doc_categories: 文書カテゴリ enumeration_doc_categories: 文書カテゴリ
enumeration_activities: 作業分類 (時間トラッキング) enumeration_activities: 作業分類 (時間トラッキング)
enumeration_system_activity: システム作業分類 enumeration_system_activity: システム作業分類
label_close_versions: Close completed versions permission_manage_project_activities: Manage project activities
+27 -22
View File
@@ -2,7 +2,7 @@
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/ # by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
# by John Hwang (jhwang@tavon.org),http://github.com/tavon # by John Hwang (jhwang@tavon.org),http://github.com/tavon
# by Yonghwan SO(please insert your email), last update at 2009-09-11 # by Yonghwan SO(please insert your email), last update at 2009-09-11
# last update at 2009-09-11 by Kihyun Yoon # last update at 2010-01-23 by Kihyun Yoon
ko: ko:
date: date:
formats: formats:
@@ -65,8 +65,8 @@ ko:
one: "일년 이상" one: "일년 이상"
other: "{{count}}년 이상" other: "{{count}}년 이상"
almost_x_years: almost_x_years:
one: "almost 1 year" one: "약 1년"
other: "almost {{count}} years" other: "약 {{count}}년"
prompts: prompts:
year: "년" year: "년"
month: "월" month: "월"
@@ -182,8 +182,8 @@ ko:
general_lang_name: '한국어(Korean)' general_lang_name: '한국어(Korean)'
general_csv_separator: ',' general_csv_separator: ','
general_csv_decimal_separator: '.' general_csv_decimal_separator: '.'
general_csv_encoding: UTF-8 general_csv_encoding: CP949
general_pdf_encoding: UTF-8 general_pdf_encoding: CP949
general_first_day_of_week: '7' general_first_day_of_week: '7'
notice_account_updated: 계정이 성공적으로 변경되었습니다. notice_account_updated: 계정이 성공적으로 변경되었습니다.
@@ -709,7 +709,7 @@ ko:
label_language_based: 언어설정에 따름 label_language_based: 언어설정에 따름
label_sort_by: "{{value}}(으)로 정렬" label_sort_by: "{{value}}(으)로 정렬"
label_send_test_email: 테스트 메일 보내기 label_send_test_email: 테스트 메일 보내기
label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성됨 " label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성되었습니다."
label_module_plural: 모듈 label_module_plural: 모듈
label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함" label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함"
label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경" label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경"
@@ -925,20 +925,25 @@ ko:
setting_start_of_week: 달력 시작 요일 setting_start_of_week: 달력 시작 요일
permission_view_issues: 일감 보기 permission_view_issues: 일감 보기
label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기 label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기
label_revision_id: Revision {{value}} label_revision_id: 개정판 {{value}}
label_api_access_key: API access key label_api_access_key: API 접근키
label_api_access_key_created_on: API access key created {{value}} ago label_api_access_key_created_on: API 접근키가 {{value}} 전에 생성되었습니다.
label_feeds_access_key: RSS access key label_feeds_access_key: RSS 접근키
notice_api_access_key_reseted: Your API access key was reset. notice_api_access_key_reseted: API 접근키가 초기화되었습니다.
setting_rest_api_enabled: Enable REST web service setting_rest_api_enabled: REST 웹서비스 활성화
label_missing_api_access_key: Missing an API access key label_missing_api_access_key: API 접근키가 없습니다.
label_missing_feeds_access_key: Missing a RSS access key label_missing_feeds_access_key: RSS 접근키가 없습니다.
button_show: Show button_show: 보기
text_line_separated: Multiple values allowed (one line for each value). text_line_separated: 여러 값이 허용됨(값 마다 한 줄씩)
setting_mail_handler_body_delimiters: Truncate emails after one of these lines setting_mail_handler_body_delimiters: 메일 본문 구분자
permission_add_subprojects: Create subprojects permission_add_subprojects: 하위 프로젝트 만들기
label_subproject_new: New subproject label_subproject_new: 새 하위 프로젝트
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. 권한들 일부 또는 전부를 막 삭제하려고 하고 있습니다. 그렇게 되면 이 프로젝트를 더이상 수정할 수 없게 됩니다.
Are you sure you want to continue? 계속하시겠습니까?
label_close_versions: Close completed versions label_close_versions: 완료된 버전 닫기
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -950,3 +950,8 @@ lt:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -864,3 +864,8 @@ nl:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -877,3 +877,8 @@
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -907,3 +907,8 @@ pl:
version_status_locked: zablokowana version_status_locked: zablokowana
version_status_open: otwarta version_status_open: otwarta
label_board_sticky: Przyklejona
label_board_locked: Zamknięta
permission_export_wiki_pages: Eksport stron wiki
permission_manage_project_activities: Zarządzanie aktywnościami projektu
setting_cache_formatted_text: Cache formatted text
+13 -7
View File
@@ -901,11 +901,17 @@ pt-BR:
setting_rest_api_enabled: Habilitdar REST web service setting_rest_api_enabled: Habilitdar 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
text_line_separated: Multiple values allowed (one line for each value). text_line_separated: Múltiplos valores permitidos (uma linha para cada valor).
setting_mail_handler_body_delimiters: Truncate emails after one of these lines setting_mail_handler_body_delimiters: Truncar e-mails após uma destas linhas
permission_add_subprojects: Create subprojects permission_add_subprojects: Criar subprojetos
label_subproject_new: New subproject label_subproject_new: Novo subprojeto
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. Você está para remover algumas de suas próprias permissões e pode não mais estar apto a editar este projeto após esta operação.
Are you sure you want to continue? Você tem certeza que deseja continuar?
label_close_versions: Close completed versions label_close_versions: Fechar versões concluídas
label_board_sticky: Marcado
label_board_locked: Travado
label_change_log: Registro de alterações
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -894,3 +894,8 @@ pt:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -879,3 +879,8 @@ ro:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+9 -4
View File
@@ -650,7 +650,7 @@ ru:
label_send_information: Отправить пользователю информацию по учетной записи label_send_information: Отправить пользователю информацию по учетной записи
label_send_test_email: Послать email для проверки label_send_test_email: Послать email для проверки
label_settings: Настройки label_settings: Настройки
label_show_completed_versions: Показать завершенную версию label_show_completed_versions: Показывать завершенные версии
label_sort: Сортировать label_sort: Сортировать
label_sort_by: "Сортировать по {{value}}" label_sort_by: "Сортировать по {{value}}"
label_sort_higher: Вверх label_sort_higher: Вверх
@@ -941,7 +941,7 @@ ru:
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: заблокирован
version_status_open: открыт version_status_open: открыт
@@ -974,7 +974,7 @@ ru:
label_api_access_key: Ключ доступа к API label_api_access_key: Ключ доступа к API
text_line_separated: Разрешено несколько значений (по одному значению в строку). text_line_separated: Разрешено несколько значений (по одному значению в строку).
label_revision_id: Ревизия {{value}} label_revision_id: Ревизия {{value}}
permission_view_issues: Показать проблемы permission_view_issues: Просмотр задач
label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере
label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад
label_feeds_access_key: Ключ доступа к RSS label_feeds_access_key: Ключ доступа к RSS
@@ -984,9 +984,14 @@ ru:
label_missing_api_access_key: Отсутствует ключ доступа к API label_missing_api_access_key: Отсутствует ключ доступа к API
label_missing_feeds_access_key: Отсутствует ключ доступа к RSS label_missing_feeds_access_key: Отсутствует ключ доступа к RSS
setting_mail_handler_body_delimiters: Урезать письмо после одной из этих строк setting_mail_handler_body_delimiters: Урезать письмо после одной из этих строк
permission_add_subprojects: Создать подпроекты permission_add_subprojects: Создание подпроектов
label_subproject_new: Новый подпроект label_subproject_new: Новый подпроект
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
Вы собираетесь удалить некоторые или все права, из-за чего могут пропасть права на редактирование этого проекта. Вы собираетесь удалить некоторые или все права, из-за чего могут пропасть права на редактирование этого проекта.
Продолжить? Продолжить?
label_close_versions: Закрыть завершенные версии label_close_versions: Закрыть завершенные версии
label_board_sticky: Прикреплена
label_board_locked: Заблокирована
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -881,3 +881,8 @@ sk:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -878,3 +878,8 @@ sl:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -897,3 +897,8 @@
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -713,6 +713,8 @@ sv:
label_board: Forum label_board: Forum
label_board_new: Nytt forum label_board_new: Nytt forum
label_board_plural: Forum label_board_plural: Forum
label_board_locked: Låst
label_board_sticky: Sticky
label_topic_plural: Ämnen label_topic_plural: Ämnen
label_message_plural: Meddelanden label_message_plural: Meddelanden
label_message_last: Senaste meddelande label_message_last: Senaste meddelande
@@ -931,3 +933,6 @@ sv:
enumeration_doc_categories: Dokumentkategorier enumeration_doc_categories: Dokumentkategorier
enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_activities: Aktiviteter (tidsuppföljning)
enumeration_system_activity: Systemaktivitet enumeration_system_activity: Systemaktivitet
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -879,3 +879,8 @@ th:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -909,3 +909,8 @@ tr:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -878,3 +878,8 @@ uk:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -941,3 +941,8 @@ vi:
You are about to remove some or all of your permissions and may no longer be able to edit this project after that. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Are you sure you want to continue? Are you sure you want to continue?
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+5
View File
@@ -755,6 +755,8 @@
label_board: 論壇 label_board: 論壇
label_board_new: 建立新論壇 label_board_new: 建立新論壇
label_board_plural: 論壇 label_board_plural: 論壇
label_board_locked: 鎖定
label_board_sticky: 置頂
label_topic_plural: 討論主題 label_topic_plural: 討論主題
label_message_plural: 訊息 label_message_plural: 訊息
label_message_last: 上一封訊息 label_message_last: 上一封訊息
@@ -973,3 +975,6 @@
enumeration_doc_categories: 文件分類 enumeration_doc_categories: 文件分類
enumeration_activities: 活動 (時間追蹤) enumeration_activities: 活動 (時間追蹤)
enumeration_system_activity: 系統活動 enumeration_system_activity: 系統活動
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+6
View File
@@ -904,3 +904,9 @@ zh:
enumeration_doc_categories: 文档类别 enumeration_doc_categories: 文档类别
enumeration_activities: 活动(时间跟踪) enumeration_activities: 活动(时间跟踪)
enumeration_system_activity: 系统活动 enumeration_system_activity: 系统活动
label_board_sticky: Sticky
label_board_locked: Locked
permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Manage project activities
+15 -1
View File
@@ -4,7 +4,21 @@ Redmine - project management software
Copyright (C) 2006-2010 Jean-Philippe Lang Copyright (C) 2006-2010 Jean-Philippe Lang
http://www.redmine.org/ http://www.redmine.org/
== 0.9.1 == 2010-02-07 v0.9.2
* Fixed: Sub-project repository commits not displayed on parent project issues
* Fixed: Potential security leak on my page calendar
* Fixed: Project tree structure is broken by deleting the project with the subproject
* Fixed: Error message shown duplicated when creating a new group
* Fixed: Firefox cuts off large pages
* Fixed: Invalid format parameter returns a DoubleRenderError on issues index
* Fixed: Unnecessary Quote button on locked forum message
* Fixed: Error raised when trying to view the gantt or calendar with a grouped query
* Fixed: PDF support for Korean locale
* Fixed: Deprecation warning in extra/svn/reposman.rb
== 2010-01-30 v0.9.1
* Vertical alignment for inline images in formatted text set to 'middle' * Vertical alignment for inline images in formatted text set to 'middle'
* Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm" * Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
+1 -1
View File
@@ -175,7 +175,7 @@ unless File.directory?($repos_base)
end end
begin begin
require 'activeresource' require 'active_resource'
rescue LoadError rescue LoadError
log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true) log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
end end
+5
View File
@@ -35,6 +35,11 @@ module Redmine
super() super()
set_language_if_valid lang set_language_if_valid lang
case current_language.to_s.downcase case current_language.to_s.downcase
when 'ko'
extend(PDF_Korean)
AddUHCFont()
@font_for_content = 'UHC'
@font_for_footer = 'UHC'
when 'ja' when 'ja'
extend(PDF_Japanese) extend(PDF_Japanese)
AddSJISFont() AddSJISFont()
+1 -1
View File
@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc: module VERSION #:nodoc:
MAJOR = 0 MAJOR = 0
MINOR = 9 MINOR = 9
TINY = 1 TINY = 2
# Branch values: # Branch values:
# * official release: nil # * official release: nil
+1 -1
View File
@@ -75,7 +75,7 @@ h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; } #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;} * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
html>body #content { min-height: 600px; overflow: auto; } html>body #content { min-height: 600px; }
* html body #content { height: 600px; } /* IE */ * html body #content { height: 600px; } /* IE */
#main.nosidebar #sidebar{ display: none; } #main.nosidebar #sidebar{ display: none; }
+21
View File
@@ -0,0 +1,21 @@
class Attachment < ActiveRecord::Base
generator_for :container, :method => :generate_project
generator_for :file, :method => :generate_file
generator_for :author, :method => :generate_author
def self.generate_project
Project.generate!
end
def self.generate_author
User.generate_with_protected!
end
def self.generate_file
@file = 'a_file.png'
@file.stubs(:original_filename).returns('a_file.png')
@file.stubs(:content_type).returns('image/png')
@file.stubs(:read).returns(false)
@file
end
end
+9
View File
@@ -0,0 +1,9 @@
class AuthSource < ActiveRecord::Base
generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Auth0'
@last_name.succ!
@last_name
end
end
+21
View File
@@ -0,0 +1,21 @@
class Board < ActiveRecord::Base
generator_for :name, :method => :next_name
generator_for :description, :method => :next_description
generator_for :project, :method => :generate_project
def self.next_name
@last_name ||= 'A Forum'
@last_name.succ!
@last_name
end
def self.next_description
@last_description ||= 'Some description here'
@last_description.succ!
@last_description
end
def self.generate_project
Project.generate!
end
end
+15
View File
@@ -0,0 +1,15 @@
class Change < ActiveRecord::Base
generator_for :action => 'A'
generator_for :path, :method => :next_path
generator_for :changeset, :method => :generate_changeset
def self.next_path
@last_path ||= 'test/dir/aaa0001'
@last_path.succ!
@last_path
end
def self.generate_changeset
Changeset.generate!
end
end
+15
View File
@@ -0,0 +1,15 @@
class Changeset < ActiveRecord::Base
generator_for :revision, :method => :next_revision
generator_for :committed_on => Date.today
generator_for :repository, :method => :generate_repository
def self.next_revision
@last_revision ||= '1'
@last_revision.succ!
@last_revision
end
def self.generate_repository
Repository::Subversion.generate!
end
end
+13
View File
@@ -0,0 +1,13 @@
class Comment < ActiveRecord::Base
generator_for :commented, :method => :generate_news
generator_for :author, :method => :generate_author
generator_for :comments => 'What great news this is.'
def self.generate_news
News.generate!
end
def self.generate_author
User.generate_with_protected!
end
end
+5
View File
@@ -1,2 +1,7 @@
class CustomValue < ActiveRecord::Base class CustomValue < ActiveRecord::Base
generator_for :custom_field, :method => :generate_custom_field
def self.generate_custom_field
CustomField.generate!
end
end end
+9
View File
@@ -0,0 +1,9 @@
class Document < ActiveRecord::Base
generator_for :title, :method => :next_title
def self.next_title
@last_title ||= 'Document001'
@last_title.succ!
@last_title
end
end
+10
View File
@@ -0,0 +1,10 @@
class EnabledModule < ActiveRecord::Base
generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'module_001'
@last_name.succ!
@last_name
end
end
+10
View File
@@ -0,0 +1,10 @@
class Group < Principal
generator_for :lastname, :method => :next_lastname
def self.next_lastname
@last_lastname ||= 'Group'
@last_lastname.succ!
@last_lastname
end
end
@@ -0,0 +1,9 @@
class IssueCategory < ActiveRecord::Base
generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Category 0001'
@last_name.succ!
@last_name
end
end
+13
View File
@@ -0,0 +1,13 @@
class Journal < ActiveRecord::Base
generator_for :journalized, :method => :generate_issue
generator_for :user, :method => :generate_user
def self.generate_issue
project = Project.generate!
Issue.generate_for_project!(project)
end
def self.generate_user
User.generate_with_protected!
end
end
+10
View File
@@ -1,2 +1,12 @@
class Member < ActiveRecord::Base class Member < ActiveRecord::Base
generator_for :roles, :method => :generate_roles
generator_for :principal, :method => :generate_user
def self.generate_roles
[Role.generate!]
end
def self.generate_user
User.generate_with_protected!
end
end end
+12
View File
@@ -0,0 +1,12 @@
class MemberRole < ActiveRecord::Base
generator_for :member, :method => :generate_member
generator_for :role, :method => :generate_role
def self.generate_role
Role.generate!
end
def self.generate_member
Member.generate!
end
end
+21
View File
@@ -0,0 +1,21 @@
class Message < ActiveRecord::Base
generator_for :subject, :method => :next_subject
generator_for :content, :method => :next_content
generator_for :board, :method => :generate_board
def self.next_subject
@last_subject ||= 'A Message'
@last_subject.succ!
@last_subject
end
def self.next_content
@last_content ||= 'Some content here'
@last_content.succ!
@last_content
end
def self.generate_board
Board.generate!
end
end
+16
View File
@@ -0,0 +1,16 @@
class News < ActiveRecord::Base
generator_for :title, :method => :next_title
generator_for :description, :method => :next_description
def self.next_title
@last_title ||= 'A New Item'
@last_title.succ!
@last_title
end
def self.next_description
@last_description ||= 'Some content here'
@last_description.succ!
@last_description
end
end
+11
View File
@@ -0,0 +1,11 @@
class Repository < ActiveRecord::Base
generator_for :type => 'Subversion'
generator_for :url, :method => :next_url
def self.next_url
@last_url ||= 'file:///test/svn'
@last_url.succ!
@last_url
end
end
@@ -0,0 +1,11 @@
class Repository::Subversion < Repository
generator_for :type, :method => 'Subversion'
generator_for :url, :method => :next_url
def self.next_url
@last_url ||= 'file:///test/svn'
@last_url.succ!
@last_url
end
end
+5
View File
@@ -1,5 +1,10 @@
class TimeEntry < ActiveRecord::Base class TimeEntry < ActiveRecord::Base
generator_for(:spent_on) { Date.today } generator_for(:spent_on) { Date.today }
generator_for(:hours) { (rand * 10).round(2) } # 0.01 to 9.99 generator_for(:hours) { (rand * 10).round(2) } # 0.01 to 9.99
generator_for :user, :method => :generate_user
def self.generate_user
User.generate_with_protected!
end
end end
+7
View File
@@ -0,0 +1,7 @@
class Watcher < ActiveRecord::Base
generator_for :user, :method => :generate_user
def self.generate_user
User.generate_with_protected!
end
end
+8
View File
@@ -0,0 +1,8 @@
class WikiContent < ActiveRecord::Base
generator_for :text => 'Some content'
generator_for :page, :method => :generate_page
def self.generate_page
WikiPage.generate!
end
end
+8
View File
@@ -0,0 +1,8 @@
class Wiki < ActiveRecord::Base
generator_for :start_page => 'Start'
generator_for :project, :method => :generate_project
def self.generate_project
Project.generate!
end
end
+14
View File
@@ -0,0 +1,14 @@
class WikiPage < ActiveRecord::Base
generator_for :title, :method => :next_title
generator_for :wiki, :method => :generate_wiki
def self.next_title
@last_title ||= 'AWikiPage'
@last_title.succ!
@last_title
end
def self.generate_wiki
Wiki.generate!
end
end
+21
View File
@@ -0,0 +1,21 @@
class WikiRedirect < ActiveRecord::Base
generator_for :title, :method => :next_title
generator_for :redirects_to, :method => :next_redirects_to
generator_for :wiki, :method => :generate_wiki
def self.next_title
@last_title ||= 'AWikiPage'
@last_title.succ!
@last_title
end
def self.next_redirects_to
@last_redirect ||= '/a/path/000001'
@last_redirect.succ!
@last_redirect
end
def self.generate_wiki
Wiki.generate!
end
end
+1 -1
View File
@@ -44,7 +44,7 @@ custom_fields_003:
- Alpha - Alpha
- Planning - Planning
id: 3 id: 3
is_required: true is_required: false
field_format: list field_format: list
default_value: "" default_value: ""
editable: true editable: true
+16 -1
View File
@@ -1,14 +1,29 @@
module ObjectDaddyHelpers module ObjectDaddyHelpers
# TODO: The gem or official version of ObjectDaddy doesn't set
# protected attributes so they need to be wrapped.
def User.generate_with_protected(attributes={})
user = User.spawn_with_protected(attributes)
user.save
user
end
# TODO: The gem or official version of ObjectDaddy doesn't set # TODO: The gem or official version of ObjectDaddy doesn't set
# protected attributes so they need to be wrapped. # protected attributes so they need to be wrapped.
def User.generate_with_protected!(attributes={}) def User.generate_with_protected!(attributes={})
user = User.spawn_with_protected(attributes)
user.save!
user
end
# TODO: The gem or official version of ObjectDaddy doesn't set
# protected attributes so they need to be wrapped.
def User.spawn_with_protected(attributes={})
user = User.spawn(attributes) do |user| user = User.spawn(attributes) do |user|
user.login = User.next_login user.login = User.next_login
attributes.each do |attr,v| attributes.each do |attr,v|
user.send("#{attr}=", v) user.send("#{attr}=", v)
end end
end end
user.save!
user user
end end
+23
View File
@@ -74,6 +74,29 @@ class ChangesetTest < ActiveSupport::TestCase
assert_equal [1,2,3], c.issue_ids.sort assert_equal [1,2,3], c.issue_ids.sort
end end
def test_commit_referencing_a_subproject_issue
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'refs #5, a subproject issue')
c.scan_comment_for_issue_ids
assert_equal [5], c.issue_ids.sort
assert c.issues.first.project != c.project
end
def test_commit_referencing_a_parent_project_issue
# repository of child project
r = Repository::Subversion.create!(:project => Project.find(3), :url => 'svn://localhost/test')
c = Changeset.new(:repository => r,
:committed_on => Time.now,
:comments => 'refs #2, an issue of a parent project')
c.scan_comment_for_issue_ids
assert_equal [2], c.issue_ids.sort
assert c.issues.first.project != c.project
end
def test_previous def test_previous
changeset = Changeset.find_by_revision('3') changeset = Changeset.find_by_revision('3')
+58
View File
@@ -0,0 +1,58 @@
# Redmine - project management software
# Copyright (C) 2006-2010 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.dirname(__FILE__) + '/../test_helper'
class ProjectNestedSetTest < ActiveSupport::TestCase
def setup
Project.delete_all
end
def test_destroy_root_and_chldren_should_not_mess_up_the_tree
a = Project.create!(:name => 'Project A', :identifier => 'projecta')
a1 = Project.create!(:name => 'Project A1', :identifier => 'projecta1')
a2 = Project.create!(:name => 'Project A2', :identifier => 'projecta2')
a1.set_parent!(a)
a2.set_parent!(a)
b = Project.create!(:name => 'Project B', :identifier => 'projectb')
b1 = Project.create!(:name => 'Project B1', :identifier => 'projectb1')
b1.set_parent!(b)
a.reload
a1.reload
a2.reload
b.reload
b1.reload
assert_equal [nil, 1, 6], [a.parent_id, a.lft, a.rgt]
assert_equal [a.id, 2, 3], [a1.parent_id, a1.lft, a1.rgt]
assert_equal [a.id, 4, 5], [a2.parent_id, a2.lft, a2.rgt]
assert_equal [nil, 7, 10], [b.parent_id, b.lft, b.rgt]
assert_equal [b.id, 8, 9], [b1.parent_id, b1.lft, b1.rgt]
assert_difference 'Project.count', -3 do
a.destroy
end
b.reload
b1.reload
assert_equal [nil, 1, 4], [b.parent_id, b.lft, b.rgt]
assert_equal [b.id, 2, 3], [b1.parent_id, b1.lft, b1.rgt]
end
end
+5 -5
View File
@@ -139,13 +139,13 @@ UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 9
b2='LR' b2='LR'
else else
b2='' b2=''
if(border.index('L').nil?) if(border.to_s.index('L').nil?)
b2+='L' b2+='L'
end end
if(border.index('R').nil?) if(border.to_s.index('R').nil?)
b2+='R' b2+='R'
end end
b=border.index('T').nil? ? b2+'T' : b2 b=border.to_s.index('T').nil? ? b2+'T' : b2
end end
end end
sep=-1 sep=-1
@@ -178,7 +178,7 @@ UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 9
sep=i sep=i
ls=l ls=l
end end
l+=ascii ? cw[c.chr] : 1000 l+=(ascii ? cw[c.chr] : 1000) || 0
if(l>wmax) if(l>wmax)
#Automatic line break #Automatic line break
if(sep==-1 or i==j) if(sep==-1 or i==j)
@@ -202,7 +202,7 @@ UHC_widths={' ' => 333, '!' => 416, '"' => 416, '#' => 833, '$' => 625, '%' => 9
end end
end end
#Last chunk #Last chunk
if(border and not border.index('B').nil?) if(border and not border.to_s.index('B').nil?)
b+='B' b+='B'
end end
Cell(w,h,s[j,i-j],b,2,align,fill) Cell(w,h,s[j,i-j],b,2,align,fill)