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