@@ -0,0 +1,12 | |||||
|
1 | <h2><%= l(@enumeration.option_name) %>: <%=h @enumeration %></h2> | |||
|
2 | ||||
|
3 | <% form_tag({}) do %> | |||
|
4 | <div class="box"> | |||
|
5 | <p><strong><%= l(:text_enumeration_destroy_question, @enumeration.objects_count) %></strong></p> | |||
|
6 | <p><%= l(:text_enumeration_category_reassign_to) %> | |||
|
7 | <%= select_tag 'reassign_to_id', ("<option>--- #{l(:actionview_instancetag_blank_option)} ---</option>" + options_from_collection_for_select(@enumerations, 'id', 'name')) %></p> | |||
|
8 | </div> | |||
|
9 | ||||
|
10 | <%= submit_tag l(:button_apply) %> | |||
|
11 | <%= link_to l(:button_cancel), :controller => 'enumerations', :action => 'index' %> | |||
|
12 | <% end %> |
@@ -0,0 +1,61 | |||||
|
1 | # redMine - project management software | |||
|
2 | # Copyright (C) 2006-2008 Jean-Philippe Lang | |||
|
3 | # | |||
|
4 | # This program is free software; you can redistribute it and/or | |||
|
5 | # modify it under the terms of the GNU General Public License | |||
|
6 | # as published by the Free Software Foundation; either version 2 | |||
|
7 | # of the License, or (at your option) any later version. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
14 | # You should have received a copy of the GNU General Public License | |||
|
15 | # along with this program; if not, write to the Free Software | |||
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
|
17 | ||||
|
18 | require File.dirname(__FILE__) + '/../test_helper' | |||
|
19 | require 'enumerations_controller' | |||
|
20 | ||||
|
21 | # Re-raise errors caught by the controller. | |||
|
22 | class EnumerationsController; def rescue_action(e) raise e end; end | |||
|
23 | ||||
|
24 | class EnumerationsControllerTest < Test::Unit::TestCase | |||
|
25 | fixtures :enumerations, :issues, :users | |||
|
26 | ||||
|
27 | def setup | |||
|
28 | @controller = EnumerationsController.new | |||
|
29 | @request = ActionController::TestRequest.new | |||
|
30 | @response = ActionController::TestResponse.new | |||
|
31 | @request.session[:user_id] = 1 # admin | |||
|
32 | end | |||
|
33 | ||||
|
34 | def test_index | |||
|
35 | get :index | |||
|
36 | assert_response :success | |||
|
37 | assert_template 'list' | |||
|
38 | end | |||
|
39 | ||||
|
40 | def test_destroy_enumeration_not_in_use | |||
|
41 | post :destroy, :id => 7 | |||
|
42 | assert_redirected_to :controller => 'enumerations', :action => 'index' | |||
|
43 | assert_nil Enumeration.find_by_id(7) | |||
|
44 | end | |||
|
45 | ||||
|
46 | def test_destroy_enumeration_in_use | |||
|
47 | post :destroy, :id => 4 | |||
|
48 | assert_response :success | |||
|
49 | assert_template 'destroy' | |||
|
50 | assert_not_nil Enumeration.find_by_id(4) | |||
|
51 | end | |||
|
52 | ||||
|
53 | def test_destroy_enumeration_in_use_with_reassignment | |||
|
54 | issue = Issue.find(:first, :conditions => {:priority_id => 4}) | |||
|
55 | post :destroy, :id => 4, :reassign_to_id => 6 | |||
|
56 | assert_redirected_to :controller => 'enumerations', :action => 'index' | |||
|
57 | assert_nil Enumeration.find_by_id(4) | |||
|
58 | # check that the issue was reassign | |||
|
59 | assert_equal 6, issue.reload.priority_id | |||
|
60 | end | |||
|
61 | end |
@@ -0,0 +1,45 | |||||
|
1 | # redMine - project management software | |||
|
2 | # Copyright (C) 2006-2008 Jean-Philippe Lang | |||
|
3 | # | |||
|
4 | # This program is free software; you can redistribute it and/or | |||
|
5 | # modify it under the terms of the GNU General Public License | |||
|
6 | # as published by the Free Software Foundation; either version 2 | |||
|
7 | # of the License, or (at your option) any later version. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
14 | # You should have received a copy of the GNU General Public License | |||
|
15 | # along with this program; if not, write to the Free Software | |||
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
|
17 | ||||
|
18 | require File.dirname(__FILE__) + '/../test_helper' | |||
|
19 | ||||
|
20 | class EnumerationTest < Test::Unit::TestCase | |||
|
21 | fixtures :enumerations, :issues | |||
|
22 | ||||
|
23 | def setup | |||
|
24 | end | |||
|
25 | ||||
|
26 | def test_objects_count | |||
|
27 | # low priority | |||
|
28 | assert_equal 5, Enumeration.find(4).objects_count | |||
|
29 | # urgent | |||
|
30 | assert_equal 0, Enumeration.find(7).objects_count | |||
|
31 | end | |||
|
32 | ||||
|
33 | def test_in_use | |||
|
34 | # low priority | |||
|
35 | assert Enumeration.find(4).in_use? | |||
|
36 | # urgent | |||
|
37 | assert !Enumeration.find(7).in_use? | |||
|
38 | end | |||
|
39 | ||||
|
40 | def test_destroy_with_reassign | |||
|
41 | Enumeration.find(4).destroy(Enumeration.find(6)) | |||
|
42 | assert_nil Issue.find(:first, :conditions => {:priority_id => 4}) | |||
|
43 | assert_equal 5, Enumeration.find(6).objects_count | |||
|
44 | end | |||
|
45 | end |
@@ -75,11 +75,20 class EnumerationsController < ApplicationController | |||||
75 | end |
|
75 | end | |
76 |
|
76 | |||
77 | def destroy |
|
77 | def destroy | |
78 |
Enumeration.find(params[:id]) |
|
78 | @enumeration = Enumeration.find(params[:id]) | |
79 | flash[:notice] = l(:notice_successful_delete) |
|
79 | if !@enumeration.in_use? | |
80 | redirect_to :action => 'list' |
|
80 | # No associated objects | |
81 | rescue |
|
81 | @enumeration.destroy | |
82 | flash[:error] = "Unable to delete enumeration" |
|
82 | redirect_to :action => 'index' | |
83 | redirect_to :action => 'list' |
|
83 | elsif params[:reassign_to_id] | |
|
84 | if reassign_to = Enumeration.find_by_opt_and_id(@enumeration.opt, params[:reassign_to_id]) | |||
|
85 | @enumeration.destroy(reassign_to) | |||
|
86 | redirect_to :action => 'index' | |||
|
87 | end | |||
|
88 | end | |||
|
89 | @enumerations = Enumeration.get_values(@enumeration.opt) - [@enumeration] | |||
|
90 | #rescue | |||
|
91 | # flash[:error] = 'Unable to delete enumeration' | |||
|
92 | # redirect_to :action => 'index' | |||
84 | end |
|
93 | end | |
85 | end |
|
94 | end |
@@ -24,10 +24,11 class Enumeration < ActiveRecord::Base | |||||
24 | validates_uniqueness_of :name, :scope => [:opt] |
|
24 | validates_uniqueness_of :name, :scope => [:opt] | |
25 | validates_length_of :name, :maximum => 30 |
|
25 | validates_length_of :name, :maximum => 30 | |
26 |
|
26 | |||
|
27 | # Single table inheritance would be an option | |||
27 | OPTIONS = { |
|
28 | OPTIONS = { | |
28 | "IPRI" => :enumeration_issue_priorities, |
|
29 | "IPRI" => {:label => :enumeration_issue_priorities, :model => Issue, :foreign_key => :priority_id}, | |
29 | "DCAT" => :enumeration_doc_categories, |
|
30 | "DCAT" => {:label => :enumeration_doc_categories, :model => Document, :foreign_key => :category_id}, | |
30 | "ACTI" => :enumeration_activities |
|
31 | "ACTI" => {:label => :enumeration_activities, :model => TimeEntry, :foreign_key => :activity_id} | |
31 | }.freeze |
|
32 | }.freeze | |
32 |
|
33 | |||
33 | def self.get_values(option) |
|
34 | def self.get_values(option) | |
@@ -39,13 +40,32 class Enumeration < ActiveRecord::Base | |||||
39 | end |
|
40 | end | |
40 |
|
41 | |||
41 | def option_name |
|
42 | def option_name | |
42 | OPTIONS[self.opt] |
|
43 | OPTIONS[self.opt][:label] | |
43 | end |
|
44 | end | |
44 |
|
45 | |||
45 | def before_save |
|
46 | def before_save | |
46 | Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt}) if is_default? |
|
47 | Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt}) if is_default? | |
47 | end |
|
48 | end | |
48 |
|
49 | |||
|
50 | def objects_count | |||
|
51 | OPTIONS[self.opt][:model].count(:conditions => "#{OPTIONS[self.opt][:foreign_key]} = #{id}") | |||
|
52 | end | |||
|
53 | ||||
|
54 | def in_use? | |||
|
55 | self.objects_count != 0 | |||
|
56 | end | |||
|
57 | ||||
|
58 | alias :destroy_without_reassign :destroy | |||
|
59 | ||||
|
60 | # Destroy the enumeration | |||
|
61 | # If a enumeration is specified, objects are reassigned | |||
|
62 | def destroy(reassign_to = nil) | |||
|
63 | if reassign_to && reassign_to.is_a?(Enumeration) | |||
|
64 | OPTIONS[self.opt][:model].update_all("#{OPTIONS[self.opt][:foreign_key]} = #{reassign_to.id}", "#{OPTIONS[self.opt][:foreign_key]} = #{id}") | |||
|
65 | end | |||
|
66 | destroy_without_reassign | |||
|
67 | end | |||
|
68 | ||||
49 | def <=>(enumeration) |
|
69 | def <=>(enumeration) | |
50 | position <=> enumeration.position |
|
70 | position <=> enumeration.position | |
51 | end |
|
71 | end | |
@@ -54,13 +74,6 class Enumeration < ActiveRecord::Base | |||||
54 |
|
74 | |||
55 | private |
|
75 | private | |
56 | def check_integrity |
|
76 | def check_integrity | |
57 | case self.opt |
|
77 | raise "Can't delete enumeration" if self.in_use? | |
58 | when "IPRI" |
|
|||
59 | raise "Can't delete enumeration" if Issue.find(:first, :conditions => ["priority_id=?", self.id]) |
|
|||
60 | when "DCAT" |
|
|||
61 | raise "Can't delete enumeration" if Document.find(:first, :conditions => ["category_id=?", self.id]) |
|
|||
62 | when "ACTI" |
|
|||
63 | raise "Can't delete enumeration" if TimeEntry.find(:first, :conditions => ["activity_id=?", self.id]) |
|
|||
64 | end |
|
|||
65 | end |
|
78 | end | |
66 | end |
|
79 | end |
@@ -1,7 +1,7 | |||||
1 | <h2><%=l(:label_enumerations)%></h2> |
|
1 | <h2><%=l(:label_enumerations)%></h2> | |
2 |
|
2 | |||
3 |
<% Enumeration::OPTIONS.each do |option, |
|
3 | <% Enumeration::OPTIONS.each do |option, params| %> | |
4 |
<h3><%= l( |
|
4 | <h3><%= l(params[:label]) %></h3> | |
5 |
|
5 | |||
6 | <% enumerations = Enumeration.get_values(option) %> |
|
6 | <% enumerations = Enumeration.get_values(option) %> | |
7 | <% if enumerations.any? %> |
|
7 | <% if enumerations.any? %> | |
@@ -16,6 +16,9 | |||||
16 | <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => enumeration, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %> |
|
16 | <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => enumeration, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %> | |
17 | <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => enumeration, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %> |
|
17 | <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => enumeration, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %> | |
18 | </td> |
|
18 | </td> | |
|
19 | <td align="center" style="width:10%;"> | |||
|
20 | <%= link_to l(:button_delete), { :action => 'destroy', :id => enumeration }, :method => :post, :confirm => l(:text_are_you_sure), :class => "icon icon-del" %> | |||
|
21 | </td> | |||
19 | </tr> |
|
22 | </tr> | |
20 | <% end %> |
|
23 | <% end %> | |
21 | </table> |
|
24 | </table> |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -629,3 +629,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
629 | text_user_wrote: '%s wrote:' |
|
629 | text_user_wrote: '%s wrote:' | |
630 | label_duplicated_by: duplicated by |
|
630 | label_duplicated_by: duplicated by | |
631 | setting_enabled_scm: Enabled SCM |
|
631 | setting_enabled_scm: Enabled SCM | |
|
632 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
633 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -626,3 +626,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
626 | text_user_wrote: '%s wrote:' |
|
626 | text_user_wrote: '%s wrote:' | |
627 | label_duplicated_by: duplicated by |
|
627 | label_duplicated_by: duplicated by | |
628 | setting_enabled_scm: Enabled SCM |
|
628 | setting_enabled_scm: Enabled SCM | |
|
629 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
630 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
625 | text_user_wrote: '%s wrote:' |
|
625 | text_user_wrote: '%s wrote:' | |
626 | label_duplicated_by: duplicated by |
|
626 | label_duplicated_by: duplicated by | |
627 | setting_enabled_scm: Enabled SCM |
|
627 | setting_enabled_scm: Enabled SCM | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -599,6 +599,8 text_destroy_time_entries: Delete reported hours | |||||
599 | text_assign_time_entries_to_project: Assign reported hours to the project |
|
599 | text_assign_time_entries_to_project: Assign reported hours to the project | |
600 | text_reassign_time_entries: 'Reassign reported hours to this issue:' |
|
600 | text_reassign_time_entries: 'Reassign reported hours to this issue:' | |
601 | text_user_wrote: '%s wrote:' |
|
601 | text_user_wrote: '%s wrote:' | |
|
602 | text_enumeration_destroy_question: '%d objects are assigned to this value.' | |||
|
603 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
602 |
|
604 | |||
603 | default_role_manager: Manager |
|
605 | default_role_manager: Manager | |
604 | default_role_developper: Developer |
|
606 | default_role_developper: Developer |
@@ -627,3 +627,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
627 | text_user_wrote: '%s wrote:' |
|
627 | text_user_wrote: '%s wrote:' | |
628 | label_duplicated_by: duplicated by |
|
628 | label_duplicated_by: duplicated by | |
629 | setting_enabled_scm: Enabled SCM |
|
629 | setting_enabled_scm: Enabled SCM | |
|
630 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
631 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -599,6 +599,8 text_destroy_time_entries: Supprimer les heures | |||||
599 | text_assign_time_entries_to_project: Reporter les heures sur le projet |
|
599 | text_assign_time_entries_to_project: Reporter les heures sur le projet | |
600 | text_reassign_time_entries: 'Reporter les heures sur cette demande:' |
|
600 | text_reassign_time_entries: 'Reporter les heures sur cette demande:' | |
601 | text_user_wrote: '%s a écrit:' |
|
601 | text_user_wrote: '%s a écrit:' | |
|
602 | text_enumeration_destroy_question: 'Cette valeur est affectée à %d objets.' | |||
|
603 | text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:' | |||
602 |
|
604 | |||
603 | default_role_manager: Manager |
|
605 | default_role_manager: Manager | |
604 | default_role_developper: Développeur |
|
606 | default_role_developper: Développeur |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d feladat határidős az elkövetkező napokban" | |||||
625 | text_user_wrote: '%s írta:' |
|
625 | text_user_wrote: '%s írta:' | |
626 | label_duplicated_by: duplikálta |
|
626 | label_duplicated_by: duplikálta | |
627 | setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése |
|
627 | setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
625 | text_user_wrote: '%s wrote:' |
|
625 | text_user_wrote: '%s wrote:' | |
626 | label_duplicated_by: duplicated by |
|
626 | label_duplicated_by: duplicated by | |
627 | setting_enabled_scm: Enabled SCM |
|
627 | setting_enabled_scm: Enabled SCM | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -626,3 +626,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
626 | text_user_wrote: '%s wrote:' |
|
626 | text_user_wrote: '%s wrote:' | |
627 | label_duplicated_by: duplicated by |
|
627 | label_duplicated_by: duplicated by | |
628 | setting_enabled_scm: Enabled SCM |
|
628 | setting_enabled_scm: Enabled SCM | |
|
629 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
630 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
625 | text_user_wrote: '%s wrote:' |
|
625 | text_user_wrote: '%s wrote:' | |
626 | label_duplicated_by: duplicated by |
|
626 | label_duplicated_by: duplicated by | |
627 | setting_enabled_scm: Enabled SCM |
|
627 | setting_enabled_scm: Enabled SCM | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 default_activity_development: Utvikling | |||||
625 | enumeration_issue_priorities: Sakssprioriteringer |
|
625 | enumeration_issue_priorities: Sakssprioriteringer | |
626 | enumeration_doc_categories: Dokument-kategorier |
|
626 | enumeration_doc_categories: Dokument-kategorier | |
627 | enumeration_activities: Aktiviteter (tidssporing) |
|
627 | enumeration_activities: Aktiviteter (tidssporing) | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -624,3 +624,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
624 | text_user_wrote: '%s wrote:' |
|
624 | text_user_wrote: '%s wrote:' | |
625 | label_duplicated_by: duplicated by |
|
625 | label_duplicated_by: duplicated by | |
626 | setting_enabled_scm: Enabled SCM |
|
626 | setting_enabled_scm: Enabled SCM | |
|
627 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
628 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -628,3 +628,5 mail_subject_reminder: "%d назначенных на вас задач в бл | |||||
628 | text_user_wrote: '%s написал:' |
|
628 | text_user_wrote: '%s написал:' | |
629 | label_duplicated_by: duplicated by |
|
629 | label_duplicated_by: duplicated by | |
630 | setting_enabled_scm: Enabled SCM |
|
630 | setting_enabled_scm: Enabled SCM | |
|
631 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
632 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
625 | text_user_wrote: '%s wrote:' |
|
625 | text_user_wrote: '%s wrote:' | |
626 | label_duplicated_by: duplicated by |
|
626 | label_duplicated_by: duplicated by | |
627 | setting_enabled_scm: Enabled SCM |
|
627 | setting_enabled_scm: Enabled SCM | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
625 | text_user_wrote: '%s wrote:' |
|
625 | text_user_wrote: '%s wrote:' | |
626 | label_duplicated_by: duplicated by |
|
626 | label_duplicated_by: duplicated by | |
627 | setting_enabled_scm: Enabled SCM |
|
627 | setting_enabled_scm: Enabled SCM | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -627,3 +627,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
627 | text_user_wrote: '%s wrote:' |
|
627 | text_user_wrote: '%s wrote:' | |
628 | label_duplicated_by: duplicated by |
|
628 | label_duplicated_by: duplicated by | |
629 | setting_enabled_scm: Enabled SCM |
|
629 | setting_enabled_scm: Enabled SCM | |
|
630 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
631 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -626,3 +626,5 mail_subject_reminder: "%d issue(s) due in the next days" | |||||
626 | text_user_wrote: '%s wrote:' |
|
626 | text_user_wrote: '%s wrote:' | |
627 | label_duplicated_by: duplicated by |
|
627 | label_duplicated_by: duplicated by | |
628 | setting_enabled_scm: Enabled SCM |
|
628 | setting_enabled_scm: Enabled SCM | |
|
629 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
630 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 default_activity_development: 開發 | |||||
625 | enumeration_issue_priorities: 項目優先權 |
|
625 | enumeration_issue_priorities: 項目優先權 | |
626 | enumeration_doc_categories: 文件分類 |
|
626 | enumeration_doc_categories: 文件分類 | |
627 | enumeration_activities: 活動 (時間追蹤) |
|
627 | enumeration_activities: 活動 (時間追蹤) | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
@@ -625,3 +625,5 default_activity_development: 开发 | |||||
625 | enumeration_issue_priorities: 问题优先级 |
|
625 | enumeration_issue_priorities: 问题优先级 | |
626 | enumeration_doc_categories: 文档类别 |
|
626 | enumeration_doc_categories: 文档类别 | |
627 | enumeration_activities: 活动(时间跟踪) |
|
627 | enumeration_activities: 活动(时间跟踪) | |
|
628 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
|
629 | text_enumeration_destroy_question: '%d objects are assigned to this value.' |
General Comments 0
You need to be logged in to leave comments.
Login now