Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b775baace0 |
@@ -21,8 +21,8 @@ class IssueRelationsController < ApplicationController
|
|||||||
def new
|
def new
|
||||||
@relation = IssueRelation.new(params[:relation])
|
@relation = IssueRelation.new(params[:relation])
|
||||||
@relation.issue_from = @issue
|
@relation.issue_from = @issue
|
||||||
if params[:relation] && m = params[:relation][:issue_to_id].to_s.match(/^#?(\d+)$/)
|
if params[:relation] && !params[:relation][:issue_to_id].blank?
|
||||||
@relation.issue_to = Issue.visible.find_by_id(m[1].to_i)
|
@relation.issue_to = Issue.visible.find_by_id(params[:relation][:issue_to_id])
|
||||||
end
|
end
|
||||||
@relation.save if request.post?
|
@relation.save if request.post?
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
|||||||
@@ -57,13 +57,12 @@ class IssuesController < ApplicationController
|
|||||||
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
|
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
|
||||||
|
|
||||||
if @query.valid?
|
if @query.valid?
|
||||||
limit = case params[:format]
|
limit = per_page_option
|
||||||
when 'csv', 'pdf'
|
respond_to do |format|
|
||||||
Setting.issues_export_limit.to_i
|
format.html { }
|
||||||
when 'atom'
|
format.atom { limit = Setting.feeds_limit.to_i }
|
||||||
Setting.feeds_limit.to_i
|
format.csv { limit = Setting.issues_export_limit.to_i }
|
||||||
else
|
format.pdf { limit = Setting.issues_export_limit.to_i }
|
||||||
per_page_option
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@issue_count = @query.issue_count
|
@issue_count = @query.issue_count
|
||||||
@@ -107,7 +106,7 @@ class IssuesController < ApplicationController
|
|||||||
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
|
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
|
||||||
@journals.each_with_index {|j,i| j.indice = i+1}
|
@journals.each_with_index {|j,i| j.indice = i+1}
|
||||||
@journals.reverse! if User.current.wants_comments_in_reverse_order?
|
@journals.reverse! if User.current.wants_comments_in_reverse_order?
|
||||||
@changesets = @issue.changesets.visible.all
|
@changesets = @issue.changesets
|
||||||
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
|
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
|
||||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||||
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
||||||
@@ -359,7 +358,6 @@ class IssuesController < ApplicationController
|
|||||||
def gantt
|
def gantt
|
||||||
@gantt = Redmine::Helpers::Gantt.new(params)
|
@gantt = Redmine::Helpers::Gantt.new(params)
|
||||||
retrieve_query
|
retrieve_query
|
||||||
@query.group_by = nil
|
|
||||||
if @query.valid?
|
if @query.valid?
|
||||||
events = []
|
events = []
|
||||||
# Issues that have start and due dates
|
# Issues that have start and due dates
|
||||||
@@ -399,7 +397,6 @@ class IssuesController < ApplicationController
|
|||||||
|
|
||||||
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
|
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
|
||||||
retrieve_query
|
retrieve_query
|
||||||
@query.group_by = nil
|
|
||||||
if @query.valid?
|
if @query.valid?
|
||||||
events = []
|
events = []
|
||||||
events += @query.issues(:include => [:tracker, :assigned_to, :priority],
|
events += @query.issues(:include => [:tracker, :assigned_to, :priority],
|
||||||
|
|||||||
@@ -320,9 +320,13 @@ class ProjectsController < ApplicationController
|
|||||||
@issues_by_version = {}
|
@issues_by_version = {}
|
||||||
unless @selected_tracker_ids.empty?
|
unless @selected_tracker_ids.empty?
|
||||||
@versions.each do |version|
|
@versions.each do |version|
|
||||||
|
conditions = {:tracker_id => @selected_tracker_ids}
|
||||||
|
if !@project.versions.include?(version)
|
||||||
|
conditions.merge!(:project_id => project_ids)
|
||||||
|
end
|
||||||
issues = version.fixed_issues.visible.find(:all,
|
issues = version.fixed_issues.visible.find(:all,
|
||||||
:include => [:project, :status, :tracker, :priority],
|
:include => [:project, :status, :tracker, :priority],
|
||||||
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
|
:conditions => conditions,
|
||||||
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
||||||
@issues_by_version[version] = issues
|
@issues_by_version[version] = issues
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -506,17 +506,17 @@ module ApplicationHelper
|
|||||||
# Forum messages:
|
# Forum messages:
|
||||||
# message#1218 -> Link to message with id 1218
|
# message#1218 -> Link to message with id 1218
|
||||||
text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|<|$)}) do |m|
|
text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|<|$)}) do |m|
|
||||||
leading, esc, prefix, sep, identifier = $1, $2, $3, $5 || $7, $6 || $8
|
leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
|
||||||
link = nil
|
link = nil
|
||||||
if esc.nil?
|
if esc.nil?
|
||||||
if prefix.nil? && sep == 'r'
|
if prefix.nil? && sep == 'r'
|
||||||
if project && (changeset = project.changesets.find_by_revision(identifier))
|
if project && (changeset = project.changesets.find_by_revision(oid))
|
||||||
link = link_to("r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
|
link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
|
||||||
:class => 'changeset',
|
:class => 'changeset',
|
||||||
:title => truncate_single_line(changeset.comments, :length => 100))
|
:title => truncate_single_line(changeset.comments, :length => 100))
|
||||||
end
|
end
|
||||||
elsif sep == '#'
|
elsif sep == '#'
|
||||||
oid = identifier.to_i
|
oid = oid.to_i
|
||||||
case prefix
|
case prefix
|
||||||
when nil
|
when nil
|
||||||
if issue = Issue.visible.find_by_id(oid, :include => :status)
|
if issue = Issue.visible.find_by_id(oid, :include => :status)
|
||||||
@@ -547,7 +547,7 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
elsif sep == ':'
|
elsif sep == ':'
|
||||||
# removes the double quotes if any
|
# removes the double quotes if any
|
||||||
name = identifier.gsub(%r{^"(.*)"$}, "\\1")
|
name = oid.gsub(%r{^"(.*)"$}, "\\1")
|
||||||
case prefix
|
case prefix
|
||||||
when 'document'
|
when 'document'
|
||||||
if project && document = project.documents.find_by_title(name)
|
if project && document = project.documents.find_by_title(name)
|
||||||
@@ -584,7 +584,7 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
leading + (link || "#{prefix}#{sep}#{identifier}")
|
leading + (link || "#{prefix}#{sep}#{oid}")
|
||||||
end
|
end
|
||||||
|
|
||||||
text
|
text
|
||||||
|
|||||||
+11
-28
@@ -1,5 +1,5 @@
|
|||||||
# Redmine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
# Copyright (C) 2006-2008 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
@@ -41,9 +41,6 @@ class Changeset < ActiveRecord::Base
|
|||||||
validates_uniqueness_of :revision, :scope => :repository_id
|
validates_uniqueness_of :revision, :scope => :repository_id
|
||||||
validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
|
validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
|
||||||
|
|
||||||
named_scope :visible, lambda {|*args| { :include => {:repository => :project},
|
|
||||||
:conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } }
|
|
||||||
|
|
||||||
def revision=(r)
|
def revision=(r)
|
||||||
write_attribute :revision, (r.nil? ? nil : r.to_s)
|
write_attribute :revision, (r.nil? ? nil : r.to_s)
|
||||||
end
|
end
|
||||||
@@ -57,10 +54,6 @@ class Changeset < ActiveRecord::Base
|
|||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def committer=(arg)
|
|
||||||
write_attribute(:committer, self.class.to_utf8(arg.to_s))
|
|
||||||
end
|
|
||||||
|
|
||||||
def project
|
def project
|
||||||
repository.project
|
repository.project
|
||||||
end
|
end
|
||||||
@@ -84,6 +77,9 @@ class Changeset < ActiveRecord::Base
|
|||||||
ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
|
ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
|
||||||
# keywords used to fix issues
|
# keywords used to fix issues
|
||||||
fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
|
fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
|
||||||
|
# status and optional done ratio applied
|
||||||
|
fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
|
||||||
|
done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
|
||||||
|
|
||||||
kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
|
kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
|
||||||
return if kw_regexp.blank?
|
return if kw_regexp.blank?
|
||||||
@@ -94,14 +90,14 @@ class Changeset < ActiveRecord::Base
|
|||||||
# find any issue ID in the comments
|
# find any issue ID in the comments
|
||||||
target_issue_ids = []
|
target_issue_ids = []
|
||||||
comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
|
comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
|
||||||
referenced_issues += find_referenced_issues_by_id(target_issue_ids)
|
referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
|
comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
|
||||||
action = match[0]
|
action = match[0]
|
||||||
target_issue_ids = match[1].scan(/\d+/)
|
target_issue_ids = match[1].scan(/\d+/)
|
||||||
target_issues = find_referenced_issues_by_id(target_issue_ids)
|
target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
|
||||||
if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
|
if fix_status && fix_keywords.include?(action.downcase)
|
||||||
# update status of issues
|
# update status of issues
|
||||||
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
|
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
|
||||||
target_issues.each do |issue|
|
target_issues.each do |issue|
|
||||||
@@ -115,9 +111,7 @@ class Changeset < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext))
|
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext))
|
||||||
issue.status = fix_status
|
issue.status = fix_status
|
||||||
unless Setting.commit_fix_done_ratio.blank?
|
issue.done_ratio = done_ratio if done_ratio
|
||||||
issue.done_ratio = Setting.commit_fix_done_ratio.to_i
|
|
||||||
end
|
|
||||||
Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update,
|
Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update,
|
||||||
{ :changeset => self, :issue => issue })
|
{ :changeset => self, :issue => issue })
|
||||||
issue.save
|
issue.save
|
||||||
@@ -126,8 +120,7 @@ class Changeset < ActiveRecord::Base
|
|||||||
referenced_issues += target_issues
|
referenced_issues += target_issues
|
||||||
end
|
end
|
||||||
|
|
||||||
referenced_issues.uniq!
|
self.issues = referenced_issues.uniq
|
||||||
self.issues = referenced_issues unless referenced_issues.empty?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def short_comments
|
def short_comments
|
||||||
@@ -155,15 +148,6 @@ class Changeset < ActiveRecord::Base
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Finds issues that can be referenced by the commit message
|
|
||||||
# i.e. issues that belong to the repository project, a subproject or a parent project
|
|
||||||
def find_referenced_issues_by_id(ids)
|
|
||||||
return [] if ids.compact.empty?
|
|
||||||
Issue.find_all_by_id(ids, :include => :project).select {|issue|
|
|
||||||
project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def split_comments
|
def split_comments
|
||||||
comments =~ /\A(.+?)\r?\n(.*)$/m
|
comments =~ /\A(.+?)\r?\n(.*)$/m
|
||||||
@short_comments = $1 || comments
|
@short_comments = $1 || comments
|
||||||
@@ -176,12 +160,11 @@ class Changeset < ActiveRecord::Base
|
|||||||
encoding = Setting.commit_logs_encoding.to_s.strip
|
encoding = Setting.commit_logs_encoding.to_s.strip
|
||||||
unless encoding.blank? || encoding == 'UTF-8'
|
unless encoding.blank? || encoding == 'UTF-8'
|
||||||
begin
|
begin
|
||||||
str = Iconv.conv('UTF-8', encoding, str)
|
return Iconv.conv('UTF-8', encoding, str)
|
||||||
rescue Iconv::Failure
|
rescue Iconv::Failure
|
||||||
# do nothing here
|
# do nothing here
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# removes invalid UTF8 sequences
|
str
|
||||||
Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3]
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+1
-2
@@ -159,8 +159,7 @@ class Issue < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
send :attributes_without_tracker_first=, new_attributes, *args
|
send :attributes_without_tracker_first=, new_attributes, *args
|
||||||
end
|
end
|
||||||
# Do not redefine alias chain on reload (see #4838)
|
alias_method_chain :attributes=, :tracker_first
|
||||||
alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=)
|
|
||||||
|
|
||||||
def estimated_hours=(h)
|
def estimated_hours=(h)
|
||||||
write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h)
|
write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h)
|
||||||
|
|||||||
+4
-23
@@ -51,12 +51,12 @@ class Project < ActiveRecord::Base
|
|||||||
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
|
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
|
||||||
:association_foreign_key => 'custom_field_id'
|
:association_foreign_key => 'custom_field_id'
|
||||||
|
|
||||||
acts_as_nested_set :order => 'name'
|
acts_as_nested_set :order => 'name', :dependent => :destroy
|
||||||
acts_as_attachable :view_permission => :view_files,
|
acts_as_attachable :view_permission => :view_files,
|
||||||
:delete_permission => :manage_files
|
:delete_permission => :manage_files
|
||||||
|
|
||||||
acts_as_customizable
|
acts_as_customizable
|
||||||
acts_as_searchable :columns => ['name', 'identifier', 'description'], :project_key => 'id', :permission => nil
|
acts_as_searchable :columns => ['name', 'description'], :project_key => 'id', :permission => nil
|
||||||
acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
|
acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
|
||||||
:url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
|
:url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
|
||||||
:author => nil
|
:author => nil
|
||||||
@@ -74,7 +74,7 @@ class Project < ActiveRecord::Base
|
|||||||
# reserved words
|
# reserved words
|
||||||
validates_exclusion_of :identifier, :in => %w( new )
|
validates_exclusion_of :identifier, :in => %w( new )
|
||||||
|
|
||||||
before_destroy :delete_all_members, :destroy_children
|
before_destroy :delete_all_members
|
||||||
|
|
||||||
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
|
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
|
||||||
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
|
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
|
||||||
@@ -249,7 +249,7 @@ class Project < ActiveRecord::Base
|
|||||||
return @allowed_parents if @allowed_parents
|
return @allowed_parents if @allowed_parents
|
||||||
@allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects))
|
@allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects))
|
||||||
@allowed_parents = @allowed_parents - self_and_descendants
|
@allowed_parents = @allowed_parents - self_and_descendants
|
||||||
if User.current.allowed_to?(:add_project, nil, :global => true) || (!new_record? && parent.nil?)
|
if User.current.allowed_to?(:add_project, nil, :global => true)
|
||||||
@allowed_parents << nil
|
@allowed_parents << nil
|
||||||
end
|
end
|
||||||
unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent)
|
unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent)
|
||||||
@@ -499,36 +499,17 @@ class Project < ActiveRecord::Base
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Destroys children before destroying self
|
|
||||||
def destroy_children
|
|
||||||
children.each do |child|
|
|
||||||
child.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Copies wiki from +project+
|
# Copies wiki from +project+
|
||||||
def copy_wiki(project)
|
def copy_wiki(project)
|
||||||
# Check that the source project has a wiki first
|
# Check that the source project has a wiki first
|
||||||
unless project.wiki.nil?
|
unless project.wiki.nil?
|
||||||
self.wiki ||= Wiki.new
|
self.wiki ||= Wiki.new
|
||||||
wiki.attributes = project.wiki.attributes.dup.except("id", "project_id")
|
wiki.attributes = project.wiki.attributes.dup.except("id", "project_id")
|
||||||
wiki_pages_map = {}
|
|
||||||
project.wiki.pages.each do |page|
|
project.wiki.pages.each do |page|
|
||||||
# Skip pages without content
|
|
||||||
next if page.content.nil?
|
|
||||||
new_wiki_content = WikiContent.new(page.content.attributes.dup.except("id", "page_id", "updated_on"))
|
new_wiki_content = WikiContent.new(page.content.attributes.dup.except("id", "page_id", "updated_on"))
|
||||||
new_wiki_page = WikiPage.new(page.attributes.dup.except("id", "wiki_id", "created_on", "parent_id"))
|
new_wiki_page = WikiPage.new(page.attributes.dup.except("id", "wiki_id", "created_on", "parent_id"))
|
||||||
new_wiki_page.content = new_wiki_content
|
new_wiki_page.content = new_wiki_content
|
||||||
wiki.pages << new_wiki_page
|
wiki.pages << new_wiki_page
|
||||||
wiki_pages_map[page.id] = new_wiki_page
|
|
||||||
end
|
|
||||||
wiki.save
|
|
||||||
# Reproduce page hierarchy
|
|
||||||
project.wiki.pages.each do |page|
|
|
||||||
if page.parent_id && wiki_pages_map[page.id]
|
|
||||||
wiki_pages_map[page.id].parent = wiki_pages_map[page.parent_id]
|
|
||||||
wiki_pages_map[page.id].save
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -210,10 +210,6 @@ class Query < ActiveRecord::Base
|
|||||||
add_custom_fields_filters(@project.all_issue_custom_fields)
|
add_custom_fields_filters(@project.all_issue_custom_fields)
|
||||||
else
|
else
|
||||||
# global filters for cross project issue list
|
# global filters for cross project issue list
|
||||||
system_shared_versions = Version.visible.find_all_by_sharing('system')
|
|
||||||
unless system_shared_versions.empty?
|
|
||||||
@available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
|
|
||||||
end
|
|
||||||
add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true}))
|
add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true}))
|
||||||
end
|
end
|
||||||
@available_filters
|
@available_filters
|
||||||
|
|||||||
@@ -136,7 +136,6 @@ class Repository < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
@committers = nil
|
@committers = nil
|
||||||
@found_committer_users = nil
|
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
@@ -147,34 +146,24 @@ class Repository < ActiveRecord::Base
|
|||||||
# It will return nil if the committer is not yet mapped and if no User
|
# It will return nil if the committer is not yet mapped and if no User
|
||||||
# with the same username or email was found
|
# with the same username or email was found
|
||||||
def find_committer_user(committer)
|
def find_committer_user(committer)
|
||||||
unless committer.blank?
|
if committer
|
||||||
@found_committer_users ||= {}
|
|
||||||
return @found_committer_users[committer] if @found_committer_users.has_key?(committer)
|
|
||||||
|
|
||||||
user = nil
|
|
||||||
c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
|
c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
|
||||||
if c && c.user
|
if c && c.user
|
||||||
user = c.user
|
c.user
|
||||||
elsif committer.strip =~ /^([^<]+)(<(.*)>)?$/
|
elsif committer.strip =~ /^([^<]+)(<(.*)>)?$/
|
||||||
username, email = $1.strip, $3
|
username, email = $1.strip, $3
|
||||||
u = User.find_by_login(username)
|
u = User.find_by_login(username)
|
||||||
u ||= User.find_by_mail(email) unless email.blank?
|
u ||= User.find_by_mail(email) unless email.blank?
|
||||||
user = u
|
u
|
||||||
end
|
end
|
||||||
@found_committer_users[committer] = user
|
|
||||||
user
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Fetches new changesets for all repositories of active projects
|
# fetch new changesets for all repositories
|
||||||
# Can be called periodically by an external script
|
# can be called periodically by an external script
|
||||||
# eg. ruby script/runner "Repository.fetch_changesets"
|
# eg. ruby script/runner "Repository.fetch_changesets"
|
||||||
def self.fetch_changesets
|
def self.fetch_changesets
|
||||||
Project.active.has_module(:repository).find(:all, :include => :repository).each do |project|
|
find(:all).each(&:fetch_changesets)
|
||||||
if project.repository
|
|
||||||
project.repository.fetch_changesets
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# scan changeset comments to find related and fixed issues for all repositories
|
# scan changeset comments to find related and fixed issues for all repositories
|
||||||
|
|||||||
@@ -40,26 +40,23 @@ class Repository::Git < Repository
|
|||||||
# With SCM's that have a sequential commit numbering, redmine is able to be
|
# With SCM's that have a sequential commit numbering, redmine is able to be
|
||||||
# clever and only fetch changesets going forward from the most recent one
|
# clever and only fetch changesets going forward from the most recent one
|
||||||
# it knows about. However, with git, you never know if people have merged
|
# it knows about. However, with git, you never know if people have merged
|
||||||
# commits into the middle of the repository history, so we should parse
|
# commits into the middle of the repository history, so we always have to
|
||||||
# the entire log. Since it's way too slow for large repositories, we only
|
# parse the entire log.
|
||||||
# parse 1 week before the last known commit.
|
|
||||||
# The repository can still be fully reloaded by calling #clear_changesets
|
|
||||||
# before fetching changesets (eg. for offline resync)
|
|
||||||
def fetch_changesets
|
def fetch_changesets
|
||||||
c = changesets.find(:first, :order => 'committed_on DESC')
|
# Save ourselves an expensive operation if we're already up to date
|
||||||
since = (c ? c.committed_on - 7.days : nil)
|
return if scm.num_revisions == changesets.count
|
||||||
|
|
||||||
revisions = scm.revisions('', nil, nil, :all => true, :since => since)
|
revisions = scm.revisions('', nil, nil, :all => true)
|
||||||
return if revisions.nil? || revisions.empty?
|
return if revisions.nil? || revisions.empty?
|
||||||
|
|
||||||
recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since])
|
# Find revisions that redmine knows about already
|
||||||
|
existing_revisions = changesets.find(:all).map!{|c| c.scmid}
|
||||||
|
|
||||||
# Clean out revisions that are no longer in git
|
# Clean out revisions that are no longer in git
|
||||||
recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }}
|
Changeset.delete_all(["scmid NOT IN (?) AND repository_id = (?)", revisions.map{|r| r.scmid}, self.id])
|
||||||
|
|
||||||
# Subtract revisions that redmine already knows about
|
# Subtract revisions that redmine already knows about
|
||||||
recent_revisions = recent_changesets.map{|c| c.scmid}
|
revisions.reject!{|r| existing_revisions.include?(r.scmid)}
|
||||||
revisions.reject!{|r| recent_revisions.include?(r.scmid)}
|
|
||||||
|
|
||||||
# Save the remaining ones to the database
|
# Save the remaining ones to the database
|
||||||
revisions.each{|r| r.save(self)} unless revisions.nil?
|
revisions.each{|r| r.save(self)} unless revisions.nil?
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<div class="autoscroll">
|
|
||||||
<table class="list">
|
<table class="list">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th><%=l(:label_project)%></th>
|
<th><%=l(:label_project)%></th>
|
||||||
@@ -41,6 +40,5 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
|
||||||
<% html_title(l(:label_project_plural)) -%>
|
<% html_title(l(:label_project_plural)) -%>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<h2><%= link_to l(:label_group_plural), groups_path %> » <%= l(:label_group_new) %></h2>
|
<h2><%= link_to l(:label_group_plural), groups_path %> » <%= l(:label_group_new) %></h2>
|
||||||
|
|
||||||
|
<%= error_messages_for :group %>
|
||||||
|
|
||||||
<% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %>
|
<% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %>
|
||||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||||
<p><%= f.submit l(:button_create) %></p>
|
<p><%= f.submit l(:button_create) %></p>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<% form_tag({}) do -%>
|
<% form_tag({}) do -%>
|
||||||
<%= hidden_field_tag 'back_url', url_for(params) %>
|
<%= hidden_field_tag 'back_url', url_for(params) %>
|
||||||
<div class="autoscroll">
|
|
||||||
<table class="list issues">
|
<table class="list issues">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
||||||
@@ -32,5 +31,4 @@
|
|||||||
<% end -%>
|
<% end -%>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ top = headers_height + 8
|
|||||||
<%= link_to_issue i %>
|
<%= link_to_issue i %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="icon icon-package">
|
<span class="icon icon-package">
|
||||||
|
<%= h("#{i.project} -") unless @project && @project == i.project %>
|
||||||
<%= link_to_version i %>
|
<%= link_to_version i %>
|
||||||
</span>
|
</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -210,7 +211,8 @@ top = headers_height + 10
|
|||||||
%>
|
%>
|
||||||
<div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone"> </div>
|
<div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone"> </div>
|
||||||
<div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
|
<div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
|
||||||
<strong><%= format_version_name i %></strong>
|
<%= h("#{i.project} -") unless @project && @project == i.project %>
|
||||||
|
<strong><%=h i %></strong>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% top = top + 20
|
<% top = top + 20
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% if @changesets.any? %>
|
<% if @changesets.any? && User.current.allowed_to?(:view_changesets, @project) %>
|
||||||
<div id="issue-changesets">
|
<div id="issue-changesets">
|
||||||
<h3><%=l(:label_associated_revisions)%></h3>
|
<h3><%=l(:label_associated_revisions)%></h3>
|
||||||
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
|
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<h1><%= link_to(h("#{issue.tracker.name} ##{issue.id}: #{issue.subject}"), issue_url) %></h1>
|
<h1><%= link_to "#{issue.tracker.name} ##{issue.id}: #{issue.subject}", issue_url %></h1>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><%=l(:field_author)%>: <%=h issue.author %></li>
|
<li><%=l(:field_author)%>: <%= issue.author %></li>
|
||||||
<li><%=l(:field_status)%>: <%=h issue.status %></li>
|
<li><%=l(:field_status)%>: <%= issue.status %></li>
|
||||||
<li><%=l(:field_priority)%>: <%=h issue.priority %></li>
|
<li><%=l(:field_priority)%>: <%= issue.priority %></li>
|
||||||
<li><%=l(:field_assigned_to)%>: <%=h issue.assigned_to %></li>
|
<li><%=l(:field_assigned_to)%>: <%= issue.assigned_to %></li>
|
||||||
<li><%=l(:field_category)%>: <%=h issue.category %></li>
|
<li><%=l(:field_category)%>: <%= issue.category %></li>
|
||||||
<li><%=l(:field_fixed_version)%>: <%=h issue.fixed_version %></li>
|
<li><%=l(:field_fixed_version)%>: <%= issue.fixed_version %></li>
|
||||||
<% issue.custom_values.each do |c| %>
|
<% issue.custom_values.each do |c| %>
|
||||||
<li><%=h c.custom_field.name %>: <%=h show_value(c) %></li>
|
<li><%= c.custom_field.name %>: <%= show_value(c) %></li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<p><%= l(:mail_body_account_activation_request, h(@user.login)) %></p>
|
<p><%= l(:mail_body_account_activation_request, @user.login) %></p>
|
||||||
<p><%= link_to @url, @url %></p>
|
<p><%= link_to @url, @url %></p>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<% if @user.auth_source %>
|
<% if @user.auth_source %>
|
||||||
<p><%= l(:mail_body_account_information_external, h(@user.auth_source.name)) %></p>
|
<p><%= l(:mail_body_account_information_external, @user.auth_source.name) %></p>
|
||||||
<% else %>
|
<% else %>
|
||||||
<p><%= l(:mail_body_account_information) %>:</p>
|
<p><%= l(:mail_body_account_information) %>:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><%= l(:field_login) %>: <%=h @user.login %></li>
|
<li><%= l(:field_login) %>: <%= @user.login %></li>
|
||||||
<li><%= l(:field_password) %>: <%=h @password %></li>
|
<li><%= l(:field_password) %>: <%= @password %></li>
|
||||||
</ul>
|
</ul>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<%= link_to @added_to, @added_to_url %><br />
|
<%= link_to @added_to, @added_to_url %><br />
|
||||||
|
|
||||||
<ul><% @attachments.each do |attachment | %>
|
<ul><% @attachments.each do |attachment | %>
|
||||||
<li><%=h attachment.filename %></li>
|
<li><%= attachment.filename %></li>
|
||||||
<% end %></ul>
|
<% end %></ul>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<%= link_to(h(@document.title), @document_url) %> (<%=h @document.category.name %>)<br />
|
<%= link_to @document.title, @document_url %> (<%= @document.category.name %>)<br />
|
||||||
<br />
|
<br />
|
||||||
<%= textilizable(@document, :description, :only_path => false) %>
|
<%= textilizable(@document, :description, :only_path => false) %>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => h(@issue.author)) %>
|
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => @issue.author) %>
|
||||||
<hr />
|
<hr />
|
||||||
<%= render :partial => "issue_text_html", :locals => { :issue => @issue, :issue_url => @issue_url } %>
|
<%= render :partial => "issue_text_html", :locals => { :issue => @issue, :issue_url => @issue_url } %>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => h(@journal.user)) %>
|
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => @journal.user) %>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<% for detail in @journal.details %>
|
<% for detail in @journal.details %>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<p><%= l(:mail_body_lost_password) %><br />
|
<p><%= l(:mail_body_lost_password) %><br />
|
||||||
<%= auto_link(@url) %></p>
|
<%= auto_link(@url) %></p>
|
||||||
|
|
||||||
<p><%= l(:field_login) %>: <b><%=h @token.user.login %></b></p>
|
<p><%= l(:field_login) %>: <b><%= @token.user.login %></b></p>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %></h1>
|
<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to @message.subject, @message_url %></h1>
|
||||||
<em><%=h @message.author %></em>
|
<em><%= @message.author %></em>
|
||||||
|
|
||||||
<%= textilizable(@message, :content, :only_path => false) %>
|
<%= textilizable(@message, :content, :only_path => false) %>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<h1><%= link_to(h(@news.title), @news_url) %></h1>
|
<h1><%= link_to @news.title, @news_url %></h1>
|
||||||
<em><%=h @news.author.name %></em>
|
<em><%= @news.author.name %></em>
|
||||||
|
|
||||||
<%= textilizable(@news, :description, :only_path => false) %>
|
<%= textilizable(@news, :description, :only_path => false) %>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<div class="contextual">
|
<div class="contextual">
|
||||||
<%= watcher_tag(@topic, User.current) %>
|
<%= watcher_tag(@topic, User.current) %>
|
||||||
<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment') unless @topic.locked? %>
|
<%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment' %>
|
||||||
<%= link_to(l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit') if @message.editable_by?(User.current) %>
|
<%= link_to(l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit') if @message.editable_by?(User.current) %>
|
||||||
<%= link_to(l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') if @message.destroyable_by?(User.current) %>
|
<%= link_to(l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') if @message.destroyable_by?(User.current) %>
|
||||||
</div>
|
</div>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<% @replies.each do |message| %>
|
<% @replies.each do |message| %>
|
||||||
<div class="message reply" id="<%= "message-#{message.id}" %>">
|
<div class="message reply" id="<%= "message-#{message.id}" %>">
|
||||||
<div class="contextual">
|
<div class="contextual">
|
||||||
<%= link_to_remote_if_authorized(image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote)) unless @topic.locked? %>
|
<%= link_to_remote_if_authorized image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote) %>
|
||||||
<%= link_to(image_tag('edit.png'), {:action => 'edit', :id => message}, :title => l(:button_edit)) if message.editable_by?(User.current) %>
|
<%= link_to(image_tag('edit.png'), {:action => 'edit', :id => message}, :title => l(:button_edit)) if message.editable_by?(User.current) %>
|
||||||
<%= link_to(image_tag('delete.png'), {:action => 'destroy', :id => message}, :method => :post, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) if message.destroyable_by?(User.current) %>
|
<%= link_to(image_tag('delete.png'), {:action => 'destroy', :id => message}, :method => :post, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) if message.destroyable_by?(User.current) %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<h3><%= l(:label_calendar) %></h3>
|
<h3><%= l(:label_calendar) %></h3>
|
||||||
|
|
||||||
<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week)
|
<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week)
|
||||||
calendar.events = Issue.visible.find :all,
|
calendar.events = Issue.find :all,
|
||||||
:conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt],
|
:conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt],
|
||||||
:include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %>
|
:include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<%= textilizable @project.description %>
|
<%= textilizable @project.description %>
|
||||||
<ul>
|
<ul>
|
||||||
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link(h(@project.homepage)) %></li><% end %>
|
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= link_to(h(@project.homepage), @project.homepage) %></li><% end %>
|
||||||
<% if @subprojects.any? %>
|
<% if @subprojects.any? %>
|
||||||
<li><%=l(:label_subproject_plural)%>:
|
<li><%=l(:label_subproject_plural)%>:
|
||||||
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
|
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<div class="autoscroll">
|
|
||||||
<table class="list">
|
<table class="list">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<%= sort_header_tag('login', :caption => l(:field_login)) %>
|
<%= sort_header_tag('login', :caption => l(:field_login)) %>
|
||||||
@@ -42,7 +41,7 @@
|
|||||||
<% end -%>
|
<% end -%>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
<p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
|
<p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
|
||||||
|
|
||||||
<% html_title(l(:label_user_plural)) -%>
|
<% html_title(l(:label_user_plural)) -%>
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
<% form_tag({}, :id => 'workflow_form' ) do %>
|
<% form_tag({}, :id => 'workflow_form' ) do %>
|
||||||
<%= hidden_field_tag 'tracker_id', @tracker.id %>
|
<%= hidden_field_tag 'tracker_id', @tracker.id %>
|
||||||
<%= hidden_field_tag 'role_id', @role.id %>
|
<%= hidden_field_tag 'role_id', @role.id %>
|
||||||
<div class="autoscroll">
|
|
||||||
<table class="list">
|
<table class="list">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -53,7 +52,6 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
<p><%= check_all_links 'workflow_form' %></p>
|
<p><%= check_all_links 'workflow_form' %></p>
|
||||||
|
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= submit_tag l(:button_save) %>
|
||||||
|
|||||||
@@ -1,70 +1,4 @@
|
|||||||
# = Outgoing email settings
|
# Outgoing email settings
|
||||||
#
|
|
||||||
# Each environment has it's own configuration options. If you are only
|
|
||||||
# running in production, only the production block needs to be configured.
|
|
||||||
#
|
|
||||||
# == Common configurations
|
|
||||||
#
|
|
||||||
# === Sendmail command
|
|
||||||
#
|
|
||||||
# production:
|
|
||||||
# delivery_method: :sendmail
|
|
||||||
#
|
|
||||||
# === Simple SMTP server at localhost
|
|
||||||
#
|
|
||||||
# production:
|
|
||||||
# delivery_method: :smtp
|
|
||||||
# smtp_settings:
|
|
||||||
# address: "localhost"
|
|
||||||
# port: 25
|
|
||||||
#
|
|
||||||
# === SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
|
|
||||||
#
|
|
||||||
# production:
|
|
||||||
# delivery_method: :smtp
|
|
||||||
# smtp_settings:
|
|
||||||
# address: "example.com"
|
|
||||||
# port: 25
|
|
||||||
# authentication: :login
|
|
||||||
# domain: 'foo.com'
|
|
||||||
# user_name: 'myaccount'
|
|
||||||
# password: 'password'
|
|
||||||
#
|
|
||||||
# === SMTP server at example.com using PLAIN authentication
|
|
||||||
#
|
|
||||||
# production:
|
|
||||||
# delivery_method: :smtp
|
|
||||||
# smtp_settings:
|
|
||||||
# address: "example.com"
|
|
||||||
# port: 25
|
|
||||||
# authentication: :plain
|
|
||||||
# domain: 'example.com'
|
|
||||||
# user_name: 'myaccount'
|
|
||||||
# password: 'password'
|
|
||||||
#
|
|
||||||
# === SMTP server at using TLS (GMail)
|
|
||||||
#
|
|
||||||
# This requires some additional configuration. See the article at:
|
|
||||||
# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
|
|
||||||
#
|
|
||||||
# production:
|
|
||||||
# delivery_method: :smtp
|
|
||||||
# smtp_settings:
|
|
||||||
# tls: true
|
|
||||||
# address: "smtp.gmail.com"
|
|
||||||
# port: 587
|
|
||||||
# domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
|
|
||||||
# authentication: :plain
|
|
||||||
# user_name: "your_email@gmail.com"
|
|
||||||
# password: "your_password"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# == More configuration options
|
|
||||||
#
|
|
||||||
# See the "Configuration options" at the following website for a list of the
|
|
||||||
# full options allowed:
|
|
||||||
#
|
|
||||||
# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
|
|
||||||
|
|
||||||
production:
|
production:
|
||||||
delivery_method: :smtp
|
delivery_method: :smtp
|
||||||
|
|||||||
@@ -25,5 +25,5 @@ config.action_controller.session = {
|
|||||||
config.action_controller.allow_forgery_protection = false
|
config.action_controller.allow_forgery_protection = false
|
||||||
|
|
||||||
config.gem "thoughtbot-shoulda", :lib => "shoulda", :source => "http://gems.github.com"
|
config.gem "thoughtbot-shoulda", :lib => "shoulda", :source => "http://gems.github.com"
|
||||||
config.gem "edavis10-object_daddy", :lib => "object_daddy"
|
config.gem "nofxx-object_daddy", :lib => "object_daddy", :source => "http://gems.github.com"
|
||||||
config.gem "mocha"
|
config.gem "mocha"
|
||||||
|
|||||||
@@ -876,9 +876,3 @@ bg:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|
||||||
@@ -900,8 +900,3 @@ bs:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -879,8 +879,3 @@ ca:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -882,8 +882,3 @@ cs:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -902,8 +902,3 @@ da:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -902,8 +902,3 @@ de:
|
|||||||
Sie sind dabei, einige oder alle ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr sehen oder editieren dürfen.
|
Sie sind dabei, einige oder alle ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr sehen oder editieren dürfen.
|
||||||
Sind Sie wirklich sicher, dass Sie dies tun möchten?
|
Sind Sie wirklich sicher, dass Sie dies tun möchten?
|
||||||
label_close_versions: Vollständige Versionen schließen
|
label_close_versions: Vollständige Versionen schließen
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -882,8 +882,3 @@ el:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -329,14 +329,12 @@ en:
|
|||||||
setting_issue_done_ratio_issue_status: Use the issue status
|
setting_issue_done_ratio_issue_status: Use the issue status
|
||||||
setting_start_of_week: Start calendars on
|
setting_start_of_week: Start calendars on
|
||||||
setting_rest_api_enabled: Enable REST web service
|
setting_rest_api_enabled: Enable REST web service
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
|
|
||||||
permission_add_project: Create project
|
permission_add_project: Create project
|
||||||
permission_add_subprojects: Create subprojects
|
permission_add_subprojects: Create subprojects
|
||||||
permission_edit_project: Edit project
|
permission_edit_project: Edit project
|
||||||
permission_select_project_modules: Select project modules
|
permission_select_project_modules: Select project modules
|
||||||
permission_manage_members: Manage members
|
permission_manage_members: Manage members
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
permission_manage_versions: Manage versions
|
permission_manage_versions: Manage versions
|
||||||
permission_manage_categories: Manage issue categories
|
permission_manage_categories: Manage issue categories
|
||||||
permission_view_issues: View Issues
|
permission_view_issues: View Issues
|
||||||
@@ -384,7 +382,6 @@ en:
|
|||||||
permission_edit_own_messages: Edit own messages
|
permission_edit_own_messages: Edit own messages
|
||||||
permission_delete_messages: Delete messages
|
permission_delete_messages: Delete messages
|
||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
|
|
||||||
project_module_issue_tracking: Issue tracking
|
project_module_issue_tracking: Issue tracking
|
||||||
project_module_time_tracking: Time tracking
|
project_module_time_tracking: Time tracking
|
||||||
@@ -665,8 +662,6 @@ en:
|
|||||||
label_board: Forum
|
label_board: Forum
|
||||||
label_board_new: New forum
|
label_board_new: New forum
|
||||||
label_board_plural: Forums
|
label_board_plural: Forums
|
||||||
label_board_locked: Locked
|
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_topic_plural: Topics
|
label_topic_plural: Topics
|
||||||
label_message_plural: Messages
|
label_message_plural: Messages
|
||||||
label_message_last: Last message
|
label_message_last: Last message
|
||||||
@@ -885,4 +880,3 @@ en:
|
|||||||
enumeration_doc_categories: Document categories
|
enumeration_doc_categories: Document categories
|
||||||
enumeration_activities: Activities (time tracking)
|
enumeration_activities: Activities (time tracking)
|
||||||
enumeration_system_activity: System Activity
|
enumeration_system_activity: System Activity
|
||||||
|
|
||||||
|
|||||||
@@ -926,8 +926,3 @@ es:
|
|||||||
Está a punto de eliminar algún o todos sus permisos y podría perder la posibilidad de modificar este proyecto tras hacerlo.
|
Está a punto de eliminar algún o todos sus permisos y podría perder la posibilidad de modificar este proyecto tras hacerlo.
|
||||||
¿Está seguro de querer continuar?
|
¿Está seguro de querer continuar?
|
||||||
label_close_versions: Cerrar versiones completadas
|
label_close_versions: Cerrar versiones completadas
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -912,8 +912,3 @@ fi:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -352,7 +352,6 @@ fr:
|
|||||||
setting_rest_api_enabled: Activer l'API REST
|
setting_rest_api_enabled: Activer l'API REST
|
||||||
setting_gravatar_default: Image Gravatar par défaut
|
setting_gravatar_default: Image Gravatar par défaut
|
||||||
setting_start_of_week: Jour de début des calendriers
|
setting_start_of_week: Jour de début des calendriers
|
||||||
setting_cache_formatted_text: Mettre en cache le texte formaté
|
|
||||||
|
|
||||||
permission_add_project: Créer un projet
|
permission_add_project: Créer un projet
|
||||||
permission_add_subprojects: Créer des sous-projets
|
permission_add_subprojects: Créer des sous-projets
|
||||||
@@ -406,8 +405,6 @@ fr:
|
|||||||
permission_edit_own_messages: Modifier ses propres messages
|
permission_edit_own_messages: Modifier ses propres messages
|
||||||
permission_delete_messages: Supprimer les messages
|
permission_delete_messages: Supprimer les messages
|
||||||
permission_delete_own_messages: Supprimer ses propres messages
|
permission_delete_own_messages: Supprimer ses propres messages
|
||||||
permission_export_wiki_pages: Exporter les pages
|
|
||||||
permission_manage_project_activities: Gérer les activités
|
|
||||||
|
|
||||||
project_module_issue_tracking: Suivi des demandes
|
project_module_issue_tracking: Suivi des demandes
|
||||||
project_module_time_tracking: Suivi du temps passé
|
project_module_time_tracking: Suivi du temps passé
|
||||||
@@ -906,5 +903,3 @@ fr:
|
|||||||
text_journal_deleted: "{{label}} {{old}} supprimé"
|
text_journal_deleted: "{{label}} {{old}} supprimé"
|
||||||
text_journal_added: "{{label}} {{value}} ajouté"
|
text_journal_added: "{{label}} {{value}} ajouté"
|
||||||
enumeration_system_activity: Activité système
|
enumeration_system_activity: Activité système
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Verrouillé
|
|
||||||
|
|||||||
@@ -902,8 +902,3 @@ gl:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -886,8 +886,3 @@ he:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -889,8 +889,3 @@ hr:
|
|||||||
text_own_membership_delete_confirmation: |-
|
text_own_membership_delete_confirmation: |-
|
||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -907,8 +907,3 @@
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -894,8 +894,3 @@ id:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -889,9 +889,3 @@ it:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|
||||||
+5
-10
@@ -64,8 +64,8 @@ ja:
|
|||||||
one: "1年以上"
|
one: "1年以上"
|
||||||
other: "{{count}}年以上"
|
other: "{{count}}年以上"
|
||||||
almost_x_years:
|
almost_x_years:
|
||||||
one: "ほぼ1年"
|
one: "almost 1 year"
|
||||||
other: "ほぼ{{count}}年"
|
other: "almost {{count}} years"
|
||||||
|
|
||||||
number:
|
number:
|
||||||
format:
|
format:
|
||||||
@@ -321,7 +321,6 @@ ja:
|
|||||||
setting_plain_text_mail: プレインテキストのみ(HTMLなし)
|
setting_plain_text_mail: プレインテキストのみ(HTMLなし)
|
||||||
setting_host_name: ホスト名
|
setting_host_name: ホスト名
|
||||||
setting_text_formatting: テキストの書式
|
setting_text_formatting: テキストの書式
|
||||||
setting_cache_formatted_text: 書式化されたテキストをキャッシュする
|
|
||||||
setting_wiki_compression: Wiki履歴を圧縮する
|
setting_wiki_compression: Wiki履歴を圧縮する
|
||||||
setting_feeds_limit: フィード内容の上限
|
setting_feeds_limit: フィード内容の上限
|
||||||
setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
|
setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
|
||||||
@@ -399,7 +398,6 @@ ja:
|
|||||||
permission_rename_wiki_pages: Wikiページ名の変更
|
permission_rename_wiki_pages: Wikiページ名の変更
|
||||||
permission_delete_wiki_pages: Wikiページの削除
|
permission_delete_wiki_pages: Wikiページの削除
|
||||||
permission_view_wiki_pages: Wikiの閲覧
|
permission_view_wiki_pages: Wikiの閲覧
|
||||||
permission_export_wiki_pages: Wikiページを他の形式に出力
|
|
||||||
permission_view_wiki_edits: Wiki履歴の閲覧
|
permission_view_wiki_edits: Wiki履歴の閲覧
|
||||||
permission_edit_wiki_pages: Wikiページの編集
|
permission_edit_wiki_pages: Wikiページの編集
|
||||||
permission_delete_wiki_pages_attachments: 添付ファイルの削除
|
permission_delete_wiki_pages_attachments: 添付ファイルの削除
|
||||||
@@ -536,7 +534,6 @@ ja:
|
|||||||
label_version_new: 新しいバージョン
|
label_version_new: 新しいバージョン
|
||||||
label_version_plural: バージョン
|
label_version_plural: バージョン
|
||||||
label_confirmation: 確認
|
label_confirmation: 確認
|
||||||
label_close_versions: 完了したバージョンを終了にする
|
|
||||||
label_export_to: '他の形式に出力:'
|
label_export_to: '他の形式に出力:'
|
||||||
label_read: 読む...
|
label_read: 読む...
|
||||||
label_public_projects: 公開プロジェクト
|
label_public_projects: 公開プロジェクト
|
||||||
@@ -590,8 +587,8 @@ ja:
|
|||||||
label_query_new: 新しいクエリ
|
label_query_new: 新しいクエリ
|
||||||
label_filter_add: フィルタ追加
|
label_filter_add: フィルタ追加
|
||||||
label_filter_plural: フィルタ
|
label_filter_plural: フィルタ
|
||||||
label_equals: 等しい
|
label_equals: 含む
|
||||||
label_not_equals: 等しくない
|
label_not_equals: 含まない
|
||||||
label_in_less_than: が今日から○日後以前
|
label_in_less_than: が今日から○日後以前
|
||||||
label_in_more_than: が今日から○日後以降
|
label_in_more_than: が今日から○日後以降
|
||||||
label_greater_or_equal: 以上
|
label_greater_or_equal: 以上
|
||||||
@@ -695,8 +692,6 @@ ja:
|
|||||||
label_board: フォーラム
|
label_board: フォーラム
|
||||||
label_board_new: 新しいフォーラム
|
label_board_new: 新しいフォーラム
|
||||||
label_board_plural: フォーラム
|
label_board_plural: フォーラム
|
||||||
label_board_sticky: スティッキー
|
|
||||||
label_board_locked: ロック
|
|
||||||
label_topic_plural: トピック
|
label_topic_plural: トピック
|
||||||
label_message_plural: メッセージ
|
label_message_plural: メッセージ
|
||||||
label_message_last: 最新のメッセージ
|
label_message_last: 最新のメッセージ
|
||||||
@@ -915,4 +910,4 @@ ja:
|
|||||||
enumeration_doc_categories: 文書カテゴリ
|
enumeration_doc_categories: 文書カテゴリ
|
||||||
enumeration_activities: 作業分類 (時間トラッキング)
|
enumeration_activities: 作業分類 (時間トラッキング)
|
||||||
enumeration_system_activity: システム作業分類
|
enumeration_system_activity: システム作業分類
|
||||||
permission_manage_project_activities: Manage project activities
|
label_close_versions: Close completed versions
|
||||||
|
|||||||
+22
-27
@@ -2,7 +2,7 @@
|
|||||||
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
|
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
|
||||||
# by John Hwang (jhwang@tavon.org),http://github.com/tavon
|
# by John Hwang (jhwang@tavon.org),http://github.com/tavon
|
||||||
# by Yonghwan SO(please insert your email), last update at 2009-09-11
|
# by Yonghwan SO(please insert your email), last update at 2009-09-11
|
||||||
# last update at 2010-01-23 by Kihyun Yoon
|
# last update at 2009-09-11 by Kihyun Yoon
|
||||||
ko:
|
ko:
|
||||||
date:
|
date:
|
||||||
formats:
|
formats:
|
||||||
@@ -65,8 +65,8 @@ ko:
|
|||||||
one: "일년 이상"
|
one: "일년 이상"
|
||||||
other: "{{count}}년 이상"
|
other: "{{count}}년 이상"
|
||||||
almost_x_years:
|
almost_x_years:
|
||||||
one: "약 1년"
|
one: "almost 1 year"
|
||||||
other: "약 {{count}}년"
|
other: "almost {{count}} years"
|
||||||
prompts:
|
prompts:
|
||||||
year: "년"
|
year: "년"
|
||||||
month: "월"
|
month: "월"
|
||||||
@@ -182,8 +182,8 @@ ko:
|
|||||||
general_lang_name: '한국어(Korean)'
|
general_lang_name: '한국어(Korean)'
|
||||||
general_csv_separator: ','
|
general_csv_separator: ','
|
||||||
general_csv_decimal_separator: '.'
|
general_csv_decimal_separator: '.'
|
||||||
general_csv_encoding: CP949
|
general_csv_encoding: UTF-8
|
||||||
general_pdf_encoding: CP949
|
general_pdf_encoding: UTF-8
|
||||||
general_first_day_of_week: '7'
|
general_first_day_of_week: '7'
|
||||||
|
|
||||||
notice_account_updated: 계정이 성공적으로 변경되었습니다.
|
notice_account_updated: 계정이 성공적으로 변경되었습니다.
|
||||||
@@ -709,7 +709,7 @@ ko:
|
|||||||
label_language_based: 언어설정에 따름
|
label_language_based: 언어설정에 따름
|
||||||
label_sort_by: "{{value}}(으)로 정렬"
|
label_sort_by: "{{value}}(으)로 정렬"
|
||||||
label_send_test_email: 테스트 메일 보내기
|
label_send_test_email: 테스트 메일 보내기
|
||||||
label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성되었습니다."
|
label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성됨 "
|
||||||
label_module_plural: 모듈
|
label_module_plural: 모듈
|
||||||
label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함"
|
label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함"
|
||||||
label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경"
|
label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경"
|
||||||
@@ -925,25 +925,20 @@ ko:
|
|||||||
setting_start_of_week: 달력 시작 요일
|
setting_start_of_week: 달력 시작 요일
|
||||||
permission_view_issues: 일감 보기
|
permission_view_issues: 일감 보기
|
||||||
label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기
|
label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기
|
||||||
label_revision_id: 개정판 {{value}}
|
label_revision_id: Revision {{value}}
|
||||||
label_api_access_key: API 접근키
|
label_api_access_key: API access key
|
||||||
label_api_access_key_created_on: API 접근키가 {{value}} 전에 생성되었습니다.
|
label_api_access_key_created_on: API access key created {{value}} ago
|
||||||
label_feeds_access_key: RSS 접근키
|
label_feeds_access_key: RSS access key
|
||||||
notice_api_access_key_reseted: API 접근키가 초기화되었습니다.
|
notice_api_access_key_reseted: Your API access key was reset.
|
||||||
setting_rest_api_enabled: REST 웹서비스 활성화
|
setting_rest_api_enabled: Enable REST web service
|
||||||
label_missing_api_access_key: API 접근키가 없습니다.
|
label_missing_api_access_key: Missing an API access key
|
||||||
label_missing_feeds_access_key: RSS 접근키가 없습니다.
|
label_missing_feeds_access_key: Missing a RSS access key
|
||||||
button_show: 보기
|
button_show: Show
|
||||||
text_line_separated: 여러 값이 허용됨(값 마다 한 줄씩)
|
text_line_separated: Multiple values allowed (one line for each value).
|
||||||
setting_mail_handler_body_delimiters: 메일 본문 구분자
|
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||||
permission_add_subprojects: 하위 프로젝트 만들기
|
permission_add_subprojects: Create subprojects
|
||||||
label_subproject_new: 새 하위 프로젝트
|
label_subproject_new: New subproject
|
||||||
text_own_membership_delete_confirmation: |-
|
text_own_membership_delete_confirmation: |-
|
||||||
권한들 일부 또는 전부를 막 삭제하려고 하고 있습니다. 그렇게 되면 이 프로젝트를 더이상 수정할 수 없게 됩니다.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
계속하시겠습니까?
|
Are you sure you want to continue?
|
||||||
label_close_versions: 완료된 버전 닫기
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -950,8 +950,3 @@ lt:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -864,8 +864,3 @@ nl:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -877,8 +877,3 @@
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -907,8 +907,3 @@ pl:
|
|||||||
version_status_locked: zablokowana
|
version_status_locked: zablokowana
|
||||||
version_status_open: otwarta
|
version_status_open: otwarta
|
||||||
|
|
||||||
label_board_sticky: Przyklejona
|
|
||||||
label_board_locked: Zamknięta
|
|
||||||
permission_export_wiki_pages: Eksport stron wiki
|
|
||||||
permission_manage_project_activities: Zarządzanie aktywnościami projektu
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
|
|||||||
@@ -901,17 +901,11 @@ pt-BR:
|
|||||||
setting_rest_api_enabled: Habilitdar REST web service
|
setting_rest_api_enabled: Habilitdar REST web service
|
||||||
label_missing_api_access_key: Chave de acesso a API faltando
|
label_missing_api_access_key: Chave de acesso a API faltando
|
||||||
label_missing_feeds_access_key: Chave de acesso ao RSS faltando
|
label_missing_feeds_access_key: Chave de acesso ao RSS faltando
|
||||||
text_line_separated: Múltiplos valores permitidos (uma linha para cada valor).
|
text_line_separated: Multiple values allowed (one line for each value).
|
||||||
setting_mail_handler_body_delimiters: Truncar e-mails após uma destas linhas
|
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||||
permission_add_subprojects: Criar subprojetos
|
permission_add_subprojects: Create subprojects
|
||||||
label_subproject_new: Novo subprojeto
|
label_subproject_new: New subproject
|
||||||
text_own_membership_delete_confirmation: |-
|
text_own_membership_delete_confirmation: |-
|
||||||
Você está para remover algumas de suas próprias permissões e pode não mais estar apto a editar este projeto após esta operação.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Você tem certeza que deseja continuar?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Fechar versões concluídas
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Marcado
|
|
||||||
label_board_locked: Travado
|
|
||||||
label_change_log: Registro de alterações
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -894,8 +894,3 @@ pt:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -879,8 +879,3 @@ ro:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -650,7 +650,7 @@ ru:
|
|||||||
label_send_information: Отправить пользователю информацию по учетной записи
|
label_send_information: Отправить пользователю информацию по учетной записи
|
||||||
label_send_test_email: Послать email для проверки
|
label_send_test_email: Послать email для проверки
|
||||||
label_settings: Настройки
|
label_settings: Настройки
|
||||||
label_show_completed_versions: Показывать завершенные версии
|
label_show_completed_versions: Показать завершенную версию
|
||||||
label_sort: Сортировать
|
label_sort: Сортировать
|
||||||
label_sort_by: "Сортировать по {{value}}"
|
label_sort_by: "Сортировать по {{value}}"
|
||||||
label_sort_higher: Вверх
|
label_sort_higher: Вверх
|
||||||
@@ -941,7 +941,7 @@ ru:
|
|||||||
text_journal_added: "{{label}} {{value}} добавлен"
|
text_journal_added: "{{label}} {{value}} добавлен"
|
||||||
field_active: Активно
|
field_active: Активно
|
||||||
enumeration_system_activity: Системная активность
|
enumeration_system_activity: Системная активность
|
||||||
permission_delete_issue_watchers: Удаление наблюдателей
|
permission_delete_issue_watchers: Удалить наблюдателей
|
||||||
version_status_closed: закрыт
|
version_status_closed: закрыт
|
||||||
version_status_locked: заблокирован
|
version_status_locked: заблокирован
|
||||||
version_status_open: открыт
|
version_status_open: открыт
|
||||||
@@ -974,7 +974,7 @@ ru:
|
|||||||
label_api_access_key: Ключ доступа к API
|
label_api_access_key: Ключ доступа к API
|
||||||
text_line_separated: Разрешено несколько значений (по одному значению в строку).
|
text_line_separated: Разрешено несколько значений (по одному значению в строку).
|
||||||
label_revision_id: Ревизия {{value}}
|
label_revision_id: Ревизия {{value}}
|
||||||
permission_view_issues: Просмотр задач
|
permission_view_issues: Показать проблемы
|
||||||
label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере
|
label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере
|
||||||
label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад
|
label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад
|
||||||
label_feeds_access_key: Ключ доступа к RSS
|
label_feeds_access_key: Ключ доступа к RSS
|
||||||
@@ -984,14 +984,9 @@ ru:
|
|||||||
label_missing_api_access_key: Отсутствует ключ доступа к API
|
label_missing_api_access_key: Отсутствует ключ доступа к API
|
||||||
label_missing_feeds_access_key: Отсутствует ключ доступа к RSS
|
label_missing_feeds_access_key: Отсутствует ключ доступа к RSS
|
||||||
setting_mail_handler_body_delimiters: Урезать письмо после одной из этих строк
|
setting_mail_handler_body_delimiters: Урезать письмо после одной из этих строк
|
||||||
permission_add_subprojects: Создание подпроектов
|
permission_add_subprojects: Создать подпроекты
|
||||||
label_subproject_new: Новый подпроект
|
label_subproject_new: Новый подпроект
|
||||||
text_own_membership_delete_confirmation: |-
|
text_own_membership_delete_confirmation: |-
|
||||||
Вы собираетесь удалить некоторые или все права, из-за чего могут пропасть права на редактирование этого проекта.
|
Вы собираетесь удалить некоторые или все права, из-за чего могут пропасть права на редактирование этого проекта.
|
||||||
Продолжить?
|
Продолжить?
|
||||||
label_close_versions: Закрыть завершенные версии
|
label_close_versions: Закрыть завершенные версии
|
||||||
label_board_sticky: Прикреплена
|
|
||||||
label_board_locked: Заблокирована
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -881,8 +881,3 @@ sk:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -878,8 +878,3 @@ sl:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -897,8 +897,3 @@
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -713,8 +713,6 @@ sv:
|
|||||||
label_board: Forum
|
label_board: Forum
|
||||||
label_board_new: Nytt forum
|
label_board_new: Nytt forum
|
||||||
label_board_plural: Forum
|
label_board_plural: Forum
|
||||||
label_board_locked: Låst
|
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_topic_plural: Ämnen
|
label_topic_plural: Ämnen
|
||||||
label_message_plural: Meddelanden
|
label_message_plural: Meddelanden
|
||||||
label_message_last: Senaste meddelande
|
label_message_last: Senaste meddelande
|
||||||
@@ -933,6 +931,3 @@ sv:
|
|||||||
enumeration_doc_categories: Dokumentkategorier
|
enumeration_doc_categories: Dokumentkategorier
|
||||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||||
enumeration_system_activity: Systemaktivitet
|
enumeration_system_activity: Systemaktivitet
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -879,8 +879,3 @@ th:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -909,8 +909,3 @@ tr:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -878,8 +878,3 @@ uk:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -941,8 +941,3 @@ vi:
|
|||||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||||
Are you sure you want to continue?
|
Are you sure you want to continue?
|
||||||
label_close_versions: Close completed versions
|
label_close_versions: Close completed versions
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -755,8 +755,6 @@
|
|||||||
label_board: 論壇
|
label_board: 論壇
|
||||||
label_board_new: 建立新論壇
|
label_board_new: 建立新論壇
|
||||||
label_board_plural: 論壇
|
label_board_plural: 論壇
|
||||||
label_board_locked: 鎖定
|
|
||||||
label_board_sticky: 置頂
|
|
||||||
label_topic_plural: 討論主題
|
label_topic_plural: 討論主題
|
||||||
label_message_plural: 訊息
|
label_message_plural: 訊息
|
||||||
label_message_last: 上一封訊息
|
label_message_last: 上一封訊息
|
||||||
@@ -975,6 +973,3 @@
|
|||||||
enumeration_doc_categories: 文件分類
|
enumeration_doc_categories: 文件分類
|
||||||
enumeration_activities: 活動 (時間追蹤)
|
enumeration_activities: 活動 (時間追蹤)
|
||||||
enumeration_system_activity: 系統活動
|
enumeration_system_activity: 系統活動
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|||||||
@@ -904,9 +904,3 @@ zh:
|
|||||||
enumeration_doc_categories: 文档类别
|
enumeration_doc_categories: 文档类别
|
||||||
enumeration_activities: 活动(时间跟踪)
|
enumeration_activities: 活动(时间跟踪)
|
||||||
enumeration_system_activity: 系统活动
|
enumeration_system_activity: 系统活动
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Locked
|
|
||||||
permission_export_wiki_pages: Export wiki pages
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Manage project activities
|
|
||||||
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
class AddIndexOnChangesetsScmid < ActiveRecord::Migration
|
|
||||||
def self.up
|
|
||||||
add_index :changesets, [:repository_id, :scmid], :name => :changesets_repos_scmid
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.down
|
|
||||||
remove_index :changesets, :name => :changesets_repos_scmid
|
|
||||||
end
|
|
||||||
end
|
|
||||||
+1
-35
@@ -4,41 +4,7 @@ Redmine - project management software
|
|||||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||||
http://www.redmine.org/
|
http://www.redmine.org/
|
||||||
|
|
||||||
== 2010-02-28 v0.9.3
|
== 0.9.1
|
||||||
|
|
||||||
Adds filter for system shared versions on the cross project issue list
|
|
||||||
Makes project identifiers searchable
|
|
||||||
Remove invalid utf8 sequences from commit comments and author name
|
|
||||||
Fixed: Wrong link when "http" not included in project "Homepage" link
|
|
||||||
Fixed: Escaping in html email templates
|
|
||||||
Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
|
|
||||||
Fixed: Deselecting textile text formatting causes interning empty string errors
|
|
||||||
Fixed: error with postgres when entering a non-numeric id for an issue relation
|
|
||||||
Fixed: div.task incorrectly wrapping on Gantt Chart
|
|
||||||
Fixed: Project copy loses wiki pages hierarchy
|
|
||||||
Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
|
|
||||||
Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
|
|
||||||
Fixed: Duplicated project name for subproject version on gantt chart
|
|
||||||
Fixed: roadmap shows subprojects issues even if subprojects is unchecked
|
|
||||||
Fixed: IndexError if all the :last menu items are deleted from a menu
|
|
||||||
Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
|
|
||||||
|
|
||||||
|
|
||||||
== 2010-02-07 v0.9.2
|
|
||||||
|
|
||||||
* Fixed: Sub-project repository commits not displayed on parent project issues
|
|
||||||
* Fixed: Potential security leak on my page calendar
|
|
||||||
* Fixed: Project tree structure is broken by deleting the project with the subproject
|
|
||||||
* Fixed: Error message shown duplicated when creating a new group
|
|
||||||
* Fixed: Firefox cuts off large pages
|
|
||||||
* Fixed: Invalid format parameter returns a DoubleRenderError on issues index
|
|
||||||
* Fixed: Unnecessary Quote button on locked forum message
|
|
||||||
* Fixed: Error raised when trying to view the gantt or calendar with a grouped query
|
|
||||||
* Fixed: PDF support for Korean locale
|
|
||||||
* Fixed: Deprecation warning in extra/svn/reposman.rb
|
|
||||||
|
|
||||||
|
|
||||||
== 2010-01-30 v0.9.1
|
|
||||||
|
|
||||||
* Vertical alignment for inline images in formatted text set to 'middle'
|
* Vertical alignment for inline images in formatted text set to 'middle'
|
||||||
* Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
|
* Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
|
||||||
|
|||||||
+7
-11
@@ -7,11 +7,7 @@ http://www.redmine.org/
|
|||||||
|
|
||||||
== Requirements
|
== Requirements
|
||||||
|
|
||||||
* Ruby 1.8.6 or 1.8.7
|
* Ruby on Rails 2.3.5
|
||||||
|
|
||||||
* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
|
|
||||||
the appropriate Rails version)
|
|
||||||
|
|
||||||
* A database:
|
* A database:
|
||||||
* MySQL (tested with MySQL 5)
|
* MySQL (tested with MySQL 5)
|
||||||
* PostgreSQL (tested with PostgreSQL 8.1)
|
* PostgreSQL (tested with PostgreSQL 8.1)
|
||||||
@@ -30,15 +26,15 @@ Optional:
|
|||||||
3. Configure database parameters in config/database.yml
|
3. Configure database parameters in config/database.yml
|
||||||
for "production" environment (default database is MySQL)
|
for "production" environment (default database is MySQL)
|
||||||
|
|
||||||
4. Generate a session store secret
|
4. Create the database structure. Under the application main directory:
|
||||||
Redmine stores session data in cookies by default, which requires
|
|
||||||
a secret to be generated. Run:
|
|
||||||
rake config/initializers/session_store.rb
|
|
||||||
|
|
||||||
5. Create the database structure. Under the application main directory:
|
|
||||||
rake db:migrate RAILS_ENV="production"
|
rake db:migrate RAILS_ENV="production"
|
||||||
It will create tables and an administrator account.
|
It will create tables and an administrator account.
|
||||||
|
|
||||||
|
5. Generate a session store secret
|
||||||
|
Redmine stores session data in cookies by default, which requires
|
||||||
|
a secret to be generated. Run:
|
||||||
|
rake config/initializers/session_store.rb
|
||||||
|
|
||||||
6. Setting up permissions
|
6. Setting up permissions
|
||||||
The user who runs Redmine must have write permission on the following
|
The user who runs Redmine must have write permission on the following
|
||||||
subdirectories: files, log, tmp (create the last one if not present).
|
subdirectories: files, log, tmp (create the last one if not present).
|
||||||
|
|||||||
+7
-7
@@ -13,17 +13,17 @@ http://www.redmine.org/
|
|||||||
and SMTP settings (RAILS_ROOT/config/email.yml)
|
and SMTP settings (RAILS_ROOT/config/email.yml)
|
||||||
into the new config directory
|
into the new config directory
|
||||||
DO NOT REPLACE ANY OTHERS FILES.
|
DO NOT REPLACE ANY OTHERS FILES.
|
||||||
|
|
||||||
|
3. Migrate your database (please make a backup before doing this):
|
||||||
|
rake db:migrate RAILS_ENV="production"
|
||||||
|
|
||||||
3. Generate a session store secret
|
4. Copy the RAILS_ROOT/files directory content into your new installation
|
||||||
|
This directory contains all the attached files
|
||||||
|
|
||||||
|
5. Generate a session store secret
|
||||||
Redmine stores session data in cookies by default, which requires
|
Redmine stores session data in cookies by default, which requires
|
||||||
a secret to be generated. Run:
|
a secret to be generated. Run:
|
||||||
rake config/initializers/session_store.rb
|
rake config/initializers/session_store.rb
|
||||||
|
|
||||||
4. Migrate your database (please make a backup before doing this):
|
|
||||||
rake db:migrate RAILS_ENV="production"
|
|
||||||
|
|
||||||
5. Copy the RAILS_ROOT/files directory content into your new installation
|
|
||||||
This directory contains all the attached files
|
|
||||||
|
|
||||||
== Notes
|
== Notes
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ unless File.directory?($repos_base)
|
|||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
require 'active_resource'
|
require 'activeresource'
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
|
log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -35,11 +35,6 @@ module Redmine
|
|||||||
super()
|
super()
|
||||||
set_language_if_valid lang
|
set_language_if_valid lang
|
||||||
case current_language.to_s.downcase
|
case current_language.to_s.downcase
|
||||||
when 'ko'
|
|
||||||
extend(PDF_Korean)
|
|
||||||
AddUHCFont()
|
|
||||||
@font_for_content = 'UHC'
|
|
||||||
@font_for_footer = 'UHC'
|
|
||||||
when 'ja'
|
when 'ja'
|
||||||
extend(PDF_Japanese)
|
extend(PDF_Japanese)
|
||||||
AddSJISFont()
|
AddSJISFont()
|
||||||
|
|||||||
@@ -84,14 +84,6 @@ module TreeNodePatch
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Wrapp remove! making sure to decrement the last_items counter if
|
|
||||||
# the removed child was a last item
|
|
||||||
def remove!(child)
|
|
||||||
@last_items_count -= +1 if child && child.last
|
|
||||||
super
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# Will return the position (zero-based) of the current child in
|
# Will return the position (zero-based) of the current child in
|
||||||
# it's parent
|
# it's parent
|
||||||
def position
|
def position
|
||||||
@@ -360,7 +352,7 @@ module Redmine
|
|||||||
target_root.add(MenuItem.new(name, url, options))
|
target_root.add(MenuItem.new(name, url, options))
|
||||||
end
|
end
|
||||||
|
|
||||||
elsif options[:last] # don't delete, needs to be stored
|
elsif options.delete(:last)
|
||||||
target_root.add_last(MenuItem.new(name, url, options))
|
target_root.add_last(MenuItem.new(name, url, options))
|
||||||
else
|
else
|
||||||
target_root.add(MenuItem.new(name, url, options))
|
target_root.add(MenuItem.new(name, url, options))
|
||||||
@@ -394,7 +386,7 @@ module Redmine
|
|||||||
|
|
||||||
class MenuItem < Tree::TreeNode
|
class MenuItem < Tree::TreeNode
|
||||||
include Redmine::I18n
|
include Redmine::I18n
|
||||||
attr_reader :name, :url, :param, :condition, :parent, :child_menus, :last
|
attr_reader :name, :url, :param, :condition, :parent, :child_menus
|
||||||
|
|
||||||
def initialize(name, url, options)
|
def initialize(name, url, options)
|
||||||
raise ArgumentError, "Invalid option :if for menu item '#{name}'" if options[:if] && !options[:if].respond_to?(:call)
|
raise ArgumentError, "Invalid option :if for menu item '#{name}'" if options[:if] && !options[:if].respond_to?(:call)
|
||||||
@@ -411,7 +403,6 @@ module Redmine
|
|||||||
@html_options[:class] = [@html_options[:class], @name.to_s.dasherize].compact.join(' ')
|
@html_options[:class] = [@html_options[:class], @name.to_s.dasherize].compact.join(' ')
|
||||||
@parent = options[:parent]
|
@parent = options[:parent]
|
||||||
@child_menus = options[:children]
|
@child_menus = options[:children]
|
||||||
@last = options[:last] || false
|
|
||||||
super @name.to_sym
|
super @name.to_sym
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -286,23 +286,21 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def save(repo)
|
def save(repo)
|
||||||
Changeset.transaction do
|
if repo.changesets.find_by_scmid(scmid.to_s).nil?
|
||||||
changeset = Changeset.new(
|
changeset = Changeset.create!(
|
||||||
:repository => repo,
|
:repository => repo,
|
||||||
:revision => identifier,
|
:revision => identifier,
|
||||||
:scmid => scmid,
|
:scmid => scmid,
|
||||||
:committer => author,
|
:committer => author,
|
||||||
:committed_on => time,
|
:committed_on => time,
|
||||||
:comments => message)
|
:comments => message)
|
||||||
|
|
||||||
if changeset.save
|
paths.each do |file|
|
||||||
paths.each do |file|
|
Change.create!(
|
||||||
Change.create(
|
:changeset => changeset,
|
||||||
:changeset => changeset,
|
:action => file[:action],
|
||||||
:action => file[:action],
|
:path => file[:path])
|
||||||
:path => file[:path])
|
end
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -33,22 +33,21 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def branches
|
def branches
|
||||||
return @branches if @branches
|
branches = []
|
||||||
@branches = []
|
|
||||||
cmd = "#{GIT_BIN} --git-dir #{target('')} branch"
|
cmd = "#{GIT_BIN} --git-dir #{target('')} branch"
|
||||||
shellout(cmd) do |io|
|
shellout(cmd) do |io|
|
||||||
io.each_line do |line|
|
io.each_line do |line|
|
||||||
@branches << line.match('\s*\*?\s*(.*)$')[1]
|
branches << line.match('\s*\*?\s*(.*)$')[1]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@branches.sort!
|
branches.sort!
|
||||||
end
|
end
|
||||||
|
|
||||||
def tags
|
def tags
|
||||||
return @tags if @tags
|
tags = []
|
||||||
cmd = "#{GIT_BIN} --git-dir #{target('')} tag"
|
cmd = "#{GIT_BIN} --git-dir #{target('')} tag"
|
||||||
shellout(cmd) do |io|
|
shellout(cmd) do |io|
|
||||||
@tags = io.readlines.sort!.map{|t| t.strip}
|
io.readlines.sort!.map{|t| t.strip}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -111,16 +110,20 @@ module Redmine
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def num_revisions
|
||||||
|
cmd = "#{GIT_BIN} --git-dir #{target('')} log --all --pretty=format:'' | wc -l"
|
||||||
|
shellout(cmd) {|io| io.gets.chomp.to_i + 1}
|
||||||
|
end
|
||||||
|
|
||||||
def revisions(path, identifier_from, identifier_to, options={})
|
def revisions(path, identifier_from, identifier_to, options={})
|
||||||
revisions = Revisions.new
|
revisions = Revisions.new
|
||||||
|
|
||||||
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller"
|
cmd = "#{GIT_BIN} --git-dir #{target('')} log --find-copies-harder --raw --date=iso --pretty=fuller"
|
||||||
cmd << " --reverse" if options[:reverse]
|
cmd << " --reverse" if options[:reverse]
|
||||||
cmd << " --all" if options[:all]
|
cmd << " --all" if options[:all]
|
||||||
cmd << " -n #{options[:limit]} " if options[:limit]
|
cmd << " -n #{options[:limit]} " if options[:limit]
|
||||||
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from
|
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from
|
||||||
cmd << " #{shell_quote identifier_to} " if identifier_to
|
cmd << " #{shell_quote identifier_to} " if identifier_to
|
||||||
cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
|
|
||||||
cmd << " -- #{path}" if path && !path.empty?
|
cmd << " -- #{path}" if path && !path.empty?
|
||||||
|
|
||||||
shellout(cmd) do |io|
|
shellout(cmd) do |io|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ module Redmine
|
|||||||
module VERSION #:nodoc:
|
module VERSION #:nodoc:
|
||||||
MAJOR = 0
|
MAJOR = 0
|
||||||
MINOR = 9
|
MINOR = 9
|
||||||
TINY = 3
|
TINY = 1
|
||||||
|
|
||||||
# Branch values:
|
# Branch values:
|
||||||
# * official release: nil
|
# * official release: nil
|
||||||
|
|||||||
@@ -25,17 +25,17 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def register(name, formatter, helper)
|
def register(name, formatter, helper)
|
||||||
raise ArgumentError, "format name '#{name}' is already taken" if @@formatters[name.to_s]
|
raise ArgumentError, "format name '#{name}' is already taken" if @@formatters[name.to_sym]
|
||||||
@@formatters[name.to_s] = {:formatter => formatter, :helper => helper}
|
@@formatters[name.to_sym] = {:formatter => formatter, :helper => helper}
|
||||||
end
|
end
|
||||||
|
|
||||||
def formatter_for(name)
|
def formatter_for(name)
|
||||||
entry = @@formatters[name.to_s]
|
entry = @@formatters[name.to_sym]
|
||||||
(entry && entry[:formatter]) || Redmine::WikiFormatting::NullFormatter::Formatter
|
(entry && entry[:formatter]) || Redmine::WikiFormatting::NullFormatter::Formatter
|
||||||
end
|
end
|
||||||
|
|
||||||
def helper_for(name)
|
def helper_for(name)
|
||||||
entry = @@formatters[name.to_s]
|
entry = @@formatters[name.to_sym]
|
||||||
(entry && entry[:helper]) || Redmine::WikiFormatting::NullFormatter::Helper
|
(entry && entry[:helper]) || Redmine::WikiFormatting::NullFormatter::Helper
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord
|
|||||||
|
|
||||||
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
|
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
|
||||||
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
|
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
|
||||||
html>body #content { min-height: 600px; }
|
html>body #content { min-height: 600px; overflow: auto; }
|
||||||
* html body #content { height: 600px; } /* IE */
|
* html body #content { height: 600px; } /* IE */
|
||||||
|
|
||||||
#main.nosidebar #sidebar{ display: none; }
|
#main.nosidebar #sidebar{ display: none; }
|
||||||
@@ -728,7 +728,6 @@ background-image:url('../images/close_hl.png');
|
|||||||
padding:0;
|
padding:0;
|
||||||
margin:0;
|
margin:0;
|
||||||
line-height:0.8em;
|
line-height:0.8em;
|
||||||
white-space:nowrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
|
.task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
class Attachment < ActiveRecord::Base
|
|
||||||
generator_for :container, :method => :generate_project
|
|
||||||
generator_for :file, :method => :generate_file
|
|
||||||
generator_for :author, :method => :generate_author
|
|
||||||
|
|
||||||
def self.generate_project
|
|
||||||
Project.generate!
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_author
|
|
||||||
User.generate_with_protected!
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_file
|
|
||||||
@file = 'a_file.png'
|
|
||||||
@file.stubs(:original_filename).returns('a_file.png')
|
|
||||||
@file.stubs(:content_type).returns('image/png')
|
|
||||||
@file.stubs(:read).returns(false)
|
|
||||||
@file
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
class AuthSource < ActiveRecord::Base
|
|
||||||
generator_for :name, :method => :next_name
|
|
||||||
|
|
||||||
def self.next_name
|
|
||||||
@last_name ||= 'Auth0'
|
|
||||||
@last_name.succ!
|
|
||||||
@last_name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
class Board < ActiveRecord::Base
|
|
||||||
generator_for :name, :method => :next_name
|
|
||||||
generator_for :description, :method => :next_description
|
|
||||||
generator_for :project, :method => :generate_project
|
|
||||||
|
|
||||||
def self.next_name
|
|
||||||
@last_name ||= 'A Forum'
|
|
||||||
@last_name.succ!
|
|
||||||
@last_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.next_description
|
|
||||||
@last_description ||= 'Some description here'
|
|
||||||
@last_description.succ!
|
|
||||||
@last_description
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_project
|
|
||||||
Project.generate!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
class Change < ActiveRecord::Base
|
|
||||||
generator_for :action => 'A'
|
|
||||||
generator_for :path, :method => :next_path
|
|
||||||
generator_for :changeset, :method => :generate_changeset
|
|
||||||
|
|
||||||
def self.next_path
|
|
||||||
@last_path ||= 'test/dir/aaa0001'
|
|
||||||
@last_path.succ!
|
|
||||||
@last_path
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_changeset
|
|
||||||
Changeset.generate!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
class Changeset < ActiveRecord::Base
|
|
||||||
generator_for :revision, :method => :next_revision
|
|
||||||
generator_for :committed_on => Date.today
|
|
||||||
generator_for :repository, :method => :generate_repository
|
|
||||||
|
|
||||||
def self.next_revision
|
|
||||||
@last_revision ||= '1'
|
|
||||||
@last_revision.succ!
|
|
||||||
@last_revision
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_repository
|
|
||||||
Repository::Subversion.generate!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
class Comment < ActiveRecord::Base
|
|
||||||
generator_for :commented, :method => :generate_news
|
|
||||||
generator_for :author, :method => :generate_author
|
|
||||||
generator_for :comments => 'What great news this is.'
|
|
||||||
|
|
||||||
def self.generate_news
|
|
||||||
News.generate!
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_author
|
|
||||||
User.generate_with_protected!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,7 +1,2 @@
|
|||||||
class CustomValue < ActiveRecord::Base
|
class CustomValue < ActiveRecord::Base
|
||||||
generator_for :custom_field, :method => :generate_custom_field
|
|
||||||
|
|
||||||
def self.generate_custom_field
|
|
||||||
CustomField.generate!
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
class Document < ActiveRecord::Base
|
|
||||||
generator_for :title, :method => :next_title
|
|
||||||
|
|
||||||
def self.next_title
|
|
||||||
@last_title ||= 'Document001'
|
|
||||||
@last_title.succ!
|
|
||||||
@last_title
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
class EnabledModule < ActiveRecord::Base
|
|
||||||
generator_for :name, :method => :next_name
|
|
||||||
|
|
||||||
def self.next_name
|
|
||||||
@last_name ||= 'module_001'
|
|
||||||
@last_name.succ!
|
|
||||||
@last_name
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
class Group < Principal
|
|
||||||
generator_for :lastname, :method => :next_lastname
|
|
||||||
|
|
||||||
def self.next_lastname
|
|
||||||
@last_lastname ||= 'Group'
|
|
||||||
@last_lastname.succ!
|
|
||||||
@last_lastname
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
class IssueCategory < ActiveRecord::Base
|
|
||||||
generator_for :name, :method => :next_name
|
|
||||||
|
|
||||||
def self.next_name
|
|
||||||
@last_name ||= 'Category 0001'
|
|
||||||
@last_name.succ!
|
|
||||||
@last_name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
class Issue < ActiveRecord::Base
|
class Issue < ActiveRecord::Base
|
||||||
generator_for :subject, :method => :next_subject
|
generator_for :subject, :method => :next_subject
|
||||||
generator_for :author, :method => :next_author
|
generator_for :author, :method => :next_author
|
||||||
generator_for :priority, :method => :fetch_priority
|
|
||||||
|
|
||||||
def self.next_subject
|
def self.next_subject
|
||||||
@last_subject ||= 'Subject 0'
|
@last_subject ||= 'Subject 0'
|
||||||
@@ -13,8 +12,4 @@ class Issue < ActiveRecord::Base
|
|||||||
User.generate_with_protected!
|
User.generate_with_protected!
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.fetch_priority
|
|
||||||
IssuePriority.first || IssuePriority.generate!
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
class Journal < ActiveRecord::Base
|
|
||||||
generator_for :journalized, :method => :generate_issue
|
|
||||||
generator_for :user, :method => :generate_user
|
|
||||||
|
|
||||||
def self.generate_issue
|
|
||||||
project = Project.generate!
|
|
||||||
Issue.generate_for_project!(project)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_user
|
|
||||||
User.generate_with_protected!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,12 +1,2 @@
|
|||||||
class Member < ActiveRecord::Base
|
class Member < ActiveRecord::Base
|
||||||
generator_for :roles, :method => :generate_roles
|
|
||||||
generator_for :principal, :method => :generate_user
|
|
||||||
|
|
||||||
def self.generate_roles
|
|
||||||
[Role.generate!]
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_user
|
|
||||||
User.generate_with_protected!
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
class MemberRole < ActiveRecord::Base
|
|
||||||
generator_for :member, :method => :generate_member
|
|
||||||
generator_for :role, :method => :generate_role
|
|
||||||
|
|
||||||
def self.generate_role
|
|
||||||
Role.generate!
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_member
|
|
||||||
Member.generate!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
class Message < ActiveRecord::Base
|
|
||||||
generator_for :subject, :method => :next_subject
|
|
||||||
generator_for :content, :method => :next_content
|
|
||||||
generator_for :board, :method => :generate_board
|
|
||||||
|
|
||||||
def self.next_subject
|
|
||||||
@last_subject ||= 'A Message'
|
|
||||||
@last_subject.succ!
|
|
||||||
@last_subject
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.next_content
|
|
||||||
@last_content ||= 'Some content here'
|
|
||||||
@last_content.succ!
|
|
||||||
@last_content
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_board
|
|
||||||
Board.generate!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
class News < ActiveRecord::Base
|
|
||||||
generator_for :title, :method => :next_title
|
|
||||||
generator_for :description, :method => :next_description
|
|
||||||
|
|
||||||
def self.next_title
|
|
||||||
@last_title ||= 'A New Item'
|
|
||||||
@last_title.succ!
|
|
||||||
@last_title
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.next_description
|
|
||||||
@last_description ||= 'Some content here'
|
|
||||||
@last_description.succ!
|
|
||||||
@last_description
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
class Repository < ActiveRecord::Base
|
|
||||||
generator_for :type => 'Subversion'
|
|
||||||
generator_for :url, :method => :next_url
|
|
||||||
|
|
||||||
def self.next_url
|
|
||||||
@last_url ||= 'file:///test/svn'
|
|
||||||
@last_url.succ!
|
|
||||||
@last_url
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
class Repository::Subversion < Repository
|
|
||||||
generator_for :type, :method => 'Subversion'
|
|
||||||
generator_for :url, :method => :next_url
|
|
||||||
|
|
||||||
def self.next_url
|
|
||||||
@last_url ||= 'file:///test/svn'
|
|
||||||
@last_url.succ!
|
|
||||||
@last_url
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user