Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82b5285c2d | ||
|
|
f5a6b0cf93 | ||
|
|
3cf0bd713d | ||
|
|
36bce52f63 | ||
|
|
94f5c73746 | ||
|
|
8b6fd63a59 | ||
|
|
ba6b822e97 | ||
|
|
b44044a76a | ||
|
|
eb3a4587c9 | ||
|
|
a8550ba8a6 | ||
|
|
0527e8cedf | ||
|
|
2a799e8367 | ||
|
|
3e9ad22fad | ||
|
|
a5bcdf6d2c | ||
|
|
3dcd5d746a | ||
|
|
971aa889f9 | ||
|
|
cdc1dfb1e7 | ||
|
|
30255b8054 | ||
|
|
97b697a678 | ||
|
|
8e87cd6f77 | ||
|
|
65bee7efa3 | ||
|
|
2325831d81 | ||
|
|
c7f8ea6a37 | ||
|
|
edc4f6d54b | ||
|
|
bf0046b5af | ||
|
|
3de4afe53a | ||
|
|
d15912eb6a | ||
|
|
656e651c33 | ||
|
|
9543e0a103 | ||
|
|
441f2f216f | ||
|
|
15228c9958 | ||
|
|
5f33a09320 | ||
|
|
7d77c3544a | ||
|
|
102c9afadf | ||
|
|
16ba6bcb77 | ||
|
|
df37e5cfab | ||
|
|
f58b86bbb8 | ||
|
|
95f68ba6d9 | ||
|
|
171c4b2747 | ||
|
|
860a6ce78d | ||
|
|
26d42c26fa | ||
|
|
c69c434609 | ||
|
|
9381d30ae8 | ||
|
|
136bf86307 | ||
|
|
07f42c53d0 | ||
|
|
22e143f0b3 | ||
|
|
1701de9123 | ||
|
|
0ce6793181 | ||
|
|
bacc44feab | ||
|
|
4f9a1cd614 | ||
|
|
44ed963a46 | ||
|
|
113316cf1e | ||
|
|
17ed97d580 | ||
|
|
19c52bc671 | ||
|
|
d15de8ee12 | ||
|
|
006c82267e | ||
|
|
887e7c6781 | ||
|
|
6280d9e9b2 | ||
|
|
3996d5f42e | ||
|
|
579abc1802 | ||
|
|
dc2efa503a | ||
|
|
0e6cdeb860 | ||
|
|
3b9ef033bf | ||
|
|
2ae54a0fc1 | ||
|
|
a87e6e1265 | ||
|
|
61b1146f9d | ||
|
|
c509c744fd | ||
|
|
1be21f2413 | ||
|
|
eaf430b630 | ||
|
|
d2789248f7 | ||
|
|
f08f09a9d3 | ||
|
|
2c2760d041 | ||
|
|
218e2f32ee | ||
|
|
f2b01aeb4d | ||
|
|
fabf54a368 | ||
|
|
6b07f86883 | ||
|
|
36d2ea9a6c | ||
|
|
2dca48be53 | ||
|
|
7678aa9445 | ||
|
|
9c355ee6c3 | ||
|
|
723030e40a | ||
|
|
e6ed112d9d |
@@ -1,7 +1,24 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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.
|
||||
|
||||
class ActivitiesController < ApplicationController
|
||||
menu_item :activity
|
||||
before_filter :find_optional_project
|
||||
accept_key_auth :index
|
||||
accept_rss_auth :index
|
||||
|
||||
def index
|
||||
@days = Setting.activity_days_default.to_i
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
require 'uri'
|
||||
require 'cgi'
|
||||
|
||||
class Unauthorized < Exception; end
|
||||
|
||||
class ApplicationController < ActionController::Base
|
||||
include Redmine::I18n
|
||||
|
||||
@@ -41,6 +43,7 @@ class ApplicationController < ActionController::Base
|
||||
protect_from_forgery
|
||||
|
||||
rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
|
||||
rescue_from ::Unauthorized, :with => :deny_access
|
||||
|
||||
include Redmine::Search::Controller
|
||||
include Redmine::MenuManager::MenuController
|
||||
@@ -68,11 +71,11 @@ class ApplicationController < ActionController::Base
|
||||
user = User.try_to_autologin(cookies[:autologin])
|
||||
session[:user_id] = user.id if user
|
||||
user
|
||||
elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
|
||||
elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth?
|
||||
# RSS key authentication does not start a session
|
||||
User.find_by_rss_key(params[:key])
|
||||
elsif Setting.rest_api_enabled? && api_request?
|
||||
if (key = api_key_from_request) && accept_key_auth_actions.include?(params[:action])
|
||||
elsif Setting.rest_api_enabled? && accept_api_auth?
|
||||
if (key = api_key_from_request)
|
||||
# Use API key
|
||||
User.find_by_api_key(key)
|
||||
else
|
||||
@@ -329,14 +332,41 @@ class ApplicationController < ActionController::Base
|
||||
@title = options[:title] || Setting.app_title
|
||||
render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
|
||||
end
|
||||
|
||||
|
||||
# TODO: remove in Redmine 1.4
|
||||
def self.accept_key_auth(*actions)
|
||||
actions = actions.flatten.map(&:to_s)
|
||||
write_inheritable_attribute('accept_key_auth_actions', actions)
|
||||
ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead."
|
||||
accept_rss_auth(*actions)
|
||||
end
|
||||
|
||||
# TODO: remove in Redmine 1.4
|
||||
def accept_key_auth_actions
|
||||
self.class.read_inheritable_attribute('accept_key_auth_actions') || []
|
||||
ActiveSupport::Deprecation.warn "ApplicationController.accept_key_auth_actions is deprecated and will be removed in Redmine 1.4. Use accept_rss_auth (or accept_api_auth) instead."
|
||||
self.class.accept_rss_auth
|
||||
end
|
||||
|
||||
def self.accept_rss_auth(*actions)
|
||||
if actions.any?
|
||||
write_inheritable_attribute('accept_rss_auth_actions', actions)
|
||||
else
|
||||
read_inheritable_attribute('accept_rss_auth_actions') || []
|
||||
end
|
||||
end
|
||||
|
||||
def accept_rss_auth?(action=action_name)
|
||||
self.class.accept_rss_auth.include?(action.to_sym)
|
||||
end
|
||||
|
||||
def self.accept_api_auth(*actions)
|
||||
if actions.any?
|
||||
write_inheritable_attribute('accept_api_auth_actions', actions)
|
||||
else
|
||||
read_inheritable_attribute('accept_api_auth_actions') || []
|
||||
end
|
||||
end
|
||||
|
||||
def accept_api_auth?(action=action_name)
|
||||
self.class.accept_api_auth.include?(action.to_sym)
|
||||
end
|
||||
|
||||
# Returns the number of objects that should be displayed
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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
|
||||
@@ -18,7 +18,7 @@
|
||||
class BoardsController < ApplicationController
|
||||
default_search_scope :messages
|
||||
before_filter :find_project, :find_board_if_available, :authorize
|
||||
accept_key_auth :index, :show
|
||||
accept_rss_auth :index, :show
|
||||
|
||||
helper :messages
|
||||
include MessagesHelper
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# redMine - project management software
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
|
||||
@@ -27,7 +27,8 @@ class IssuesController < ApplicationController
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
before_filter :check_for_default_issue_status, :only => [:new, :create]
|
||||
before_filter :build_new_issue_from_params, :only => [:new, :create]
|
||||
accept_key_auth :index, :show, :create, :update, :destroy
|
||||
accept_rss_auth :index, :show
|
||||
accept_api_auth :index, :show, :create, :update, :destroy
|
||||
|
||||
rescue_from Query::StatementInvalid, :with => :query_statement_invalid
|
||||
|
||||
@@ -301,6 +302,7 @@ private
|
||||
end
|
||||
|
||||
@issue.project = @project
|
||||
@issue.author = User.current
|
||||
# Tracker must be set before custom field values
|
||||
@issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
|
||||
if @issue.tracker.nil?
|
||||
@@ -314,7 +316,6 @@ private
|
||||
@issue.watcher_user_ids = params[:issue]['watcher_user_ids']
|
||||
end
|
||||
end
|
||||
@issue.author = User.current
|
||||
@priorities = IssuePriority.all
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current, true)
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ class JournalsController < ApplicationController
|
||||
before_filter :find_issue, :only => [:new]
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
before_filter :authorize, :only => [:new, :edit, :diff]
|
||||
accept_key_auth :index
|
||||
accept_rss_auth :index
|
||||
menu_item :issues
|
||||
|
||||
helper :issues
|
||||
|
||||
@@ -23,7 +23,8 @@ class NewsController < ApplicationController
|
||||
before_filter :find_project, :only => [:new, :create]
|
||||
before_filter :authorize, :except => [:index]
|
||||
before_filter :find_optional_project, :only => :index
|
||||
accept_key_auth :index
|
||||
accept_rss_auth :index
|
||||
accept_api_auth :index
|
||||
|
||||
helper :watchers
|
||||
|
||||
|
||||
@@ -24,7 +24,8 @@ class ProjectsController < ApplicationController
|
||||
before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy]
|
||||
before_filter :authorize_global, :only => [:new, :create]
|
||||
before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ]
|
||||
accept_key_auth :index, :show, :create, :update, :destroy
|
||||
accept_rss_auth :index
|
||||
accept_api_auth :index, :show, :create, :update, :destroy
|
||||
|
||||
after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller|
|
||||
if controller.request.post?
|
||||
|
||||
@@ -30,7 +30,7 @@ class RepositoriesController < ApplicationController
|
||||
before_filter :find_repository, :except => :edit
|
||||
before_filter :find_project, :only => :edit
|
||||
before_filter :authorize
|
||||
accept_key_auth :revisions
|
||||
accept_rss_auth :revisions
|
||||
|
||||
rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed
|
||||
|
||||
@@ -208,7 +208,7 @@ class RepositoriesController < ApplicationController
|
||||
User.current.preference.save
|
||||
end
|
||||
@cache_key = "repositories/diff/#{@repository.id}/" +
|
||||
Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")
|
||||
Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}-#{current_language}")
|
||||
unless read_fragment(@cache_key)
|
||||
@diff = @repository.diff(@path, @rev, @rev_to)
|
||||
show_error_not_found unless @diff
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2006 Jean-Philippe Lang
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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
|
||||
@@ -24,8 +24,8 @@ class SearchController < ApplicationController
|
||||
def index
|
||||
@question = params[:q] || ""
|
||||
@question.strip!
|
||||
@all_words = params[:all_words] || (params[:submit] ? false : true)
|
||||
@titles_only = !params[:titles_only].nil?
|
||||
@all_words = params[:all_words] ? params[:all_words].present? : true
|
||||
@titles_only = params[:titles_only] ? params[:titles_only].present? : false
|
||||
|
||||
projects_to_search =
|
||||
case params[:scope]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
# Copyright (C) 2006-2011 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
|
||||
@@ -22,7 +22,8 @@ class TimelogController < ApplicationController
|
||||
before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
|
||||
before_filter :authorize, :except => [:index]
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
accept_key_auth :index, :show, :create, :update, :destroy
|
||||
accept_rss_auth :index
|
||||
accept_api_auth :index, :show, :create, :update, :destroy
|
||||
|
||||
helper :sort
|
||||
include SortHelper
|
||||
@@ -67,13 +68,13 @@ class TimelogController < ApplicationController
|
||||
}
|
||||
format.api {
|
||||
@entry_count = TimeEntry.visible.count(:include => [:project, :issue], :conditions => cond.conditions)
|
||||
@entry_pages = Paginator.new self, @entry_count, per_page_option, params['page']
|
||||
@offset, @limit = api_offset_and_limit
|
||||
@entries = TimeEntry.visible.find(:all,
|
||||
:include => [:project, :activity, :user, {:issue => :tracker}],
|
||||
:conditions => cond.conditions,
|
||||
:order => sort_clause,
|
||||
:limit => @entry_pages.items_per_page,
|
||||
:offset => @entry_pages.current.offset)
|
||||
:limit => @limit,
|
||||
:offset => @offset)
|
||||
}
|
||||
format.atom {
|
||||
entries = TimeEntry.visible.find(:all,
|
||||
|
||||
@@ -20,7 +20,7 @@ class UsersController < ApplicationController
|
||||
|
||||
before_filter :require_admin, :except => :show
|
||||
before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership]
|
||||
accept_key_auth :index, :show, :create, :update, :destroy
|
||||
accept_api_auth :index, :show, :create, :update, :destroy
|
||||
|
||||
helper :sort
|
||||
include SortHelper
|
||||
|
||||
@@ -70,6 +70,7 @@ module QueriesHelper
|
||||
cond = "project_id IS NULL"
|
||||
cond << " OR project_id = #{@project.id}" if @project
|
||||
@query = Query.find(params[:query_id], :conditions => cond)
|
||||
raise ::Unauthorized unless @query.visible?
|
||||
@query.project = @project
|
||||
session[:query] = {:id => @query.id, :project_id => @query.project_id}
|
||||
sort_clear
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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
|
||||
@@ -57,7 +57,7 @@ module SearchHelper
|
||||
c = results_by_type[t]
|
||||
next if c == 0
|
||||
text = "#{type_label(t)} (#{c})"
|
||||
links << link_to(text, :q => params[:q], :titles_only => params[:title_only], :all_words => params[:all_words], :scope => params[:scope], t => 1)
|
||||
links << link_to(text, :q => params[:q], :titles_only => params[:titles_only], :all_words => params[:all_words], :scope => params[:scope], t => 1)
|
||||
end
|
||||
('<ul>' + links.map {|link| content_tag('li', link)}.join(' ') + '</ul>') unless links.empty?
|
||||
end
|
||||
|
||||
@@ -33,7 +33,9 @@ module SettingsHelper
|
||||
choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
|
||||
end
|
||||
setting_label(setting, options) +
|
||||
select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
|
||||
select_tag("settings[#{setting}]",
|
||||
options_for_select(choices, Setting.send(setting).to_s),
|
||||
options)
|
||||
end
|
||||
|
||||
def setting_multiselect(setting, choices, options={})
|
||||
@@ -44,10 +46,15 @@ module SettingsHelper
|
||||
hidden_field_tag("settings[#{setting}][]", '') +
|
||||
choices.collect do |choice|
|
||||
text, value = (choice.is_a?(Array) ? choice : [choice, choice])
|
||||
content_tag('label',
|
||||
check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
|
||||
content_tag(
|
||||
'label',
|
||||
check_box_tag(
|
||||
"settings[#{setting}][]",
|
||||
value,
|
||||
Setting.send(setting).include?(value)
|
||||
) + text.to_s,
|
||||
:class => 'block'
|
||||
)
|
||||
)
|
||||
end.join
|
||||
end
|
||||
|
||||
@@ -64,7 +71,7 @@ module SettingsHelper
|
||||
def setting_check_box(setting, options={})
|
||||
setting_label(setting, options) +
|
||||
hidden_field_tag("settings[#{setting}]", 0) +
|
||||
check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
|
||||
check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
|
||||
end
|
||||
|
||||
def setting_label(setting, options={})
|
||||
|
||||
@@ -32,6 +32,7 @@ class Enumeration < ActiveRecord::Base
|
||||
|
||||
named_scope :shared, :conditions => { :project_id => nil }
|
||||
named_scope :active, :conditions => { :active => true }
|
||||
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
|
||||
|
||||
def self.default
|
||||
# Creates a fake default scope so Enumeration.default will check
|
||||
|
||||
@@ -227,6 +227,13 @@ class Issue < ActiveRecord::Base
|
||||
@custom_field_values = nil
|
||||
result
|
||||
end
|
||||
|
||||
def description=(arg)
|
||||
if arg.is_a?(String)
|
||||
arg = arg.gsub(/(\r\n|\n|\r)/, "\r\n")
|
||||
end
|
||||
write_attribute(:description, arg)
|
||||
end
|
||||
|
||||
# Overrides attributes= so that tracker_id gets assigned first
|
||||
def attributes_with_tracker_first=(new_attributes, *args)
|
||||
@@ -870,10 +877,13 @@ class Issue < ActiveRecord::Base
|
||||
if @current_journal
|
||||
# attributes changes
|
||||
(Issue.column_names - %w(id root_id lft rgt lock_version created_on updated_on)).each {|c|
|
||||
before = @issue_before_change.send(c)
|
||||
after = send(c)
|
||||
next if before == after || (before.blank? && after.blank?)
|
||||
@current_journal.details << JournalDetail.new(:property => 'attr',
|
||||
:prop_key => c,
|
||||
:old_value => @issue_before_change.send(c),
|
||||
:value => send(c)) unless send(c)==@issue_before_change.send(c)
|
||||
:value => send(c))
|
||||
}
|
||||
# custom fields changes
|
||||
custom_values.each {|c|
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2006 Jean-Philippe Lang
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2011 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
|
||||
@@ -24,6 +24,8 @@ class IssueCategory < ActiveRecord::Base
|
||||
validates_uniqueness_of :name, :scope => [:project_id]
|
||||
validates_length_of :name, :maximum => 30
|
||||
|
||||
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
|
||||
|
||||
alias :destroy_without_reassign :destroy
|
||||
|
||||
# Destroy the category
|
||||
|
||||
@@ -47,7 +47,12 @@ class IssueRelation < ActiveRecord::Base
|
||||
if issue_from && issue_to
|
||||
errors.add :issue_to_id, :invalid if issue_from_id == issue_to_id
|
||||
errors.add :issue_to_id, :not_same_project unless issue_from.project_id == issue_to.project_id || Setting.cross_project_issue_relations?
|
||||
errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from
|
||||
#detect circular dependencies depending wether the relation should be reversed
|
||||
if TYPES.has_key?(relation_type) && TYPES[relation_type][:reverse]
|
||||
errors.add_to_base :circular_dependency if issue_from.all_dependent_issues.include? issue_to
|
||||
else
|
||||
errors.add_to_base :circular_dependency if issue_to.all_dependent_issues.include? issue_from
|
||||
end
|
||||
errors.add_to_base :cant_link_an_issue_with_a_descendant if issue_from.is_descendant_of?(issue_to) || issue_from.is_ancestor_of?(issue_to)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,6 +26,8 @@ class IssueStatus < ActiveRecord::Base
|
||||
validates_uniqueness_of :name
|
||||
validates_length_of :name, :maximum => 30
|
||||
validates_inclusion_of :default_done_ratio, :in => 0..100, :allow_nil => true
|
||||
|
||||
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
|
||||
|
||||
def after_save
|
||||
IssueStatus.update_all("is_default=#{connection.quoted_false}", ['id <> ?', id]) if self.is_default?
|
||||
|
||||
@@ -32,7 +32,6 @@ class Journal < ActiveRecord::Base
|
||||
:url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o.issue.id, :anchor => "change-#{o.id}"}}
|
||||
|
||||
acts_as_activity_provider :type => 'issues',
|
||||
:permission => :view_issues,
|
||||
:author_key => :user_id,
|
||||
:find_options => {:include => [{:issue => :project}, :details, :user],
|
||||
:conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" +
|
||||
|
||||
@@ -265,12 +265,12 @@ class MailHandler < ActionMailer::Base
|
||||
assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to)
|
||||
|
||||
attrs = {
|
||||
'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id),
|
||||
'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id),
|
||||
'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id),
|
||||
'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id),
|
||||
'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.named(k).first.try(:id),
|
||||
'status_id' => (k = get_keyword(:status)) && IssueStatus.named(k).first.try(:id),
|
||||
'priority_id' => (k = get_keyword(:priority)) && IssuePriority.named(k).first.try(:id),
|
||||
'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.named(k).first.try(:id),
|
||||
'assigned_to_id' => assigned_to.try(:id),
|
||||
'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id),
|
||||
'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.named(k).first.try(:id),
|
||||
'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
|
||||
'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'),
|
||||
'estimated_hours' => get_keyword(:estimated_hours, :override => true),
|
||||
|
||||
@@ -118,6 +118,11 @@ class Project < ActiveRecord::Base
|
||||
visible(user).find(:all, :limit => count, :order => "created_on DESC")
|
||||
end
|
||||
|
||||
# Returns true if the project is visible to +user+ or to the current user.
|
||||
def visible?(user=User.current)
|
||||
user.allowed_to?(:view_project, self)
|
||||
end
|
||||
|
||||
def self.visible_by(user=nil)
|
||||
ActiveSupport::Deprecation.warn "Project.visible_by is deprecated and will be removed in Redmine 1.3.0. Use Project.visible_condition instead."
|
||||
visible_condition(user || User.current)
|
||||
@@ -544,7 +549,27 @@ class Project < ActiveRecord::Base
|
||||
def enabled_module_names
|
||||
enabled_modules.collect(&:name)
|
||||
end
|
||||
|
||||
|
||||
# Enable a specific module
|
||||
#
|
||||
# Examples:
|
||||
# project.enable_module!(:issue_tracking)
|
||||
# project.enable_module!("issue_tracking")
|
||||
def enable_module!(name)
|
||||
enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name)
|
||||
end
|
||||
|
||||
# Disable a module if it exists
|
||||
#
|
||||
# Examples:
|
||||
# project.disable_module!(:issue_tracking)
|
||||
# project.disable_module!("issue_tracking")
|
||||
# project.disable_module!(project.enabled_modules.first)
|
||||
def disable_module!(target)
|
||||
target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target)
|
||||
target.destroy unless target.blank?
|
||||
end
|
||||
|
||||
safe_attributes 'name',
|
||||
'description',
|
||||
'homepage',
|
||||
|
||||
@@ -165,6 +165,11 @@ class Query < ActiveRecord::Base
|
||||
["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
|
||||
end if filters
|
||||
end
|
||||
|
||||
# Returns true if the query is visible to +user+ or the current user.
|
||||
def visible?(user=User.current)
|
||||
self.is_public? || self.user_id == user.id
|
||||
end
|
||||
|
||||
def editable_by?(user)
|
||||
return false unless user
|
||||
|
||||
@@ -117,7 +117,7 @@ class Repository < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def default_branch
|
||||
scm.default_branch
|
||||
nil
|
||||
end
|
||||
|
||||
def properties(path, identifier=nil)
|
||||
@@ -276,7 +276,7 @@ class Repository < ActiveRecord::Base
|
||||
ret = ""
|
||||
begin
|
||||
ret = self.scm_adapter_class.client_command if self.scm_adapter_class
|
||||
rescue Redmine::Scm::Adapters::CommandFailed => e
|
||||
rescue Exception => e
|
||||
logger.error "scm: error during get command: #{e.message}"
|
||||
end
|
||||
ret
|
||||
@@ -286,7 +286,7 @@ class Repository < ActiveRecord::Base
|
||||
ret = ""
|
||||
begin
|
||||
ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
|
||||
rescue Redmine::Scm::Adapters::CommandFailed => e
|
||||
rescue Exception => e
|
||||
logger.error "scm: error during get version string: #{e.message}"
|
||||
end
|
||||
ret
|
||||
@@ -296,7 +296,7 @@ class Repository < ActiveRecord::Base
|
||||
ret = false
|
||||
begin
|
||||
ret = self.scm_adapter_class.client_available if self.scm_adapter_class
|
||||
rescue Redmine::Scm::Adapters::CommandFailed => e
|
||||
rescue Exception => e
|
||||
logger.error "scm: error during get scm available: #{e.message}"
|
||||
end
|
||||
ret
|
||||
|
||||
@@ -75,6 +75,10 @@ class Repository::Git < Repository
|
||||
scm.tags
|
||||
end
|
||||
|
||||
def default_branch
|
||||
scm.default_branch
|
||||
end
|
||||
|
||||
def find_changeset_by_name(name)
|
||||
return nil if name.nil? || name.empty?
|
||||
e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
|
||||
|
||||
@@ -123,6 +123,7 @@ class Repository::Mercurial < Repository
|
||||
private :latest_changesets_cond
|
||||
|
||||
def fetch_changesets
|
||||
return if scm.info.nil?
|
||||
scm_rev = scm.info.lastrev.revision.to_i
|
||||
db_rev = latest_changeset ? latest_changeset.revision.to_i : -1
|
||||
return unless db_rev < scm_rev # already up-to-date
|
||||
|
||||
@@ -32,6 +32,8 @@ class Tracker < ActiveRecord::Base
|
||||
validates_uniqueness_of :name
|
||||
validates_length_of :name, :maximum => 30
|
||||
|
||||
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
|
||||
|
||||
def to_s; name end
|
||||
|
||||
def <=>(tracker)
|
||||
|
||||
@@ -33,6 +33,7 @@ class Version < ActiveRecord::Base
|
||||
validates_inclusion_of :status, :in => VERSION_STATUSES
|
||||
validates_inclusion_of :sharing, :in => VERSION_SHARINGS
|
||||
|
||||
named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
|
||||
named_scope :open, :conditions => {:status => 'open'}
|
||||
named_scope :visible, lambda {|*args| { :include => :project,
|
||||
:conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } }
|
||||
|
||||
@@ -212,6 +212,10 @@ class WikiAnnotate
|
||||
break unless @lines.detect { |line| line[0].nil? }
|
||||
current = current.previous
|
||||
end
|
||||
@lines.each { |line| line[0] ||= current.version }
|
||||
@lines.each { |line|
|
||||
line[0] ||= current.version
|
||||
# if the last known version is > 1 (eg. history was cleared), we don't know the author
|
||||
line[1] ||= current.author if current.version == 1
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -89,8 +89,8 @@ class Workflow < ActiveRecord::Base
|
||||
else
|
||||
transaction do
|
||||
delete_all :tracker_id => target_tracker.id, :role_id => target_role.id
|
||||
connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id)" +
|
||||
" SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id" +
|
||||
connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id, author, assignee)" +
|
||||
" SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id, author, assignee" +
|
||||
" FROM #{Workflow.table_name}" +
|
||||
" WHERE tracker_id = #{source_tracker.id} AND role_id = #{source_role.id}"
|
||||
end
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
<tbody>
|
||||
<% for source in @auth_sources %>
|
||||
<tr class="<%= cycle("odd", "even") %>">
|
||||
<td><%= link_to source.name, :action => 'edit', :id => source%></td>
|
||||
<td align="center"><%= source.auth_method_name %></td>
|
||||
<td align="center"><%= source.host %></td>
|
||||
<td align="center"><%= source.users.count %></td>
|
||||
<td><%= link_to(h(source.name), :action => 'edit', :id => source)%></td>
|
||||
<td align="center"><%= h source.auth_method_name %></td>
|
||||
<td align="center"><%= h source.host %></td>
|
||||
<td align="center"><%= h source.users.count %></td>
|
||||
<td class="buttons">
|
||||
<%= link_to l(:button_test), :action => 'test_connection', :id => source %>
|
||||
<%= link_to l(:button_delete), { :action => 'destroy', :id => source },
|
||||
|
||||
@@ -5,7 +5,7 @@ api.array :projects, api_meta(:total_count => @project_count, :offset => @offset
|
||||
api.name project.name
|
||||
api.identifier project.identifier
|
||||
api.description project.description
|
||||
api.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil?
|
||||
api.parent(:id => project.parent.id, :name => project.parent.name) if project.parent && project.parent.visible?
|
||||
|
||||
render_api_custom_values project.visible_custom_field_values, api
|
||||
|
||||
|
||||
@@ -8,12 +8,9 @@
|
||||
<div class="box tabular">
|
||||
<p>
|
||||
<%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>
|
||||
<% if @repository %>
|
||||
<br />
|
||||
<%= image_tag((@repository.class.scm_available ? 'true.png' : 'exclamation.png'))%>
|
||||
<%= l(:text_scm_command) -%>: <%= @repository.class.scm_command %>
|
||||
|
|
||||
<%= l(:text_scm_command_version) -%>: <%= @repository.class.scm_version_string %>
|
||||
<% if @repository && ! @repository.class.scm_available %>
|
||||
<br />
|
||||
<em><%= content_tag 'span', l(:text_scm_command_not_available), :class => 'error' %></em>
|
||||
<% end %>
|
||||
</p>
|
||||
<% button_disabled = true %>
|
||||
|
||||
@@ -4,6 +4,7 @@ api.project do
|
||||
api.identifier @project.identifier
|
||||
api.description @project.description
|
||||
api.homepage @project.homepage
|
||||
api.parent(:id => @project.parent.id, :name => @project.parent.name) if @project.parent && @project.parent.visible?
|
||||
|
||||
render_api_custom_values @project.visible_custom_field_values, api
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
<p><%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %>
|
||||
<%= javascript_tag "Field.focus('search-input')" %>
|
||||
<%= project_select_tag %>
|
||||
<%= hidden_field_tag 'all_words', '', :id => nil %>
|
||||
<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>
|
||||
<%= hidden_field_tag 'titles_only', '', :id => nil %>
|
||||
<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -1,41 +1,95 @@
|
||||
<% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
|
||||
|
||||
<fieldset class="box tabular settings enabled_scm">
|
||||
<legend><%= l(:setting_enabled_scm) %></legend>
|
||||
<table>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th><%= l(:text_scm_command) %></th>
|
||||
<th><%= l(:text_scm_command_version) %></th>
|
||||
</tr>
|
||||
<% Redmine::Scm::Base.all.collect do |choice| %>
|
||||
<% scm_class = "Repository::#{choice}".constantize %>
|
||||
<% text, value = (choice.is_a?(Array) ? choice : [choice, choice]) %>
|
||||
<% setting = :enabled_scm %>
|
||||
<tr>
|
||||
<td class="scm_name">
|
||||
<%=
|
||||
check_box_tag(
|
||||
"settings[#{setting}][]",
|
||||
value,
|
||||
Setting.send(setting).include?(value))
|
||||
%>
|
||||
<%= text.to_s %>
|
||||
</td>
|
||||
<td>
|
||||
<%=
|
||||
image_tag(
|
||||
(scm_class.scm_available ? 'true.png' : 'exclamation.png'),
|
||||
:style => "vertical-align:bottom;"
|
||||
)
|
||||
%>
|
||||
<%= scm_class.scm_command %>
|
||||
</td>
|
||||
<td>
|
||||
<%= scm_class.scm_version_string %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
<p class="scm_config">
|
||||
<%= l(:text_scm_config) %>
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<div class="box tabular settings">
|
||||
<p><%= setting_check_box :autofetch_changesets %></p>
|
||||
|
||||
<p><%= setting_check_box :sys_api_enabled,
|
||||
:onclick => "if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
|
||||
<p><%= setting_check_box :sys_api_enabled,
|
||||
:onclick =>
|
||||
"if (this.checked) { Form.Element.enable('settings_sys_api_key'); } else { Form.Element.disable('settings_sys_api_key'); }" %></p>
|
||||
|
||||
<p><%= setting_text_field :sys_api_key, :size => 30,
|
||||
:id => 'settings_sys_api_key',
|
||||
:disabled => !Setting.sys_api_enabled?,
|
||||
:label => :setting_mail_handler_api_key %>
|
||||
<%= link_to_function l(:label_generate_key), "if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
|
||||
<p><%= setting_text_field :sys_api_key,
|
||||
:size => 30,
|
||||
:id => 'settings_sys_api_key',
|
||||
:disabled => !Setting.sys_api_enabled?,
|
||||
:label => :setting_mail_handler_api_key %>
|
||||
<%= link_to_function l(:label_generate_key),
|
||||
"if ($('settings_sys_api_key').disabled == false) { $('settings_sys_api_key').value = randomKey(20) }" %>
|
||||
</p>
|
||||
|
||||
<p><%= setting_multiselect(:enabled_scm, Redmine::Scm::Base.all) %></p>
|
||||
|
||||
<p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
|
||||
<em><%= l(:text_comma_separated) %></em></p>
|
||||
|
||||
<p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
|
||||
</div>
|
||||
|
||||
<fieldset class="box tabular settings"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
|
||||
<fieldset class="box tabular settings">
|
||||
<legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
|
||||
<p><%= setting_text_field :commit_ref_keywords, :size => 30 %><br />
|
||||
<em><%= l(:text_comma_separated) %></em></p>
|
||||
|
||||
<p><%= setting_text_field :commit_fix_keywords, :size => 30 %>
|
||||
<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
|
||||
<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
|
||||
<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id,
|
||||
[["", 0]] +
|
||||
IssueStatus.find(:all).collect{
|
||||
|status| [status.name, status.id.to_s]
|
||||
},
|
||||
:label => false %>
|
||||
<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio,
|
||||
(0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] },
|
||||
:blank => :label_no_change_option,
|
||||
:label => false %>
|
||||
<br /><em><%= l(:text_comma_separated) %></em></p>
|
||||
|
||||
<p><%= setting_check_box :commit_logtime_enabled,
|
||||
:onclick => "if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
|
||||
:onclick =>
|
||||
"if (this.checked) { Form.Element.enable('settings_commit_logtime_activity_id'); } else { Form.Element.disable('settings_commit_logtime_activity_id'); }"%></p>
|
||||
|
||||
<p><%= setting_select :commit_logtime_activity_id,
|
||||
[[l(:label_default), 0]] + TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
|
||||
:disabled => !Setting.commit_logtime_enabled?%></p>
|
||||
<p><%= setting_select :commit_logtime_activity_id,
|
||||
[[l(:label_default), 0]] +
|
||||
TimeEntryActivity.shared.all.collect{|activity| [activity.name, activity.id.to_s]},
|
||||
:disabled => !Setting.commit_logtime_enabled?%></p>
|
||||
</fieldset>
|
||||
|
||||
<%= submit_tag l(:button_save) %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
api.array :time_entries do
|
||||
api.array :time_entries, api_meta(:total_count => @entry_count, :offset => @offset, :limit => @limit) do
|
||||
@entries.each do |time_entry|
|
||||
api.time_entry do
|
||||
api.id time_entry.id
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
</div>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
|
||||
:title => "#{Setting.app_title}: #{l(:label_news_latest)}") %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
|
||||
|
||||
@@ -7,7 +7,7 @@ module ActiveRecord
|
||||
|
||||
# Translate attribute names for validation errors display
|
||||
def self.human_attribute_name(attr)
|
||||
l("field_#{attr.to_s.gsub(/_id$/, '')}")
|
||||
l("field_#{attr.to_s.gsub(/_id$/, '')}", :default => attr)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -946,6 +946,8 @@ bg:
|
||||
text_mercurial_repository_note: Локално хранилище (например /hgrepo, c:\hgrepo)
|
||||
text_scm_command: SCM команда
|
||||
text_scm_command_version: Версия
|
||||
text_scm_config: Можете да конфигурирате SCM командите в config/configuration.yml. За да активирате промените, рестартирайте Redmine.
|
||||
text_scm_command_not_available: SCM командата не е налична или достъпна. Проверете конфигурацията в административния панел.
|
||||
|
||||
default_role_manager: Мениджър
|
||||
default_role_developer: Разработчик
|
||||
|
||||
@@ -988,3 +988,5 @@ bs:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -977,3 +977,5 @@ ca:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -978,3 +978,5 @@ cs:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -991,3 +991,5 @@ da:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# German translations for Ruby on Rails
|
||||
# by Clemens Kofler (clemens@railway.at)
|
||||
# additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com)
|
||||
|
||||
de:
|
||||
direction: ltr
|
||||
@@ -949,45 +950,48 @@ de:
|
||||
field_member_of_group: Zuständigkeitsgruppe
|
||||
field_assigned_to_role: Zuständigkeitsrolle
|
||||
field_visible: Sichtbar
|
||||
setting_emails_header: Emailkopf
|
||||
setting_emails_header: E-Mail Betreffzeile
|
||||
setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung
|
||||
text_time_logged_by_changeset: Angewendet in Changeset %{value}.
|
||||
setting_commit_logtime_enabled: Aktiviere Zeitlogging
|
||||
notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
|
||||
setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
|
||||
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
|
||||
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
|
||||
label_my_queries: My custom queries
|
||||
text_journal_changed_no_detail: "%{label} updated"
|
||||
label_news_comment_added: Comment added to a news
|
||||
button_expand_all: Expand all
|
||||
button_collapse_all: Collapse all
|
||||
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
|
||||
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
|
||||
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
|
||||
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
|
||||
field_warn_on_leaving_unsaved: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen
|
||||
text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen.
|
||||
label_my_queries: Meine eigenen Abfragen
|
||||
text_journal_changed_no_detail: "%{label} aktualisiert"
|
||||
label_news_comment_added: Kommentar zu einer News hinzugefügt
|
||||
button_expand_all: Alle ausklappen
|
||||
button_collapse_all: Alle einklappen
|
||||
label_additional_workflow_transitions_for_assignee: Zusätzliche Berechtigungen wenn der Benutzer der Zugewiesene ist
|
||||
label_additional_workflow_transitions_for_author: Zusätzliche Berechtigungen wenn der Benutzer der Autor ist
|
||||
label_bulk_edit_selected_time_entries: Ausgewählte Zeitaufwände bearbeiten
|
||||
text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewählten Zeitaufwände löschen möchten?
|
||||
label_role_anonymous: Anonymous
|
||||
label_role_non_member: Non member
|
||||
label_issue_note_added: Note added
|
||||
label_issue_status_updated: Status updated
|
||||
label_issue_priority_updated: Priority updated
|
||||
label_issues_visibility_own: Issues created by or assigned to the user
|
||||
field_issues_visibility: Issues visibility
|
||||
label_issues_visibility_all: All issues
|
||||
permission_set_own_issues_private: Set own issues public or private
|
||||
field_is_private: Private
|
||||
permission_set_issues_private: Set issues public or private
|
||||
label_issues_visibility_public: All non private issues
|
||||
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
|
||||
label_role_non_member: Nichtmitglied
|
||||
label_issue_note_added: Notiz hinzugefügt
|
||||
label_issue_status_updated: Status aktualisiert
|
||||
label_issue_priority_updated: Priorität aktualisiert
|
||||
label_issues_visibility_own: Tickets die folgender User erstellt hat oder die ihm zugewiesen sind
|
||||
field_issues_visibility: Ticket Sichtbarkeit
|
||||
label_issues_visibility_all: Alle Tickets
|
||||
permission_set_own_issues_private: Eigene Tickets privat oder öffentlich markieren
|
||||
field_is_private: Privat
|
||||
permission_set_issues_private: Tickets privat oder öffentlich markieren
|
||||
label_issues_visibility_public: Alle öffentlichen Tickets
|
||||
text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n löschen.
|
||||
field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
field_cvs_module: Module
|
||||
field_scm_path_encoding: Pfad Kodierung
|
||||
text_scm_path_encoding_note: "Standard: UTF-8"
|
||||
field_path_to_repository: Pfad zum repository
|
||||
field_root_directory: Wurzelverzeichnis
|
||||
field_cvs_module: Modul
|
||||
field_cvsroot: CVSROOT
|
||||
text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_git_repository_note: Bare und lokales repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Kommando
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
label_git_report_last_commit: Bericht des letzten Commits für Dateien und Verzeichnisse
|
||||
text_scm_config: Die SCM-Kommandos können in der in config/configuration.yml konfiguriert werden. Redmine muss anschließend neu gestartet werden.
|
||||
text_scm_command_not_available: Scm Kommando ist nicht verfügbar. Bitte prüfen Sie die Einstellungen im Administrationspanel.
|
||||
|
||||
|
||||
@@ -974,3 +974,5 @@ el:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -977,3 +977,5 @@ en-GB:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -867,17 +867,17 @@ en:
|
||||
button_quote: Quote
|
||||
button_duplicate: Duplicate
|
||||
button_show: Show
|
||||
|
||||
|
||||
status_active: active
|
||||
status_registered: registered
|
||||
status_locked: locked
|
||||
|
||||
|
||||
version_status_open: open
|
||||
version_status_locked: locked
|
||||
version_status_closed: closed
|
||||
|
||||
field_active: Active
|
||||
|
||||
|
||||
text_select_mail_notifications: Select actions for which email notifications should be sent.
|
||||
text_regexp_info: eg. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 means no restriction
|
||||
@@ -946,6 +946,8 @@ en:
|
||||
text_mercurial_repository_note: "Local repository (e.g. /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developer: Developer
|
||||
|
||||
@@ -970,44 +970,46 @@ es:
|
||||
field_visible: Visible
|
||||
setting_emails_header: Encabezado de Correos
|
||||
|
||||
setting_commit_logtime_activity_id: Activity for logged time
|
||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
||||
setting_commit_logtime_enabled: Enable time logging
|
||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
||||
field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
|
||||
text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
|
||||
label_my_queries: My custom queries
|
||||
text_journal_changed_no_detail: "%{label} updated"
|
||||
label_news_comment_added: Comment added to a news
|
||||
button_expand_all: Expand all
|
||||
button_collapse_all: Collapse all
|
||||
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
|
||||
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
|
||||
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
|
||||
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
|
||||
label_role_anonymous: Anonymous
|
||||
label_role_non_member: Non member
|
||||
label_issue_note_added: Note added
|
||||
label_issue_status_updated: Status updated
|
||||
label_issue_priority_updated: Priority updated
|
||||
label_issues_visibility_own: Issues created by or assigned to the user
|
||||
field_issues_visibility: Issues visibility
|
||||
label_issues_visibility_all: All issues
|
||||
permission_set_own_issues_private: Set own issues public or private
|
||||
field_is_private: Private
|
||||
permission_set_issues_private: Set issues public or private
|
||||
label_issues_visibility_public: All non private issues
|
||||
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
|
||||
setting_commit_logtime_activity_id: Actividad de los tiempos registrados
|
||||
text_time_logged_by_changeset: Aplicado en los cambios %{value}.
|
||||
setting_commit_logtime_enabled: Habilitar registro de horas
|
||||
notice_gantt_chart_truncated: Se recortó el diagrama porque excede el número máximo de elementos que pueden ser mostrados (%{max})
|
||||
setting_gantt_items_limit: Número máximo de elementos mostrados en el diagrama de Gantt
|
||||
field_warn_on_leaving_unsaved: Avisarme cuando vaya a abandonar una página con texto no guardado
|
||||
text_warn_on_leaving_unsaved: Esta página contiene texto no guardado y si la abandona sus cambios se perderán
|
||||
label_my_queries: Mis consultas personalizadas
|
||||
text_journal_changed_no_detail: "Se actualizó %{label}"
|
||||
label_news_comment_added: Comentario añadido a noticia
|
||||
button_expand_all: Expandir todo
|
||||
button_collapse_all: Contraer todo
|
||||
label_additional_workflow_transitions_for_assignee: Transiciones adicionales permitidas cuando la petición está asignada al usuario
|
||||
label_additional_workflow_transitions_for_author: Transiciones adicionales permitidas cuando el usuario es autor de la petición
|
||||
label_bulk_edit_selected_time_entries: Editar en bloque las horas seleccionadas
|
||||
text_time_entries_destroy_confirmation: ¿Está seguro de querer eliminar (la hora seleccionada/las horas seleccionadas)?
|
||||
label_role_anonymous: Anónimo
|
||||
label_role_non_member: No miembro
|
||||
label_issue_note_added: Nota añadida
|
||||
label_issue_status_updated: Estado actualizado
|
||||
label_issue_priority_updated: Prioridad actualizada
|
||||
label_issues_visibility_own: Peticiones creadas por el usuario o asignadas a él
|
||||
field_issues_visibility: Visibilidad de las peticiones
|
||||
label_issues_visibility_all: Todas las peticiones
|
||||
permission_set_own_issues_private: Poner las peticiones propias como públicas o privadas
|
||||
field_is_private: Privada
|
||||
permission_set_issues_private: Poner peticiones como públicas o privadas
|
||||
label_issues_visibility_public: Todas las peticiones no privadas
|
||||
text_issues_destroy_descendants_confirmation: Se procederá a borrar también %{count} subtarea(s).
|
||||
field_commit_logs_encoding: Codificación de los mensajes de commit
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
field_cvs_module: Module
|
||||
field_scm_path_encoding: Codificación de las rutas
|
||||
text_scm_path_encoding_note: "Por defecto: UTF-8"
|
||||
field_path_to_repository: Ruta al repositorio
|
||||
field_root_directory: Directorio raíz
|
||||
field_cvs_module: Módulo
|
||||
field_cvsroot: CVSROOT
|
||||
text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_git_repository_note: Repositorio local (bare repository) (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Repositorio local (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Orden
|
||||
text_scm_command_version: Versión
|
||||
label_git_report_last_commit: Informar del último commit para ficheros y directorios
|
||||
text_scm_config: Puede configurar las órdenes de cada scm en configuration/configuration.yml. Por favor, reinicie la aplicación después de editarlo
|
||||
text_scm_command_not_available: La orden para el Scm no está disponible. Por favor, compruebe la configuración en el panel de administración.
|
||||
|
||||
@@ -978,3 +978,5 @@ eu:
|
||||
text_scm_command: Komandoa
|
||||
text_scm_command_version: Bertsioa
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -977,3 +977,5 @@ fa:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -995,3 +995,5 @@ fi:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -962,7 +962,7 @@ fr:
|
||||
text_zoom_in: Zoom avant
|
||||
notice_unable_delete_time_entry: Impossible de supprimer le temps passé.
|
||||
label_overall_spent_time: Temps passé global
|
||||
field_time_entries: Log time
|
||||
field_time_entries: Temps passé
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendrier
|
||||
button_edit_associated_wikipage: "Modifier la page wiki associée: %{page_title}"
|
||||
@@ -976,16 +976,18 @@ fr:
|
||||
field_member_of_group: Groupe de l'assigné
|
||||
field_assigned_to_role: Rôle de l'assigné
|
||||
setting_emails_header: En-tête des emails
|
||||
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
|
||||
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
label_bulk_edit_selected_time_entries: Modifier les temps passés sélectionnées
|
||||
text_time_entries_destroy_confirmation: "Etes-vous sûr de vouloir supprimer les temps passés sélectionnés ?"
|
||||
field_scm_path_encoding: Encodage des chemins
|
||||
text_scm_path_encoding_note: "Défaut : UTF-8"
|
||||
field_path_to_repository: Chemin du dépôt
|
||||
field_root_directory: Répertoire racine
|
||||
field_cvs_module: Module
|
||||
field_cvsroot: CVSROOT
|
||||
text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_git_repository_note: "Dépôt nu (bare) et local (exemples : /gitrepo, c:\gitrepo)"
|
||||
text_mercurial_repository_note: "Dépôt local (exemples : /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: Commande
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
label_git_report_last_commit: Afficher le dernier commit des fichiers et répertoires
|
||||
text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification.
|
||||
text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration.
|
||||
|
||||
@@ -986,3 +986,5 @@ gl:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -979,3 +979,5 @@ he:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -981,3 +981,5 @@ hr:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -993,3 +993,5 @@
|
||||
text_scm_command: Parancs
|
||||
text_scm_command_version: Verzió
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -982,3 +982,5 @@ id:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -975,3 +975,5 @@ it:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -158,6 +158,14 @@ ja:
|
||||
general_csv_separator: ','
|
||||
general_csv_decimal_separator: '.'
|
||||
general_csv_encoding: CP932
|
||||
## Redmine 1.2.0 現在、この値によって、pdfの出力のフォントを切り替えています。
|
||||
## CRuby では CP932 にしてください。
|
||||
## JRuby 1.6.2 (ruby-1.8.7-p330) では、CP932 ですと
|
||||
## Iconv::InvalidEncoding例外が発生します。
|
||||
## JRuby では、SJIS か Shift_JIS にしてください。
|
||||
## ご存知の通り、CP932 と SJIS は別物ですが、
|
||||
## そこまでの検証はしていません。
|
||||
# general_pdf_encoding: SJIS
|
||||
general_pdf_encoding: CP932
|
||||
general_first_day_of_week: '7'
|
||||
|
||||
@@ -392,7 +400,7 @@ ja:
|
||||
setting_commit_logtime_enabled: コミット時に作業時間を記録する
|
||||
setting_commit_logtime_activity_id: 作業時間の作業分類
|
||||
setting_gantt_items_limit: ガントチャート最大表示項目数
|
||||
|
||||
|
||||
permission_add_project: プロジェクトの追加
|
||||
permission_add_subprojects: サブプロジェクトの追加
|
||||
permission_edit_project: プロジェクトの編集
|
||||
@@ -448,7 +456,7 @@ ja:
|
||||
permission_delete_messages: メッセージの削除
|
||||
permission_delete_own_messages: 自身が記入したメッセージの削除
|
||||
permission_manage_subtasks: 子チケットの管理
|
||||
|
||||
|
||||
project_module_issue_tracking: チケットトラッキング
|
||||
project_module_time_tracking: 時間トラッキング
|
||||
project_module_news: ニュース
|
||||
@@ -459,7 +467,7 @@ ja:
|
||||
project_module_boards: フォーラム
|
||||
project_module_gantt: ガントチャート
|
||||
project_module_calendar: カレンダー
|
||||
|
||||
|
||||
label_user: ユーザ
|
||||
label_user_plural: ユーザ
|
||||
label_user_new: 新しいユーザ
|
||||
@@ -950,6 +958,8 @@ ja:
|
||||
text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: コマンド
|
||||
text_scm_command_version: バージョン
|
||||
text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。
|
||||
text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。
|
||||
|
||||
default_role_manager: 管理者
|
||||
default_role_developer: 開発者
|
||||
|
||||
@@ -1026,3 +1026,5 @@ ko:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -1034,3 +1034,5 @@ lt:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -969,3 +969,5 @@ lv:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -974,3 +974,5 @@ mk:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -975,3 +975,5 @@ mn:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -956,3 +956,5 @@ nl:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -961,3 +961,5 @@
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -991,3 +991,5 @@ pl:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -938,7 +938,7 @@ pt-BR:
|
||||
text_zoom_in: Aproximar zoom
|
||||
notice_unable_delete_time_entry: Não foi possível excluir a entrada no registro de horas trabalhadas.
|
||||
label_overall_spent_time: Tempo gasto geral
|
||||
field_time_entries: Log time
|
||||
field_time_entries: Registro de horas
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendário
|
||||
button_edit_associated_wikipage: "Editar página wiki relacionada: %{page_title}"
|
||||
@@ -966,31 +966,34 @@ pt-BR:
|
||||
label_my_queries: Minhas consultas personalizadas
|
||||
text_journal_changed_no_detail: "%{label} atualizado(a)"
|
||||
label_news_comment_added: Notícia recebeu um comentário
|
||||
button_expand_all: Expand all
|
||||
button_collapse_all: Collapse all
|
||||
label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
|
||||
label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
|
||||
label_bulk_edit_selected_time_entries: Bulk edit selected time entries
|
||||
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
|
||||
label_role_anonymous: Anonymous
|
||||
label_role_non_member: Non member
|
||||
label_issues_visibility_own: Issues created by or assigned to the user
|
||||
field_issues_visibility: Issues visibility
|
||||
label_issues_visibility_all: All issues
|
||||
permission_set_own_issues_private: Set own issues public or private
|
||||
field_is_private: Private
|
||||
permission_set_issues_private: Set issues public or private
|
||||
label_issues_visibility_public: All non private issues
|
||||
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
|
||||
button_expand_all: Expandir tudo
|
||||
button_collapse_all: Recolher tudo
|
||||
label_additional_workflow_transitions_for_assignee: Transições adicionais permitidas quando o usuário é o responsável pela tarefa
|
||||
label_additional_workflow_transitions_for_author: Transições adicionais permitidas quando o usuário é o autor
|
||||
|
||||
label_bulk_edit_selected_time_entries: Alteração em massa do registro de horas
|
||||
text_time_entries_destroy_confirmation: Tem certeza que quer excluir o(s) registro(s) de horas selecionado(s)?
|
||||
label_role_anonymous: Anônimo
|
||||
label_role_non_member: Não Membro
|
||||
label_issues_visibility_own: Tarefas criadas ou atribuídas ao usuário
|
||||
field_issues_visibility: Visibilidade das tarefas
|
||||
label_issues_visibility_all: Todas as tarefas
|
||||
permission_set_own_issues_private: Alterar as próprias tarefas para públicas ou privadas
|
||||
field_is_private: Privado
|
||||
permission_set_issues_private: Alterar tarefas para públicas ou privadas
|
||||
label_issues_visibility_public: Todas as tarefas não privadas
|
||||
text_issues_destroy_descendants_confirmation: Isto também irá excluir %{count} subtarefa(s).
|
||||
field_commit_logs_encoding: Codificação das mensagens de commit
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
field_cvs_module: Module
|
||||
field_scm_path_encoding: Codificação do caminho
|
||||
text_scm_path_encoding_note: "Padrão: UTF-8"
|
||||
field_path_to_repository: Caminho para o repositório
|
||||
field_root_directory: Diretório raiz
|
||||
field_cvs_module: Módulo
|
||||
field_cvsroot: CVSROOT
|
||||
text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_mercurial_repository_note: "repositório local (ex.: /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: Comando
|
||||
text_scm_command_version: Versão
|
||||
label_git_report_last_commit: Relatar última alteração para arquivos e diretórios
|
||||
text_scm_config: Você pode configurar seus comandos de versionamento em config/configurations.yml. Por favor reinicie a aplicação após alterá-lo.
|
||||
text_scm_command_not_available: Comando de versionamento não disponível. Por favor verifique as configurações no painel de administração.
|
||||
|
||||
@@ -979,3 +979,5 @@ pt:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -967,3 +967,5 @@ ro:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -511,7 +511,7 @@ ru:
|
||||
label_filter_add: Добавить фильтр
|
||||
label_filter_plural: Фильтры
|
||||
label_float: С плавающей точкой
|
||||
label_follows: следующая
|
||||
label_follows: предыдущая
|
||||
label_gantt: Диаграмма Ганта
|
||||
label_general: Общее
|
||||
label_generate_key: Сгенерировать ключ
|
||||
@@ -617,7 +617,7 @@ ru:
|
||||
label_planning: Планирование
|
||||
label_please_login: Пожалуйста, войдите.
|
||||
label_plugins: Модули
|
||||
label_precedes: предыдущая
|
||||
label_precedes: следующая
|
||||
label_preferences: Предпочтения
|
||||
label_preview: Предварительный просмотр
|
||||
label_previous: Предыдущий
|
||||
@@ -1087,3 +1087,5 @@ ru:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -969,3 +969,5 @@ sk:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -970,3 +970,5 @@ sl:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -974,3 +974,5 @@ sr-YU:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -975,3 +975,5 @@ sr:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -351,6 +351,12 @@ sv:
|
||||
field_warn_on_leaving_unsaved: Varna om jag lämnar en sida med osparad text
|
||||
field_issues_visibility: Ärendesynlighet
|
||||
field_is_private: Privat
|
||||
field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
|
||||
field_scm_path_encoding: Sökvägskodning
|
||||
field_path_to_repository: Sökväg till versionsarkiv
|
||||
field_root_directory: Rotmapp
|
||||
field_cvsroot: CVSROOT
|
||||
field_cvs_module: Modul
|
||||
|
||||
setting_app_title: Applikationsrubrik
|
||||
setting_app_subtitle: Applikationsunderrubrik
|
||||
@@ -855,6 +861,7 @@ sv:
|
||||
label_issues_visibility_all: Alla ärenden
|
||||
label_issues_visibility_public: Alla icke-privata ärenden
|
||||
label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren
|
||||
label_git_report_last_commit: Rapportera senaste commit av filer och mappar
|
||||
|
||||
button_login: Logga in
|
||||
button_submit: Skicka
|
||||
@@ -976,6 +983,13 @@ sv:
|
||||
text_zoom_out: Zooma ut
|
||||
text_zoom_in: Zooma in
|
||||
text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan.
|
||||
text_scm_path_encoding_note: "Standard: UTF-8"
|
||||
text_git_repository_note: Naket och lokalt versionsarkiv (t.ex. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Lokalt versionsarkiv (t.ex. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Kommando
|
||||
text_scm_command_version: Version
|
||||
text_scm_config: Du kan konfigurera dina scm-kommando i config/configuration.yml. Vänligen starta om applikationen när ändringar gjorts.
|
||||
text_scm_command_not_available: Scm-kommando är inte tillgängligt. Vänligen kontrollera inställningarna i administratörspanelen.
|
||||
|
||||
default_role_manager: Projektledare
|
||||
default_role_developer: Utvecklare
|
||||
@@ -1003,15 +1017,3 @@ sv:
|
||||
enumeration_doc_categories: Dokumentkategorier
|
||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||
enumeration_system_activity: Systemaktivitet
|
||||
field_commit_logs_encoding: Teckenuppsättning för commit-meddelanden
|
||||
field_scm_path_encoding: Path encoding
|
||||
text_scm_path_encoding_note: "Default: UTF-8"
|
||||
field_path_to_repository: Path to repository
|
||||
field_root_directory: Root directory
|
||||
field_cvs_module: Module
|
||||
field_cvsroot: CVSROOT
|
||||
text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
|
||||
@@ -971,3 +971,5 @@ th:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -970,3 +970,5 @@ uk:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -180,7 +180,7 @@ vi:
|
||||
last_word_connector: ", và "
|
||||
|
||||
actionview_instancetag_blank_option: Vui lòng chọn
|
||||
|
||||
|
||||
general_text_No: 'Không'
|
||||
general_text_Yes: 'Có'
|
||||
general_text_no: 'không'
|
||||
@@ -191,7 +191,7 @@ vi:
|
||||
general_csv_encoding: UTF-8
|
||||
general_pdf_encoding: UTF-8
|
||||
general_first_day_of_week: '1'
|
||||
|
||||
|
||||
notice_account_updated: Cập nhật tài khoản thành công.
|
||||
notice_account_invalid_creditentials: Tài khoản hoặc mật mã không hợp lệ
|
||||
notice_account_password_updated: Cập nhật mật mã thành công.
|
||||
@@ -1025,3 +1025,5 @@ vi:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
@@ -1028,6 +1028,8 @@
|
||||
text_mercurial_repository_note: "本機儲存機制 (e.g. /hgrepo, c:\hgrepo)"
|
||||
text_scm_command: 命令
|
||||
text_scm_command_version: 版本
|
||||
text_scm_config: 您可以在 config/configuration.yml 中設定 SCM 命令。請在編輯該檔案之後重新啟動 Redmine 應用程式。
|
||||
text_scm_command_not_available: SCM 命令無法使用。請檢查管理面板中的設定。
|
||||
|
||||
default_role_manager: 管理人員
|
||||
default_role_developer: 開發人員
|
||||
|
||||
@@ -977,3 +977,5 @@ zh:
|
||||
text_scm_command: Command
|
||||
text_scm_command_version: Version
|
||||
label_git_report_last_commit: Report last commit for files and directories
|
||||
text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
|
||||
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
|
||||
|
||||
137
doc/CHANGELOG
137
doc/CHANGELOG
@@ -4,6 +4,143 @@ Redmine - project management software
|
||||
Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== 2011-07-11 v1.2.1
|
||||
|
||||
* Defect #5089: i18N error on truncated revision diff view
|
||||
* Defect #7501: Search options get lost after clicking on a specific result type
|
||||
* Defect #8229: "project.xml" response does not include the parent ID
|
||||
* Defect #8449: Wiki annotated page does not display author of version 1
|
||||
* Defect #8467: Missing german translation - Warn me when leaving a page with unsaved text
|
||||
* Defect #8468: No warning when leaving page with unsaved text that has not lost focus
|
||||
* Defect #8472: Private checkbox ignored on issue creation with "Set own issues public or private" permission
|
||||
* Defect #8510: JRuby: Can't open administrator panel if scm command is not available
|
||||
* Defect #8512: Syntax highlighter on Welcome page
|
||||
* Defect #8554: Translation missing error on custom field validation
|
||||
* Defect #8565: JRuby: Japanese PDF export error
|
||||
* Defect #8566: Exported PDF UTF-8 Vietnamese not correct
|
||||
* Defect #8569: JRuby: PDF export error with TypeError
|
||||
* Defect #8576: Missing german translation - different things
|
||||
* Defect #8616: Circular relations
|
||||
* Defect #8646: Russian translation "label_follows" and "label_follows" are wrong
|
||||
* Defect #8712: False 'Description updated' journal details messages
|
||||
* Defect #8729: Not-public queries are not private
|
||||
* Defect #8737: Broken line of long issue description on issue PDF.
|
||||
* Defect #8738: Missing revision number/id of associated revisions on issue PDF
|
||||
* Defect #8739: Workflow copy does not copy advanced workflow settings
|
||||
* Defect #8759: Setting issue attributes from mail should be case-insensitive
|
||||
* Defect #8777: Mercurial: Not able to Resetting Redmine project respository
|
||||
|
||||
== 2011-05-30 v1.2.0
|
||||
|
||||
* Defect #61: Broken character encoding in pdf export
|
||||
* Defect #1965: Redmine is not Tab Safe
|
||||
* Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
|
||||
* Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
|
||||
* Defect #3421: Mercurial reads files from working dir instead of changesets
|
||||
* Defect #3462: CVS: Repository path encoding of non UTF-8 characters
|
||||
* Defect #3715: Login page should not show projects link and search box if authentication is required
|
||||
* Defect #3724: Mercurial repositories display revision ID instead of changeset ID
|
||||
* Defect #3761: Most recent CVS revisions are missing in "revisions" view
|
||||
* Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
|
||||
* Defect #5138: Don't use Ajax for pagination
|
||||
* Defect #5152: Cannot use certain characters for user and role names.
|
||||
* Defect #5251: Git: Repository path encoding of non UTF-8 characters
|
||||
* Defect #5373: Translation missing when adding invalid watchers
|
||||
* Defect #5817: Shared versions not shown in subproject's gantt chart
|
||||
* Defect #6013: git tab,browsing, very slow -- even after first time
|
||||
* Defect #6148: Quoting, newlines, and nightmares...
|
||||
* Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
|
||||
* Defect #6476: Subproject's issues are not shown in the subproject's gantt
|
||||
* Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
|
||||
* Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
|
||||
* Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
|
||||
* Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
|
||||
* Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
|
||||
* Defect #6905: Specific heading-content breaks CSS
|
||||
* Defect #7000: Project filter not applied on versions in Gantt chart
|
||||
* Defect #7097: Starting day of week cannot be set to Saturday
|
||||
* Defect #7114: New gantt doesn't display some projects
|
||||
* Defect #7146: Git adapter lost commits before 7 days from database latest changeset
|
||||
* Defect #7218: Date range error on issue query
|
||||
* Defect #7257: "Issues by" version links bad criterias
|
||||
* Defect #7279: CSS class ".icon-home" is not used.
|
||||
* Defect #7320: circular dependency >2 issues
|
||||
* Defect #7352: Filters not working in Gantt charts
|
||||
* Defect #7367: Receiving pop3 email should not output debug messages
|
||||
* Defect #7373: Error with PDF output and ruby 1.9.2
|
||||
* Defect #7379: Remove extraneous hidden_field on wiki history
|
||||
* Defect #7516: Redmine does not work with RubyGems 1.5.0
|
||||
* Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
|
||||
* Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
|
||||
* Defect #7582: hiding form pages from search engines
|
||||
* Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
|
||||
* Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
|
||||
* Defect #7605: Using custom queries always redirects to "Issues" tab
|
||||
* Defect #7615: CVS diffs do not handle new files properly
|
||||
* Defect #7618: SCM diffs do not handle one line new files properly
|
||||
* Defect #7639: Some date fields do not have requested format.
|
||||
* Defect #7657: Wrong commit range in git log command on Windows
|
||||
* Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
|
||||
* Defect #7821: Git "previous" and "next" revisions are incorrect
|
||||
* Defect #7827: CVS: Age column on repository view is off by timezone delta
|
||||
* Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
|
||||
* Defect #8011: {{toc}} does not display headlines with inline code markup
|
||||
* Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
|
||||
* Defect #8064: Text custom fields do not wrap on the issue list
|
||||
* Defect #8071: Watching a subtask from the context menu updates main issue watch link
|
||||
* Defect #8072: Two untranslatable default role names
|
||||
* Defect #8075: Some "notifiable" names are not i18n-enabled
|
||||
* Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
|
||||
* Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
|
||||
* Defect #8239: notes field is not propagated during issue copy
|
||||
* Defect #8356: GET /time_entries.xml ignores limit/offset parameters
|
||||
* Defect #8432: Private issues information shows up on Activity page for unauthorized users
|
||||
* Feature #746: Versioned issue descriptions
|
||||
* Feature #1067: Differentiate public/private saved queries in the sidebar
|
||||
* Feature #1236: Make destination folder for attachment uploads configurable
|
||||
* Feature #1735: Per project repository log encoding setting
|
||||
* Feature #1763: Autologin-cookie should be configurable
|
||||
* Feature #1981: display mercurial tags
|
||||
* Feature #2074: Sending email notifications when comments are added in the news section
|
||||
* Feature #2096: Custom fields referencing system tables (users and versions)
|
||||
* Feature #2732: Allow additional workflow transitions for author and assignee
|
||||
* Feature #2910: Warning on leaving edited issue/wiki page without saving
|
||||
* Feature #3396: Git: use --encoding=UTF-8 in "git log"
|
||||
* Feature #4273: SCM command availability automatic check in administration panel
|
||||
* Feature #4477: Use mime types in downloading from repository
|
||||
* Feature #5518: Graceful fallback for "missing translation" needed
|
||||
* Feature #5520: Text format buttons and preview link missing when editing comment
|
||||
* Feature #5831: Parent Task to Issue Bulk Edit
|
||||
* Feature #6887: Upgrade to Rails 2.3.11
|
||||
* Feature #7139: Highlight changes inside diff lines
|
||||
* Feature #7236: Collapse All for Groups
|
||||
* Feature #7246: Handle "named branch" for mercurial
|
||||
* Feature #7296: Ability for admin to delete users
|
||||
* Feature #7318: Add user agent to Redmine Mailhandler
|
||||
* Feature #7408: Add an application configuration file
|
||||
* Feature #7409: Cross project Redmine links
|
||||
* Feature #7410: Add salt to user passwords
|
||||
* Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
|
||||
* Feature #7412: Add an issue visibility level to each role
|
||||
* Feature #7414: Private issues
|
||||
* Feature #7517: Configurable path of executable for scm adapters
|
||||
* Feature #7640: Add "mystery man" gravatar to options
|
||||
* Feature #7858: RubyGems 1.6 support
|
||||
* Feature #7893: Group filter on the users list
|
||||
* Feature #7899: Box for editing comments should open with the formatting toolbar
|
||||
* Feature #7921: issues by pulldown should have 'status' option
|
||||
* Feature #7996: Bulk edit and context menu for time entries
|
||||
* Feature #8006: Right click context menu for Related Issues
|
||||
* Feature #8209: I18n YAML files not parsable with psych yaml library
|
||||
* Feature #8345: Link to user profile from account page
|
||||
* Feature #8365: Git: per project setting to report last commit or not in repository tree
|
||||
* Patch #5148: metaKey not handled in issues selection
|
||||
* Patch #5629: Wrap text fields properly in PDF
|
||||
* Patch #7418: Redmine Persian Translation
|
||||
* Patch #8295: Wrap title fields properly in PDF
|
||||
* Patch #8310: fixes automatic line break problem with TCPDF
|
||||
* Patch #8312: Switch to TCPDF from FPDF for PDF export
|
||||
|
||||
== 2011-04-29 v1.1.3
|
||||
|
||||
* Defect #5773: Email reminders are sent to locked users
|
||||
|
||||
14
doc/INSTALL
14
doc/INSTALL
@@ -1,7 +1,7 @@
|
||||
== Redmine installation
|
||||
|
||||
Redmine - project management software
|
||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
|
||||
@@ -9,21 +9,21 @@ http://www.redmine.org/
|
||||
|
||||
* Ruby 1.8.6 or 1.8.7
|
||||
|
||||
* RubyGems 1.3.1
|
||||
* RubyGems 1.3.7
|
||||
|
||||
* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
|
||||
* Ruby on Rails 2.3.11 (official downloadable Redmine releases are packaged with
|
||||
the appropriate Rails version)
|
||||
|
||||
* Rack 1.0.1 gem
|
||||
* Rack 1.1.0 gem
|
||||
|
||||
* Rake 0.8.3 gem
|
||||
|
||||
* I18n 0.4.2 gem
|
||||
|
||||
* A database:
|
||||
* MySQL (tested with MySQL 5)
|
||||
* PostgreSQL (tested with PostgreSQL 8.1)
|
||||
* SQLite (tested with SQLite 3)
|
||||
* MySQL (tested with MySQL 5.1)
|
||||
* PostgreSQL (tested with PostgreSQL 8.4)
|
||||
* SQLite3 (tested with SQLite 3.6)
|
||||
|
||||
Optional:
|
||||
* SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
== Redmine upgrade
|
||||
|
||||
Redmine - project management software
|
||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ http://www.redmine.org/
|
||||
|
||||
6. Migrate your database
|
||||
|
||||
If you are upgrading to Rails 2.3.5 as part of this migration, you
|
||||
If you are upgrading to Rails 2.3.11 as part of this migration, you
|
||||
need to upgrade the plugin migrations before running the plugin migrations
|
||||
using:
|
||||
rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
|
||||
@@ -56,7 +56,7 @@ http://www.redmine.org/
|
||||
|
||||
== Notes
|
||||
|
||||
* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
|
||||
* Rails 2.3.11 is required for versions 1.2.x.
|
||||
|
||||
== References
|
||||
|
||||
|
||||
@@ -40,33 +40,39 @@ module Redmine
|
||||
@ic = Iconv.new(pdf_encoding, 'UTF-8')
|
||||
end
|
||||
super('P', 'mm', 'A4', (pdf_encoding == 'UTF-8'), pdf_encoding)
|
||||
case pdf_encoding
|
||||
when 'UTF-8'
|
||||
@font_for_content = 'FreeSans'
|
||||
@font_for_footer = 'FreeSans'
|
||||
when 'CP949'
|
||||
extend(PDF_Korean)
|
||||
AddUHCFont()
|
||||
@font_for_content = 'UHC'
|
||||
@font_for_footer = 'UHC'
|
||||
when 'CP932'
|
||||
extend(PDF_Japanese)
|
||||
AddSJISFont()
|
||||
@font_for_content = 'SJIS'
|
||||
@font_for_footer = 'SJIS'
|
||||
when 'GB18030'
|
||||
extend(PDF_Chinese)
|
||||
AddGBFont()
|
||||
@font_for_content = 'GB'
|
||||
@font_for_footer = 'GB'
|
||||
when 'BIG5'
|
||||
extend(PDF_Chinese)
|
||||
AddBig5Font()
|
||||
@font_for_content = 'Big5'
|
||||
@font_for_footer = 'Big5'
|
||||
case current_language.to_s.downcase
|
||||
when 'vi'
|
||||
@font_for_content = 'DejaVuSans'
|
||||
@font_for_footer = 'DejaVuSans'
|
||||
else
|
||||
@font_for_content = 'Arial'
|
||||
@font_for_footer = 'Helvetica'
|
||||
case pdf_encoding
|
||||
when 'UTF-8'
|
||||
@font_for_content = 'FreeSans'
|
||||
@font_for_footer = 'FreeSans'
|
||||
when 'CP949'
|
||||
extend(PDF_Korean)
|
||||
AddUHCFont()
|
||||
@font_for_content = 'UHC'
|
||||
@font_for_footer = 'UHC'
|
||||
when 'CP932', 'SJIS', 'SHIFT_JIS'
|
||||
extend(PDF_Japanese)
|
||||
AddSJISFont()
|
||||
@font_for_content = 'SJIS'
|
||||
@font_for_footer = 'SJIS'
|
||||
when 'GB18030'
|
||||
extend(PDF_Chinese)
|
||||
AddGBFont()
|
||||
@font_for_content = 'GB'
|
||||
@font_for_footer = 'GB'
|
||||
when 'BIG5'
|
||||
extend(PDF_Chinese)
|
||||
AddBig5Font()
|
||||
@font_for_content = 'Big5'
|
||||
@font_for_footer = 'Big5'
|
||||
else
|
||||
@font_for_content = 'Arial'
|
||||
@font_for_footer = 'Helvetica'
|
||||
end
|
||||
end
|
||||
SetCreator(Redmine::Info.app_name)
|
||||
SetFont(@font_for_content)
|
||||
@@ -101,12 +107,12 @@ module Redmine
|
||||
RDMPdfEncoding::rdm_pdf_iconv(@ic, txt)
|
||||
end
|
||||
|
||||
def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
|
||||
Cell(w,h,fix_text_encoding(txt),border,ln,align,fill,link)
|
||||
def RDMCell(w ,h=0, txt='', border=0, ln=0, align='', fill=0, link='')
|
||||
Cell(w, h, fix_text_encoding(txt), border, ln, align, fill, link)
|
||||
end
|
||||
|
||||
def RDMMultiCell(w,h=0,txt='',border=0,align='',fill=0)
|
||||
MultiCell(w,h,fix_text_encoding(txt),border,align,fill)
|
||||
def RDMMultiCell(w, h=0, txt='', border=0, align='', fill=0, ln=1)
|
||||
MultiCell(w, h, fix_text_encoding(txt), border, align, fill, ln)
|
||||
end
|
||||
|
||||
def Footer
|
||||
@@ -276,8 +282,6 @@ module Redmine
|
||||
"#{issue.project} - #{issue.tracker} # #{issue.id}: #{issue.subject}")
|
||||
pdf.Ln
|
||||
|
||||
y0 = pdf.GetY
|
||||
|
||||
pdf.SetFontStyle('B',9)
|
||||
pdf.RDMCell(35,5, l(:field_status) + ":","LT")
|
||||
pdf.SetFontStyle('',9)
|
||||
@@ -325,18 +329,18 @@ module Redmine
|
||||
pdf.RDMMultiCell(155,5, (show_value custom_value),"R")
|
||||
end
|
||||
|
||||
y0 = pdf.GetY
|
||||
|
||||
pdf.SetFontStyle('B',9)
|
||||
pdf.RDMCell(35,5, l(:field_subject) + ":","LT")
|
||||
pdf.SetFontStyle('',9)
|
||||
pdf.RDMMultiCell(155,5, issue.subject,"RT")
|
||||
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
|
||||
|
||||
pdf.SetFontStyle('B',9)
|
||||
pdf.RDMCell(35,5, l(:field_description) + ":","LT")
|
||||
pdf.RDMCell(35+155, 5, l(:field_description), "LRT", 1)
|
||||
pdf.SetFontStyle('',9)
|
||||
pdf.RDMMultiCell(155,5, issue.description.to_s,"RT")
|
||||
|
||||
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
|
||||
pdf.Line(pdf.GetX, pdf.GetY, pdf.GetX + 190, pdf.GetY)
|
||||
pdf.RDMMultiCell(35+155, 5, issue.description.to_s, "LRB")
|
||||
pdf.Ln
|
||||
|
||||
if issue.changesets.any? &&
|
||||
@@ -346,8 +350,9 @@ module Redmine
|
||||
pdf.Ln
|
||||
for changeset in issue.changesets
|
||||
pdf.SetFontStyle('B',8)
|
||||
pdf.RDMCell(190,5,
|
||||
format_time(changeset.committed_on) + " - " + changeset.author.to_s)
|
||||
csstr = "#{l(:label_revision)} #{changeset.format_identifier} - "
|
||||
csstr += format_time(changeset.committed_on) + " - " + changeset.author.to_s
|
||||
pdf.RDMCell(190, 5, csstr)
|
||||
pdf.Ln
|
||||
unless changeset.comments.blank?
|
||||
pdf.SetFontStyle('',8)
|
||||
@@ -408,6 +413,13 @@ module Redmine
|
||||
txt = Redmine::CodesetUtil.replace_invalid_utf8(txt)
|
||||
end
|
||||
txt.force_encoding('ASCII-8BIT')
|
||||
elsif RUBY_PLATFORM == 'java'
|
||||
begin
|
||||
ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
|
||||
txt = ic.iconv(txt)
|
||||
rescue
|
||||
txt = txt.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
|
||||
end
|
||||
else
|
||||
ic ||= Iconv.new(l(:general_pdf_encoding), 'UTF-8')
|
||||
txtar = ""
|
||||
|
||||
@@ -199,7 +199,9 @@ module Redmine
|
||||
end
|
||||
|
||||
def self.shellout(cmd, &block)
|
||||
logger.debug "Shelling out: #{strip_credential(cmd)}" if logger && logger.debug?
|
||||
if logger && logger.debug?
|
||||
logger.debug "Shelling out: #{strip_credential(cmd)}"
|
||||
end
|
||||
if Rails.env == 'development'
|
||||
# Capture stderr when running in dev environment
|
||||
cmd = "#{cmd} 2>>#{RAILS_ROOT}/log/scm.stderr.log"
|
||||
@@ -217,7 +219,13 @@ module Redmine
|
||||
rescue Errno::ENOENT => e
|
||||
msg = strip_credential(e.message)
|
||||
# The command failed, log it and re-raise
|
||||
logger.error("SCM command failed, make sure that your SCM binary (eg. svn) is in PATH (#{ENV['PATH']}): #{strip_credential(cmd)}\n with: #{msg}")
|
||||
logmsg = "SCM command failed, "
|
||||
logmsg += "make sure that your SCM command (e.g. svn) is "
|
||||
logmsg += "in PATH (#{ENV['PATH']})\n"
|
||||
logmsg += "You can configure your scm commands in config/configuration.yml.\n"
|
||||
logmsg += "#{strip_credential(cmd)}\n"
|
||||
logmsg += "with: #{msg}"
|
||||
logger.error(logmsg)
|
||||
raise CommandFailed.new(msg)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -95,6 +95,10 @@ module Redmine
|
||||
Info.new(:root_url => CGI.unescape(summary['repository']['root']),
|
||||
:lastrev => Revision.new(:revision => tip['revision'],
|
||||
:scmid => tip['node']))
|
||||
# rescue HgCommandAborted
|
||||
rescue Exception => e
|
||||
logger.error "hg: error during getting info: #{e.message}"
|
||||
nil
|
||||
end
|
||||
|
||||
def tags
|
||||
@@ -276,7 +280,8 @@ module Redmine
|
||||
end
|
||||
blame
|
||||
rescue HgCommandAborted
|
||||
nil # means not found or cannot be annotated
|
||||
# means not found or cannot be annotated
|
||||
Annotate.new
|
||||
end
|
||||
|
||||
class Revision < Redmine::Scm::Adapters::Revision
|
||||
|
||||
@@ -4,13 +4,13 @@ module Redmine
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 1
|
||||
MINOR = 2
|
||||
TINY = 0
|
||||
TINY = 1
|
||||
|
||||
# Branch values:
|
||||
# * official release: nil
|
||||
# * stable branch: stable
|
||||
# * trunk: devel
|
||||
BRANCH = 'devel'
|
||||
BRANCH = 'stable'
|
||||
|
||||
def self.revision
|
||||
revision = nil
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2008 Jean-Philippe Lang
|
||||
# Copyright (C) 2006-2011 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.
|
||||
@@ -29,7 +29,7 @@ General options:
|
||||
create: create a user account
|
||||
no_permission_check=1 disable permission checking when receiving
|
||||
the email
|
||||
|
||||
|
||||
Issue attributes control options:
|
||||
project=PROJECT identifier of the target project
|
||||
status=STATUS name of the target status
|
||||
@@ -58,10 +58,10 @@ END_DESC
|
||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
||||
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
||||
|
||||
|
||||
MailHandler.receive(STDIN.read, options)
|
||||
end
|
||||
|
||||
|
||||
desc <<-END_DESC
|
||||
Read emails from an IMAP server.
|
||||
|
||||
@@ -73,7 +73,7 @@ General options:
|
||||
create: create a user account
|
||||
no_permission_check=1 disable permission checking when receiving
|
||||
the email
|
||||
|
||||
|
||||
Available IMAP options:
|
||||
host=HOST IMAP server host (default: 127.0.0.1)
|
||||
port=PORT IMAP server port (default: 143)
|
||||
@@ -81,7 +81,7 @@ Available IMAP options:
|
||||
username=USERNAME IMAP account
|
||||
password=PASSWORD IMAP password
|
||||
folder=FOLDER IMAP folder to read (default: INBOX)
|
||||
|
||||
|
||||
Issue attributes control options:
|
||||
project=PROJECT identifier of the target project
|
||||
status=STATUS name of the target status
|
||||
@@ -91,22 +91,22 @@ Issue attributes control options:
|
||||
allow_override=ATTRS allow email content to override attributes
|
||||
specified by previous options
|
||||
ATTRS is a comma separated list of attributes
|
||||
|
||||
|
||||
Processed emails control options:
|
||||
move_on_success=MAILBOX move emails that were successfully received
|
||||
to MAILBOX instead of deleting them
|
||||
move_on_failure=MAILBOX move emails that were ignored to MAILBOX
|
||||
|
||||
|
||||
Examples:
|
||||
# No project specified. Emails MUST contain the 'Project' keyword:
|
||||
|
||||
|
||||
rake redmine:email:receive_iamp RAILS_ENV="production" \\
|
||||
host=imap.foo.bar username=redmine@example.net password=xxx
|
||||
|
||||
|
||||
# Fixed project and default tracker specified, but emails can override
|
||||
# both tracker and priority attributes:
|
||||
|
||||
|
||||
rake redmine:email:receive_iamp RAILS_ENV="production" \\
|
||||
host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\
|
||||
project=foo \\
|
||||
@@ -123,7 +123,7 @@ END_DESC
|
||||
:folder => ENV['folder'],
|
||||
:move_on_success => ENV['move_on_success'],
|
||||
:move_on_failure => ENV['move_on_failure']}
|
||||
|
||||
|
||||
options = { :issue => {} }
|
||||
%w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
|
||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||
@@ -132,7 +132,7 @@ END_DESC
|
||||
|
||||
Redmine::IMAP.check(imap_options, options)
|
||||
end
|
||||
|
||||
|
||||
desc <<-END_DESC
|
||||
Read emails from an POP3 server.
|
||||
|
||||
@@ -148,7 +148,7 @@ Available POP3 options:
|
||||
|
||||
See redmine:email:receive_imap for more options and examples.
|
||||
END_DESC
|
||||
|
||||
|
||||
task :receive_pop3 => :environment do
|
||||
pop_options = {:host => ENV['host'],
|
||||
:port => ENV['port'],
|
||||
@@ -156,24 +156,24 @@ END_DESC
|
||||
:username => ENV['username'],
|
||||
:password => ENV['password'],
|
||||
:delete_unprocessed => ENV['delete_unprocessed']}
|
||||
|
||||
|
||||
options = { :issue => {} }
|
||||
%w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
|
||||
options[:allow_override] = ENV['allow_override'] if ENV['allow_override']
|
||||
options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user']
|
||||
options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check']
|
||||
|
||||
|
||||
Redmine::POP3.check(pop_options, options)
|
||||
end
|
||||
|
||||
|
||||
desc "Send a test email to the user with the provided login name"
|
||||
task :test, :login, :needs => :environment do |task, args|
|
||||
include Redmine::I18n
|
||||
abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank?
|
||||
abort l(:notice_email_error, "Please include the user login to test with. Example: rake redmine:email:test[login]") if args[:login].blank?
|
||||
|
||||
user = User.find_by_login(args[:login])
|
||||
abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged?
|
||||
|
||||
abort l(:notice_email_error, "User #{args[:login]} not found") unless user && user.logged?
|
||||
|
||||
ActionMailer::Base.raise_delivery_errors = true
|
||||
begin
|
||||
Mailer.deliver_test(User.current)
|
||||
|
||||
@@ -309,6 +309,7 @@ var WarnLeavingUnsaved = Class.create({
|
||||
},
|
||||
|
||||
unload: function(){
|
||||
this.observedElements.each(function(el) {el.blur();})
|
||||
if(this.changedForms)
|
||||
return this.message;
|
||||
},
|
||||
|
||||
@@ -434,6 +434,10 @@ input#time_entry_comments { width: 90%;}
|
||||
.tabular.settings label{ margin-left: -300px; width: 295px; }
|
||||
.tabular.settings textarea { width: 99%; }
|
||||
|
||||
.tabular.settings.enabled_scm table {width:100%}
|
||||
.tabular.settings.enabled_scm td.scm_name{ font-weight: bold; }
|
||||
.tabular.settings.enabled_scm p.scm_config{ padding-left: 8px; font-style:italic;}
|
||||
|
||||
fieldset.settings label { display: block; }
|
||||
fieldset#notified_events .parent { padding-left: 20px; }
|
||||
|
||||
@@ -505,6 +509,8 @@ div.flash.warning {
|
||||
color: #A6750C;
|
||||
}
|
||||
|
||||
span.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
|
||||
|
||||
#errorExplanation ul { font-size: 0.9em;}
|
||||
#errorExplanation h2, #errorExplanation p { display: none; }
|
||||
|
||||
|
||||
7
test/fixtures/journals.yml
vendored
7
test/fixtures/journals.yml
vendored
@@ -27,3 +27,10 @@ journals_004:
|
||||
journalized_type: Issue
|
||||
user_id: 1
|
||||
journalized_id: 6
|
||||
journals_005:
|
||||
id: 5
|
||||
created_on: <%= 1.days.ago.to_date.to_s(:db) %>
|
||||
notes: "A comment on a private issue."
|
||||
user_id: 2
|
||||
journalized_type: Issue
|
||||
journalized_id: 14
|
||||
|
||||
@@ -38,6 +38,6 @@ massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo
|
||||
pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
|
||||
|
||||
Project: onlinestore
|
||||
Tracker: Feature request
|
||||
category: Stock management
|
||||
priority: Urgent
|
||||
Tracker: Feature Request
|
||||
category: stock management
|
||||
priority: URGENT
|
||||
|
||||
1
test/fixtures/roles.yml
vendored
1
test/fixtures/roles.yml
vendored
@@ -22,6 +22,7 @@ roles_001:
|
||||
- :delete_issues
|
||||
- :view_issue_watchers
|
||||
- :add_issue_watchers
|
||||
- :set_issues_private
|
||||
- :delete_issue_watchers
|
||||
- :manage_public_queries
|
||||
- :save_queries
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require 'application_controller'
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class ApplicationController; def rescue_action(e) raise e end; end
|
||||
|
||||
class ApplicationControllerTest < ActionController::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class CalendarsControllerTest < ActionController::TestCase
|
||||
|
||||
context "GET :show" do
|
||||
should "run custom queries" do
|
||||
@query = Query.generate_default!
|
||||
@query = Query.generate_default!(:is_public => true)
|
||||
|
||||
get :show, :query_id => @query.id
|
||||
assert_response :success
|
||||
|
||||
@@ -74,6 +74,8 @@ class IssueRelationsControllerTest < ActionController::TestCase
|
||||
:relation => {:issue_to_id => '4', :relation_type => 'relates', :delay => ''}
|
||||
end
|
||||
end
|
||||
|
||||
should "prevent relation creation when there's a circular dependency"
|
||||
|
||||
def test_destroy
|
||||
assert_difference 'IssueRelation.count', -1 do
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user